CMS 3D CMS Logo

NPUTablesProducer.cc
Go to the documentation of this file.
10 
11 #include <vector>
12 #include <iostream>
13 
15 public:
17  : npuTag_(consumes<std::vector<PileupSummaryInfo>>(params.getParameter<edm::InputTag>("src"))),
18  pvTag_(consumes<std::vector<reco::Vertex>>(params.getParameter<edm::InputTag>("pvsrc"))),
19  vz_(params.getParameter<std::vector<double>>("zbins")) {
20  produces<nanoaod::FlatTable>();
21  }
22 
23  ~NPUTablesProducer() override {}
24 
25  void produce(edm::StreamID id, edm::Event& iEvent, const edm::EventSetup& iSetup) const override {
26  auto npuTab = std::make_unique<nanoaod::FlatTable>(1, "Pileup", true);
27 
29  iEvent.getByToken(pvTag_, pvsIn);
30  const double refpvz = (*pvsIn)[0].position().z();
31 
33  if (iEvent.getByToken(npuTag_, npuInfo)) {
34  fillNPUObjectTable(*npuInfo, *npuTab, refpvz);
35  }
36 
37  iEvent.put(std::move(npuTab));
38  }
39 
40  void fillNPUObjectTable(const std::vector<PileupSummaryInfo>& npuProd, nanoaod::FlatTable& out, double refpvz) const {
41  // Get BX 0
42  unsigned int bx0 = 0;
43  unsigned int nt = 0;
44  unsigned int npu = 0;
45 
46  auto zbin = std::lower_bound(vz_.begin(), vz_.end() - 1, std::abs(refpvz));
47  float pudensity = 0;
48  float gpudensity = 0;
49 
50  for (unsigned int ibx = 0; ibx < npuProd.size(); ibx++) {
51  if (npuProd[ibx].getBunchCrossing() == 0) {
52  bx0 = ibx;
53  nt = npuProd[ibx].getTrueNumInteractions();
54  npu = npuProd[ibx].getPU_NumInteractions();
55 
56  std::vector<float> zpositions;
57  unsigned int nzpositions = npuProd[ibx].getPU_zpositions().size();
58  for (unsigned int j = 0; j < nzpositions; ++j) {
59  zpositions.push_back(npuProd[ibx].getPU_zpositions()[j]);
60  if (std::abs(zpositions.back() - refpvz) < 0.1)
61  pudensity++; //N_PU/mm
62  auto bin = std::lower_bound(vz_.begin(), vz_.end() - 1, std::abs(zpositions.back()));
63  if (bin != vz_.end() && bin == zbin)
64  gpudensity++;
65  }
66  gpudensity /= (20.0 * (*(zbin) - *(zbin - 1)));
67  }
68  }
69  unsigned int eoot = 0;
70  for (unsigned int ipu = 0; ipu < bx0; ipu++) {
71  eoot += npuProd[ipu].getPU_NumInteractions();
72  }
73  unsigned int loot = 0;
74  for (unsigned int ipu = npuProd.size() - 1; ipu > bx0; ipu--) {
75  loot += npuProd[ipu].getPU_NumInteractions();
76  }
77  out.addColumnValue<float>("nTrueInt",
78  nt,
79  "the true mean number of the poisson distribution for this event from which the number "
80  "of interactions each bunch crossing has been sampled",
82  out.addColumnValue<int>(
83  "nPU",
84  npu,
85  "the number of pileup interactions that have been added to the event in the current bunch crossing",
87  out.addColumnValue<int>("sumEOOT", eoot, "number of early out of time pileup", nanoaod::FlatTable::IntColumn);
88  out.addColumnValue<int>("sumLOOT", loot, "number of late out of time pileup", nanoaod::FlatTable::IntColumn);
89  out.addColumnValue<float>("pudensity", pudensity, "PU vertices / mm", nanoaod::FlatTable::FloatColumn);
90  out.addColumnValue<float>(
91  "gpudensity", gpudensity, "Generator-level PU vertices / mm", nanoaod::FlatTable::FloatColumn);
92  }
93 
94  static void fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
96  desc.add<edm::InputTag>("src", edm::InputTag("slimmedAddPileupInfo"))
97  ->setComment("tag for the PU information (vector<PileupSummaryInfo>)");
98  desc.add<edm::InputTag>("pvsrc", edm::InputTag("offlineSlimmedPrimaryVertices"))->setComment("tag for the PVs");
99  desc.add<std::vector<double>>("zbins", {})
100  ->setComment("Z bins to compute the generator-level number of PU vertices per mm");
101  descriptions.add("puTable", desc);
102  }
103 
104 protected:
107 
108  const std::vector<double> vz_;
109 };
110 
ConfigurationDescriptions.h
nanoaod::FlatTable::FloatColumn
Definition: FlatTable.h:39
edm::StreamID
Definition: StreamID.h:30
PileupSummaryInfo.h
edm::ParameterSetDescription::add
ParameterDescriptionBase * add(U const &iLabel, T const &value)
Definition: ParameterSetDescription.h:95
NPUTablesProducer::fillDescriptions
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
Definition: NPUTablesProducer.cc:94
NPUTablesProducer::pvTag_
const edm::EDGetTokenT< std::vector< reco::Vertex > > pvTag_
Definition: NPUTablesProducer.cc:106
nt
int nt
Definition: AMPTWrapper.h:42
NPUTablesProducer::fillNPUObjectTable
void fillNPUObjectTable(const std::vector< PileupSummaryInfo > &npuProd, nanoaod::FlatTable &out, double refpvz) const
Definition: NPUTablesProducer.cc:40
CalibrationSummaryClient_cfi.params
params
Definition: CalibrationSummaryClient_cfi.py:14
edm::EDGetTokenT
Definition: EDGetToken.h:33
edm
HLT enums.
Definition: AlignableModifier.h:19
edm::ParameterSetDescription
Definition: ParameterSetDescription.h:52
reco
fixed size matrix
Definition: AlignmentAlgorithmBase.h:45
edm::Handle
Definition: AssociativeIterator.h:50
NPUTablesProducer::NPUTablesProducer
NPUTablesProducer(edm::ParameterSet const &params)
Definition: NPUTablesProducer.cc:16
MakerMacros.h
DEFINE_FWK_MODULE
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
edm::ConfigurationDescriptions::add
void add(std::string const &label, ParameterSetDescription const &psetDescription)
Definition: ConfigurationDescriptions.cc:57
NPUTablesProducer
Definition: NPUTablesProducer.cc:14
ParameterSetDescription.h
NPUTablesProducer::produce
void produce(edm::StreamID id, edm::Event &iEvent, const edm::EventSetup &iSetup) const override
Definition: NPUTablesProducer.cc:25
cuda_std::lower_bound
__host__ constexpr __device__ RandomIt lower_bound(RandomIt first, RandomIt last, const T &value, Compare comp={})
Definition: cudastdAlgorithm.h:27
edm::global::EDProducer
Definition: EDProducer.h:32
edm::ConfigurationDescriptions
Definition: ConfigurationDescriptions.h:28
Vertex.h
HLT_2018_cff.InputTag
InputTag
Definition: HLT_2018_cff.py:79016
edm::ParameterSet
Definition: ParameterSet.h:36
Event.h
iEvent
int iEvent
Definition: GenABIO.cc:224
edm::EventSetup
Definition: EventSetup.h:57
NPUTablesProducer::vz_
const std::vector< double > vz_
Definition: NPUTablesProducer.cc:108
FlatTable.h
newFWLiteAna.bin
bin
Definition: newFWLiteAna.py:161
nanoaod::FlatTable
Definition: FlatTable.h:36
LHEEventProduct.h
nanoaod::FlatTable::IntColumn
Definition: FlatTable.h:40
eostools.move
def move(src, dest)
Definition: eostools.py:511
std
Definition: JetResolutionObject.h:76
HltBtagValidation_cff.Vertex
Vertex
Definition: HltBtagValidation_cff.py:32
NPUTablesProducer::npuTag_
const edm::EDGetTokenT< std::vector< PileupSummaryInfo > > npuTag_
Definition: NPUTablesProducer.cc:105
MillePedeFileConverter_cfg.out
out
Definition: MillePedeFileConverter_cfg.py:31
funct::abs
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
ParameterSet.h
edm::EDConsumerBase::consumes
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
Definition: EDConsumerBase.h:126
EDProducer.h
dqmiolumiharvest.j
j
Definition: dqmiolumiharvest.py:66
edm::Event
Definition: Event.h:73
edm::InputTag
Definition: InputTag.h:15
NPUTablesProducer::~NPUTablesProducer
~NPUTablesProducer() override
Definition: NPUTablesProducer.cc:23
PileupSummaryInfo
Definition: PileupSummaryInfo.h:22