32 #include "HepMC/WeightContainer.h"
33 #include "HepMC/GenEvent.h"
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 accMassMinDen_(
pset.getUntrackedParameter<double>(
"accMassMinDen")),
58 accMassMaxDen_(
pset.getUntrackedParameter<double>(
"accMassMaxDen")),
59 accEtaMin_(
pset.getUntrackedParameter<double>(
"accEtaMin")),
60 accEtaMax_(
pset.getUntrackedParameter<double>(
"accEtaMax")),
61 ptScale_(
pset.getUntrackedParameter<double>(
"ptScale")),
62 muPdgStatus_(
pset.getUntrackedParameter<
int>(
"muPdgStatus")) {
63 cout <<
">>> Z Histogrammer constructor" << endl;
88 cout <<
">>> Z HistogrammerZLONLOHistogrammer.cc analyze" << endl;
97 std::vector<GenParticle>
muons;
101 for (
unsigned int i = 0;
i <
gen->size(); ++
i) {
105 cout <<
"I'm getting a muon \n"
107 <<
"muMC.numberOfMothers() " << muMC.
numberOfMothers() <<
"\n the first mother has pdgId "
110 <<
"\n the first grandma has pdgId " << muMC.
mother()->
mother()->
pdgId() << endl;
111 cout <<
"with muMC.eta() " << muMC.
eta() << endl;
112 muons.push_back(muMC);
129 cout <<
"I'm selecting a Z MC with mass " << mZGen << endl;
135 cout <<
"finally I selected " <<
muons.size() <<
" muons" << endl;
140 double inv_mass = 0.0;
143 double Ztheta_ = 0.0;
145 double Zrapidity_ = 0.0;
147 if (
muons.size() > 1) {
148 if (
muons[0].mother()->mother()->pdgId() == 23 &&
muons[1].mother()->mother()->pdgId() == 23)
152 tot_momentum += mom2;
153 inv_mass =
sqrt(tot_momentum.mass2());
154 Zpt_ = tot_momentum.pt();
155 Zeta_ = tot_momentum.eta();
156 Ztheta_ = tot_momentum.theta();
157 Zphi_ = tot_momentum.phi();
158 Zrapidity_ = tot_momentum.Rapidity();
160 double weight_sign = 1.;
196 cout <<
"pt1ScaledP" << pt1ScaledP << endl;
216 f.SetSeed(123456789);
217 double pt1SmearedFlat =
pt1 * (1. +
ptScale_ *
f.Uniform());
218 double pt2SmearedFlat =
pt2 * (1. +
ptScale_ *
f.Uniform());
228 ff.SetSeed(123456789);
229 double pt1SmearedGaus =
pt1 * (1. +
ptScale_ *
f.Gaus());
230 double pt2SmearedGaus =
pt2 * (1. +
ptScale_ *
f.Gaus());
241 cout <<
" number of events accepted :" <<
nAcc_ << endl;
242 cout <<
" number of total events :" <<
h_mZMC_->GetEntries() << endl;
244 cout <<
" number of events pt scaled positively accepted :" <<
nAccPtScaleP_ << endl;
246 cout <<
" number of events pt scaled negatively accepted :" <<
nAccPtScaleN_ << endl;
252 double eff = (double)
nAcc_ / (
double)
h_mZMC_->GetEntries();
253 double err =
sqrt(eff * (1. - eff) / (
double)
h_mZMC_->GetEntries());
254 cout <<
" geometric acceptance: " << eff <<
"+/-" <<
err << endl;
257 double errScaledP =
sqrt(effScaledP * (1. - effScaledP) / (
double)
h_mZMC_->GetEntries());
258 cout <<
" geometric acceptance when pt muon is positively scaled: " << effScaledP <<
"+/-" << errScaledP << endl;
261 double errScaledN =
sqrt(effScaledN * (1. - effScaledN) / (
double)
h_mZMC_->GetEntries());
262 cout <<
" geometric acceptance when pt muon is negatively scaled: " << effScaledN <<
"+/-" << errScaledN << endl;
265 double errSmearedFlat =
sqrt(effSmearedFlat * (1. - effSmearedFlat) / (
double)
h_mZMC_->GetEntries());
266 cout <<
" geometric acceptance when pt muon is scaled with a flat smaering: " << effSmearedFlat <<
"+/-"
267 << errSmearedFlat << endl;
270 double errSmearedGaus =
sqrt(effSmearedGaus * (1. - effSmearedGaus) / (
double)
h_mZMC_->GetEntries());
271 cout <<
" geometric acceptance when pt muon is scaled with a gaussian smearing: " << effSmearedGaus <<
"+/-"
272 << errSmearedGaus << endl;