20 vz_(params.getParameter<
std::vector<double>>(
"zbins")),
22 produces<nanoaod::FlatTable>();
28 auto npuTab = std::make_unique<nanoaod::FlatTable>(1,
"Pileup",
true);
32 const double refpvz = (*pvsIn)[0].position().z();
53 for (
unsigned int ibx = 0; ibx < npuProd.size(); ibx++) {
54 if (npuProd[ibx].getBunchCrossing() == 0) {
56 nt = npuProd[ibx].getTrueNumInteractions();
57 npu = npuProd[ibx].getPU_NumInteractions();
59 std::vector<float> zpositions;
60 unsigned int nzpositions = npuProd[ibx].getPU_zpositions().size();
61 for (
unsigned int j = 0; j < nzpositions; ++j) {
62 zpositions.push_back(npuProd[ibx].getPU_zpositions()[j]);
63 if (
std::abs(zpositions.back() - refpvz) < 0.1)
69 gpudensity /= (20.0 * (*(zbin) - *(zbin - 1)));
71 if (!npuProd[ibx].getPU_pT_hats().empty()) {
72 pthatmax = *max_element(npuProd[ibx].getPU_pT_hats().
begin(), npuProd[ibx].getPU_pT_hats().
end());
77 unsigned int eoot = 0;
78 for (
unsigned int ipu = 0; ipu < bx0; ipu++) {
79 eoot += npuProd[ipu].getPU_NumInteractions();
81 unsigned int loot = 0;
82 for (
unsigned int ipu = npuProd.size() - 1; ipu > bx0; ipu--) {
83 loot += npuProd[ipu].getPU_NumInteractions();
87 "the true mean number of the poisson distribution for this event from which the number " 88 "of interactions each bunch crossing has been sampled",
93 "the number of pileup interactions that have been added to the event in the current bunch crossing",
108 ->setComment(
"tag for the PU information (vector<PileupSummaryInfo>)");
110 desc.
add<std::vector<double>>(
"zbins", {})
111 ->setComment(
"Z bins to compute the generator-level number of PU vertices per mm");
112 desc.
add<
bool>(
"savePtHatMax",
false)->setComment(
"Store maximum pt-hat of PU");
113 descriptions.
add(
"puTable", desc);
120 const std::vector<double>
vz_;
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
bool getByToken(EDGetToken token, Handle< PROD > &result) const
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
void produce(edm::StreamID id, edm::Event &iEvent, const edm::EventSetup &iSetup) const override
#define DEFINE_FWK_MODULE(type)
Abs< T >::type abs(const T &t)
NPUTablesProducer(edm::ParameterSet const ¶ms)
ParameterDescriptionBase * add(U const &iLabel, T const &value)
void addColumnValue(const std::string &name, const C &value, const std::string &docString, ColumnType type=defaultColumnType< T >(), int mantissaBits=-1)
bin
set the eta bin as selection string.
const edm::EDGetTokenT< std::vector< PileupSummaryInfo > > npuTag_
void add(std::string const &label, ParameterSetDescription const &psetDescription)
~NPUTablesProducer() override
void fillNPUObjectTable(const std::vector< PileupSummaryInfo > &npuProd, nanoaod::FlatTable &out, double refpvz) const
const edm::EDGetTokenT< std::vector< reco::Vertex > > pvTag_
const std::vector< double > vz_