Skip to content

Commit 8dd0a29

Browse files
authored
Merge pull request #47721 from etzovara/JetMETScoutDQM_1510pre1
Developing offline JetMET DQM for Scouting jets: applying JetID criteria - complementary to PR #47328
2 parents c32dc59 + 4933e24 commit 8dd0a29

File tree

5 files changed

+293
-22
lines changed

5 files changed

+293
-22
lines changed

DQMOffline/JetMET/interface/JetAnalyzer.h

+6
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@
6464
#include "DataFormats/Scalers/interface/DcsStatus.h"
6565
#include "PhysicsTools/SelectorUtils/interface/JetIDSelectionFunctor.h"
6666
#include "PhysicsTools/SelectorUtils/interface/PFJetIDSelectionFunctor.h"
67+
#include "PhysicsTools/SelectorUtils/interface/Run3ScoutingPFJetIDSelectionFunctor.h"
6768
#include "DataFormats/JetReco/interface/PileupJetIdentifier.h"
6869

6970
#include "CondFormats/L1TObjects/interface/L1GtTriggerMenuFwd.h"
@@ -174,6 +175,11 @@ class JetAnalyzer : public DQMEDAnalyzer {
174175

175176
PFJetIDSelectionFunctor pfjetIDFunctor;
176177

178+
Run3ScoutingPFJetIDSelectionFunctor::Quality_t run3scoutingpfjetidquality;
179+
Run3ScoutingPFJetIDSelectionFunctor::Version_t run3scoutingpfjetidversion;
180+
181+
Run3ScoutingPFJetIDSelectionFunctor run3scoutingpfjetIDFunctor;
182+
177183
std::vector<std::string> folderNames_;
178184

179185
std::string DirName;

DQMOffline/JetMET/python/jetAnalyzer_cff.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
*jetDQMAnalyzerAk4PFCHSCleaned*jetDQMAnalizerAk4PUPPICleaned
1515
)
1616

17-
jetDQMAnalyzerSequenceScouting = cms.Sequence(jetDQMAnalyzerAk4ScoutingUncleaned)
17+
jetDQMAnalyzerSequenceScouting = cms.Sequence(jetDQMAnalyzerAk4ScoutingUncleaned*jetDQMAnalyzerAk4ScoutingCleaned)
1818

1919
jetDQMAnalyzerSequenceCosmics = cms.Sequence(jetDQMAnalyzerAk4CaloUncleaned)
2020

DQMOffline/JetMET/python/jetAnalyzer_cfi.py

+11-11
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@
5050
bypassAllPVChecks = True,
5151
),
5252

53-
#for JPT and CaloJetID
53+
#Only for JPT and CaloJetID -> need to define InputJetIDValueMap
5454
InputJetIDValueMap = cms.InputTag("ak4JetID"),
5555
#options for Calo and JPT: LOOSE,LOOSE_AOD,TIGHT,MINIMAL
5656
#for PFJets: LOOSE,TIGHT
@@ -198,16 +198,12 @@
198198
bypassAllPVChecks = False,
199199
),
200200

201-
#for JPT and CaloJetID
202-
#InputJetIDValueMap = cms.untracked.InputTag("ak4JetID"),
203-
#options for Calo and JPT: LOOSE,LOOSE_AOD,TIGHT,MINIMAL
204-
#for PFJets: LOOSE,TIGHT
205-
###JetIDQuality = cms.string("LOOSE"),
206-
#options for Calo and JPT: PURE09,DQM09,CRAFT08
207-
#for PFJets: FIRSTDATA
208-
###JetIDVersion = cms.string("PURE09"),
201+
#for scouting PF jets: TIGHT
202+
JetIDQuality = cms.string("TIGHT"),
203+
#for scouting PF jets: RUN3Scouting
204+
JetIDVersion = cms.string("RUN3Scouting"),
209205
#
210-
#actually done only for PFJets at the moment
206+
#Pileup JetID anf quark-gluon discrimination not exist for scouting PF jets. The following: actually done only for PFJets at the moment
211207
###InputMVAPUIDDiscriminant = cms.InputTag("pileupJetIdEvaluatorDQM","fullDiscriminant"),
212208
###InputCutPUIDDiscriminant = cms.InputTag("pileupJetIdEvaluatorDQM","cutbasedDiscriminant"),
213209
###InputMVAPUIDValue = cms.InputTag("pileupJetIdEvaluatorDQM","fullId"),
@@ -228,12 +224,16 @@
228224
# DCS ### -> only used in JetMETDQMFilter.cc
229225
#
230226
DCSFilterForJetMonitoring = cms.PSet(
231-
DetectorTypes = cms.untracked.string("ecal:hbhe:hf"),
227+
DetectorTypes = cms.untracked.string("ecal:hbhe:hf:pixel:sistrip:es:muon"),
232228
#DebugOn = cms.untracked.bool(True),
233229
alwaysPass = cms.untracked.bool(False)
234230
)
235231
)
236232

233+
jetDQMAnalyzerAk4ScoutingCleaned = jetDQMAnalyzerAk4ScoutingUncleaned.clone(
234+
JetCleaningFlag = True
235+
)
236+
237237
jetDQMAnalyzerAk4PFCHSUncleanedMiniAOD=jetDQMAnalyzerAk4PFUncleaned.clone(
238238
filljetHighLevel = True,
239239
CleaningParameters = cleaningParameters.clone(

DQMOffline/JetMET/src/JetAnalyzer.cc

+69-10
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,25 @@ JetAnalyzer::JetAnalyzer(const edm::ParameterSet& pSet)
195195
}
196196
pfjetIDFunctor = PFJetIDSelectionFunctor(pfjetidversion, pfjetidquality);
197197
}
198+
199+
//Jet ID definitions for scouting PF jets
200+
if (isScoutingJet_) {
201+
if (JetIDVersion_ == "RUN3Scouting") {
202+
run3scoutingpfjetidversion = Run3ScoutingPFJetIDSelectionFunctor::RUN3Scouting;
203+
} else {
204+
if (verbose_)
205+
std::cout << "no valid scouting Run3ScoutinPF JetID version given" << std::endl;
206+
}
207+
if (JetIDQuality_ == "TIGHT") {
208+
run3scoutingpfjetidquality = Run3ScoutingPFJetIDSelectionFunctor::TIGHT;
209+
} else {
210+
if (verbose_)
211+
std::cout << "no Valid scouting Run3ScoutinPF JetID quality given" << std::endl;
212+
}
213+
run3scoutingpfjetIDFunctor =
214+
Run3ScoutingPFJetIDSelectionFunctor(run3scoutingpfjetidversion, run3scoutingpfjetidquality);
215+
}
216+
198217
//check later if some of those are also needed for PFJets
199218
leadJetFlag_ = 0;
200219
jetLoPass_ = 0;
@@ -293,7 +312,10 @@ JetAnalyzer::~JetAnalyzer() {
293312
// ***********************************************************
294313
void JetAnalyzer::bookHistograms(DQMStore::IBooker& ibooker, edm::Run const& iRun, edm::EventSetup const&) {
295314
if (isScoutingJet_) {
296-
if (!jetCleaningFlag_) {
315+
if (jetCleaningFlag_) {
316+
ibooker.setCurrentFolder("HLT/ScoutingOffline/Jet/Cleaned" + mInputCollection_.label());
317+
DirName = "HLT/ScoutingOffline/Jet/Cleaned" + mInputCollection_.label();
318+
} else {
297319
ibooker.setCurrentFolder("HLT/ScoutingOffline/Jet/Uncleaned" + mInputCollection_.label());
298320
DirName = "HLT/ScoutingOffline/Jet/Uncleaned" + mInputCollection_.label();
299321
}
@@ -2592,7 +2614,9 @@ void JetAnalyzer::dqmBeginRun(const edm::Run& iRun, const edm::EventSetup& iSetu
25922614
void JetAnalyzer::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) {
25932615
//set general folders first --> change later on for different folders
25942616
if (isScoutingJet_) {
2595-
if (!jetCleaningFlag_) {
2617+
if (jetCleaningFlag_) {
2618+
DirName = "HLT/ScoutingOffline/Jet/Cleaned" + mInputCollection_.label();
2619+
} else {
25962620
DirName = "HLT/ScoutingOffline/Jet/Uncleaned" + mInputCollection_.label();
25972621
}
25982622
} else {
@@ -2900,12 +2924,13 @@ void JetAnalyzer::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetu
29002924
if (isMiniAODJet_)
29012925
jetCollectionIsValid = patJets.isValid();
29022926

2903-
if (jetCleaningFlag_ && (!jetCollectionIsValid || !bPrimaryVertex || !dcsDecision)) // why "jetCleaningFlag_ &&" ???
2904-
return;
2905-
29062927
if (isScoutingJet_) {
29072928
if (!scoutingJets.isValid())
29082929
return;
2930+
} else {
2931+
if (jetCleaningFlag_ &&
2932+
(!jetCollectionIsValid || !bPrimaryVertex || !dcsDecision)) // why "jetCleaningFlag_ &&" ???
2933+
return;
29092934
}
29102935

29112936
unsigned int collSize = -1;
@@ -3036,12 +3061,19 @@ void JetAnalyzer::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetu
30363061
//remove the continue line, for physics selections we might losen the pt-thresholds as we care only about leading jets
30373062

30383063
numofscoutingjets++;
3064+
bool jetpassidScouting = true;
3065+
bool ThiscleanedScouting = true;
30393066
if (isScoutingJet_) {
30403067
jetEnergy = (*scoutingJets)[ijet].chargedHadronEnergy() + (*scoutingJets)[ijet].neutralHadronEnergy() +
30413068
(*scoutingJets)[ijet].electronEnergy() + (*scoutingJets)[ijet].photonEnergy() +
30423069
(*scoutingJets)[ijet].muonEnergy() + (*scoutingJets)[ijet].HFEMEnergy();
30433070

3044-
if (pass_uncorrected) {
3071+
jetpassidScouting = run3scoutingpfjetIDFunctor((*scoutingJets)[ijet]);
3072+
if (jetCleaningFlag_) {
3073+
ThiscleanedScouting = jetpassidScouting;
3074+
}
3075+
3076+
if (ThiscleanedScouting && pass_uncorrected) {
30453077
mPt_uncor = map_of_MEs[DirName + "/" + "Pt_uncor"];
30463078
if (mPt_uncor && mPt_uncor->getRootObject())
30473079
mPt_uncor->Fill((*scoutingJets)[ijet].pt());
@@ -3056,7 +3088,7 @@ void JetAnalyzer::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetu
30563088
mJetArea_uncor->Fill((*scoutingJets)[ijet].jetArea());
30573089
}
30583090

3059-
if (pass_corrected) {
3091+
if (ThiscleanedScouting && pass_corrected) {
30603092
mPt = map_of_MEs[DirName + "/" + "Pt"];
30613093
if (mPt && mPt->getRootObject())
30623094
mPt->Fill(correctedJet.pt());
@@ -3069,7 +3101,6 @@ void JetAnalyzer::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetu
30693101
mJetArea = map_of_MEs[DirName + "/" + "JetArea"];
30703102
if (mJetArea && mJetArea->getRootObject())
30713103
mJetArea->Fill(correctedJet.jetArea());
3072-
//if (fabs((*scoutingJets)[ijet].eta()) <= 0.5 && 30 <= (*scoutingJets)[ijet].pt() <= 50) {
30733104
mJetEnergyCorr = map_of_MEs[DirName + "/" + "JetEnergyCorr"];
30743105
if (mJetEnergyCorr && mJetEnergyCorr->getRootObject())
30753106
mJetEnergyCorr->Fill(correctedJet.pt() / (*scoutingJets)[ijet].pt());
@@ -3079,8 +3110,36 @@ void JetAnalyzer::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetu
30793110
mJetEnergyCorrVSPt = map_of_MEs[DirName + "/" + "JetEnergyCorrVSPt"];
30803111
if (mJetEnergyCorrVSPt && mJetEnergyCorrVSPt->getRootObject())
30813112
mJetEnergyCorrVSPt->Fill(correctedJet.pt(), correctedJet.pt() / (*scoutingJets)[ijet].pt());
3082-
//}
30833113
}
3114+
3115+
if (!runcosmics_ && pass_corrected) {
3116+
if (jetpassidScouting) {
3117+
mLooseJIDPassFractionVSeta = map_of_MEs[DirName + "/" + "JetIDPassFractionVSeta"];
3118+
if (mLooseJIDPassFractionVSeta && mLooseJIDPassFractionVSeta->getRootObject())
3119+
mLooseJIDPassFractionVSeta->Fill(correctedJet.eta(), 1.);
3120+
mLooseJIDPassFractionVSpt = map_of_MEs[DirName + "/" + "JetIDPassFractionVSpt"];
3121+
if (mLooseJIDPassFractionVSpt && mLooseJIDPassFractionVSpt->getRootObject())
3122+
mLooseJIDPassFractionVSpt->Fill(correctedJet.pt(), 1.);
3123+
if (fabs(correctedJet.eta()) < 3.0) {
3124+
mLooseJIDPassFractionVSptNoHF = map_of_MEs[DirName + "/" + "JetIDPassFractionVSptNoHF"];
3125+
if (mLooseJIDPassFractionVSptNoHF && mLooseJIDPassFractionVSptNoHF->getRootObject())
3126+
mLooseJIDPassFractionVSptNoHF->Fill(correctedJet.pt(), 1.);
3127+
}
3128+
} else {
3129+
mLooseJIDPassFractionVSeta = map_of_MEs[DirName + "/" + "JetIDPassFractionVSeta"];
3130+
if (mLooseJIDPassFractionVSeta && mLooseJIDPassFractionVSeta->getRootObject())
3131+
mLooseJIDPassFractionVSeta->Fill(correctedJet.eta(), 0.);
3132+
mLooseJIDPassFractionVSpt = map_of_MEs[DirName + "/" + "JetIDPassFractionVSpt"];
3133+
if (mLooseJIDPassFractionVSpt && mLooseJIDPassFractionVSpt->getRootObject())
3134+
mLooseJIDPassFractionVSpt->Fill(correctedJet.pt(), 0.);
3135+
if (fabs(correctedJet.eta()) < 3.0) {
3136+
mLooseJIDPassFractionVSptNoHF = map_of_MEs[DirName + "/" + "JetIDPassFractionVSptNoHF"];
3137+
if (mLooseJIDPassFractionVSptNoHF && mLooseJIDPassFractionVSptNoHF->getRootObject())
3138+
mLooseJIDPassFractionVSptNoHF->Fill(correctedJet.pt(), 0.);
3139+
}
3140+
}
3141+
}
3142+
30843143
//mConstituents = map_of_MEs[DirName + "/" + "Constituents"];
30853144
//if (mConstituents && mConstituents->getRootObject())
30863145
// mConstituents->Fill((*scoutingJets)[ijet].constituents());
@@ -4686,7 +4745,7 @@ void JetAnalyzer::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetu
46864745
}
46874746
//after jettype specific variables are filled -> perform histograms for all jets
46884747
//fill JetID efficiencies if uncleaned selection is chosen
4689-
if (!runcosmics_ && pass_corrected) {
4748+
if (!runcosmics_ && !isScoutingJet_ && pass_corrected) {
46904749
if (jetpassid) {
46914750
mLooseJIDPassFractionVSeta = map_of_MEs[DirName + "/" + "JetIDPassFractionVSeta"];
46924751
if (mLooseJIDPassFractionVSeta && mLooseJIDPassFractionVSeta->getRootObject())

0 commit comments

Comments
 (0)