ClusterKtStrategy.cxx

Go to the documentation of this file.
00001 // ================================================
00002 //        ClusterKtStrategy class Implementation
00003 //
00004 //  + PreCluster helper class
00005 //
00006 // ================================================
00007 //
00008 // Namespace Atlfast
00009 //
00010 #include "AtlfastAlgs/ClusterKtStrategy.h"
00011 #include "AtlfastEvent/Cell.h"
00012 #include "AtlfastEvent/KtCluster.h"
00013 #include "AtlfastEvent/ICluster.h"
00014 #include "AtlfastEvent/CollectionDefs.h"
00015 
00016 #include "KtJet/KtLorentzVector.h"
00017 #include "KtJet/KtEvent.h"
00018 
00019 // Gaudi includes
00020 #include "GaudiKernel/MsgStream.h"
00021 
00022 //Other
00023 #include "CLHEP/Vector/LorentzVector.h"
00024 #include <map>
00025 #include <vector>
00026 
00027 
00028 namespace Atlfast {
00029 
00030   ClusterKtStrategy::ClusterKtStrategy(double minet, double rp, std::string angle, std::string recom, int subjet) : 
00031     m_minClusterET(minet), m_rParameter(rp), m_subjet(subjet){
00032     //set kt angle scheme
00033     if(angle == "angular") {m_angle = 1;}
00034     else if (angle == "deltaR") {m_angle = 2;}
00035     else if (angle == "QCD") {m_angle = 3;}
00036     else{
00037       std::cerr << "Warning, unknown Kt angle scheme. Scheme set to \"angular\"" << std::endl;
00038       m_angle = 1;
00039     }
00040     //set kt rcombination scheme
00041     if(recom == "E") {m_recom = 1;}
00042     else if (recom == "pt") {m_recom = 2;}
00043     else if (recom == "pt2") {m_recom = 3;}
00044     else if (recom == "et") {m_recom = 4;}
00045     else if (recom == "et2") {m_recom = 5;}
00046     else{
00047       std::cerr << "Warning, unknown Kt recombination scheme. Scheme set to \"E\"" << std::endl;
00048       m_recom = 1;
00049     }
00050   }
00051 
00052   void 
00053   ClusterKtStrategy::makeClusters( 
00054                                   MsgStream& log, 
00055                                   const std::vector<IKinematic*>& storedCells,
00056                                   IKinematicVector& unusedCells,
00057                                   IClusterCollection* clusters) const {
00058     log << MSG::DEBUG << storedCells.size() << " cells to start with"<<endreq;
00059     
00064     std::vector<IKinematic*>::const_iterator itr = storedCells.begin();
00065     std::vector<KtJet::KtLorentzVector> jetvec;
00066     std::map<KtJet::KtLorentzVector,IKinematic*> CellMap;
00067     for(; itr != storedCells.end() ; ++itr){
00068       KtJet::KtLorentzVector tempVec = KtJet::KtLorentzVector((*itr)->momentum());
00069       jetvec.push_back(tempVec);
00070       CellMap[tempVec] = (*itr);
00071     }
00072     log << MSG::DEBUG << "Made jetvec"<<endreq;
00077     KtJet::KtEvent ev(jetvec,4,m_angle,m_recom,m_rParameter);
00078     log << MSG::DEBUG << "Made KtEvent"<<endreq;
00079 
00081     vector<KtJet::KtLorentzVector> jets0 = ev.getJets();
00086     log << MSG::DEBUG << "Got events jets "<< jets0.size() << endreq;
00087     std::vector<KtJet::KtLorentzVector>::const_iterator iter = jets0.begin();
00088     for (; iter != jets0.end() ; ++iter){
00089       if((*iter).et() > m_minClusterET) { 
00090         std::vector<KtJet::KtLorentzVector> tompVec;
00091         tompVec = (*iter).copyConstituents();
00092         //Make a vector of associated cells
00093         std::vector<IKinematic*> tempCellVec;
00094         std::vector<KtJet::KtLorentzVector>::const_iterator iter2  = tompVec.begin();
00095         for (; iter2 != tompVec.end() ; ++iter2){
00096           if(CellMap.find((*iter2)) == CellMap.end()){
00097             log << MSG::ERROR <<  "Cannot find this key" << endreq;
00098           }else {
00099             tempCellVec.push_back(CellMap[(*iter2)]);
00100             CellMap.erase((*iter2));
00101             //log << MSG::DEBUG << "Removed cell from map" << endreq;
00102           }
00103         }
00104         //now do sub-jet analysis if required
00105         double yCut = 0.;
00106         if(m_subjet){
00107           KtJet::KtEvent subev(*iter,m_angle,m_recom);
00108           yCut = subev.getYMerge(m_subjet); 
00109         }
00110         //Make a Atlfast::KtCluster
00111         ICluster* clu = new KtCluster(*iter,tempCellVec.begin(),tempCellVec.end(),yCut);
00112         log << MSG::DEBUG << "Made a KtCluster" << endreq;
00114         clusters->push_back(clu);
00115       }
00116     }
00117     //return;
00118     log << MSG::DEBUG 
00119         <<  "Number of clusters Made by Kt algo " << clusters->size() 
00120         << endreq;
00122     std::map<KtJet::KtLorentzVector,IKinematic*>::iterator celit = 
00123       CellMap.begin();
00124 
00125     for (; celit != CellMap.end() ; ++celit){
00126 
00127       unusedCells.push_back( ( (*celit).second ) );
00128 
00129       log << MSG::DEBUG 
00130           << "Size of unusedCells vector " << unusedCells.size() 
00131           << endreq;
00132     }
00133 
00134     return;
00135   }
00136   
00137 } // end of namespace bracket
00138 
00139 
00140 
00141 
00142 
00143 
00144 
00145 
00146 
00147 
00148 

Generated on Mon Sep 24 14:19:12 2007 for AtlfastAlgs by  doxygen 1.5.1