61 void endJob()
override;
76 double etamax_,
ptmin_, massMin_, massMax_, isoMax_;
89 TH1D *h_zmm1HLTplus_mass, *h_zmmNotIsoplus_mass, *h_zmsplus_mass, *
h_zmtplus_mass;
90 TH1D *h_zmm1HLTminus_mass, *h_zmmNotIsominus_mass, *h_zmsminus_mass, *
h_zmtminus_mass;
95 vector<TH1D *> hmumu2HLTplus_eta, hmumu1HLTplus_eta, hmustaplus_eta,
hmutrackplus_eta, hmumuNotIsoplus_eta;
96 vector<TH1D *> hmumu2HLTplus_pt, hmumu1HLTplus_pt, hmustaplus_pt,
hmutrackplus_pt, hmumuNotIsoplus_pt;
97 vector<TH1D *> hmumu2HLTminus_eta, hmumu1HLTminus_eta, hmustaminus_eta,
hmutrackminus_eta, hmumuNotIsominus_eta;
98 vector<TH1D *> hmumu2HLTminus_pt, hmumu1HLTminus_pt, hmustaminus_pt,
hmutrackminus_pt, hmumuNotIsominus_pt;
122 bothMuons_(
pset.getParameter<
bool>(
"bothMuons")),
124 etamax_(
pset.getUntrackedParameter<double>(
"etamax")),
125 ptmin_(
pset.getUntrackedParameter<double>(
"ptmin")),
126 massMin_(
pset.getUntrackedParameter<double>(
"zMassMin")),
127 massMax_(
pset.getUntrackedParameter<double>(
"zMassMax")),
128 isoMax_(
pset.getUntrackedParameter<double>(
"isomax")) {
132 h_zmm_mass = fs->
make<TH1D>(
"zmm_mass",
"zmumu mass", 100, 0., 200.);
143 cout <<
"primo" << endl;
147 fs->
mkdir(
"etaIntervals");
149 fs->
mkdir(
"ptIntervals");
154 double etaRangeTmp[7] = {-2., -1.2, -0.8, 0., 0.8, 1.2, 2.};
155 double ptRangeTmp[5] = {20., 40., 60., 80., 100.};
158 for (
unsigned int i = 0;
i <=
ptBins;
i++)
162 cout <<
"eta istograms creation " << endl;
165 cout <<
" bin eta plus " <<
i << endl;
170 ap =
"zmumu2HLTplus_etaRange" + std::to_string(
i);
171 bp =
"zmumu2HLT plus mass eta Range " + std::to_string(range0) +
" to " + std::to_string(range1);
172 cout << ap <<
" " << bp << endl;
174 ap =
"zmumu1HLTplus_etaRange" + std::to_string(
i);
175 bp =
"zmumu1HLT plus mass eta Range " + std::to_string(range0) +
" to " + std::to_string(range1);
176 cout << ap <<
" " << bp << endl;
178 ap =
"zmustaplus_etaRange" + std::to_string(
i);
179 bp =
"zmusta plus mass eta Range " + std::to_string(range0) +
" to " + std::to_string(range1);
180 cout << ap <<
" " << bp << endl;
181 hmustaplus_eta.push_back(etaDirectory.
make<TH1D>(ap.c_str(), bp.c_str(), 50, 0., 200.));
182 ap =
"zmutrackplus_etaRange" + std::to_string(
i);
183 bp =
"zmutrack plus mass eta Range " + std::to_string(range0) +
" to " + std::to_string(range1);
184 cout << ap <<
" " << bp << endl;
186 ap =
"zmumuNotIsoplus_etaRange" + std::to_string(
i);
187 bp =
"zmumuNotIso plus mass eta Range " + std::to_string(range0) +
" to " + std::to_string(range1);
188 cout << ap <<
" " << bp << endl;
191 cout <<
" bin eta minus " <<
i << endl;
193 am =
"zmumu2HLTminus_etaRange" + std::to_string(
i);
194 bm =
"zmumu2HLT minus mass eta Range " + std::to_string(range0) +
" to " + std::to_string(range1);
195 cout << am <<
" " << bm << endl;
197 am =
"zmumu1HLTminus_etaRange" + std::to_string(
i);
198 bm =
"zmumu1HLT minus mass eta Range " + std::to_string(range0) +
" to " + std::to_string(range1);
199 cout << am <<
" " << bm << endl;
201 am =
"zmustaminus_etaRange" + std::to_string(
i);
202 bm =
"zmusta minus mass eta Range " + std::to_string(range0) +
" to " + std::to_string(range1);
203 cout << am <<
" " << bm << endl;
205 am =
"zmutrackminus_etaRange" + std::to_string(
i);
206 bm =
"zmutrack minus mass eta Range " + std::to_string(range0) +
" to " + std::to_string(range1);
207 cout << am <<
" " << bm << endl;
209 am =
"zmumuNotIsominus_etaRange" + std::to_string(
i);
210 bm =
"zmumuNotIso minus mass eta Range " + std::to_string(range0) +
" to " + std::to_string(range1);
211 cout << am <<
" " << bm << endl;
216 cout <<
"pt istograms creation " << endl;
218 for (
unsigned int i = 0;
i <
ptBins;
i++) {
222 cout <<
" bin pt plus " <<
i << endl;
224 ap1 =
"zmumu2HLTplus_ptRange" + std::to_string(
i);
225 bp1 =
"zmumu2HLT plus mass pt Range " + std::to_string(range0) +
" to " + std::to_string(range1);
226 cout << ap1 <<
" " << bp1 << endl;
228 ap1 =
"zmumu1HLTplus_ptRange" + std::to_string(
i);
229 bp1 =
"zmumu1HLT plus mass pt Range " + std::to_string(range0) +
" to " + std::to_string(range1);
230 cout << ap1 <<
" " << bp1 << endl;
232 ap1 =
"zmustaplus_ptRange" + std::to_string(
i);
233 bp1 =
"zmusta plus mass pt Range " + std::to_string(range0) +
" to " + std::to_string(range1);
234 cout << ap1 <<
" " << bp1 << endl;
235 hmustaplus_pt.push_back(ptDirectory.
make<TH1D>(ap1.c_str(), bp1.c_str(), 50, 0., 200.));
236 ap1 =
"zmutrackplus_ptRange" + std::to_string(
i);
237 bp1 =
"zmutrack plus mass pt Range " + std::to_string(range0) +
" to " + std::to_string(range1);
238 cout << ap1 <<
" " << bp1 << endl;
239 hmutrackplus_pt.push_back(ptDirectory.
make<TH1D>(ap1.c_str(), bp1.c_str(), 100, 0., 200.));
240 ap1 =
"zmumuNotIsoplus_ptRange" + std::to_string(
i);
241 bp1 =
"zmumuNotIso plus mass pt Range " + std::to_string(range0) +
" to " + std::to_string(range1);
242 cout << ap1 <<
" " << bp1 << endl;
245 cout <<
" bin pt minus " <<
i << endl;
247 am1 =
"zmumu2HLTminus_ptRange" + std::to_string(
i);
248 bm1 =
"zmumu2HLT minus mass pt Range " + std::to_string(range0) +
" to " + std::to_string(range1);
249 cout << am1 <<
" " << bm1 << endl;
251 am1 =
"zmumu1HLTminus_ptRange" + std::to_string(
i);
252 bm1 =
"zmumu1HLT minus mass pt Range " + std::to_string(range0) +
" to " + std::to_string(range1);
253 cout << am1 <<
" " << bm1 << endl;
255 am1 =
"zmustaminus_ptRange" + std::to_string(
i);
256 bm1 =
"zmusta minus mass pt Range " + std::to_string(range0) +
" to " + std::to_string(range1);
257 cout << am1 <<
" " << bm1 << endl;
258 hmustaminus_pt.push_back(ptDirectory.
make<TH1D>(am1.c_str(), bm1.c_str(), 50, 0., 200.));
259 am1 =
"zmutrackminus_ptRange" + std::to_string(
i);
260 bm1 =
"zmutrack minus mass pt Range " + std::to_string(range0) +
" to " + std::to_string(range1);
261 cout << am1 <<
" " << bm1 << endl;
263 am1 =
"zmumuNotIsominus_ptRange" + std::to_string(
i);
264 bm1 =
"zmumuNotIso minus mass pt Range " + std::to_string(range0) +
" to " + std::to_string(range1);
265 cout << am1 <<
" " << bm1 << endl;
306 bool zMuMu_found =
false;
308 if (!
zMuMu->empty()) {
309 for (
unsigned int i = 0;
i <
zMuMu->size(); ++
i) {
316 double trkiso0 = muonDau0.
trackIso();
317 const pat::Muon &muonDau1 = dynamic_cast<const pat::Muon &>(*
lep1->masterClone());
318 double trkiso1 = muonDau1.
trackIso();
333 bool trig0found =
false;
334 bool trig1found =
false;
335 if (!mu0HLTMatches.empty())
337 if (!mu1HLTMatches.empty())
342 bool checkOppositeCharge =
false;
343 if (charge0 != charge1)
344 checkOppositeCharge =
true;
347 if (trig0found || trig1found) {
350 if (trig0found && trig1found) {
364 if (eta0 >= range0 && eta0 < range1) {
370 if (
eta1 >= range0 &&
eta1 < range1) {
378 for (
unsigned int j = 0;
j <
ptBins;
j++) {
382 if (pt0 >= range0pt && pt0 < range1pt) {
388 if (
pt1 >= range0pt &&
pt1 < range1pt) {
398 if (!trig0found || !trig1found) {
422 if (
eta >= range0 &&
eta < range1) {
429 for (
unsigned int j = 0;
j <
ptBins;
j++) {
433 if (
pt >= range0 &&
pt < range1) {
455 bool zMuSta_found =
false;
456 if (!zMuMu_found && !zMuStandAlone->
empty()) {
458 for (
unsigned int i = 0;
i < zMuStandAlone->
size(); ++
i) {
459 const Candidate &zMuStandAloneCand = (*zMuStandAlone)[
i];
461 GenParticleRef zMuStandAloneMatch = (*zMuStandAloneMatchMap)[zMuStandAloneCandRef];
466 double trkiso0 = muonDau0.
trackIso();
467 const pat::Muon &muonDau1 = dynamic_cast<const pat::Muon &>(*
lep1->masterClone());
468 double trkiso1 = muonDau1.
trackIso();
469 double pt0 = zMuStandAloneCand.
daughter(0)->
pt();
471 double eta0 = zMuStandAloneCand.
daughter(0)->
eta();
475 double mass = zMuStandAloneCand.
mass();
481 bool trig0found =
false;
482 bool trig1found =
false;
483 if (!mu0HLTMatches.empty())
485 if (!mu1HLTMatches.empty())
489 bool trigGlbfound =
false;
494 trigGlbfound = trig0found;
500 trigGlbfound = trig1found;
506 bool checkOppositeCharge =
false;
507 if (charge0 != charge1)
508 checkOppositeCharge =
true;
523 if (
eta >= range0 &&
eta < range1) {
530 for (
unsigned int j = 0;
j <
ptBins;
j++) {
534 if (
pt >= range0 &&
pt < range1) {
548 if (!zMuMu_found && !zMuSta_found && !zMuTrack->
empty()) {
550 for (
unsigned int i = 0;
i < zMuTrack->
size(); ++
i) {
551 const Candidate &zMuTrackCand = (*zMuTrack)[
i];
556 double trkiso0 = muonDau0.
trackIso();
558 double trkiso1 = trackDau1.
trackIso();
570 bool trig0found =
false;
571 if (!mu0HLTMatches.empty())
574 bool checkOppositeCharge =
false;
575 if (charge0 != charge1)
576 checkOppositeCharge =
true;
591 if (
eta1 >= range0 &&
eta1 < range1) {
598 for (
unsigned int j = 0;
j <
ptBins;
j++) {
602 if (
pt1 >= range0 &&
pt1 < range1) {
620 int partId0 = dauGen0->
pdgId();
621 int partId1 = dauGen1->
pdgId();
622 int partId2 = dauGen2->
pdgId();
623 bool muplusFound =
false;
624 bool muminusFound =
false;
626 if (partId0 == 13 || partId1 == 13 || partId2 == 13)
628 if (partId0 == -13 || partId1 == -13 || partId2 == -13)
630 if (partId0 == 23 || partId1 == 23 || partId2 == 23)
632 return (muplusFound && muminusFound && ZFound);
639 int partId0 = dauGen0->
pdgId();
640 int partId1 = dauGen1->
pdgId();
641 int partId2 = dauGen2->
pdgId();
643 if (partId0 == ipart) {
646 if (dauMuGen->
pdgId() == ipart && dauMuGen->
status() == 1) {
647 ptpart = dauMuGen->
pt();
651 if (partId1 == ipart) {
654 if (dauMuGen->
pdgId() == ipart && dauMuGen->
status() == 1) {
655 ptpart = dauMuGen->
pt();
659 if (partId2 == ipart) {
663 ptpart = dauMuGen->
pt();
674 int partId0 = dauGen0->
pdgId();
675 int partId1 = dauGen1->
pdgId();
676 int partId2 = dauGen2->
pdgId();
678 if (partId0 == ipart) {
681 if (dauMuGen->
pdgId() == ipart && dauMuGen->
status() == 1) {
682 etapart = dauMuGen->
eta();
686 if (partId1 == ipart) {
689 if (dauMuGen->
pdgId() == ipart && dauMuGen->
status() == 1) {
690 etapart = dauMuGen->
eta();
694 if (partId2 == ipart) {
698 etapart = dauMuGen->
eta();
709 int partId0 = dauGen0->
pdgId();
710 int partId1 = dauGen1->
pdgId();
711 int partId2 = dauGen2->
pdgId();
713 if (partId0 == ipart) {
716 if (dauMuGen->
pdgId() == ipart && dauMuGen->
status() == 1) {
717 phipart = dauMuGen->
phi();
721 if (partId1 == ipart) {
724 if (dauMuGen->
pdgId() == ipart && dauMuGen->
status() == 1) {
725 phipart = dauMuGen->
phi();
729 if (partId2 == ipart) {
733 phipart = dauMuGen->
phi();
744 int partId0 = dauGen0->
pdgId();
745 int partId1 = dauGen1->
pdgId();
746 int partId2 = dauGen2->
pdgId();
748 if (partId0 == ipart) {
751 if (dauMuGen->
pdgId() == ipart && dauMuGen->
status() == 1) {
752 p4part = dauMuGen->
p4();
756 if (partId1 == ipart) {
759 if (dauMuGen->
pdgId() == ipart && dauMuGen->
status() == 1) {
760 p4part = dauMuGen->
p4();
764 if (partId2 == ipart) {
768 p4part = dauMuGen->
p4();