CMS 3D CMS Logo

List of all members | Public Member Functions | Public Attributes | Private Attributes
MuScleFitPlotter Class Reference

#include <MuScleFitPlotter.h>

Public Member Functions

void fillGen (const reco::GenParticleCollection &genParticles, bool=false)
 
void fillGen (const edm::HepMCProduct &evtMC, bool sherpaFlag_)
 
void fillGenSim (edm::Handle< edm::HepMCProduct > evtMC, edm::Handle< edm::SimTrackContainer > simTracks)
 
void fillHistoMap ()
 
void fillRec (std::vector< MuScleFitMuon > &muons)
 Used when running on the root tree containing preselected muon pairs. More...
 
void fillSim (edm::Handle< edm::SimTrackContainer > simTracks)
 
void fillTreeGen (const std::vector< std::pair< reco::Particle::LorentzVector, reco::Particle::LorentzVector > > &genPairs)
 
void fillTreeRec (const std::vector< std::pair< reco::Particle::LorentzVector, reco::Particle::LorentzVector > > &savedPairs)
 Used when running on the root tree containing preselected muon pairs. More...
 
 MuScleFitPlotter (std::string)
 
void writeHistoMap ()
 
virtual ~MuScleFitPlotter ()
 

Public Attributes

bool debug
 

Private Attributes

std::map< std::string, Histograms * > mapHisto
 
TFile * outputFile
 

Detailed Description

Plotter of the muon info (sim,gen,rec)

Author
C.Mariotti, S.Bolognesi - INFN Torino / T.Dorigo - INFN Padova revised S. Casasso, E. Migliore - UniTo & INFN Torino

Definition at line 27 of file MuScleFitPlotter.h.

Constructor & Destructor Documentation

◆ MuScleFitPlotter()

MuScleFitPlotter::MuScleFitPlotter ( std::string  theGenInfoRootFileName)

Definition at line 35 of file MuScleFitPlotter.cc.

References fillHistoMap(), and outputFile.

35  {
36  outputFile = new TFile(theGenInfoRootFileName.c_str(), "RECREATE");
37  fillHistoMap();
38 }

◆ ~MuScleFitPlotter()

MuScleFitPlotter::~MuScleFitPlotter ( )
virtual

Definition at line 40 of file MuScleFitPlotter.cc.

References outputFile, and writeHistoMap().

40  {
41  outputFile->cd();
42  writeHistoMap();
43  outputFile->Close();
44 }

Member Function Documentation

◆ fillGen() [1/2]

void MuScleFitPlotter::fillGen ( const reco::GenParticleCollection genParticles,
bool  PATmuons = false 
)

Definition at line 48 of file MuScleFitPlotter.cc.

References funct::abs(), gather_cfg::cout, AJJGenJetFilter_cfi::genParticles, mapHisto, MuScleFit_cfi::PATmuons, EgammaValidation_cff::pdgId, and mps_update::status.

48  {
49  // bool prova = false;
50  //Loop on generated particles
51  std::pair<reco::Particle::LorentzVector, reco::Particle::LorentzVector> muFromRes;
53 
54  int mothersFound[] = {0, 0, 0, 0, 0, 0};
55 
56  for (reco::GenParticleCollection::const_iterator mcIter = genParticles.begin(); mcIter != genParticles.end();
57  ++mcIter) {
58  int status = mcIter->status();
59  int pdgId = std::abs(mcIter->pdgId());
60  //Check if it's a resonance
61  if (status == 2 &&
62  (pdgId == 23 || pdgId == 443 || pdgId == 100443 || pdgId == 553 || pdgId == 100553 || pdgId == 200553)) {
63  genRes = mcIter->p4();
64  // std::cout << "mother's mother = " << mcIter->mother()->pdgId() << std::endl;
65  if (pdgId == 23)
66  mapHisto["hGenResZ"]->Fill(genRes);
67  else if (pdgId == 443 || pdgId == 100443)
68  mapHisto["hGenResJPsi"]->Fill(genRes);
69  else if (pdgId == 553 || pdgId == 100553 || pdgId == 200553)
70  mapHisto["hGenResUpsilon1S"]->Fill(genRes);
71  }
72  //Check if it's a muon from a resonance
73  if (status == 1 && pdgId == 13 && !PATmuons) {
74  int momPdgId = std::abs(mcIter->mother()->pdgId());
75  if (momPdgId == 23 || momPdgId == 443 || momPdgId == 100443 || momPdgId == 553 || momPdgId == 100553 ||
76  momPdgId == 200553) {
77  if (momPdgId == 23)
78  mothersFound[0] = 1;
79  if (momPdgId == 443 || momPdgId == 100443)
80  mothersFound[5] = 1;
81  if (momPdgId == 553 || momPdgId == 100553 || momPdgId == 200553)
82  mothersFound[3] = 1;
83  mapHisto["hGenMu"]->Fill(mcIter->p4());
84  std::cout << "genmu " << mcIter->p4() << std::endl;
85  if (mcIter->charge() > 0) {
86  muFromRes.first = mcIter->p4();
87  // prova = true;
88  } else
89  muFromRes.second = mcIter->p4();
90  }
91  } //if PATmuons you don't have the info of the mother !!! Here I assume is a JPsi
92  if (status == 1 && pdgId == 13 && PATmuons) {
93  mothersFound[5] = 1;
94  mapHisto["hGenMu"]->Fill(mcIter->p4());
95  std::cout << "genmu " << mcIter->p4() << std::endl;
96  if (mcIter->charge() > 0) {
97  muFromRes.first = mcIter->p4();
98  // prova = true;
99  } else
100  muFromRes.second = mcIter->p4();
101  }
102  }
103  // if(!prova)
104  // std::cout<<"hgenmumu not found"<<std::endl;
105 
106  if (mothersFound[0] == 1) {
107  mapHisto["hGenMuMuZ"]->Fill(muFromRes.first + muFromRes.second);
108  mapHisto["hGenResVSMuZ"]->Fill(muFromRes.first, genRes, 1);
109  mapHisto["hGenResVSMuZ"]->Fill(muFromRes.second, genRes, -1);
110  }
111  if (mothersFound[3] == 1) {
112  mapHisto["hGenMuMuUpsilon1S"]->Fill(muFromRes.first + muFromRes.second);
113  mapHisto["hGenResVSMuUpsilon1S"]->Fill(muFromRes.first, genRes, 1);
114  mapHisto["hGenResVSMuUpsilon1S"]->Fill(muFromRes.second, genRes, -1);
115  }
116  if (mothersFound[5] == 1) {
117  mapHisto["hGenMuMuJPsi"]->Fill(muFromRes.first + muFromRes.second);
118  mapHisto["hGenResVSMuJPsi"]->Fill(muFromRes.first, genRes, 1);
119  mapHisto["hGenResVSMuJPsi"]->Fill(muFromRes.second, genRes, -1);
120  }
121 
122  mapHisto["hGenResVsSelf"]->Fill(genRes, genRes, 1);
123 }
std::map< std::string, Histograms * > mapHisto
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
math::XYZTLorentzVector LorentzVector
Lorentz vector.
Definition: Particle.h:21

◆ fillGen() [2/2]

void MuScleFitPlotter::fillGen ( const edm::HepMCProduct evtMC,
bool  sherpaFlag_ 
)

Definition at line 127 of file MuScleFitPlotter.cc.

References funct::abs(), edm::HepMCProduct::GetEvent(), mapHisto, EgammaValidation_cff::pdgId, and mps_update::status.

127  {
128  //Loop on generated particles
129  const HepMC::GenEvent* Evt = evtMC.GetEvent();
130  std::pair<reco::Particle::LorentzVector, reco::Particle::LorentzVector> muFromRes;
132 
133  int mothersFound[] = {0, 0, 0, 0, 0, 0};
134 
135  if (sherpaFlag_) {
136  for (HepMC::GenEvent::particle_const_iterator part = Evt->particles_begin(); part != Evt->particles_end(); part++) {
137  if (std::abs((*part)->pdg_id()) == 13 && (*part)->status() == 1) { //looks for muon in the final state
138  bool fromRes = false;
139  for (HepMC::GenVertex::particle_iterator mother = (*part)->production_vertex()->particles_begin(
140  HepMC::ancestors); //loops on the mother of the final state muons
141  mother != (*part)->production_vertex()->particles_end(HepMC::ancestors);
142  ++mother) {
143  unsigned int motherPdgId = (*mother)->pdg_id();
144  if (motherPdgId == 13 && (*mother)->status() == 3)
145  fromRes = true;
146  }
147  if (fromRes) {
148  if ((*part)->pdg_id() == 13) {
149  muFromRes.first = (lorentzVector(
150  (*part)->momentum().px(), (*part)->momentum().py(), (*part)->momentum().pz(), (*part)->momentum().e()));
151  } else if ((*part)->pdg_id() == -13) {
152  muFromRes.second = (lorentzVector(
153  (*part)->momentum().px(), (*part)->momentum().py(), (*part)->momentum().pz(), (*part)->momentum().e()));
154  }
155  }
156  }
157  }
158  mapHisto["hGenResZ"]->Fill(muFromRes.first + muFromRes.second);
159  } else {
160  for (HepMC::GenEvent::particle_const_iterator part = Evt->particles_begin(); part != Evt->particles_end(); part++) {
161  int status = (*part)->status();
162  int pdgId = std::abs((*part)->pdg_id());
163  //std::cout<<"PDG ID "<< (*part)->pdg_id() <<" status "<< (*part)->status()
164  //<<" pt "<<(*part)->momentum().perp()<< " eta "<<(*part)->momentum().eta()<<std::endl ;
165  //Check if it's a resonance
166  // For sherpa the resonance is not saved. The muons from the resonance can be identified
167  // by having as mother a muon of status 3.
168 
169  if (pdgId == 13 && status == 1) {
170  if (status == 2 &&
171  (pdgId == 23 || pdgId == 443 || pdgId == 100443 || pdgId == 553 || pdgId == 100553 || pdgId == 200553)) {
173  (*part)->momentum().px(), (*part)->momentum().py(), (*part)->momentum().pz(), (*part)->momentum().e());
174 
175  if (pdgId == 23)
176  mapHisto["hGenResZ"]->Fill(genRes);
177  if (pdgId == 443)
178  mapHisto["hGenResJPsi"]->Fill(genRes);
179  if (pdgId == 553) {
180  // std::cout << "genRes mass = " << CLHEP::HepLorentzVector(genRes.x(),genRes.y(),genRes.z(),genRes.t()).m() << std::endl;
181  mapHisto["hGenResUpsilon1S"]->Fill(genRes);
182  }
183  }
184 
185  //Check if it's a muon from a resonance
186  if (pdgId == 13 && status == 1) {
187  bool fromRes = false;
188  for (HepMC::GenVertex::particle_iterator mother =
189  (*part)->production_vertex()->particles_begin(HepMC::ancestors);
190  mother != (*part)->production_vertex()->particles_end(HepMC::ancestors);
191  ++mother) {
192  int motherPdgId = (*mother)->pdg_id();
193  if (motherPdgId == 23 || motherPdgId == 443 || motherPdgId == 100443 || motherPdgId == 553 ||
194  motherPdgId == 100553 || motherPdgId == 200553) {
195  fromRes = true;
196  if (motherPdgId == 23)
197  mothersFound[0] = 1;
198  if (motherPdgId == 443)
199  mothersFound[3] = 1;
200  if (motherPdgId == 553)
201  mothersFound[5] = 1;
202  }
203  }
204 
205  if (fromRes) {
206  mapHisto["hGenMu"]->Fill(reco::Particle::LorentzVector(
207  (*part)->momentum().px(), (*part)->momentum().py(), (*part)->momentum().pz(), (*part)->momentum().e()));
208  mapHisto["hGenMuVSEta"]->Fill(reco::Particle::LorentzVector(
209  (*part)->momentum().px(), (*part)->momentum().py(), (*part)->momentum().pz(), (*part)->momentum().e()));
210  if ((*part)->pdg_id() == -13)
211  muFromRes.first = (reco::Particle::LorentzVector((*part)->momentum().px(),
212  (*part)->momentum().py(),
213  (*part)->momentum().pz(),
214  (*part)->momentum().e()));
215  else
216  muFromRes.second = (reco::Particle::LorentzVector((*part)->momentum().px(),
217  (*part)->momentum().py(),
218  (*part)->momentum().pz(),
219  (*part)->momentum().e()));
220  }
221  }
222  }
223  }
224  }
225  if (mothersFound[0] == 1) {
226  mapHisto["hGenMuMuZ"]->Fill(muFromRes.first + muFromRes.second);
227  mapHisto["hGenResVSMuZ"]->Fill(muFromRes.first, genRes, 1);
228  mapHisto["hGenResVSMuZ"]->Fill(muFromRes.second, genRes, -1);
229  }
230  if (mothersFound[3] == 1) {
231  mapHisto["hGenMuMuUpsilon1S"]->Fill(muFromRes.first + muFromRes.second);
232  mapHisto["hGenResVSMuUpsilon1S"]->Fill(muFromRes.first, genRes, 1);
233  mapHisto["hGenResVSMuUpsilon1S"]->Fill(muFromRes.second, genRes, -1);
234  }
235  if (mothersFound[5] == 1) {
236  mapHisto["hGenMuMuJPsi"]->Fill(muFromRes.first + muFromRes.second);
237  mapHisto["hGenResVSMuJPsi"]->Fill(muFromRes.first, genRes, 1);
238  mapHisto["hGenResVSMuJPsi"]->Fill(muFromRes.second, genRes, -1);
239  }
240  mapHisto["hGenResVsSelf"]->Fill(genRes, genRes, 1);
241 }
std::map< std::string, Histograms * > mapHisto
reco::Particle::LorentzVector lorentzVector
Definition: GenMuonPair.h:9
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
const HepMC::GenEvent * GetEvent() const
Definition: HepMCProduct.h:37
part
Definition: HCALResponse.h:20
math::XYZTLorentzVector LorentzVector
Lorentz vector.
Definition: Particle.h:21

◆ fillGenSim()

void MuScleFitPlotter::fillGenSim ( edm::Handle< edm::HepMCProduct evtMC,
edm::Handle< edm::SimTrackContainer simTracks 
)

Definition at line 290 of file MuScleFitPlotter.cc.

References MuScleFitUtils::findSimMuFromRes(), mapHisto, and TrackCandidateProducer_cfi::simTracks.

290  {
291  std::pair<reco::Particle::LorentzVector, reco::Particle::LorentzVector> simMuFromRes =
293  //Fill resonance info
294  reco::Particle::LorentzVector rightSimRes = (simMuFromRes.first) + (simMuFromRes.second);
295  mapHisto["hSimRightRes"]->Fill(rightSimRes);
296  /*if ((std::abs(simMuFromRes.first.Eta())<2.5 && std::abs(simMuFromRes.second.Eta())<2.5)
297  && simMuFromRes.first.Pt()>2.5 && simMuFromRes.second.Pt()>2.5) {
298  }*/
299 }
std::map< std::string, Histograms * > mapHisto
static std::pair< lorentzVector, lorentzVector > findSimMuFromRes(const edm::Handle< edm::HepMCProduct > &evtMC, const edm::Handle< edm::SimTrackContainer > &simTracks)
math::XYZTLorentzVector LorentzVector
Lorentz vector.
Definition: Particle.h:21

◆ fillHistoMap()

void MuScleFitPlotter::fillHistoMap ( )

Definition at line 378 of file MuScleFitPlotter.cc.

References mapHisto.

Referenced by MuScleFitPlotter().

378  {
379  // Generated Z and muons
380  // ---------------------
381  mapHisto["hGenResJPsi"] = new HParticle("hGenResJPsi", 3., 3.1);
382  mapHisto["hGenResUpsilon1S"] = new HParticle("hGenResUpsilon1S", 9., 11.);
383  mapHisto["hGenResZ"] = new HParticle("hGenResZ", 60., 120.);
384  mapHisto["hGenMu"] = new HParticle("hGenMu");
385  mapHisto["hGenMuVSEta"] = new HPartVSEta("hGenMuVSEta");
386 
387  mapHisto["hGenMuMuJPsi"] = new HParticle("hGenMuMuJPsi", 3., 3.1);
388  mapHisto["hGenResVSMuJPsi"] = new HMassVSPart("hGenResVSMuJPsi", 3., 3.1);
389  mapHisto["hGenMuMuUpsilon1S"] = new HParticle("hGenMuMuUpsilon1S", 9., 11.);
390  mapHisto["hGenResVSMuUpsilon1S"] = new HMassVSPart("hGenResVSMuUpsilon1S", 9., 11.);
391  mapHisto["hGenMuMuZ"] = new HParticle("hGenMuMuZ", 60., 120.);
392  mapHisto["hGenResVSMuZ"] = new HMassVSPart("hGenResVSMuZ", 60., 120.);
393 
394  mapHisto["hGenResVsSelf"] = new HMassVSPart("hGenResVsSelf");
395 
396  // Simulated resonance and muons
397  // -----------------------------
398  mapHisto["hSimMu"] = new HParticle("hSimMu");
399 
400  mapHisto["hSimMuPMuM"] = new HParticle("hSimMuPMuM");
401 
402  mapHisto["hSimBestMu"] = new HParticle("hSimBestMu");
403  mapHisto["hSimBestRes"] = new HParticle("hSimBestRes");
404  mapHisto["hSimBestResVSMu"] = new HMassVSPart("hSimBestResVSMu");
405 
406  mapHisto["hSimRightRes"] = new HParticle("hSimRightZ");
407 
408  // Reconstructed resonance and muons
409  // -----------------------------
410  mapHisto["hRecMu"] = new HParticle("hRecMu");
411  mapHisto["hRecMuVSEta"] = new HPartVSEta("hRecMuVSEta");
412  mapHisto["hRecMuPMuM"] = new HParticle("hRecMuPMuM");
413 }
std::map< std::string, Histograms * > mapHisto

◆ fillRec()

void MuScleFitPlotter::fillRec ( std::vector< MuScleFitMuon > &  muons)

Used when running on the root tree containing preselected muon pairs.

Definition at line 319 of file MuScleFitPlotter.cc.

References mapHisto, and DiMuonV_cfg::muons.

319  {
320  for (std::vector<MuScleFitMuon>::const_iterator mu1 = muons.begin(); mu1 != muons.end(); mu1++) {
321  mapHisto["hRecMu"]->Fill(mu1->p4());
322  mapHisto["hRecMuVSEta"]->Fill(mu1->p4());
323  for (std::vector<MuScleFitMuon>::const_iterator mu2 = muons.begin(); mu2 != muons.end(); mu2++) {
324  if (mu1->charge() < 0 || mu2->charge() > 0)
325  continue;
326  reco::Particle::LorentzVector Res(mu1->p4() + mu2->p4());
327  mapHisto["hRecMuPMuM"]->Fill(Res);
328  }
329  }
330  mapHisto["hRecMu"]->Fill(muons.size());
331 }
std::map< std::string, Histograms * > mapHisto
muons
the two sets of parameters below are mutually exclusive, depending if RECO or ALCARECO is used the us...
Definition: DiMuonV_cfg.py:214
math::XYZTLorentzVector LorentzVector
Lorentz vector.
Definition: Particle.h:21

◆ fillSim()

void MuScleFitPlotter::fillSim ( edm::Handle< edm::SimTrackContainer simTracks)

Definition at line 245 of file MuScleFitPlotter.cc.

References funct::abs(), MuScleFitUtils::findBestSimuRes(), createfilelist::int, mapHisto, cscDigiValidation_cfi::simTrack, TrackCandidateProducer_cfi::simTracks, and beamSpotPI::Z.

245  {
246  std::vector<SimTrack> simMuons;
247 
248  //Loop on simulated tracks
249  for (edm::SimTrackContainer::const_iterator simTrack = simTracks->begin(); simTrack != simTracks->end(); ++simTrack) {
250  // Select the muons from all the simulated tracks
251  if (std::abs((*simTrack).type()) == 13) {
252  simMuons.push_back(*simTrack);
253  mapHisto["hSimMu"]->Fill((*simTrack).momentum());
254  }
255  }
256  mapHisto["hSimMu"]->Fill(simMuons.size());
257 
258  // Recombine all the possible Z from simulated muons
259  if (simMuons.size() >= 2) {
260  for (std::vector<SimTrack>::const_iterator imu = simMuons.begin(); imu != simMuons.end(); ++imu) {
261  for (std::vector<SimTrack>::const_iterator imu2 = imu + 1; imu2 != simMuons.end(); ++imu2) {
262  if (imu == imu2)
263  continue;
264 
265  // Try all the pairs with opposite charge
266  if (((*imu).charge() * (*imu2).charge()) < 0) {
267  reco::Particle::LorentzVector Z = (*imu).momentum() + (*imu2).momentum();
268  mapHisto["hSimMuPMuM"]->Fill(Z);
269  }
270  }
271  }
272 
273  // Plots for the best possible simulated resonance
274  std::pair<SimTrack, SimTrack> simMuFromBestRes = MuScleFitUtils::findBestSimuRes(simMuons);
275  reco::Particle::LorentzVector bestSimZ = (simMuFromBestRes.first).momentum() + (simMuFromBestRes.second).momentum();
276  mapHisto["hSimBestRes"]->Fill(bestSimZ);
277  if (std::abs(simMuFromBestRes.first.momentum().eta()) < 2.5 &&
278  std::abs(simMuFromBestRes.second.momentum().eta()) < 2.5 && simMuFromBestRes.first.momentum().pt() > 2.5 &&
279  simMuFromBestRes.second.momentum().pt() > 2.5) {
280  mapHisto["hSimBestResVSMu"]->Fill(
281  simMuFromBestRes.first.momentum(), bestSimZ, int(simMuFromBestRes.first.charge()));
282  mapHisto["hSimBestResVSMu"]->Fill(
283  simMuFromBestRes.second.momentum(), bestSimZ, int(simMuFromBestRes.second.charge()));
284  }
285  }
286 }
std::map< std::string, Histograms * > mapHisto
static std::pair< SimTrack, SimTrack > findBestSimuRes(const std::vector< SimTrack > &simMuons)
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
math::XYZTLorentzVector LorentzVector
Lorentz vector.
Definition: Particle.h:21

◆ fillTreeGen()

void MuScleFitPlotter::fillTreeGen ( const std::vector< std::pair< reco::Particle::LorentzVector, reco::Particle::LorentzVector > > &  genPairs)

Used when running on the root tree and there is genInfo.
ATTENTION: since we do not have any id information when reading from the root tree, we always fill the Z histograms by default.

Definition at line 354 of file MuScleFitPlotter.cc.

References mapHisto.

Referenced by MuScleFit::selectMuons().

355  {
356  std::vector<std::pair<reco::Particle::LorentzVector, reco::Particle::LorentzVector> >::const_iterator genPair =
357  genPairs.begin();
358  for (; genPair != genPairs.end(); ++genPair) {
359  reco::Particle::LorentzVector genRes(genPair->first + genPair->second);
360  mapHisto["hGenResZ"]->Fill(genRes);
361  mapHisto["hGenMu"]->Fill(genPair->first);
362  mapHisto["hGenMuVSEta"]->Fill(genPair->first);
363  mapHisto["hGenMuMuZ"]->Fill(genRes);
364  mapHisto["hGenResVSMuZ"]->Fill(genPair->first, genRes, 1);
365  mapHisto["hGenResVSMuZ"]->Fill(genPair->second, genRes, -1);
366  mapHisto["hGenMuMuUpsilon1S"]->Fill(genRes);
367  mapHisto["hGenResVSMuUpsilon1S"]->Fill(genPair->first, genRes, 1);
368  mapHisto["hGenResVSMuUpsilon1S"]->Fill(genPair->second, genRes, -1);
369  mapHisto["hGenMuMuJPsi"]->Fill(genRes);
370  mapHisto["hGenResVSMuJPsi"]->Fill(genPair->first, genRes, 1);
371  mapHisto["hGenResVSMuJPsi"]->Fill(genPair->second, genRes, -1);
372  mapHisto["hGenResVsSelf"]->Fill(genRes, genRes, 1);
373  }
374 }
std::map< std::string, Histograms * > mapHisto
math::XYZTLorentzVector LorentzVector
Lorentz vector.
Definition: Particle.h:21

◆ fillTreeRec()

void MuScleFitPlotter::fillTreeRec ( const std::vector< std::pair< reco::Particle::LorentzVector, reco::Particle::LorentzVector > > &  savedPairs)

Used when running on the root tree containing preselected muon pairs.

Definition at line 334 of file MuScleFitPlotter.cc.

References mapHisto.

Referenced by MuScleFit::selectMuons().

335  {
336  std::vector<std::pair<reco::Particle::LorentzVector, reco::Particle::LorentzVector> >::const_iterator muonPair =
337  savedPairs.begin();
338  for (; muonPair != savedPairs.end(); ++muonPair) {
339  mapHisto["hRecMu"]->Fill(muonPair->first);
340  mapHisto["hRecMuVSEta"]->Fill(muonPair->first);
341  mapHisto["hRecMu"]->Fill(muonPair->second);
342  mapHisto["hRecMuVSEta"]->Fill(muonPair->second);
343  reco::Particle::LorentzVector Res(muonPair->first + muonPair->second);
344  mapHisto["hRecMuPMuM"]->Fill(Res);
345  mapHisto["hRecMu"]->Fill(savedPairs.size());
346  }
347 }
std::map< std::string, Histograms * > mapHisto
math::XYZTLorentzVector LorentzVector
Lorentz vector.
Definition: Particle.h:21

◆ writeHistoMap()

void MuScleFitPlotter::writeHistoMap ( )

Definition at line 417 of file MuScleFitPlotter.cc.

References timingPdfMaker::histo, mapHisto, and outputFile.

Referenced by ~MuScleFitPlotter().

417  {
418  outputFile->cd();
419  for (std::map<std::string, Histograms*>::const_iterator histo = mapHisto.begin(); histo != mapHisto.end(); histo++) {
420  (*histo).second->Write();
421  }
422 }
std::map< std::string, Histograms * > mapHisto

Member Data Documentation

◆ debug

bool MuScleFitPlotter::debug

◆ mapHisto

std::map<std::string, Histograms*> MuScleFitPlotter::mapHisto
private

◆ outputFile

TFile* MuScleFitPlotter::outputFile
private

Definition at line 62 of file MuScleFitPlotter.h.

Referenced by MuScleFitPlotter(), writeHistoMap(), and ~MuScleFitPlotter().