CMS 3D CMS Logo

HLTTauTrkDQMOfflineSource.cc

Go to the documentation of this file.
00001 #include "DQMOffline/Trigger/interface/HLTTauTrkDQMOfflineSource.h"
00002 #include "Math/GenVector/VectorUtil.h"
00003 #include <iostream>
00004 #include <iomanip>
00005 #include <fstream>
00006 
00007 HLTTauTrkDQMOfflineSource::HLTTauTrkDQMOfflineSource(const edm::ParameterSet& iConfig){
00008    jetTagSrc_ = iConfig.getParameter<edm::InputTag>("ConeIsolation");
00009    jetMCTagSrc_ = iConfig.getParameter<edm::InputTag>("refCollection");
00010    caloJets_ = iConfig.getParameter<edm::InputTag>("InputJets");
00011    isolJets_ = iConfig.getParameter<edm::InputTag>("IsolatedJets");
00012    mcMatch_ = iConfig.getParameter<double>("MatchDeltaR");
00013    match_ = iConfig.getParameter<bool>("doReference");
00014    tT_ = iConfig.getParameter<std::string>("DQMFolder");
00015    type_ = iConfig.getParameter<std::string>("Type");
00016    outFile_ = iConfig.getParameter<std::string>("OutputFileName");
00017    EtMin_ = (iConfig.getParameter<double>("EtMin"));
00018    EtMax_ = (iConfig.getParameter<double>("EtMax"));
00019    NBins_ = (iConfig.getParameter<int>("NBins"));
00020 
00021     store = &*edm::Service<DQMStore>();
00022   
00023    if(store){           //Create the histograms
00024       
00025       store->setCurrentFolder(tT_);
00026       jetEt = store->book1D((type_+"jetEt").c_str(), "jetEt",NBins_,EtMin_,EtMax_);
00027       jetEta = store->book1D((type_+"jetEta").c_str(), "jetEta", 50, -2.5, 2.5);
00028       nL2EcalIsoJets = store->book1D((type_+"nL2EcalIsoJets").c_str(), "nInputJets", 10, 0, 10);
00029       nL25Jets = store->book1D((type_+"nL25Jets").c_str(), "nIsoJets", 10, 0, 10);
00030       nPxlTrksInL25Jet = store->book1D((type_+"nTrksInJet").c_str(), "nPxlTrksInJet", 30, 0, 30);
00031       nQPxlTrksInL25Jet = store->book1D((type_+"nQTrksInJet").c_str(),"nQTrksInJet", 15, 0, 15);
00032       signalLeadTrkPt = store->book1D((type_+"signalLeadTrkPt").c_str(), "signalLeadTrkPt", 75, 0, 150);
00033       l25IsoJetEt = store->book1D((type_+"IsoJetEt").c_str(), "IsoJetEt", NBins_, EtMin_,EtMax_);
00034       l25IsoJetEta = store->book1D((type_+"IsoJetEta").c_str(), "IsoJetEta", 50, -2.5, 2.5);
00035 
00036    }
00037 }
00038 
00039 
00040 HLTTauTrkDQMOfflineSource::~HLTTauTrkDQMOfflineSource(){
00041 }
00042 
00043 
00044 
00045 void 
00046 HLTTauTrkDQMOfflineSource::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup){
00047    using namespace edm;
00048    using namespace reco;
00049    
00050    Handle<IsolatedTauTagInfoCollection> tauTagInfoHandle;
00051    if(iEvent.getByLabel(jetTagSrc_, tauTagInfoHandle))
00052      {
00053    
00054        Handle<LVColl> mcInfo;                                                    
00055        if(match_){                                                               
00056          iEvent.getByLabel(jetMCTagSrc_, mcInfo);                                
00057        }                                                                         
00058 
00059        Handle<CaloJetCollection> isolJets;                         
00060 
00061        Handle<CaloJetCollection> caloJetHandle;                    
00062        if(iEvent.getByLabel(caloJets_, caloJetHandle))
00063          {         
00064            const CaloJetCollection & caloJets = *(caloJetHandle.product());
00065            bool l2Match = 0;    
00066            unsigned int cjIt;
00067            for(cjIt = 0; cjIt != caloJets.size(); ++cjIt){
00068              LV lVL2Calo = caloJets[cjIt].p4();
00069              if(match_ )l2Match = match(lVL2Calo, *mcInfo);
00070              else l2Match = 1;
00071       
00072              bool l25Match = 0;
00073              if(&(*tauTagInfoHandle)){
00074                const IsolatedTauTagInfoCollection & tauTagInfoColl = *(tauTagInfoHandle.product());
00075                IsolatedTauTagInfo tauTagInfo = tauTagInfoColl[cjIt];        
00076                LV theJet(tauTagInfo.jet()->px(), tauTagInfo.jet()->py(),
00077                      tauTagInfo.jet()->pz(),tauTagInfo.jet()->energy());                         
00078                                                                                                                  
00079                if(match_)l25Match = match(theJet, *mcInfo);                                                      
00080                else l25Match = 1;                                                                                                        
00081            
00082                if(l2Match&&l25Match){
00083                  jetEt->Fill(theJet.Et());                                                                               
00084                  jetEta->Fill(theJet.Eta());                                                                     
00085                  nL2EcalIsoJets->Fill(caloJets.size());
00086                  nL25Jets->Fill(tauTagInfoColl.size());                                                                                          
00087                  nPxlTrksInL25Jet->Fill(tauTagInfo.allTracks().size());                                                             
00088                  nQPxlTrksInL25Jet->Fill(tauTagInfo.selectedTracks().size());                                                       
00089                 
00090                  const TrackRef leadTrk = tauTagInfo.leadingSignalTrack();
00091                  if(!leadTrk) ;
00092                  else{
00093                
00094                    signalLeadTrkPt->Fill(leadTrk->pt());                                 
00095   
00096 
00097                   if(iEvent.getByLabel(isolJets_, isolJets))
00098                     if(matchJet(*tauTagInfo.jet(),*isolJets))
00099                       {
00100                         l25IsoJetEta->Fill(theJet.Eta());
00101                         l25IsoJetEt->Fill(theJet.Et());
00102                       }
00103                  }
00104                }
00105              }
00106          
00107            }
00108          }
00109      }          
00110 }                                                                                                     
00111 
00112 
00113 
00114 void HLTTauTrkDQMOfflineSource::beginJob(const edm::EventSetup&){
00115 
00116 }
00117 
00118 
00119 void HLTTauTrkDQMOfflineSource::endJob() {
00120    // Get the efficiency plots
00121 
00122      l25IsoJetEta->getTH1F()->Sumw2();
00123    jetEta->getTH1F()->Sumw2();
00124    
00125     l25IsoJetEt->getTH1F()->Sumw2();
00126     jetEt->getTH1F()->Sumw2();
00127 
00128       
00129    //Write file
00130    if(outFile_.size()>0 &&(store))  store->save (outFile_);
00131 
00132 }
00133 
00134 bool HLTTauTrkDQMOfflineSource::match(const LV& jet, const LVColl& matchingObject){
00135    bool matched = 0;
00136    if(matchingObject.size() !=0 ){
00137       std::vector<LV>::const_iterator lvIt = matchingObject.begin();
00138       for(;lvIt != matchingObject.end(); ++lvIt){
00139          double deltaR = ROOT::Math::VectorUtil::DeltaR(jet, *lvIt);
00140          if(deltaR < mcMatch_) matched = 1;
00141       }
00142    } 
00143    return matched;
00144 }
00145 
00146 bool 
00147 HLTTauTrkDQMOfflineSource::matchJet(const reco::Jet& jet,const reco::CaloJetCollection& McInfo)
00148 {
00149 
00150   //Loop On the Collection and see if your tau jet is matched to one there
00151  //Also find the nearest Matched MC Particle to your Jet (to be complete)
00152  
00153  bool matched=false;
00154 
00155  if(McInfo.size()>0)
00156   for(reco::CaloJetCollection::const_iterator it = McInfo.begin();it!=McInfo.end();++it)
00157    {
00158           double delta = ROOT::Math::VectorUtil::DeltaR(jet.p4().Vect(),it->p4().Vect());
00159           if(delta<mcMatch_)
00160             {
00161               matched=true;
00162              
00163             }
00164    }
00165 
00166 
00167 
00168  return matched;
00169 }

Generated on Tue Jun 9 17:34:10 2009 for CMSSW by  doxygen 1.5.4