//============================================================================= // GetClusters //============================================================================= StatusCode HTBlob::GetViewClustersAboveThreshold( SmartRefVector<Minerva::IDCluster> &idClusterVec, SmartRefVector<Minerva::IDCluster> &idClusterView, Minerva::IDCluster::View view, double pecut ) const { if( !idClusterVec.size() ) { debug() << " ALERT: Input Vector of Clusters to the Get_Clusters tool is empty " << endmsg; return StatusCode::FAILURE; } SmartRefVector<Minerva::IDCluster> ClusTemp = idClusterVec; SmartRefVector<Minerva::IDCluster>::iterator itClus = ClusTemp.begin(); idClusterVec.clear(); for ( ; itClus != ClusTemp.end(); itClus++ ){ if ( (*itClus)->view()==view && (*itClus)->pe()/(*itClus)->iddigs()>3 && (*itClus)->pe()>pecut ) { idClusterView.push_back(*itClus); } else idClusterVec.push_back(*itClus); } return StatusCode::SUCCESS; }
//============================================================================= // Create2dHTBlob //============================================================================= StatusCode HTBlob::Create2dHTSeed( SmartRefVector<Minerva::IDCluster> &idClusterView, SmartRefVector<Minerva::IDCluster> &HT2dClusters, double r, double theta, Gaudi::XYZPoint ref, double &spX, double &spZ ) const { debug() << " HTtool::Create2dHTSeed " << endmsg; double rmin, rmax, x, z, zmin = 10000, Total_e = 0; SmartRefVector<Minerva::IDCluster> ClusTemp = idClusterView; SmartRefVector<Minerva::IDCluster>::iterator itClus = ClusTemp.begin(); idClusterView.clear(); debug() << " Will study " << ClusTemp.size() << " clusters " << endmsg; debug() << " Seed with, r: " << r << ", theta = " << theta << ";contains these clusters: " << endmsg; for ( ; itClus != ClusTemp.end(); itClus++ ){ z = (*itClus)->z() - ref.z(); x = (*itClus)->tpos1() - ref.x(); rmin = x*sin(theta*CLHEP::pi/180) + z*cos(theta*CLHEP::pi/180); x = (*itClus)->tpos2() - ref.x(); rmax = x*sin(theta*CLHEP::pi/180) + z*cos(theta*CLHEP::pi/180); if ( fabs ( 2*r - rmin - rmax ) <= 90 ){ if ( (*itClus)->z()< zmin ) { zmin = (*itClus)->z(); spZ = (*itClus)->z(); spX = (*itClus)->position(); } debug() << " pe = " << (*itClus)->pe() << "; z = " << (*itClus)->z() << "; pos = " << (*itClus)->position() << endmsg; HT2dClusters.push_back(*itClus); Total_e += (*itClus)->energy(); continue; } idClusterView.push_back(*itClus); } debug() << " Total energy comming from seed = " << Total_e << "; this energy must be bigger than 19" << endmsg << endmsg; if ( Total_e < 19 ) { idClusterView.insert(idClusterView.end(),HT2dClusters.begin(),HT2dClusters.end()); return StatusCode::FAILURE; } return StatusCode::SUCCESS; }
//====================================================================== // PseudoCone //======================================================================= StatusCode HTBlob::PseudoCone(SmartRefVector<Minerva::IDCluster> &Seed, SmartRefVector<Minerva::IDCluster> &ClusVectorX, Gaudi::XYZVector direction, Gaudi::XYZPoint vert ) const { debug() << " HTBlob::PseudoCone, clusters with Angles < 0.06 will be include in the seed " << endmsg; SmartRefVector<Minerva::IDCluster> ClusTemp = ClusVectorX; ClusVectorX.clear(); SmartRefVector<Minerva::IDCluster>::iterator itClusX; double angle; for ( itClusX = ClusTemp.begin(); itClusX != ClusTemp.end(); itClusX++ ){ if ( Angle( *itClusX, direction, vert, angle ) ) { if ( angle < 0.06 && (*itClusX)->z() > vert.z() ) Seed.push_back(*itClusX); // must be carefull with backward showers else ClusVectorX.push_back(*itClusX); } else ClusVectorX.push_back(*itClusX); } debug() << endmsg; return StatusCode::SUCCESS; }