32 #include "HepMC/WeightContainer.h"
33 #include "HepMC/GenEvent.h"
48 gen_(pset.getParameter<
InputTag>(
"genParticles")),
49 pdfweights_(pset.getParameter<
InputTag>(
"pdfweights")),
50 pdfmember_(pset.getUntrackedParameter<unsigned int>(
"pdfmember")),
51 nbinsMass_(pset.getUntrackedParameter<unsigned int>(
"nbinsMass")),
52 nbinsPt_(pset.getUntrackedParameter<unsigned int>(
"nbinsPt")),
53 nbinsAng_(pset.getUntrackedParameter<unsigned int>(
"nbinsAng")),
54 massMax_(pset.getUntrackedParameter<double>(
"massMax")),
55 ptMax_(pset.getUntrackedParameter<double>(
"ptMax")),
56 angMax_(pset.getUntrackedParameter<double>(
"angMax")),
57 accPtMin_(pset.getUntrackedParameter<double>(
"accPtMin")),
58 accMassMin_(pset.getUntrackedParameter<double>(
"accMassMin")),
59 accMassMax_(pset.getUntrackedParameter<double>(
"accMassMax")),
60 accEtaMin_(pset.getUntrackedParameter<double>(
"accEtaMin")),
61 accEtaMax_(pset.getUntrackedParameter<double>(
"accEtaMax")),
62 accMassMinDenominator_(pset.getUntrackedParameter<double>(
"accMassMinDenominator")),
63 isMCatNLO_(pset.getUntrackedParameter<bool>(
"isMCatNLO")),
64 filename_(pset.getUntrackedParameter<std::
string>(
"outfilename")) {
65 cout <<
">>> Z Histogrammer constructor" << endl;
69 h_nZ_ = ZMCHisto.
make<TH1F>(
"ZNumber",
"number of Z particles", 11, -0.5, 10.5);
92 cout <<
">>> Z Histogrammer analyze" << endl;
97 event.getByLabel(
gen_, gen);
103 std::vector<double>
weights = (*pdfweights);
105 unsigned int nmembers = weights.size();
112 cout <<
"found nmember: " << nmembers << endl;
113 cout <<
"taken the member n " <<
pdfmember_ <<
" weight= " << weight << endl;
117 std::vector<GenParticle>
muons;
120 for(
unsigned int i = 0;
i < gen->size(); ++
i){
125 cout <<
"I'm getting a muon \n"
126 <<
"with " <<
"muMC.numberOfMothers() " << muMC.
numberOfMothers() <<
"\n the first mother has pdgId " << muMC.
mother()->
pdgId()
133 cout <<
"finally I selected " << muons.size() <<
" muons" << endl;
138 double inv_mass = 0.0;
141 double Ztheta_ = 0.0;
143 double Zrapidity_ = 0.0;
146 if (muons[0].mother()->mother()->pdgId()==23 && muons[1].mother()->mother()->pdgId()==23)
nBothMuHasZHasGrandMa_ ++;
149 tot_momentum += mom2;
150 inv_mass =
sqrt(tot_momentum.mass2());
152 Zpt_=tot_momentum.pt();
153 Zeta_ = tot_momentum.eta();
154 Ztheta_ = tot_momentum.theta();
155 Zphi_ = tot_momentum.phi();
156 Zrapidity_ = tot_momentum.Rapidity();
162 double weight_sign =
weight;
166 h_mZMC_->Fill(inv_mass,weight_sign);
173 double pt1 = muons[0].pt();
174 double pt2 = muons[1].pt();
175 double eta1 = muons[0].eta();
176 double eta2 = muons[1].eta();
178 hardpt->Fill(pt1,weight_sign);
179 softpt->Fill(pt2,weight_sign);
180 hardeta->Fill(eta1,weight_sign);
181 softeta->Fill(eta2,weight_sign);
183 hardpt->Fill(pt2,weight_sign);
184 softpt->Fill(pt1,weight_sign);
185 hardeta->Fill(eta2,weight_sign);
186 softeta->Fill(eta1,weight_sign);
200 cout <<
" number of events accepted :" <<
nAcc_ << endl;
201 cout <<
" number of events accepted reweigthed :" <<
nAccReW_ << endl;
202 double nev =
h_mZMC_->GetEntries();
203 double nev_weigthed =
h_mZMC_->Integral( ) ;
204 cout <<
" number of total events :" << nev << endl;
205 cout <<
" number of total weighted events :" << nev_weigthed << endl;
207 double eff = (double)
nAcc_ / (
double)
h_mZMC_->GetEntries();
209 double err =
sqrt( eff * (1. - eff) / (
double)
h_mZMC_->GetEntries() );
211 cout <<
" geometric acceptance: " << eff <<
"+/-" << err << endl;
212 cout <<
" geometric acceptance reweighted: " << eff_rew <<
"+/-" << err_rew << endl;
215 myfile.open(
filename_.c_str(), std::ios::app);
216 myfile<< eff <<
" "<< eff_rew <<
" " << nev <<
" " << nev_weigthed << endl ;
double nBothMuHasZHasGrandMa_
virtual const Candidate * mother(size_type i=0) const =0
return pointer to mother
double accMassMinDenominator_
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 analyze(const edm::Event &event, const edm::EventSetup &setup)
zPdfUnc(const edm::ParameterSet &pset)
XYZTLorentzVectorD XYZTLorentzVector
Lorentz vector with cylindrical internal representation using pseudorapidity.
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
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
T * make() const
make new ROOT object
edm::InputTag pdfweights_
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="")