CMS 3D CMS Logo

FFTJetPileupAnalyzer.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 //
3 // Package: FFTJetPileupAnalyzer
4 // Class: FFTJetPileupAnalyzer
5 //
13 //
14 // Original Author: Igor Volobouev
15 // Created: Thu Apr 21 15:52:11 CDT 2011
16 //
17 //
18 
19 #include <cassert>
20 #include <sstream>
21 #include <numeric>
22 
23 #include "TNtuple.h"
24 
25 // user include files
32 
34 #include <TH2D.h>
38 
40 
42 
44 
46 
47 #define init_param(type, varname) varname(ps.getParameter<type>(#varname))
48 
49 //
50 // class declaration
51 //
53 public:
54  explicit FFTJetPileupAnalyzer(const edm::ParameterSet&);
55  ~FFTJetPileupAnalyzer() override;
56 
57 private:
58  FFTJetPileupAnalyzer() = delete;
61 
62  // The following method should take all necessary info from
63  // PileupSummaryInfo and fill out the ntuple
64  void analyzePileup(const std::vector<PileupSummaryInfo>& pInfo);
65 
66  void beginJob() override;
67  void analyze(const edm::Event&, const edm::EventSetup&) override;
68  void endJob() override;
69 
77 
86 
98 
99  double vertexNdofCut;
101 
102  std::vector<float> ntupleData;
103  TNtuple* nt;
104  int totalNpu;
105  int totalNPV;
106  unsigned long counter;
107 };
108 
109 //
110 // constructors and destructor
111 //
131  init_param(double, vertexNdofCut),
132  init_param(double, crazyEnergyCut),
133  nt(nullptr),
134  totalNpu(-1),
135  totalNPV(-1),
136  counter(0) {
138  pileupToken = consumes<std::vector<PileupSummaryInfo> >(pileupLabel);
139 
140  if (collectHistos)
141  histoToken = consumes<TH2D>(histoLabel);
142 
143  if (collectSummaries)
144  summaryToken = consumes<reco::FFTJetPileupSummary>(summaryLabel);
145 
146  if (collectFastJetRho) {
147  fastJetRhoToken = consumes<double>(fastJetRhoLabel);
148  fastJetSigmaToken = consumes<double>(fastJetSigmaLabel);
149  }
150 
151  if (collectGrids)
152  gridToken = consumes<reco::DiscretizedEnergyFlow>(gridLabel);
153 
154  if (collectGridDensity)
155  etSumToken = consumes<std::pair<double, double> >(histoLabel);
156 
157  if (collectVertexInfo)
158  srcPVsToken = consumes<reco::VertexCollection>(srcPVs);
159 }
160 
162 
163 //
164 // member functions
165 //
166 void FFTJetPileupAnalyzer::analyzePileup(const std::vector<PileupSummaryInfo>& info) {
167  const unsigned nBx = info.size();
168  if (collectPileup)
169  ntupleData.push_back(static_cast<float>(nBx));
170 
171  double sumpt_Lo = 0.0, sumpt_Hi = 0.0;
172  totalNpu = 0;
173 
174  int npu_by_Bx[3] = {
175  0,
176  };
177  double sumpt_Lo_by_Bx[3] =
178  {
179  0.0,
180  },
181  sumpt_Hi_by_Bx[3] = {
182  0.0,
183  };
184 
185  if (verbosePileupInfo)
186  std::cout << "\n**** Pileup info begin" << std::endl;
187 
188  bool isCrazy = false;
189  for (unsigned ibx = 0; ibx < nBx; ++ibx) {
190  const PileupSummaryInfo& puInfo(info[ibx]);
191 
192  const int bx = puInfo.getBunchCrossing();
193  const int npu = puInfo.getPU_NumInteractions();
194  const std::vector<float>& lopt(puInfo.getPU_sumpT_lowpT());
195  const std::vector<float>& hipt(puInfo.getPU_sumpT_highpT());
196  const double losum = std::accumulate(lopt.begin(), lopt.end(), 0.0);
197  const double hisum = std::accumulate(hipt.begin(), hipt.end(), 0.0);
198 
199  if (losum >= crazyEnergyCut)
200  isCrazy = true;
201  if (hisum >= crazyEnergyCut)
202  isCrazy = true;
203 
204  totalNpu += npu;
205  sumpt_Lo += losum;
206  sumpt_Hi += hisum;
207 
208  const unsigned idx = bx < 0 ? 0U : (bx == 0 ? 1U : 2U);
209  npu_by_Bx[idx] += npu;
210  sumpt_Lo_by_Bx[idx] += losum;
211  sumpt_Hi_by_Bx[idx] += hisum;
212 
213  if (verbosePileupInfo)
214  std::cout << "ibx " << ibx << " bx " << bx << " npu " << npu << " losum " << losum << " hisum " << hisum
215  << std::endl;
216  }
217 
218  if (verbosePileupInfo)
219  std::cout << "**** Pileup info end\n" << std::endl;
220 
221  if (isCrazy) {
222  totalNpu = -1;
223  sumpt_Lo = 0.0;
224  sumpt_Hi = 0.0;
225  for (unsigned ibx = 0; ibx < 3; ++ibx) {
226  npu_by_Bx[ibx] = -1;
227  sumpt_Lo_by_Bx[ibx] = 0.0;
228  sumpt_Hi_by_Bx[ibx] = 0.0;
229  }
230  }
231 
232  if (collectPileup) {
233  ntupleData.push_back(totalNpu);
234  ntupleData.push_back(sumpt_Lo);
235  ntupleData.push_back(sumpt_Hi);
236  }
237 
238  if (collectOOTPileup)
239  for (unsigned ibx = 0; ibx < 3; ++ibx) {
240  ntupleData.push_back(npu_by_Bx[ibx]);
241  ntupleData.push_back(sumpt_Lo_by_Bx[ibx]);
242  ntupleData.push_back(sumpt_Hi_by_Bx[ibx]);
243  }
244 }
245 
246 // ------------ method called once each job just before starting event loop
248  // Come up with the list of variables
249  std::string vars = "cnt:run:event";
250  if (collectPileup)
251  vars += ":nbx:npu:sumptLowCut:sumptHiCut";
252  if (collectOOTPileup) {
253  vars += ":npu_negbx:sumptLowCut_negbx:sumptHiCut_negbx";
254  vars += ":npu_0bx:sumptLowCut_0bx:sumptHiCut_0bx";
255  vars += ":npu_posbx:sumptLowCut_posbx:sumptHiCut_posbx";
256  }
257  if (collectSummaries)
258  vars += ":estimate:pileup:uncert:uncertCode";
259  if (collectFastJetRho)
260  vars += ":fjrho:fjsigma";
261  if (collectGridDensity)
262  vars += ":gridEtDensity:gridEtDensityMixed";
263  if (collectVertexInfo)
264  vars += ":nPV";
265 
266  // Book the ntuple
268  nt = fs->make<TNtuple>(ntupleName.c_str(), ntupleTitle.c_str(), vars.c_str());
269  ntupleData.reserve(nt->GetNvar());
270 }
271 
272 // ------------ method called to for each event ------------
274  ntupleData.clear();
275  ntupleData.push_back(counter);
276  totalNpu = -1;
277  totalNPV = -1;
278 
279  edm::RunNumber_t const runnumber = iEvent.id().run();
280  edm::EventNumber_t const eventnumber = iEvent.id().event();
281  ntupleData.push_back(runnumber);
282  ntupleData.push_back(eventnumber);
283 
284  // Get pileup information from the pile-up information module
287  if (iEvent.getByToken(pileupToken, puInfo))
288  analyzePileup(*puInfo);
289  else {
290  if (collectPileup) {
291  ntupleData.push_back(-1);
292  ntupleData.push_back(-1);
293  ntupleData.push_back(0.f);
294  ntupleData.push_back(0.f);
295  }
296  if (collectOOTPileup)
297  for (unsigned ibx = 0; ibx < 3; ++ibx) {
298  ntupleData.push_back(-1);
299  ntupleData.push_back(0.f);
300  ntupleData.push_back(0.f);
301  }
302  }
303  }
304 
305  if (collectHistos) {
307  iEvent.getByToken(histoToken, input);
308 
310  TH2D* copy = new TH2D(*input);
311 
312  std::ostringstream os;
313  os << copy->GetName() << '_' << counter << '_' << totalNpu << '_' << runnumber << '_' << eventnumber;
314  const std::string& newname(os.str());
315  copy->SetNameTitle(newname.c_str(), newname.c_str());
316 
317  copy->SetDirectory(fs->getBareDirectory());
318  }
319 
320  if (collectSummaries) {
322  iEvent.getByToken(summaryToken, summary);
323 
324  ntupleData.push_back(summary->uncalibratedQuantile());
325  ntupleData.push_back(summary->pileupRho());
326  ntupleData.push_back(summary->pileupRhoUncertainty());
327  ntupleData.push_back(summary->uncertaintyCode());
328  }
329 
330  if (collectFastJetRho) {
331  edm::Handle<double> fjrho, fjsigma;
332  iEvent.getByToken(fastJetRhoToken, fjrho);
333  iEvent.getByToken(fastJetSigmaToken, fjsigma);
334 
335  ntupleData.push_back(*fjrho);
336  ntupleData.push_back(*fjsigma);
337  }
338 
339  if (collectGrids) {
341  iEvent.getByToken(gridToken, input);
342 
343  // Make sure the input grid is reasonable
344  const double* data = input->data();
345  assert(data);
346  assert(input->phiBin0Edge() == 0.0);
347  const unsigned nEta = input->nEtaBins();
348  const unsigned nPhi = input->nPhiBins();
349 
350  // Generate a name for the output histogram
351  std::ostringstream os;
352  os << "FFTJetGrid_" << counter << '_' << totalNpu << '_' << runnumber << '_' << eventnumber;
353  const std::string& newname(os.str());
354 
355  // Make a histogram and copy the grid data into it
357  TH2F* h =
358  fs->make<TH2F>(newname.c_str(), newname.c_str(), nEta, input->etaMin(), input->etaMax(), nPhi, 0.0, 2.0 * M_PI);
359  h->GetXaxis()->SetTitle("Eta");
360  h->GetYaxis()->SetTitle("Phi");
361  h->GetZaxis()->SetTitle("Transverse Energy");
362 
363  for (unsigned ieta = 0; ieta < nEta; ++ieta)
364  for (unsigned iphi = 0; iphi < nPhi; ++iphi)
365  h->SetBinContent(ieta + 1U, iphi + 1U, data[ieta * nPhi + iphi]);
366  }
367 
368  if (collectGridDensity) {
370  iEvent.getByToken(etSumToken, etSum);
371 
372  ntupleData.push_back(etSum->first);
373  ntupleData.push_back(etSum->second);
374  }
375 
376  if (collectVertexInfo) {
378  iEvent.getByToken(srcPVsToken, pvCollection);
379  totalNPV = 0;
380  if (!pvCollection->empty())
381  for (reco::VertexCollection::const_iterator pv = pvCollection->begin(); pv != pvCollection->end(); ++pv) {
382  const double ndof = pv->ndof();
383  if (!pv->isFake() && ndof > vertexNdofCut)
384  ++totalNPV;
385  }
386  ntupleData.push_back(totalNPV);
387  }
388 
389  assert(ntupleData.size() == static_cast<unsigned>(nt->GetNvar()));
390  nt->Fill(&ntupleData[0]);
391 
392  ++counter;
393 }
394 
395 // ------------ method called once each job just after ending the event loop
397 
398 //define this as a plug-in
FFTJetPileupAnalyzer::collectPileup
bool collectPileup
Definition: FFTJetPileupAnalyzer.cc:92
edm::RunNumber_t
unsigned int RunNumber_t
Definition: RunLumiEventNumber.h:14
counter
Definition: counter.py:1
Handle.h
PileupSummaryInfo.h
electrons_cff.bool
bool
Definition: electrons_cff.py:372
fftjetpfpileupcleaner_cfi.vertexNdofCut
vertexNdofCut
Definition: fftjetpfpileupcleaner_cfi.py:51
input
static const std::string input
Definition: EdmProvDump.cc:48
fftjetpileupanalyzer_cfi.collectSummaries
collectSummaries
Definition: fftjetpileupanalyzer_cfi.py:46
filterCSVwithJSON.copy
copy
Definition: filterCSVwithJSON.py:36
f
double f[11][100]
Definition: MuScleFitUtils.cc:78
FFTJetPileupAnalyzer::collectFastJetRho
bool collectFastJetRho
Definition: FFTJetPileupAnalyzer.cc:91
nt
int nt
Definition: AMPTWrapper.h:42
edm::EDGetTokenT< TH2D >
edm
HLT enums.
Definition: AlignableModifier.h:19
gather_cfg.cout
cout
Definition: gather_cfg.py:144
RunLumiEventNumber.h
FFTJetPileupAnalyzer
Definition: FFTJetPileupAnalyzer.cc:52
HLT_2018_cff.srcPVs
srcPVs
Definition: HLT_2018_cff.py:7380
fftjetpileupanalyzer_cfi.fastJetRhoLabel
fastJetRhoLabel
Definition: fftjetpileupanalyzer_cfi.py:24
cms::cuda::assert
assert(be >=bs)
fftjetpileupanalyzer_cfi.collectOOTPileup
collectOOTPileup
Definition: fftjetpileupanalyzer_cfi.py:43
charmTagsComputerCvsB_cfi.idx
idx
Definition: charmTagsComputerCvsB_cfi.py:108
info
static const TGPicture * info(bool iBackgroundIsBlack)
Definition: FWCollectionSummaryWidget.cc:152
PileupSummaryInfo::getPU_sumpT_lowpT
const std::vector< float > & getPU_sumpT_lowpT() const
Definition: PileupSummaryInfo.h:66
FFTJetPileupAnalyzer::histoToken
edm::EDGetTokenT< TH2D > histoToken
Definition: FFTJetPileupAnalyzer.cc:78
EDAnalyzer.h
FFTJetPileupAnalyzer::collectHistos
bool collectHistos
Definition: FFTJetPileupAnalyzer.cc:89
edm::Handle
Definition: AssociativeIterator.h:50
fftjetpileupanalyzer_cfi.collectPileup
collectPileup
Definition: fftjetpileupanalyzer_cfi.py:42
edm::EDAnalyzer
Definition: EDAnalyzer.h:29
FFTJetPileupAnalyzer::collectGrids
bool collectGrids
Definition: FFTJetPileupAnalyzer.cc:94
FFTJetPileupAnalyzer::collectSummaries
bool collectSummaries
Definition: FFTJetPileupAnalyzer.cc:90
LEDCalibrationChannels.iphi
iphi
Definition: LEDCalibrationChannels.py:64
simKBmtfDigis_cfi.bx
bx
Definition: simKBmtfDigis_cfi.py:55
ndof
Definition: HIMultiTrackSelector.h:49
MakerMacros.h
fftjetpileupanalyzer_cfi.collectFastJetRho
collectFastJetRho
Definition: fftjetpileupanalyzer_cfi.py:45
fftjetpileupanalyzer_cfi.crazyEnergyCut
crazyEnergyCut
Definition: fftjetpileupanalyzer_cfi.py:55
DEFINE_FWK_MODULE
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
FFTJetPileupAnalyzer::beginJob
void beginJob() override
Definition: FFTJetPileupAnalyzer.cc:247
vars
vars
Definition: DeepTauId.cc:163
Service.h
FFTJetPileupAnalyzer::FFTJetPileupAnalyzer
FFTJetPileupAnalyzer()=delete
fftjetpileupanalyzer_cfi.verbosePileupInfo
verbosePileupInfo
Definition: fftjetpileupanalyzer_cfi.py:50
FFTJetPileupAnalyzer::srcPVs
edm::InputTag srcPVs
Definition: FFTJetPileupAnalyzer.cc:75
FFTJetPileupAnalyzer::gridLabel
edm::InputTag gridLabel
Definition: FFTJetPileupAnalyzer.cc:74
init_param
#define init_param(type, varname)
Definition: FFTJetPileupAnalyzer.cc:47
FFTJetPileupAnalyzer::~FFTJetPileupAnalyzer
~FFTJetPileupAnalyzer() override
Definition: FFTJetPileupAnalyzer.cc:161
edm::EventNumber_t
unsigned long long EventNumber_t
Definition: RunLumiEventNumber.h:12
anotherprimaryvertexanalyzer_cfi.pvCollection
pvCollection
Definition: anotherprimaryvertexanalyzer_cfi.py:4
FFTJetPileupAnalyzer::pileupLabel
std::string pileupLabel
Definition: FFTJetPileupAnalyzer.cc:76
h
FFTJetPileupAnalyzer::gridToken
edm::EDGetTokenT< reco::DiscretizedEnergyFlow > gridToken
Definition: FFTJetPileupAnalyzer.cc:82
mitigatedMETSequence_cff.U
U
Definition: mitigatedMETSequence_cff.py:36
FFTJetPileupAnalyzer::collectGridDensity
bool collectGridDensity
Definition: FFTJetPileupAnalyzer.cc:95
FFTJetPileupSummary.h
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
Vertex.h
FFTJetPileupAnalyzer::crazyEnergyCut
double crazyEnergyCut
Definition: FFTJetPileupAnalyzer.cc:100
TFileService.h
FFTJetPileupAnalyzer::ntupleData
std::vector< float > ntupleData
Definition: FFTJetPileupAnalyzer.cc:102
FFTJetPileupAnalyzer::endJob
void endJob() override
Definition: FFTJetPileupAnalyzer.cc:396
LEDCalibrationChannels.ieta
ieta
Definition: LEDCalibrationChannels.py:63
HLT_2018_cff.InputTag
InputTag
Definition: HLT_2018_cff.py:79016
FFTJetPileupAnalyzer::collectVertexInfo
bool collectVertexInfo
Definition: FFTJetPileupAnalyzer.cc:96
edm::ParameterSet
Definition: ParameterSet.h:36
fftjetpileupanalyzer_cfi.ntupleName
ntupleName
Definition: fftjetpileupanalyzer_cfi.py:37
Event.h
FFTJetPileupAnalyzer::fastJetSigmaToken
edm::EDGetTokenT< double > fastJetSigmaToken
Definition: FFTJetPileupAnalyzer.cc:81
cond::runnumber
Definition: Time.h:19
edm::Service< TFileService >
MetAnalyzer.pv
def pv(vc)
Definition: MetAnalyzer.py:7
iEvent
int iEvent
Definition: GenABIO.cc:224
FFTJetPileupAnalyzer::summaryLabel
edm::InputTag summaryLabel
Definition: FFTJetPileupAnalyzer.cc:71
edmLumisInFiles.summary
summary
Definition: edmLumisInFiles.py:39
FFTJetPileupAnalyzer::verbosePileupInfo
bool verbosePileupInfo
Definition: FFTJetPileupAnalyzer.cc:97
M_PI
#define M_PI
Definition: BXVectorInputProducer.cc:50
fftjetpileupanalyzer_cfi.fastJetSigmaLabel
fastJetSigmaLabel
Definition: fftjetpileupanalyzer_cfi.py:25
fftjetpileupanalyzer_cfi.collectVertexInfo
collectVertexInfo
Definition: fftjetpileupanalyzer_cfi.py:49
FFTJetPileupAnalyzer::counter
unsigned long counter
Definition: FFTJetPileupAnalyzer.cc:106
HLT_2018_cff.nEta
nEta
Definition: HLT_2018_cff.py:5271
PileupSummaryInfo::getBunchCrossing
const int getBunchCrossing() const
Definition: PileupSummaryInfo.h:73
edm::EventSetup
Definition: EventSetup.h:57
fftjetpileupanalyzer_cfi.collectGridDensity
collectGridDensity
Definition: fftjetpileupanalyzer_cfi.py:48
FFTJetPileupAnalyzer::nt
TNtuple * nt
Definition: FFTJetPileupAnalyzer.cc:103
PileupSummaryInfo::getPU_sumpT_highpT
const std::vector< float > & getPU_sumpT_highpT() const
Definition: PileupSummaryInfo.h:67
VertexFwd.h
FFTJetPileupAnalyzer::collectOOTPileup
bool collectOOTPileup
Definition: FFTJetPileupAnalyzer.cc:93
FFTJetPileupAnalyzer::totalNPV
int totalNPV
Definition: FFTJetPileupAnalyzer.cc:105
std
Definition: JetResolutionObject.h:76
fftjetpileupanalyzer_cfi.collectGrids
collectGrids
Definition: fftjetpileupanalyzer_cfi.py:47
TFileService::getBareDirectory
TDirectory * getBareDirectory(const std::string &subdir="") const
Definition: TFileService.h:52
FFTJetPileupAnalyzer::srcPVsToken
edm::EDGetTokenT< reco::VertexCollection > srcPVsToken
Definition: FFTJetPileupAnalyzer.cc:83
Frameworkfwd.h
PileupSummaryInfo::getPU_NumInteractions
const int getPU_NumInteractions() const
Definition: PileupSummaryInfo.h:62
FFTJetPileupAnalyzer::fastJetSigmaLabel
edm::InputTag fastJetSigmaLabel
Definition: FFTJetPileupAnalyzer.cc:73
fftjetpileupanalyzer_cfi.gridLabel
gridLabel
Definition: fftjetpileupanalyzer_cfi.py:28
FFTJetPileupAnalyzer::vertexNdofCut
double vertexNdofCut
Definition: FFTJetPileupAnalyzer.cc:99
FFTJetPileupAnalyzer::fastJetRhoToken
edm::EDGetTokenT< double > fastJetRhoToken
Definition: FFTJetPileupAnalyzer.cc:80
FFTJetPileupAnalyzer::ntupleTitle
std::string ntupleTitle
Definition: FFTJetPileupAnalyzer.cc:88
data
char data[epos_bytes_allocation]
Definition: EPOS_Wrapper.h:79
FFTJetPileupAnalyzer::operator=
FFTJetPileupAnalyzer & operator=(const FFTJetPileupAnalyzer &)=delete
DiscretizedEnergyFlow.h
FFTJetPileupAnalyzer::histoLabel
edm::InputTag histoLabel
Definition: FFTJetPileupAnalyzer.cc:70
HLT_2018_cff.nPhi
nPhi
Definition: HLT_2018_cff.py:5272
fftjetpileupanalyzer_cfi.summaryLabel
summaryLabel
Definition: fftjetpileupanalyzer_cfi.py:18
ParameterSet.h
fftjetproducer_cfi.pileupLabel
pileupLabel
Definition: fftjetproducer_cfi.py:226
edm::Event
Definition: Event.h:73
FFTJetPileupAnalyzer::pileupToken
edm::EDGetTokenT< std::vector< PileupSummaryInfo > > pileupToken
Definition: FFTJetPileupAnalyzer.cc:84
FFTJetPileupAnalyzer::summaryToken
edm::EDGetTokenT< reco::FFTJetPileupSummary > summaryToken
Definition: FFTJetPileupAnalyzer.cc:79
fftjetimagerecorder_cfi.histoLabel
histoLabel
Definition: fftjetimagerecorder_cfi.py:12
FFTJetPileupAnalyzer::analyze
void analyze(const edm::Event &, const edm::EventSetup &) override
Definition: FFTJetPileupAnalyzer.cc:273
FFTJetPileupAnalyzer::ntupleName
std::string ntupleName
Definition: FFTJetPileupAnalyzer.cc:87
edm::InputTag
Definition: InputTag.h:15
fftjetpileupanalyzer_cfi.ntupleTitle
ntupleTitle
Definition: fftjetpileupanalyzer_cfi.py:38
FFTJetPileupAnalyzer::etSumToken
edm::EDGetTokenT< std::pair< double, double > > etSumToken
Definition: FFTJetPileupAnalyzer.cc:85
FFTJetPileupAnalyzer::analyzePileup
void analyzePileup(const std::vector< PileupSummaryInfo > &pInfo)
Definition: FFTJetPileupAnalyzer.cc:166
fftjetpileupanalyzer_cfi.collectHistos
collectHistos
Definition: fftjetpileupanalyzer_cfi.py:41
PileupSummaryInfo
Definition: PileupSummaryInfo.h:22
TFileService::make
T * make(const Args &... args) const
make new ROOT object
Definition: TFileService.h:64
FFTJetPileupAnalyzer::totalNpu
int totalNpu
Definition: FFTJetPileupAnalyzer.cc:104
FFTJetPileupAnalyzer::fastJetRhoLabel
edm::InputTag fastJetRhoLabel
Definition: FFTJetPileupAnalyzer.cc:72