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){
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
00121
00122 l25IsoJetEta->getTH1F()->Sumw2();
00123 jetEta->getTH1F()->Sumw2();
00124
00125 l25IsoJetEt->getTH1F()->Sumw2();
00126 jetEt->getTH1F()->Sumw2();
00127
00128
00129
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
00151
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 }