00001 #include "HLTriggerOffline/JetMET/interface/HLTJetMETValidation.h"
00002 #include "Math/GenVector/VectorUtil.h"
00003 #include "FWCore/Common/interface/TriggerNames.h"
00004
00005 HLTJetMETValidation::HLTJetMETValidation(const edm::ParameterSet& ps) :
00006 triggerEventObject_(ps.getUntrackedParameter<edm::InputTag>("triggerEventObject")),
00007 CaloJetAlgorithm( ps.getUntrackedParameter<edm::InputTag>( "CaloJetAlgorithm" ) ),
00008 GenJetAlgorithm( ps.getUntrackedParameter<edm::InputTag>( "GenJetAlgorithm" ) ),
00009 CaloMETColl( ps.getUntrackedParameter<edm::InputTag>( "CaloMETCollection" ) ),
00010 GenMETColl( ps.getUntrackedParameter<edm::InputTag>( "GenMETCollection" ) ),
00011 HLTriggerResults( ps.getParameter<edm::InputTag>( "HLTriggerResults" ) ),
00012 triggerTag_(ps.getUntrackedParameter<std::string>("DQMFolder","SingleJet")),
00013 patternJetTrg_(ps.getUntrackedParameter<std::string>("PatternJetTrg","")),
00014 patternMetTrg_(ps.getUntrackedParameter<std::string>("PatternMetTrg","")),
00015 patternMuTrg_(ps.getUntrackedParameter<std::string>("PatternMuTrg","")),
00016 outFile_(ps.getUntrackedParameter<std::string>("OutputFileName","")),
00017 HLTinit_(false),
00018
00019 writeFile_(ps.getUntrackedParameter<bool>("WriteFile",false))
00020 {
00021 evtCnt=0;
00022
00023 store = &*edm::Service<DQMStore>();
00024
00025 }
00026
00027 HLTJetMETValidation::~HLTJetMETValidation()
00028 {
00029 }
00030
00031
00032
00033
00034
00035
00036 void
00037 HLTJetMETValidation::beginRun(const edm::Run & iRun, const edm::EventSetup & iSetup) {
00038
00039
00040 bool foundMuTrg = false;
00041 std::string trgMuNm;
00042 bool changedConfig;
00043
00044
00045
00046
00047
00048
00049 TPRegexp patternJet(patternJetTrg_);
00050 TPRegexp patternMet(patternMetTrg_);
00051 TPRegexp patternMu(patternMuTrg_);
00052
00053 if (!hltConfig_.init(iRun, iSetup, "HLT", changedConfig)) {
00054 edm::LogError("HLTJetMET") << "Initialization of HLTConfigProvider failed!!";
00055 return;
00056 }
00057 std::vector<std::string> validTriggerNames = hltConfig_.triggerNames();
00058 for (size_t j = 0; j < validTriggerNames.size(); j++) {
00059
00060 if (TString(validTriggerNames[j]).Contains(patternMu)) {
00061
00062 if (!foundMuTrg) trgMuNm = validTriggerNames[j].c_str();
00063 foundMuTrg = true;
00064 }
00065
00066 if (TString(validTriggerNames[j]).Contains(patternJet)) {
00067 hltTrgJet.push_back(validTriggerNames[j]);
00068 }
00069
00070 if (TString(validTriggerNames[j]).Contains(patternMet)) {
00071 hltTrgMet.push_back(validTriggerNames[j]);
00072 }
00073 }
00074
00075
00076 for (size_t it=0;it<hltTrgJet.size();it++) {
00077 if (it==0 && foundMuTrg) hltTrgJetLow.push_back(trgMuNm);
00078 if (it==0 && !foundMuTrg) hltTrgJetLow.push_back(hltTrgJet[it]);
00079 if (it!=0) hltTrgJetLow.push_back(hltTrgJet[it-1]);
00080
00081 }
00082 int itm(0), itpm(0), itmh(0), itpmh(0);
00083 for (size_t it=0;it<hltTrgMet.size();it++) {
00084 if (TString(hltTrgMet[it]).Contains("PF")) {
00085 if (TString(hltTrgMet[it]).Contains("MHT")) {
00086 if( 0 == itpmh ) {
00087 if( foundMuTrg ) hltTrgMetLow.push_back(trgMuNm);
00088 else hltTrgMetLow.push_back(hltTrgMet[it]);
00089 }
00090 else hltTrgMetLow.push_back(hltTrgMet[it-1]);
00091 itpmh++;
00092 }
00093 if (TString(hltTrgMet[it]).Contains("MET")) {
00094 if( 0 == itpm ) {
00095 if( foundMuTrg ) hltTrgMetLow.push_back(trgMuNm);
00096 else hltTrgMetLow.push_back(hltTrgMet[it]);
00097 }
00098 else hltTrgMetLow.push_back(hltTrgMet[it-1]);
00099 itpm++;
00100 }
00101 }
00102 else {
00103 if (TString(hltTrgMet[it]).Contains("MHT")) {
00104 if( 0 == itmh ) {
00105 if( foundMuTrg ) hltTrgMetLow.push_back(trgMuNm);
00106 else hltTrgMetLow.push_back(hltTrgMet[it]);
00107 }
00108 else hltTrgMetLow.push_back(hltTrgMet[it-1]);
00109 itmh++;
00110 }
00111 if (TString(hltTrgMet[it]).Contains("MET")) {
00112 if( 0 == itm ) {
00113 if( foundMuTrg ) hltTrgMetLow.push_back(trgMuNm);
00114 else hltTrgMetLow.push_back(hltTrgMet[it]);
00115 }
00116 else hltTrgMetLow.push_back(hltTrgMet[it-1]);
00117 itm++;
00118 }
00119 }
00120
00121 }
00122
00123
00124 for (size_t it=0;it<hltTrgJet.size();it++) {
00125
00126
00127 std::string trgPathName = HLTConfigProvider::removeVersion(triggerTag_+hltTrgJet[it].c_str());
00128
00129
00130 store->setCurrentFolder(trgPathName);
00131
00132 _meRecoJetPt.push_back(store->book1D("_meRecoJetPt","Single Reconstructed Jet Pt",100,0,500));
00133 _meRecoJetPtTrgMC.push_back(store->book1D("_meRecoJetPtTrgMC","Single Reconstructed Jet Pt -- HLT Triggered",100,0,500));
00134 _meRecoJetPtTrg.push_back(store->book1D("_meRecoJetPtTrg","Single Reconstructed Jet Pt -- HLT Triggered",100,0,500));
00135 _meRecoJetPtTrgLow.push_back(store->book1D("_meRecoJetPtTrgLow","Single Reconstructed Jet Pt -- HLT Triggered Low",100,0,500));
00136
00137 _meRecoJetEta.push_back(store->book1D("_meRecoJetEta","Single Reconstructed Jet Eta",100,-10,10));
00138 _meRecoJetEtaTrgMC.push_back(store->book1D("_meRecoJetEtaTrgMC","Single Reconstructed Jet Eta -- HLT Triggered",100,-10,10));
00139 _meRecoJetEtaTrg.push_back(store->book1D("_meRecoJetEtaTrg","Single Reconstructed Jet Eta -- HLT Triggered",100,-10,10));
00140 _meRecoJetEtaTrgLow.push_back(store->book1D("_meRecoJetEtaTrgLow","Single Reconstructed Jet Eta -- HLT Triggered Low",100,-10,10));
00141
00142 _meRecoJetPhi.push_back(store->book1D("_meRecoJetPhi","Single Reconstructed Jet Phi",100,-4.,4.));
00143 _meRecoJetPhiTrgMC.push_back(store->book1D("_meRecoJetPhiTrgMC","Single Reconstructed Jet Phi -- HLT Triggered",100,-4.,4.));
00144 _meRecoJetPhiTrg.push_back(store->book1D("_meRecoJetPhiTrg","Single Reconstructed Jet Phi -- HLT Triggered",100,-4.,4.));
00145 _meRecoJetPhiTrgLow.push_back(store->book1D("_meRecoJetPhiTrgLow","Single Reconstructed Jet Phi -- HLT Triggered Low",100,-4.,4.));
00146
00147 _meGenJetPt.push_back(store->book1D("_meGenJetPt","Single Generated Jet Pt",100,0,500));
00148 _meGenJetPtTrgMC.push_back(store->book1D("_meGenJetPtTrgMC","Single Generated Jet Pt -- HLT Triggered",100,0,500));
00149 _meGenJetPtTrg.push_back(store->book1D("_meGenJetPtTrg","Single Generated Jet Pt -- HLT Triggered",100,0,500));
00150 _meGenJetPtTrgLow.push_back(store->book1D("_meGenJetPtTrgLow","Single Generated Jet Pt -- HLT Triggered Low",100,0,500));
00151
00152 _meGenJetEta.push_back(store->book1D("_meGenJetEta","Single Generated Jet Eta",100,-10,10));
00153 _meGenJetEtaTrgMC.push_back(store->book1D("_meGenJetEtaTrgMC","Single Generated Jet Eta -- HLT Triggered",100,-10,10));
00154 _meGenJetEtaTrg.push_back(store->book1D("_meGenJetEtaTrg","Single Generated Jet Eta -- HLT Triggered",100,-10,10));
00155 _meGenJetEtaTrgLow.push_back(store->book1D("_meGenJetEtaTrgLow","Single Generated Jet Eta -- HLT Triggered Low",100,-10,10));
00156
00157 _meGenJetPhi.push_back(store->book1D("_meGenJetPhi","Single Generated Jet Phi",100,-4.,4.));
00158 _meGenJetPhiTrgMC.push_back(store->book1D("_meGenJetPhiTrgMC","Single Generated Jet Phi -- HLT Triggered",100,-4.,4.));
00159 _meGenJetPhiTrg.push_back(store->book1D("_meGenJetPhiTrg","Single Generated Jet Phi -- HLT Triggered",100,-4.,4.));
00160 _meGenJetPhiTrgLow.push_back(store->book1D("_meGenJetPhiTrgLow","Single Generated Jet Phi -- HLT Triggered Low",100,-4.,4.));
00161
00162 }
00163 for (size_t it=0;it<hltTrgMet.size();it++) {
00164
00165
00166 std::string trgPathName = HLTConfigProvider::removeVersion(triggerTag_+hltTrgMet[it].c_str());
00167 store->setCurrentFolder(trgPathName);
00168 _meRecoMET.push_back(store->book1D("_meRecoMET","Reconstructed Missing ET",100,0,500));
00169 _meRecoMETTrgMC.push_back(store->book1D("_meRecoMETTrgMC","Reconstructed Missing ET -- HLT Triggered",100,0,500));
00170 _meRecoMETTrg.push_back(store->book1D("_meRecoMETTrg","Reconstructed Missing ET -- HLT Triggered",100,0,500));
00171 _meRecoMETTrgLow.push_back(store->book1D("_meRecoMETTrgLow","Reconstructed Missing ET -- HLT Triggered Low",100,0,500));
00172
00173 _meGenMET.push_back(store->book1D("_meGenMET","Generated Missing ET",100,0,500));
00174 _meGenMETTrgMC.push_back(store->book1D("_meGenMETTrgMC","Generated Missing ET -- HLT Triggered",100,0,500));
00175 _meGenMETTrg.push_back(store->book1D("_meGenMETTrg","Generated Missing ET -- HLT Triggered",100,0,500));
00176 _meGenMETTrgLow.push_back(store->book1D("_meGenMETTrgLow","Generated Missing ET -- HLT Triggered Low",100,0,500));
00177 }
00178 }
00179
00180 void
00181 HLTJetMETValidation::endJob()
00182 {
00183
00184
00185 if(outFile_.size()>0)
00186 if (&*edm::Service<DQMStore>() && writeFile_) {
00187 edm::Service<DQMStore>()->save (outFile_);
00188 }
00189
00190 }
00191
00192 void
00193 HLTJetMETValidation::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup)
00194 {
00195 using namespace std;
00196 using namespace edm;
00197 using namespace reco;
00198 using namespace l1extra;
00199 using namespace trigger;
00200
00201 evtCnt++;
00202
00203
00204 Handle<TriggerEventWithRefs> trigEv;
00205 iEvent.getByLabel(triggerEventObject_,trigEv);
00206
00207
00208
00209 bool gotHLT=true;
00210
00211
00212 std::vector<bool> myTrigJ;
00213 for (size_t it=0;it<hltTrgJet.size();it++) myTrigJ.push_back(false);
00214 std::vector<bool> myTrigJLow;
00215 for (size_t it=0;it<hltTrgJetLow.size();it++) myTrigJLow.push_back(false);
00216 std::vector<bool> myTrigM;
00217 for (size_t it=0;it<hltTrgMet.size();it++) myTrigM.push_back(false);
00218 std::vector<bool> myTrigMLow;
00219 for (size_t it=0;it<hltTrgMetLow.size();it++) myTrigMLow.push_back(false);
00220
00221
00222 Handle<TriggerResults> hltresults,hltresultsDummy;
00223 iEvent.getByLabel(HLTriggerResults,hltresults);
00224 if (! hltresults.isValid() ) {
00225
00226
00227 gotHLT=false;
00228 }
00229
00230 if (gotHLT) {
00231 const edm::TriggerNames & triggerNames = iEvent.triggerNames(*hltresults);
00232 getHLTResults(*hltresults, triggerNames);
00233
00234
00235
00236
00237 for (size_t it=0;it<hltTrgJet.size();it++) {
00238 trig_iter=hltTriggerMap.find(hltTrgJet[it]);
00239 if (trig_iter==hltTriggerMap.end()){
00240
00241
00242 }else{
00243 myTrigJ[it]=trig_iter->second;
00244 }
00245
00246 }
00247 for (size_t it=0;it<hltTrgJetLow.size();it++) {
00248 trig_iter=hltTriggerMap.find(hltTrgJetLow[it]);
00249 if (trig_iter==hltTriggerMap.end()){
00250
00251
00252 }else{
00253 myTrigJLow[it]=trig_iter->second;
00254 }
00255
00256 }
00257
00258 for (size_t it=0;it<hltTrgMet.size();it++) {
00259 trig_iter=hltTriggerMap.find(hltTrgMet[it]);
00260 if (trig_iter==hltTriggerMap.end()){
00261
00262
00263 }else{
00264 myTrigM[it]=trig_iter->second;
00265 }
00266
00267 }
00268 for (size_t it=0;it<hltTrgMetLow.size();it++) {
00269 trig_iter=hltTriggerMap.find(hltTrgMetLow[it]);
00270 if (trig_iter==hltTriggerMap.end()){
00271
00272
00273 }else{
00274 myTrigMLow[it]=trig_iter->second;
00275 }
00276
00277 }
00278 }
00279
00280 Handle<PFJetCollection> caloJets,caloJetsDummy;
00281 iEvent.getByLabel( CaloJetAlgorithm, caloJets );
00282 double calJetPt=-1.;
00283 double calJetEta=-999.;
00284 double calJetPhi=-999.;
00285
00286 if (caloJets.isValid()) {
00287
00288 int jetInd = 0;
00289 for( PFJetCollection::const_iterator cal = caloJets->begin(); cal != caloJets->end(); ++ cal ) {
00290
00291 if (jetInd == 0){
00292 calJetPt=cal->pt();
00293 calJetEta=cal->eta();
00294 calJetPhi=cal->phi();
00295 for (size_t it=0;it<hltTrgJet.size();it++) {
00296 _meRecoJetPt[it]->Fill( calJetPt );
00297 _meRecoJetEta[it]->Fill( calJetEta );
00298 _meRecoJetPhi[it]->Fill( calJetPhi );
00299 if (myTrigJ[it]) _meRecoJetPtTrgMC[it]->Fill( calJetPt );
00300 if (myTrigJ[it]) _meRecoJetEtaTrgMC[it]->Fill( calJetEta );
00301 if (myTrigJ[it]) _meRecoJetPhiTrgMC[it]->Fill( calJetPhi );
00302 if (myTrigJ[it] && myTrigJLow[it]) _meRecoJetPtTrg[it]->Fill( calJetPt );
00303 if (myTrigJ[it] && myTrigJLow[it]) _meRecoJetEtaTrg[it]->Fill( calJetEta );
00304 if (myTrigJ[it] && myTrigJLow[it]) _meRecoJetPhiTrg[it]->Fill( calJetPhi );
00305 if (myTrigJLow[it]) _meRecoJetPtTrgLow[it]->Fill( calJetPt );
00306 if (myTrigJLow[it]) _meRecoJetEtaTrgLow[it]->Fill( calJetEta );
00307 if (myTrigJLow[it]) _meRecoJetPhiTrgLow[it]->Fill( calJetPhi );
00308 }
00309 jetInd++;
00310 }
00311
00312
00313
00314
00315
00316 }
00317
00318
00319
00320
00321
00322 }else{
00323
00324
00325 }
00326
00327 Handle<GenJetCollection> genJets,genJetsDummy;
00328 iEvent.getByLabel( GenJetAlgorithm, genJets );
00329 double genJetPt=-1.;
00330 double genJetEta=-999.;
00331 double genJetPhi=-999.;
00332
00333 if (genJets.isValid()) {
00334
00335 int jetInd = 0;
00336 for( GenJetCollection::const_iterator gen = genJets->begin(); gen != genJets->end(); ++ gen ) {
00337
00338 if (jetInd == 0){
00339 genJetPt=gen->pt();
00340 genJetEta=gen->eta();
00341 genJetPhi=gen->phi();
00342 for (size_t it=0;it<hltTrgJet.size();it++) {
00343 _meGenJetPt[it]->Fill( genJetPt );
00344 _meGenJetEta[it]->Fill( genJetEta );
00345 _meGenJetPhi[it]->Fill( genJetPhi );
00346 if (myTrigJ[it]) _meGenJetPtTrgMC[it]->Fill( genJetPt );
00347 if (myTrigJ[it]) _meGenJetEtaTrgMC[it]->Fill( genJetEta );
00348 if (myTrigJ[it]) _meGenJetPhiTrgMC[it]->Fill( genJetPhi );
00349 if (myTrigJ[it] && myTrigJLow[it]) _meGenJetPtTrg[it]->Fill( genJetPt );
00350 if (myTrigJ[it] && myTrigJLow[it]) _meGenJetEtaTrg[it]->Fill( genJetEta );
00351 if (myTrigJ[it] && myTrigJLow[it]) _meGenJetPhiTrg[it]->Fill( genJetPhi );
00352 if (myTrigJLow[it]) _meGenJetPtTrgLow[it]->Fill( genJetPt );
00353 if (myTrigJLow[it]) _meGenJetEtaTrgLow[it]->Fill( genJetEta );
00354 if (myTrigJLow[it]) _meGenJetPhiTrgLow[it]->Fill( genJetPhi );
00355 }
00356 jetInd++;
00357 }
00358
00359
00360
00361
00362
00363 }
00364
00365
00366
00367
00368
00369 }else{
00370
00371
00372 }
00373
00374
00375 edm::Handle<CaloMETCollection> recmet, recmetDummy;
00376 iEvent.getByLabel(CaloMETColl,recmet);
00377
00378 double calMet=-1;
00379 if (recmet.isValid()) {
00380 typedef CaloMETCollection::const_iterator cmiter;
00381
00382 for ( cmiter i=recmet->begin(); i!=recmet->end(); i++) {
00383 calMet = i->pt();
00384 for (size_t it=0;it<hltTrgMet.size();it++) {
00385 _meRecoMET[it] -> Fill(calMet);
00386 if (myTrigM[it]) _meRecoMETTrgMC[it] -> Fill(calMet);
00387 if (myTrigM[it] && myTrigMLow[it]) _meRecoMETTrg[it] -> Fill(calMet);
00388 if (myTrigMLow[it]) _meRecoMETTrgLow[it] -> Fill(calMet);
00389 }
00390 }
00391 }else{
00392
00393
00394 }
00395
00396 edm::Handle<GenMETCollection> genmet, genmetDummy;
00397 iEvent.getByLabel(GenMETColl,genmet);
00398
00399 double genMet=-1;
00400 if (genmet.isValid()) {
00401 typedef GenMETCollection::const_iterator cmiter;
00402
00403 for ( cmiter i=genmet->begin(); i!=genmet->end(); i++) {
00404 genMet = i->pt();
00405 for (size_t it=0;it<hltTrgMet.size();it++) {
00406 _meGenMET[it] -> Fill(genMet);
00407 if (myTrigM[it]) _meGenMETTrgMC[it] -> Fill(genMet);
00408 if (myTrigM[it] && myTrigMLow[it]) _meGenMETTrg[it] -> Fill(genMet);
00409 if (myTrigMLow[it]) _meGenMETTrgLow[it] -> Fill(genMet);
00410 }
00411 }
00412 }else{
00413
00414
00415 }
00416
00417 }
00418
00419 void HLTJetMETValidation::getHLTResults(const edm::TriggerResults& hltresults,
00420 const edm::TriggerNames & triggerNames) {
00421
00422 int ntrigs=hltresults.size();
00423 if (! HLTinit_){
00424 HLTinit_=true;
00425
00426
00427 for (int itrig = 0; itrig != ntrigs; ++itrig){
00428 std::string trigName = triggerNames.triggerName(itrig);
00429
00430 }
00431 }
00432
00433 for (int itrig = 0; itrig != ntrigs; ++itrig){
00434 std::string trigName = triggerNames.triggerName(itrig);
00435 bool accept=hltresults.accept(itrig);
00436
00437
00438
00439
00440 typedef std::map<std::string,bool>::value_type valType;
00441 trig_iter=hltTriggerMap.find(trigName);
00442 if (trig_iter==hltTriggerMap.end())
00443 hltTriggerMap.insert(valType(trigName,accept));
00444 else
00445 trig_iter->second=accept;
00446 }
00447 }