12 virtual void endJob()
override;
31 #include "HepMC/WeightContainer.h"
32 #include "HepMC/GenEvent.h"
47 weightsToken_(consumes<double>(pset.getParameter<
InputTag>(
"weights"))),
48 nbinsMass_(pset.getUntrackedParameter<unsigned int>(
"nbinsMass")),
49 nbinsPt_(pset.getUntrackedParameter<unsigned int>(
"nbinsPt")),
50 nbinsAng_(pset.getUntrackedParameter<unsigned int>(
"nbinsAng")),
51 massMax_(pset.getUntrackedParameter<double>(
"massMax")),
52 ptMax_(pset.getUntrackedParameter<double>(
"ptMax")),
53 angMax_(pset.getUntrackedParameter<double>(
"angMax")),
54 accPtMin_(pset.getUntrackedParameter<double>(
"accPtMin")),
55 accMassMin_(pset.getUntrackedParameter<double>(
"accMassMin")),
56 accMassMax_(pset.getUntrackedParameter<double>(
"accMassMax")),
57 accEtaMin_(pset.getUntrackedParameter<double>(
"accEtaMin")),
58 accEtaMax_(pset.getUntrackedParameter<double>(
"accEtaMax")),
59 isMCatNLO_(pset.getUntrackedParameter<bool>(
"isMCatNLO")) {
60 cout <<
">>> Z Histogrammer constructor" << endl;
64 h_nZ_ = ZHisto.
make<TH1F>(
"ZNumber",
"number of Z particles", 11, -0.5, 10.5);
92 cout <<
">>> Z Histogrammer analyze" << endl;
105 if(!weight) weight=1.;
109 weight > 0 ? weight=1. : weight=-1.;
114 std::vector<GenParticle>
muons;
117 for(
unsigned int i = 0;
i < gen->size(); ++
i){
122 cout <<
"I'm getting a muon \n"
123 <<
"with " <<
"muMC.numberOfMothers() " << muMC.
numberOfMothers() <<
"\n the first mother has pdgId " << muMC.
mother()->
pdgId()
131 for(
unsigned int i = 0;
i < gen->size(); ++
i){
134 cout <<
"I'm getting a muon \n"
135 <<
"with " <<
"muMC.numberOfMothers() " << muMC.
numberOfMothers() <<
"\n the first mother has pdgId " << muMC.
mother()->
pdgId()
138 muons.push_back(muMC);
144 cout <<
"finally I selected " << muons.size() <<
" muons" << endl;
158 double inv_mass = 0.0;
161 double Ztheta_ = 0.0;
163 double Zrapidity_ = 0.0;
166 if (muons[0].mother()->mother()->pdgId()==23 && muons[1].mother()->mother()->pdgId()==23)
nBothMuHasZHasGrandMa_ ++;
169 tot_momentum += mom2;
170 inv_mass =
sqrt(tot_momentum.mass2());
171 Zpt_=tot_momentum.pt();
172 Zeta_ = tot_momentum.eta();
173 Ztheta_ = tot_momentum.theta();
174 Zphi_ = tot_momentum.phi();
175 Zrapidity_ = tot_momentum.Rapidity();
181 double weight_sign = (weight > 0) ? 1. : -1.;
183 h_mZMC_->Fill(inv_mass,weight_sign);
190 double pt1 = muons[0].pt();
191 double pt2 = muons[1].pt();
192 double eta1 = muons[0].eta();
193 double eta2 = muons[1].eta();
198 hardpt->Fill(pt1,weight_sign);
199 softpt->Fill(pt2,weight_sign);
200 hardeta->Fill(eta1,weight_sign);
201 softeta->Fill(eta2,weight_sign);
203 hardpt->Fill(pt2,weight_sign);
204 softpt->Fill(pt1,weight_sign);
205 hardeta->Fill(eta2,weight_sign);
206 softeta->Fill(eta1,weight_sign);
220 cout <<
" number of events accepted :" <<
nAcc_ << endl;
221 cout <<
" number of total events :" <<
h_mZMC_->GetEntries() << endl;
223 double eff = (double)
nAcc_ / (
double)
h_mZMC_->GetEntries();
224 double err =
sqrt( eff * (1. - eff) / (
double)
h_mZMC_->GetEntries() );
225 cout <<
" geometric acceptance: " << eff <<
"+/-" << err << endl;
std::vector< GenParticle > GenParticleCollection
collection of GenParticles
virtual const Candidate * mother(size_type i=0) const =0
return pointer to mother
virtual void analyze(const edm::Event &event, const edm::EventSetup &setup) override
virtual int pdgId() const GCC11_FINAL
PDG identifier.
#define DEFINE_FWK_MODULE(type)
virtual size_type numberOfMothers() const =0
number of mothers (zero or one in most of but not all the cases)
virtual void endJob() override
XYZTLorentzVectorD XYZTLorentzVector
Lorentz vector with cylindrical internal representation using pseudorapidity.
edm::EDGetTokenT< double > weightsToken_
virtual int status() const GCC11_FINAL
status word
void Fill(HcalDetId &id, double val, std::vector< TH2F > &depth)
virtual size_t numberOfMothers() const
number of mothers
Abs< T >::type abs(const T &t)
ZLONLOHistogrammer(const edm::ParameterSet &pset)
T * make(const Args &...args) const
make new ROOT object
unsigned int nBothMuHasZHasGrandMa_
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger but the state exists so we define the behavior If all triggers are the negative crieriion will lead to accepting the event(this again matches the behavior of"!*"before the partial wildcard feature was incorporated).The per-event"cost"of each negative criterion with multiple relevant triggers is about the same as!*was in the past
virtual int pdgId() const =0
PDG identifier.
TFileDirectory mkdir(const std::string &dir, const std::string &descr="")
create a new subdirectory
edm::EDGetTokenT< reco::GenParticleCollection > genToken_
virtual const Candidate * mother(size_type=0) const
return mother at a given position, i = 0, ... numberOfMothers() - 1 (read only mode) ...
void setup(std::vector< TH2F > &depth, std::string name, std::string units="")