CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_4_1_8_patch13/src/HLTriggerOffline/Tau/src/L25TauAnalyzer.cc

Go to the documentation of this file.
00001 
00002 
00003 // -*- C++ -*-
00004 //
00005 // Package:    L25TauAnalyzer
00006 // Class:      L25TauAnalyzer
00007 // 
00015 //
00016 // Original Author:  Eduardo Luiggi
00017 //         Created:  Fri Apr  4 16:37:44 CDT 2008
00018 // $Id: L25TauAnalyzer.cc,v 1.9 2010/02/22 19:49:14 bachtis Exp $
00019 //
00020 //
00021 
00022 #include "HLTriggerOffline/Tau/interface/L25TauAnalyzer.h"
00023 #include "Math/GenVector/VectorUtil.h"
00024 
00025 // system include files
00026 using namespace edm;
00027 using namespace reco;
00028 using namespace std;
00029 
00030 L25TauAnalyzer::L25TauAnalyzer(const edm::ParameterSet& iConfig){
00031   jetTagSrc_ = iConfig.getParameter<InputTag>("JetTagProd");
00032   jetMCTagSrc_ = iConfig.getParameter<InputTag>("JetMCTagProd");
00033   rootFile_ = iConfig.getParameter<string>("outputFileName");
00034   signal_ = iConfig.getParameter<bool>("Signal");
00035   minTrackPt_ =iConfig.getParameter<double>("MinTrackPt");
00036   signalCone_ =iConfig.getParameter<double>("SignalCone");
00037   isolationCone_ =iConfig.getParameter<double>("IsolationCone");
00038  
00039   l25file = new TFile(rootFile_.c_str(),"recreate");
00040   l25tree = new TTree("l25tree","Level 2.5 Tau Tree");
00041 
00042   jetEt=0.;
00043   jetEta=0.;
00044   jetMCEt=0.;
00045   jetMCEta=0.;
00046   leadSignalTrackPt=0.;
00047   trkDrRMS=0.;
00048   trkDrRMSA=0.;
00049   leadTrkJetDeltaR=0.;
00050   numPixTrkInJet=0;
00051   numQPixTrkInJet=0;
00052   numQPixTrkInSignalCone=0;
00053   numQPixTrkInAnnulus=0;
00054   hasLeadTrk=0;
00055   emf=0;
00056 
00057 
00058   l25tree->Branch("jetEt", &jetEt, "jetEt/F");
00059   l25tree->Branch("jetEMF", &emf, "jetEMF/F");
00060   l25tree->Branch("jetEta", &jetEta, "jetEta/F");
00061   l25tree->Branch("jetMCEt", &jetMCEt, "jetMCEt/F");
00062   l25tree->Branch("jetMCEta", &jetMCEta, "jetMCEta/F");
00063   l25tree->Branch("leadTrackPt", &leadSignalTrackPt, "leadTrackPt/F");
00064   l25tree->Branch("trackDeltaRRMS", &trkDrRMS, "trackDeltaRRMS/F");
00065   l25tree->Branch("trackDeltaRRMSAll", &trkDrRMSA, "trackDeltaRRMSAll/F");
00066   l25tree->Branch("matchingCone", &leadTrkJetDeltaR, "matchingCone/F");
00067   l25tree->Branch("nTracks", &numPixTrkInJet, "nTracks/I");
00068   l25tree->Branch("nQTracks", &numQPixTrkInJet, "nQTracks/I");
00069   l25tree->Branch("nQTracksInSignal", &numQPixTrkInSignalCone, "nQTracksInSignal/I");
00070   l25tree->Branch("nQTracksInAnnulus", &numQPixTrkInAnnulus, "nQTracksInAnnulus/I");
00071   l25tree->Branch("hasLeadTrack", &hasLeadTrk, "hasLeadTrack/B");
00072 }
00073 
00074 
00075 L25TauAnalyzer::~L25TauAnalyzer(){
00076 
00077 }
00078 
00079 
00080 
00081 
00082 void L25TauAnalyzer::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup){
00083 
00084 
00085    Handle<IsolatedTauTagInfoCollection> tauTagInfo;
00086    using namespace reco;
00087    Handle<LVColl> mcInfo;                                                        
00088 
00089    if(signal_){                                                                  
00090       iEvent.getByLabel(jetMCTagSrc_, mcInfo);                           
00091    }                                                                     
00092    
00093 
00094    //get isolation tag
00095    if(iEvent.getByLabel(jetTagSrc_, tauTagInfo))
00096      {
00097        if(tauTagInfo->size()>0)
00098          for(IsolatedTauTagInfoCollection::const_iterator i = tauTagInfo->begin();i!=tauTagInfo->end();++i)
00099            {
00100              MatchElementL25 m;
00101              m.matched=false;
00102              m.mcEt=0;
00103              m.mcEta=0;
00104              m.deltar=0;
00105 
00106              if(signal_)
00107                {
00108                  if(iEvent.getByLabel(jetMCTagSrc_,mcInfo))
00109                    m=match(*(i->jet()),*mcInfo);
00110                }
00111 
00112              if((signal_&&m.matched)||(!signal_))
00113                {
00114 
00115                  const Jet* Jet =i->jet().get();
00116                  const CaloJet* calojet = dynamic_cast<const CaloJet*>(Jet);
00117                  emf = calojet->emEnergyFraction();
00118 
00119                  
00120                  jetEt=i->jet()->et();
00121                  jetEta=i->jet()->eta();
00122                  jetMCEt=m.mcEt;
00123                  jetMCEta=m.mcEta;
00124                  numPixTrkInJet = i->allTracks().size();
00125                  numQPixTrkInJet = i->selectedTracks().size();
00126                  trkDrRMS =trackDrRMS(*i,i->selectedTracks());
00127                  trkDrRMSA =trackDrRMS(*i,i->allTracks());
00128  
00129 
00130                  //Search Leading Track
00131                  const TrackRef leadTk = i->leadingSignalTrack();
00132                  if(!leadTk)
00133                    {
00134                      numQPixTrkInSignalCone=0;
00135                      numQPixTrkInAnnulus=0;
00136                      leadSignalTrackPt=0;
00137                      leadTrkJetDeltaR=0;
00138                      hasLeadTrk=false;
00139                    }
00140                  else
00141                    {
00142                      leadTrkJetDeltaR = ROOT::Math::VectorUtil::DeltaR(i->jet()->p4().Vect(), leadTk->momentum());                            
00143                      leadSignalTrackPt=leadTk->pt();
00144                      numQPixTrkInSignalCone=(i->tracksInCone(leadTk->momentum(), signalCone_, minTrackPt_)).size();
00145                      numQPixTrkInAnnulus=(i->tracksInCone(leadTk->momentum(), isolationCone_, minTrackPt_)).size()-numQPixTrkInSignalCone;
00146                      hasLeadTrk=true;
00147                    }
00148                }
00149               l25tree->Fill();
00150            }
00151      }
00152 }
00153 
00154 
00155 
00156 
00157 float 
00158 L25TauAnalyzer::trackDrRMS(const reco::IsolatedTauTagInfo& info,const TrackRefVector& tracks)
00159 {
00160   float rms = 0.;
00161   float sumet = 0.;
00162   
00163   
00164   //First find the weighted track
00165   if(tracks.size()>0)
00166     {
00167       math::XYZVector center = tracks[0]->momentum();
00168 
00169       for(size_t i = 1;i<tracks.size();++i)
00170         {
00171           center+=tracks[i]->momentum();
00172         }
00173 
00174       //Now calculate DeltaR
00175 
00176       for(size_t i = 0;i<tracks.size();++i)
00177         {
00178           rms+= tracks[i]->pt()*pow(ROOT::Math::VectorUtil::DeltaR(tracks[i]->momentum(),center),2);
00179           sumet+=tracks[i]->pt();
00180         }
00181       
00182     }
00183      
00184   if(sumet==0.)
00185     sumet=1;
00186   
00187   return rms/sumet;
00188 }
00189 
00190 
00191 
00192 MatchElementL25 
00193 L25TauAnalyzer::match(const reco::Jet& jet,const LVColl& McInfo)
00194 {
00195 
00196   //Loop On the Collection and see if your tau jet is matched to one there
00197  //Also find the nearest Matched MC Particle to your Jet (to be complete)
00198  
00199  bool matched=false;
00200  double delta_min=100.;
00201  double mceta=0;
00202  double mcet=0;
00203  
00204  double matchDr=0.3;
00205 
00206  if(McInfo.size()>0)
00207   for(std::vector<LV>::const_iterator it = McInfo.begin();it!=McInfo.end();++it)
00208    {
00209           double delta = ROOT::Math::VectorUtil::DeltaR(jet.p4().Vect(),*it);
00210           if(delta<matchDr)
00211             {
00212               matched=true;
00213               if(delta<delta_min)
00214                 {
00215                   delta_min=delta;
00216                   mceta=it->eta();
00217                   mcet=it->Et();
00218                 }
00219             }
00220    }
00221 
00222   //Create Struct and send it out!
00223   MatchElementL25 match;
00224   match.matched=matched;
00225   match.deltar=delta_min;
00226   match.mcEta = mceta;
00227   match.mcEt = mcet;
00228 
00229  return match;
00230 }
00231 
00232 
00233 
00234 void L25TauAnalyzer::beginJob() {
00235 }
00236 
00237 
00238 void L25TauAnalyzer::endJob() {
00239    l25file->Write();
00240 }
00241