CMS 3D CMS Logo

ZMuMuAnalyzer_cynematics.cc
Go to the documentation of this file.
1 /* \class ZMuMuAnalyzer_cynematics
2  *
3  * Z->mu+m- standard analysis for cross section
4  * measurements. Take as input the output of the
5  * standard EWK skim: zToMuMu
6  *
7  * Produces mass spectra and other histograms for
8  * the samples in input:
9  *
10  * + Z -> mu+mu-, both muons are "global" muons
11  * + Z -> mu+mu-, one muons is "global" muons, one unmatched tracks
12  * + Z -> mu+mu-, one muons is "global" muons, one unmatched stand-alone muon
13  *
14  *
15  * \author Michele de Gruttola,
16  * \modified by Davide Piccolo, INFN Naples to include gerarchyc selection of Z and histos as a finction of eta pt phi
17  *
18  *
19  *
20  */
37 #include "TFile.h"
38 #include "TH1.h"
39 #include "TH2.h"
40 #include <iostream>
41 #include <iterator>
42 #include <sstream>
43 using namespace edm;
44 using namespace std;
45 using namespace reco;
46 
48 
50 public:
52 private:
53  void analyze(const edm::Event& event, const edm::EventSetup& setup) override;
54  bool isContained(const Candidate &, const Candidate &);
55  void endJob() override;
56 
67  double isocut_, etacut_, ptcut_,ptSTAcut_, minZmass_, maxZmass_;
68  TH1D * h_zMuMu_numberOfCand, * h_zMuMu_numberOfCand_passed, * h_zMuMu_numberOfCand_ptpassed,* h_zMuMu_numberOfCand_etapassed,
69  * h_zMuMu_numberOfCand_masspassed, * h_zMuMu_numberOfCand_isopassed, * h_zMuMu_numberOfCand_ptetapassed,
70  * h_zMuMu_numberOfCand_ptetamasspassed, * h_zMuMu_mass_, * h_zMuSingleTrack_mass_, * h_zMuSingleStandAlone_mass_,
71  * h_zMuSingleStandAloneOverlap_mass_, * h_zMuMuMatched_mass_, * h_zMuSingleTrackMatched_mass_,
72  * h_zMuSingleStandAloneMatched_mass_,
73  * h_zMuSingleStandAloneOverlapMatched_mass_;
74 
75  TH1D * h_zMuSta_numberOfCand,* h_zMuSta_numberOfCand_passed,* h_zMuSta_MCmatched_numberOfCand_passed,
76  * h_zMuSta_numberOfCand_notcontained,
77  * h_zMuTrack_numberOfCand, * h_zMuTrack_numberOfCand_notcontained, * h_zMuTrack_numberOfCand_passed,
78  * h_zMuTrack_MCmatched_numberOfCand_passed;
79  TH2D * h_OneSta_mass;
80 
81  double etamin, etamax, phimin, phimax, ptmin, ptmax;
82  int numberOfIntervals; // number of intervals in which to divide cynematic variables
83  double binEta,binPhi, binPt;
84  vector<TH1D *> hmumu_eta, hmusta_eta, hmutrack_eta;
85  vector<TH1D *> hmumu_phi, hmusta_phi, hmutrack_phi;
86  vector<TH1D *> hmumu_pt, hmusta_pt, hmutrack_pt;
87 
88 };
89 
91  zMuMuToken_( consumes< CandidateCollection >( pset.getParameter<InputTag>( "zMuMu" ) ) ),
92  zMuTrackToken_( consumes< CandidateCollection >( pset.getParameter<InputTag>( "zMuTrack" ) ) ),
93  zMuStandAloneToken_( consumes< CandidateCollection >( pset.getParameter<InputTag>( "zMuStandAlone" ) ) ),
94  muIsoToken_( consumes< IsolationCollection >( pset.getParameter<InputTag>( "muIso" ) ) ),
95  trackIsoToken_( consumes< IsolationCollection >( pset.getParameter<InputTag>( "trackIso" ) ) ),
96  standAloneIsoToken_( consumes< IsolationCollection >( pset.getParameter<InputTag>( "standAloneIso" ) ) ),
97  zMuMuMapToken_( mayConsume< CandMatchMap >( pset.getParameter<InputTag>( "zMuMuMap" ) ) ),
98  zMuTrackMapToken_( mayConsume< CandMatchMap >( pset.getParameter<InputTag>( "zMuTrackMap" ) ) ),
99  zMuStandAloneMapToken_( mayConsume< CandMatchMap >( pset.getParameter<InputTag>( "zMuStandAloneMap" ) ) ),
100  isocut_( pset.getParameter<double>( "isocut" ) ),
101  etacut_( pset.getParameter<double>( "etacut" ) ),
102  ptcut_( pset.getParameter<double>( "ptcut" ) ),
103  ptSTAcut_( pset.getParameter<double>( "ptSTAcut" ) ),
104  minZmass_( pset.getParameter<double>( "minZmass" )),
105  maxZmass_( pset.getParameter<double>( "maxZmass" )) {
106 
108  h_zMuMu_numberOfCand = fs->make<TH1D>("ZMuMunumberOfCand","number of ZMuMu cand",10, -.5, 9.5);
109  h_zMuMu_numberOfCand_passed = fs->make<TH1D>("ZMuMunumberOfCandpassed","number of ZMuMu cand selected",10, -.5, 9.5);
110  h_zMuMu_numberOfCand_ptpassed = fs->make<TH1D>("ZMuMunumberOfCandptpassed","number of ZMuMu cand after pt cut selected",10, -.5, 9.5);
111  h_zMuMu_numberOfCand_etapassed = fs->make<TH1D>("ZMuMunumberOfCandetapassed","number of ZMuMu cand after eta cut selected",10, -.5, 9.5);
112  h_zMuMu_numberOfCand_masspassed = fs->make<TH1D>("ZMuMunumberOfCandmasspassed","number of ZMuMu cand after mass cut selected",10, -.5, 9.5);
113  h_zMuMu_numberOfCand_isopassed = fs->make<TH1D>("ZMuMunumberOfCandisopassed","number of ZMuMu cand after iso cut selected",10, -.5, 9.5);
114  h_zMuMu_numberOfCand_ptetapassed = fs->make<TH1D>("ZMuMunumberOfCandptetapassed","number of ZMuMu cand after pt & eta cut selected",10, -.5, 9.5);
115  h_zMuMu_numberOfCand_ptetamasspassed = fs->make<TH1D>("ZMuMunumberOfCandptetamaspassed","number of ZMuMu cand after pt & eta & mass cut selected",10, -.5, 9.5);
116 
117 
118  h_zMuMu_mass_ = fs->make<TH1D>( "ZMuMumass", "ZMuMu mass(GeV)", 200, 0., 200. );
119  h_zMuSingleTrack_mass_ = fs->make<TH1D>( "ZMuSingleTrackmass", "ZMuSingleTrack mass(GeV)", 100, 0., 200. );
120  h_zMuSingleStandAlone_mass_ = fs->make<TH1D>( "ZMuSingleStandAlonemass", "ZMuSingleStandAlone mass(GeV)", 50, 0., 200. );
121  h_zMuSingleStandAloneOverlap_mass_ = fs->make<TH1D>( "ZMuSingleStandAloneOverlapmass", "ZMuSingleStandAloneOverlap mass(GeV)", 50, 0., 200. );
122 
123 
124  h_zMuMuMatched_mass_ = fs->make<TH1D>( "ZMuMuMatchedmass", "ZMuMu Matched mass(GeV)", 200, 0., 200. );
125  h_zMuSingleTrackMatched_mass_ = fs->make<TH1D>( "ZMuSingleTrackmassMatched", "ZMuSingleTrackMatched mass(GeV)", 100, 0., 200. );
126  h_zMuSingleStandAloneMatched_mass_ = fs->make<TH1D>( "ZMuSingleStandAlonemassMatched", "ZMuSingleStandAloneMatched mass(GeV)", 50, 0., 200. );
127  h_zMuSingleStandAloneOverlapMatched_mass_ = fs->make<TH1D>( "ZMuSingleStandAloneOverlapmassMatched", "ZMuSingleStandAloneMatched Overlap mass(GeV)", 50, 0., 200. );
128 
129  h_zMuSta_numberOfCand = fs->make<TH1D>("ZMuStanumberOfCand","number of ZMuSta cand (if ZMuMu not selected)",10, -.5, 9.5);
130  h_OneSta_mass = fs->make<TH2D>("ZOneMuStaMass","inv. mass of ZMuSta1 vs ZMuSta2 when one ZMuSta has been found (if ZMuMu not selected)",100, 0., 400, 100, 0., 400.);
131  h_zMuSta_numberOfCand_notcontained = fs->make<TH1D>("ZMuStanumberOfCandnotcontained","number of independent ZMuSta cand (if ZMuMu not selected)",10, -.5, 9.5);
132  h_zMuSta_numberOfCand_passed = fs->make<TH1D>("ZMuStanumberOfCandpassed","number of ZMuSta cand selected (if ZMuMu not selected)",10, -.5, 9.5);
133  h_zMuSta_MCmatched_numberOfCand_passed = fs->make<TH1D>("ZMuStaMCmatchedNumberOfCandpassed","number of ZMuSta MC matched cand selected (if ZMuMu not selected)",10, -.5, 9.5);
134  h_zMuTrack_numberOfCand = fs->make<TH1D>("ZMuTranumberOfCand","number of ZMuTrack cand (if ZMuMu and ZMuSTa not selected)",10, -.5, 9.5);
135  h_zMuTrack_numberOfCand_notcontained = fs->make<TH1D>("ZMuTranumberOfCandnotcontaind","number of indeendent ZMuTrack cand (if ZMuMu and ZMuSTa not selected)",10, -.5, 9.5);
136  h_zMuTrack_numberOfCand_passed = fs->make<TH1D>("ZMuTranumberOfCandpassed","number of ZMuTrack cand selected (if ZMuMu and ZMuSta not selected)",10, -.5, 9.5);
137  h_zMuTrack_MCmatched_numberOfCand_passed = fs->make<TH1D>("ZMuTraMCmacthedNumberOfCandpassed","number of ZMuTrack MC matched cand selected (if ZMuMu and ZMuSta not selected)",10, -.5, 9.5);
138 
139 
140  // creating histograms for each Pt, eta, phi interval
141 
142  etamin = -etacut_;
143  etamax = etacut_;
144  phimin = -3.1415;
145  phimax = 3.1415;
146  ptmin = ptcut_;
147  ptmax = 100;
148  numberOfIntervals = 8; // number of intervals in which to divide cynematic variables
152  TFileDirectory etaDirectory = fs->mkdir("etaIntervals"); // in this directory will be saved all the histos of different eta intervals
153  TFileDirectory phiDirectory = fs->mkdir("phiIntervals"); // in this directory will be saved all the histos of different phi intervals
154  TFileDirectory ptDirectory = fs->mkdir("ptIntervals"); // in this directory will be saved all the histos of different pt intervals
155 
156  // eta histograms creation
157 
158  for (int i=0;i<numberOfIntervals;i++) {
159  double range0 = etamin + i*binEta;
160  double range1= range0 + binEta;
161  char a[30], b[50];
162  sprintf(a,"zmumu_etaRange%d",i);
163  sprintf(b,"zmumu mass eta Range %f to %f",range0,range1);
164  hmumu_eta.push_back(etaDirectory.make<TH1D>(a,b,200,0.,200.));
165  char asta[30], bsta[50];
166  sprintf(asta,"zmusta_etaRange%d",i);
167  sprintf(bsta,"zmusta mass eta Range %f to %f",range0,range1);
168  hmusta_eta.push_back(etaDirectory.make<TH1D>(asta,bsta,50,0.,200.));
169  char atk[30], btk[50];
170  sprintf(atk,"zmutrack_etaRange%d",i);
171  sprintf(btk,"zmutrack mass eta Range %f to %f",range0,range1);
172  hmutrack_eta.push_back(etaDirectory.make<TH1D>(atk,btk,100,0.,200.));
173  }
174 
175  // phi histograms creation
176 
177  for (int i=0;i<numberOfIntervals;i++) {
178  double range0 = phimin + i*binPhi;
179  double range1= range0 + binPhi;
180  char a[30], b[50];
181  sprintf(a,"zmumu_phiRange%d",i);
182  sprintf(b,"zmumu mass phi Range %f to %f",range0,range1);
183  hmumu_phi.push_back(phiDirectory.make<TH1D>(a,b,200,0.,200.));
184  char asta[30], bsta[50];
185  sprintf(asta,"zmusta_phiRange%d",i);
186  sprintf(bsta,"zmusta mass phi Range %f to %f",range0,range1);
187  hmusta_phi.push_back(phiDirectory.make<TH1D>(asta,bsta,50,0.,200.));
188  char atk[30], btk[50];
189  sprintf(atk,"zmutrack_phiRange%d",i);
190  sprintf(btk,"zmutrack mass phi Range %f to %f",range0,range1);
191  hmutrack_phi.push_back(phiDirectory.make<TH1D>(atk,btk,100,0.,200.));
192  }
193 
194  // pt histograms creation
195 
196  for (int i=0;i<numberOfIntervals;i++) {
197  double range0 = ptmin + i*binPt;
198  double range1= range0 + binPt;
199  char a[30], b[50];
200  sprintf(a,"zmumu_ptRange%d",i);
201  sprintf(b,"zmumu mass pt Range %f to %f",range0,range1);
202  hmumu_pt.push_back(ptDirectory.make<TH1D>(a,b,200,0.,200.));
203  char asta[30], bsta[50];
204  sprintf(asta,"zmusta_ptRange%d",i);
205  sprintf(bsta,"zmusta mass pt Range %f to %f",range0,range1);
206  hmusta_pt.push_back(ptDirectory.make<TH1D>(asta,bsta,50,0.,200.));
207  char atk[30], btk[50];
208  sprintf(atk,"zmutrack_ptRange%d",i);
209  sprintf(btk,"zmutrack mass pt Range %f to %f",range0,range1);
210  hmutrack_pt.push_back(ptDirectory.make<TH1D>(atk,btk,100,0.,200.));
211  }
212  }
213 
216  event.getByToken(zMuMuToken_, zMuMu);
218  event.getByToken( zMuTrackToken_, zMuTrack );
219  Handle<CandidateCollection> zMuStandAlone;
220  event.getByToken( zMuStandAloneToken_, zMuStandAlone );
221 
222  unsigned int nZMuMu = zMuMu->size();
223  unsigned int nZTrackMu = zMuTrack->size();
224  unsigned int nZStandAloneMu = zMuStandAlone->size();
225  // static const double zMass = 91.1876; // PDG Z mass
226 
227  cout << "++++++++++++++++++++++++++" << endl;
228  cout << "nZMuMu = " << nZMuMu << endl;
229  cout << "nZTrackMu = " << nZTrackMu << endl;
230  cout << "nZStandAloneMu = " << nZStandAloneMu << endl;
231  cout << "++++++++++++++++++++++++++" << endl;
232 
233  // ZMuMu counters
234 
235  int ZMuMu_passed = 0;
236  int ZMuMu_ptcut_counter = 0;
237  int ZMuMu_etacut_counter = 0;
238  int ZMuMu_masscut_counter = 0;
239  int ZMuMu_isocut_counter = 0;
240  int ZMuMu_ptetacut_counter = 0;
241  int ZMuMu_ptetamasscut_counter = 0;
242  int ZMuMu_allcut_counter = 0;
243 
244  // ZMuTrack counters
245 
246  int ZMuTrack_passed = 0;
247  int ZMuTrack_notcontained = 0;
248  int ZMuTrack_MCmatched_passed = 0;
249 
250  // ZMuStandalone counters
251  int ZMuStandalone_notcontained = 0;
252  int ZMuStandalone_passed = 0;
253  int ZMuStandalone_MCmatched_passed = 0;
254 
255  Handle<CandMatchMap> zMuMuMap;
256  if( nZMuMu > 0 ) {
257  event.getByToken(zMuMuMapToken_, zMuMuMap);
258  }
259 
260  Handle<CandMatchMap> zMuTrackMap;
261  if( nZTrackMu > 0 ) {
262  event.getByToken( zMuTrackMapToken_, zMuTrackMap );
263  }
264 
265  Handle<CandMatchMap> zMuStandAloneMap;
266  if( nZStandAloneMu > 0 ) {
267  event.getByToken( zMuStandAloneMapToken_, zMuStandAloneMap );
268  }
269 
271  event.getByToken(muIsoToken_, muIso);
272  ProductID muIsoId = muIso->keyProduct().id();
274  event.getByToken(trackIsoToken_, trackIso);
275  ProductID trackIsoId = trackIso->keyProduct().id();
276 
277  Handle<IsolationCollection> standAloneIso;
278  event.getByToken(standAloneIsoToken_, standAloneIso);
279  ProductID standAloneIsoId = standAloneIso->keyProduct().id();
280 
281  if (nZMuMu > 0) {
282  // double mass = 1000000.;
283  for( unsigned int i = 0; i < nZMuMu; i++ ) {
284  bool ptcutAccept = false;
285  bool etacutAccept = false;
286  bool masscutAccept = false;
287  bool isocutAccept = false;
288  const Candidate & zmmCand = (*zMuMu)[ i ];
289  CandidateRef CandRef(zMuMu,i);
292 
293  const double iso1 = muIso->value( lep1.key() );
294  const double iso2 = muIso->value( lep2.key() );
295 
296  double m = zmmCand.mass();
297  // check single cuts
298 
299  if (lep1->pt()>ptcut_ && lep2->pt()>ptcut_) ptcutAccept = true;
300  if (fabs(lep1->eta())<etacut_ && fabs(lep2->eta())<etacut_) etacutAccept = true;
301  if (m>minZmass_ && m<maxZmass_) masscutAccept = true;
302  if (iso1 < isocut_ && iso2 <isocut_) isocutAccept = true;
303 
304 
305  if (ptcutAccept) ZMuMu_ptcut_counter++;
306  if (etacutAccept) ZMuMu_etacut_counter++;
307  if (masscutAccept) ZMuMu_masscut_counter++;
308  if (isocutAccept) ZMuMu_isocut_counter++;
309 
310  // check sequencial cuts
311 
312  if (ptcutAccept && etacutAccept) {
313  ZMuMu_ptetacut_counter++;
314  if (masscutAccept) {
315  ZMuMu_ptetamasscut_counter++;
316  if (isocutAccept) {
317  ZMuMu_passed++;}
318  }
319  }
320 
321  if (ptcutAccept && etacutAccept && masscutAccept && isocutAccept) {
322  ZMuMu_allcut_counter++;
323  h_zMuMu_mass_->Fill( m );
324 
325  // check the cynematics to fill correct histograms
326  for (int j=0;j<numberOfIntervals;j++) {
327  bool statusBinEta = false;
328  bool statusBinPhi = false;
329  bool statusBinPt = false;
330  double range0 = etamin + j*binEta;
331  double range1= range0 + binEta;
332  double range0phi = phimin + j*binPhi;
333  double range1phi= range0phi + binPhi;
334  double range0pt = ptmin + j*binPt;
335  double range1pt = range0pt + binPt;
336  // eta histograms
337  if (lep1->eta()>=range0 && lep1->eta()<range1)
338  {
339  hmumu_eta[j]->Fill(m);
340  statusBinEta = true;
341  }
342  if (lep2->eta()>=range0 && lep2->eta()<range1 && !statusBinEta){
343  hmumu_eta[j]->Fill(m); // If eta1 is in the same bin of eta2 fill just once
344  }
345  // phi histograms
346  if (lep1->phi()>=range0phi && lep1->phi()<range1phi)
347  {
348  hmumu_phi[j]->Fill(m);
349  statusBinPhi = true;
350  }
351  if (lep2->phi()>=range0phi && lep2->phi()<range1phi && !statusBinPhi){
352  hmumu_phi[j]->Fill(m); // If phi1 is in the same bin of phi2 fill just once
353  }
354  // pt histograms
355  if (lep1->pt()>=range0pt && lep1->pt()<range1pt)
356  {
357  hmumu_pt[j]->Fill(m);
358  statusBinPt = true;
359  }
360  if (lep2->pt()>=range0pt && lep2->pt()<range1pt && !statusBinPt){
361  hmumu_pt[j]->Fill(m); // If pt1 is in the same bin of pt2 fill just once
362  }
363  }
364 
365  CandMatchMap::const_iterator m0 = zMuMuMap->find(CandRef);
366  if( m0 != zMuMuMap->end()) { // the Z is matched to MC thruth
367  h_zMuMuMatched_mass_->Fill( m );
368  }
369  }
370  }
371  }
372 
373  h_zMuMu_numberOfCand->Fill(nZMuMu); // number of Z cand found per event
374  h_zMuMu_numberOfCand_passed->Fill(ZMuMu_allcut_counter); // number of Z cand after all cuts found per event
375  h_zMuMu_numberOfCand_ptpassed->Fill(ZMuMu_ptcut_counter); // number of Z cand afer pt cut found per event
376  h_zMuMu_numberOfCand_etapassed->Fill(ZMuMu_etacut_counter); // number of Z cand afer eta cut found per event
377  h_zMuMu_numberOfCand_masspassed->Fill(ZMuMu_masscut_counter); // number of Z cand afer mass cut found per event
378  h_zMuMu_numberOfCand_isopassed->Fill(ZMuMu_isocut_counter); // number of Z cand afer iso cut found per event
379  h_zMuMu_numberOfCand_ptetapassed->Fill(ZMuMu_ptetacut_counter); // number of Z cand afer pt&eta cut found per event
380  h_zMuMu_numberOfCand_ptetamasspassed->Fill(ZMuMu_ptetamasscut_counter); // number of Z cand afer pt&eta&mass cut found per event
381 
382 
383  //ZmuSingleStandAlone (check MuStandalone if MuMu has not been selected by cuts)
384  // cout << "ZMuMuanalyzer : n of zMuMu " << nZMuMu << " passed " << ZMuMu_passed << " n. of zStaMu " << nZStandAloneMu << endl;
385 
386  if (ZMuMu_passed == 0 && nZStandAloneMu>0 ) {
387  // unsigned int index = 1000;
388  for( unsigned int j = 0; j < nZStandAloneMu; j++ ) {
389  const Candidate & zsmCand = (*zMuStandAlone)[ j ];
390  bool skipZ = false;
391  for( unsigned int i = 0; i < nZMuMu; i++ ) { // chek if the ZMuSTandalone is contained in a ZMuMu
392  const Candidate & zmmCand = (*zMuMu)[ i ]; // if yes .. the event has to be skipped
393  if (isContained(zmmCand,zsmCand)) skipZ=true;
394  }
395  if (!skipZ) { // ZSMuSTandalone not contained in a ZMuMu
396  ZMuStandalone_notcontained++;
397  CandidateRef CandRef(zMuStandAlone,j);
400 
401  ProductID id1 = lep1.id();
402  ProductID id2 = lep2.id();
403  double iso1 = -1;
404  double iso2 = -1;
405 
406  if( id1 == muIsoId )
407  iso1 = muIso->value( lep1.key() );
408  else if ( id1 == standAloneIsoId )
409  iso1 = standAloneIso->value( lep1.key() );
410 
411  if( id2 == muIsoId )
412  iso2 = muIso->value( lep2.key() );
413  else if ( id2 == standAloneIsoId )
414  iso2 = standAloneIso->value( lep2.key() );
415 
416  double ms = zsmCand.mass();
417  if (lep1->pt()>ptSTAcut_ && lep2->pt()>ptSTAcut_ &&
418  fabs(lep1->eta())<etacut_ && fabs(lep2->eta())<etacut_ &&
419  ms>minZmass_ && ms<maxZmass_ && iso1<isocut_ && iso2 <isocut_) {
420  h_zMuSingleStandAlone_mass_->Fill( ms );
421  ZMuStandalone_passed++;
422  // check the cynematics to fill correct histograms
423  for (int j=0;j<numberOfIntervals;j++) {
424  double range0 = etamin + j*binEta;
425  double range1= range0 + binEta;
426  double range0phi = phimin + j*binPhi;
427  double range1phi= range0phi + binPhi;
428  double range0pt = ptmin + j*binPt;
429  double range1pt = range0pt + binPt;
430 
431  // check which muon is a standalone (standalone means that there is a reference missing.)
432  if ((lep1->get<TrackRef,reco::StandAloneMuonTag>()).isNull())
433  {
434  if (lep1->eta()>=range0 && lep1->eta()<range1) hmusta_eta[j]->Fill(ms);
435  if (lep1->phi()>=range0phi && lep1->phi()<range1phi) hmusta_phi[j]->Fill(ms);
436  if (lep1->pt()>=range0pt && lep1->pt()<range1pt) hmusta_pt[j]->Fill(ms);
437  }
438  if ((lep2->get<TrackRef,reco::StandAloneMuonTag>()).isNull())
439  {
440  if (lep2->eta()>=range0 && lep2->eta()<range1) hmusta_eta[j]->Fill(ms);
441  if (lep2->phi()>=range0phi && lep2->phi()<range1phi) hmusta_phi[j]->Fill(ms);
442  if (lep2->pt()>=range0pt && lep2->pt()<range1pt) hmusta_pt[j]->Fill(ms);
443  }
444 
445  }
446  CandMatchMap::const_iterator m0 = zMuStandAloneMap->find(CandRef);
447  if( m0 != zMuStandAloneMap->end()) {
448  ZMuStandalone_MCmatched_passed++;
450  }
451  }
452  }
453  }
454  h_zMuSta_numberOfCand->Fill(nZStandAloneMu); // number of ZMuStandalone cand found per event (no higher priority Z selected)
455  h_zMuSta_numberOfCand_notcontained->Fill(ZMuStandalone_notcontained);
456  h_zMuSta_numberOfCand_passed->Fill(ZMuStandalone_passed); // number of ZMuSTa cand after all cuts found per event (no higher prioriy Z selected)
457  h_zMuSta_MCmatched_numberOfCand_passed->Fill(ZMuStandalone_MCmatched_passed); // number of ZMuSTa MC matched cand after all cuts found per event (no higher prioriy Z selected)
458 
459  }
460 
461  //ZmuSingleTRack (check MuTrack if MuMu has not been selected)
462  if (ZMuMu_passed == 0 && ZMuStandalone_passed == 0 && nZTrackMu>0) {
463  for( unsigned int j = 0; j < nZTrackMu; j++ ) {
464  const Candidate & ztmCand = (*zMuTrack)[ j ];
465  bool skipZ = false;
466  for( unsigned int i = 0; i < nZMuMu; i++ ) { // chek if the ZMuTrack is contained in a ZMuMu
467  const Candidate & zmmCand = (*zMuMu)[ i ]; // if yes .. the event has to be skipped
468  if (isContained(zmmCand,ztmCand)) skipZ=true;
469  }
470  if (!skipZ) {
471  ZMuTrack_notcontained++;
472  CandidateRef CandRef(zMuTrack,j);
475 
476  ProductID id1 = lep1.id();
477  ProductID id2 = lep2.id();
478  double iso1 = -1;
479  double iso2 = -1;
480 
481  if( id1 == muIsoId )
482  iso1 = muIso->value( lep1.key() );
483  else if ( id1 == trackIsoId )
484  iso1 = trackIso->value( lep1.key() );
485 
486  if( id2 == muIsoId )
487  iso2 = muIso->value( lep2.key() );
488  else if ( id2 == trackIsoId )
489  iso2 = trackIso->value( lep2.key() );
490 
491  double mt = ztmCand.mass();
492  if (lep1->pt()>ptcut_ && lep2->pt()>ptcut_ &&
493  fabs(lep1->eta())<etacut_ && fabs(lep2->eta())<etacut_ &&
494  mt>minZmass_ && mt<maxZmass_ && iso1<isocut_ && iso2 <isocut_) {
495  h_zMuSingleTrack_mass_->Fill( mt );
496  ZMuTrack_passed++;
497 
498  // check the cynematics to fill correct histograms
499  for (int j=0;j<numberOfIntervals;j++) {
500  double range0 = etamin + j*binEta;
501  double range1= range0 + binEta;
502  double range0phi = phimin + j*binPhi;
503  double range1phi= range0phi + binPhi;
504  double range0pt = ptmin + j*binPt;
505  double range1pt = range0pt + binPt;
506 
507  // check which muon is a track only (track only means that there is a reference missing.)
508  if ((lep1->get<TrackRef,reco::StandAloneMuonTag>()).isNull())
509  {
510  if (lep1->eta()>=range0 && lep1->eta()<range1) hmutrack_eta[j]->Fill(mt);
511  if (lep1->phi()>=range0phi && lep1->phi()<range1phi) hmutrack_phi[j]->Fill(mt);
512  if (lep1->pt()>=range0pt && lep1->pt()<range1pt) hmutrack_pt[j]->Fill(mt);
513  }
514  if ((lep2->get<TrackRef,reco::StandAloneMuonTag>()).isNull())
515  {
516  if (lep2->eta()>=range0 && lep2->eta()<range1) hmutrack_eta[j]->Fill(mt);
517  if (lep2->phi()>=range0phi && lep2->phi()<range1phi) hmutrack_phi[j]->Fill(mt);
518  if (lep2->pt()>=range0pt && lep2->pt()<range1pt) hmutrack_pt[j]->Fill(mt);
519  }
520  }
521  CandMatchMap::const_iterator m0 = zMuTrackMap->find(CandRef);
522  if( m0 != zMuTrackMap->end()) {
523  ZMuTrack_MCmatched_passed++;
524  h_zMuSingleTrackMatched_mass_->Fill( mt );
525  }
526  }
527  }
528  }
529  h_zMuTrack_numberOfCand->Fill(nZTrackMu); // number of ZMuTrack cand found per event (no higher priority Z selected)
530  h_zMuTrack_numberOfCand_notcontained->Fill(ZMuTrack_notcontained); // number of ZMuTrack cand not cntained in ZMuMu (no higher priority Z selected)
531 
532  h_zMuTrack_numberOfCand_passed->Fill(ZMuTrack_passed); // number of ZMuTrack cand after all cuts found per event (no higher priority Z selected)
533 
534  h_zMuTrack_MCmatched_numberOfCand_passed->Fill(ZMuTrack_MCmatched_passed);
535 
536  }
537 }
538 
540 {
541  // check if a candidate obj2 is different from obj1 (assume that obj1 is a ZMuMu and obj2 is any other type)
542  // (for example a Z can be done with two global muons, or with a global muon plus a standalone muon.
543  // if the standalone muon is part of the second global muon in fact this is the same Z)
544 
545  const int maxd = 10;
546  const Candidate * daughters1[maxd];
547  const Candidate * daughters2[maxd];
548  TrackRef trackerTrack1[maxd];
549  TrackRef stAloneTrack1[maxd];
550  TrackRef globalTrack1[maxd];
551  TrackRef trackerTrack2[maxd];
552  TrackRef stAloneTrack2[maxd];
553  TrackRef globalTrack2[maxd];
554  bool flag;
555  unsigned int nd1 = obj1.numberOfDaughters();
556  unsigned int nd2 = obj2.numberOfDaughters();
557  unsigned int matched=0;
558 
559  for( unsigned int i = 0; i < nd1; ++ i ) {
560  daughters1[i] = obj1.daughter( i );
561  trackerTrack1[i] = daughters1[i]->get<TrackRef>();
562  stAloneTrack1[i] = daughters1[i]->get<TrackRef,reco::StandAloneMuonTag>();
563  globalTrack1[i] = daughters1[i]->get<TrackRef,reco::CombinedMuonTag>();
564 
565  /*********************************************** just used for debug ********************
566  if (trackerTrack1[i].isNull())
567  cout << "in ZMuMu daughter " << i << " tracker ref non found " << endl;
568  else
569  cout << "in ZMuMu daughter " << i << " tracker ref FOUND"
570  << " id: " << trackerTrack1[i].id() << ", index: " << trackerTrack1[i].key()
571  << endl;
572  if (stAloneTrack1[i].isNull())
573  cout << "in ZMuMu daughter " << i << " stalone ref non found " << endl;
574  else
575  cout << "in ZMuMu daughter " << i << " stalone ref FOUND"
576  << " id: " << stAloneTrack1[i].id() << ", index: " << stAloneTrack1[i].key()
577  << endl;
578 
579  if (globalTrack1[i].isNull())
580  cout << "in ZMuMu daughter " << i << " global ref non found " << endl;
581  else
582  cout << "in ZMuMu daughter " << i << " global ref FOUND"
583  << " id: " << globalTrack1[i].id() << ", index: " << globalTrack1[i].key()
584  << endl;
585  */
586  }
587  for( unsigned int i = 0; i < nd2; ++ i ) {
588  daughters2[i] = obj2.daughter( i );
589  trackerTrack2[i] = daughters2[i]->get<TrackRef>();
590  stAloneTrack2[i] = daughters2[i]->get<TrackRef,reco::StandAloneMuonTag>();
591  globalTrack2[i] = daughters2[i]->get<TrackRef,reco::CombinedMuonTag>();
592 
593  /******************************************** just used for debug ************
594  if (trackerTrack2[i].isNull())
595  cout << "in ZMuSta daughter " << i << " tracker ref non found " << endl;
596  else
597  cout << "in ZMuSta daughter " << i << " tracker ref FOUND"
598  << " id: " << trackerTrack2[i].id() << ", index: " << trackerTrack2[i].key()
599  << endl;
600  if (stAloneTrack2[i].isNull())
601  cout << "in ZMuSta daughter " << i << " standalone ref non found " << endl;
602  else
603  cout << "in ZMuSta daughter " << i << " standalone ref FOUND"
604  << " id: " << stAloneTrack2[i].id() << ", index: " << stAloneTrack2[i].key()
605  << endl;
606 
607  if (globalTrack2[i].isNull())
608  cout << "in ZMuSta daughter " << i << " global ref non found " << endl;
609  else
610  cout << "in ZMuSta daughter " << i << " global ref FOUND"
611  << " id: " << globalTrack2[i].id() << ", index: " << globalTrack2[i].key()
612  << endl;
613 
614  */
615  }
616  if (nd1 != nd2)
617  {
618  cout << "ZMuMuAnalyzer::isContained WARNING n.of daughters different " << nd1 << " " << nd2 << endl;
619  }
620  else
621  {
622  for (unsigned int i = 0; i < nd1; i++) {
623  flag = false;
624  for (unsigned int j = 0; j < nd2; j++) { // if the obj2 is a standalone the trackref is alwais in the trackerTRack position
625  if ( ((trackerTrack2[i].id()==trackerTrack1[j].id()) && (trackerTrack2[i].key()==trackerTrack1[j].key())) ||
626  ((trackerTrack2[i].id()==stAloneTrack1[j].id()) && (trackerTrack2[i].key()==stAloneTrack1[j].key())) ) {
627  flag = true;
628  }
629  }
630  if (flag) matched++;
631  }
632  }
633  if (matched==nd1) // return true if all the childrens of the ZMuMu have a children matched in ZMuXX
634  return true;
635  else
636  return false;
637 }
638 
640 
641  // candidate analysis
642  // ZMuMu
643  double Nzmmc = h_zMuMu_numberOfCand->GetEntries();
644  double Nzmmc_0Z = h_zMuMu_numberOfCand->GetBinContent(1);
645  double Nzmmc_1Z = h_zMuMu_numberOfCand->GetBinContent(2);
646  double Nzmmc_moreZ = Nzmmc-Nzmmc_0Z-Nzmmc_1Z;
647  double Nzmmc_passed_0Z = h_zMuMu_numberOfCand_passed->GetBinContent(1);
648  double Nzmmc_passed_1Z = h_zMuMu_numberOfCand_passed->GetBinContent(2);
649  double Nzmmc_passed_moreZ = Nzmmc-Nzmmc_passed_0Z-Nzmmc_passed_1Z;
650  double Nzmmc_ptpassed_0Z = h_zMuMu_numberOfCand_ptpassed->GetBinContent(1);
651  double Nzmmc_ptpassed_1Z = h_zMuMu_numberOfCand_ptpassed->GetBinContent(2);
652  double Nzmmc_etapassed_0Z = h_zMuMu_numberOfCand_etapassed->GetBinContent(1);
653  double Nzmmc_etapassed_1Z = h_zMuMu_numberOfCand_etapassed->GetBinContent(2);
654  double Nzmmc_masspassed_0Z = h_zMuMu_numberOfCand_masspassed->GetBinContent(1);
655  double Nzmmc_masspassed_1Z = h_zMuMu_numberOfCand_masspassed->GetBinContent(2);
656  double Nzmmc_isopassed_0Z = h_zMuMu_numberOfCand_isopassed->GetBinContent(1);
657  double Nzmmc_isopassed_1Z = h_zMuMu_numberOfCand_isopassed->GetBinContent(2);
658  double Nzmmc_ptetapassed_0Z = h_zMuMu_numberOfCand_ptetapassed->GetBinContent(1);
659  double Nzmmc_ptetapassed_1Z = h_zMuMu_numberOfCand_ptetapassed->GetBinContent(2);
660  double Nzmmc_ptetamasspassed_0Z = h_zMuMu_numberOfCand_ptetamasspassed->GetBinContent(1);
661  double Nzmmc_ptetamasspassed_1Z = h_zMuMu_numberOfCand_ptetamasspassed->GetBinContent(2);
662  double Nzmmc_ptpassed_moreZ = Nzmmc-Nzmmc_ptpassed_0Z-Nzmmc_ptpassed_1Z;
663  double Nzmmc_etapassed_moreZ = Nzmmc-Nzmmc_etapassed_0Z-Nzmmc_etapassed_1Z;
664  double Nzmmc_masspassed_moreZ = Nzmmc-Nzmmc_masspassed_0Z-Nzmmc_masspassed_1Z;
665  double Nzmmc_isopassed_moreZ = Nzmmc-Nzmmc_isopassed_0Z-Nzmmc_isopassed_1Z;
666  double Nzmmc_ptetapassed_moreZ = Nzmmc-Nzmmc_ptetapassed_0Z-Nzmmc_ptetapassed_1Z;
667  double Nzmmc_ptetamasspassed_moreZ = Nzmmc-Nzmmc_ptetamasspassed_0Z-Nzmmc_ptetamasspassed_1Z;
668  double Nzmsc = h_zMuSta_numberOfCand->GetEntries();
669  double Nzmsc_0Z = h_zMuSta_numberOfCand->GetBinContent(1);
670  double Nzmsc_1Z = h_zMuSta_numberOfCand->GetBinContent(2);
671  double Nzmsc_moreZ = Nzmsc - Nzmsc_0Z - Nzmsc_1Z;
672  double Nzmsc_notcontained_0Z = h_zMuSta_numberOfCand_notcontained->GetBinContent(1);
673  double Nzmsc_notcontained_1Z = h_zMuSta_numberOfCand_notcontained->GetBinContent(2);
674  double Nzmsc_notcontained_moreZ = Nzmsc-Nzmsc_notcontained_0Z-Nzmsc_notcontained_1Z;
675  double Nzmsc_passed_0Z = h_zMuSta_numberOfCand_passed->GetBinContent(1);
676  double Nzmsc_passed_1Z = h_zMuSta_numberOfCand_passed->GetBinContent(2);
677  double Nzmsc_passed_moreZ = Nzmsc - Nzmsc_passed_0Z - Nzmsc_passed_1Z;
678  double Nzmsc_MCmatched_passed_0Z = h_zMuSta_MCmatched_numberOfCand_passed->GetBinContent(1);
679  double Nzmsc_MCmatched_passed_1Z = h_zMuSta_MCmatched_numberOfCand_passed->GetBinContent(2);
680  double Nzmsc_MCmatched_passed_moreZ = Nzmsc - Nzmsc_MCmatched_passed_0Z - Nzmsc_MCmatched_passed_1Z;
681  double Nzmtc = h_zMuTrack_numberOfCand->GetEntries();
682  double Nzmtc_0Z = h_zMuTrack_numberOfCand->GetBinContent(1);
683  double Nzmtc_1Z = h_zMuTrack_numberOfCand->GetBinContent(2);
684  double Nzmtc_moreZ = Nzmtc - Nzmtc_0Z - Nzmtc_1Z;
685  double Nzmtc_notcontained_0Z = h_zMuTrack_numberOfCand_notcontained->GetBinContent(1);
686  double Nzmtc_notcontained_1Z = h_zMuTrack_numberOfCand_notcontained->GetBinContent(2);
687  double Nzmtc_notcontained_moreZ = Nzmtc-Nzmtc_notcontained_0Z-Nzmtc_notcontained_1Z;
688  double Nzmtc_passed_0Z = h_zMuTrack_numberOfCand_passed->GetBinContent(1);
689  double Nzmtc_passed_1Z = h_zMuTrack_numberOfCand_passed->GetBinContent(2);
690  double Nzmtc_passed_moreZ = Nzmtc - Nzmtc_passed_0Z - Nzmtc_passed_1Z;
691  double Nzmtc_MCmatched_passed_0Z = h_zMuTrack_MCmatched_numberOfCand_passed->GetBinContent(1);
692  double Nzmtc_MCmatched_passed_1Z = h_zMuTrack_MCmatched_numberOfCand_passed->GetBinContent(2);
693  double Nzmtc_MCmatched_passed_moreZ = Nzmtc - Nzmtc_MCmatched_passed_0Z - Nzmtc_MCmatched_passed_1Z;
694 
695  cout << "--------------- Statistics ----------------------------------------------------------" << endl;
696  cout << "n of ZMuMu entries ...................................................... " << Nzmmc << endl;
697  cout << "n of ZMuMu events with 0 cand ............................................. " << Nzmmc_0Z << endl;
698  cout << "n of ZMuMu events with 1 cand ............................................. " << Nzmmc_1Z << endl;
699  cout << "n of ZMuMu events with 2 or more cand ..................................... " << Nzmmc_moreZ << endl << endl ;
700 
701  cout << "n of ZMuMu events not selected by cuts .................................... " << Nzmmc_passed_0Z << endl;
702  cout << "n of ZMuMu events with 1 cand selected by cuts ............................ " << Nzmmc_passed_1Z << endl;
703  cout << "n of ZMuMu events with 2 or more cand elected by cuts ..................... " << Nzmmc_passed_moreZ << endl<< endl ;
704 
705  cout << "n of ZMuMu events not selected by pt cut .................................. " << Nzmmc_ptpassed_0Z << endl;
706  cout << "n of ZMuMu events with 1 cand selected by pt cut .......................... " << Nzmmc_ptpassed_1Z << endl;
707  cout << "n of ZMuMu events with 2 or more cand elected by pt cut ................... " << Nzmmc_ptpassed_moreZ << endl<< endl ;
708 
709  cout << "n of ZMuMu events not selected by eta cut ................................. " << Nzmmc_etapassed_0Z << endl;
710  cout << "n of ZMuMu events with 1 cand selected by eta cut ......................... " << Nzmmc_etapassed_1Z << endl;
711  cout << "n of ZMuMu events with 2 or more cand elected by eta cut .................. " << Nzmmc_etapassed_moreZ << endl<< endl ;
712 
713  cout << "n of ZMuMu events not selected by mass cut ................................ " << Nzmmc_masspassed_0Z << endl;
714  cout << "n of ZMuMu events with 1 cand selected by mass cut ........................ " << Nzmmc_masspassed_1Z << endl;
715  cout << "n of ZMuMu events with 2 or more cand elected by mass cut ................. " << Nzmmc_masspassed_moreZ << endl<< endl ;
716 
717  cout << "n of ZMuMu events not selected by iso cut ................................. " << Nzmmc_isopassed_0Z << endl;
718  cout << "n of ZMuMu events with 1 cand selected iso cut ............................ " << Nzmmc_isopassed_1Z << endl;
719  cout << "n of ZMuMu events with 2 or more cand elected iso cut ..................... " << Nzmmc_isopassed_moreZ << endl<< endl ;
720 
721  cout << "n of ZMuMu events not selected by pt and eta cut .......................... " << Nzmmc_ptetapassed_0Z << endl;
722  cout << "n of ZMuMu events with 1 cand selected by pt and eta cut .................. " << Nzmmc_ptetapassed_1Z << endl;
723  cout << "n of ZMuMu events with 2 or more cand elected by pt and eta cut ........... " << Nzmmc_ptetapassed_moreZ << endl<< endl ;
724 
725  cout << "n of ZMuMu events not selected by pt and eta and mass cut ................. " << Nzmmc_ptetamasspassed_0Z << endl;
726  cout << "n of ZMuMu events with 1 cand selected by pt and eta and mass cut ......... " << Nzmmc_ptetamasspassed_1Z << endl;
727  cout << "n of ZMuMu events with 2 or more cand elected by pt and eta and mass cut .. " << Nzmmc_ptetamasspassed_moreZ << endl<< endl ;
728 
729  cout << "................When No ZMuMu are selected.................................." << endl;
730  cout << "n of ZMuSta entries ....................................................... " << Nzmsc << endl;
731  cout << "n of ZMuSta events with 0 cand ............................................ " << Nzmsc_0Z << endl;
732  cout << "n of ZMuSta events with 1 cand ............................................ " << Nzmsc_1Z << endl;
733  cout << "n of ZMuSta events with 2 or more cand .................................... " << Nzmsc_moreZ << endl<< endl ;
734 
735  cout << "n of ZMuSta not contained events with 0 cand .............................. " << Nzmsc_notcontained_0Z << endl;
736  cout << "n of ZMuSta events not contained with 1 cand .............................. " << Nzmsc_notcontained_1Z << endl;
737  cout << "n of ZMuSta events no contained with 2 or more cand ....................... " << Nzmsc_notcontained_moreZ << endl<< endl ;
738 
739  cout << "n of ZMuSta cand not selectd by cuts ...................................... " << Nzmsc_passed_0Z << endl;
740  cout << "n of ZMuSta events with 1 cand selected by cuts ........................... " << Nzmsc_passed_1Z << endl;
741  cout << "n of ZMuSta events with 2 or more cand selected by cuts ................... " << Nzmsc_passed_moreZ << endl<< endl ;
742 
743  cout << "n of ZMuSta MCmatched cand not selectd by cuts ............................ " << Nzmsc_MCmatched_passed_0Z << endl;
744  cout << "n of ZMuSta MCmatched events with 1 cand selected by cuts ................. " << Nzmsc_MCmatched_passed_1Z << endl;
745  cout << "n of ZMuSta MCmatched events with 2 or more cand selected by cuts ......... " << Nzmsc_MCmatched_passed_moreZ << endl<< endl ;
746 
747  cout << "...............When no ZMuMu and ZMuSta are selcted........................." << endl;
748  cout << "n of ZMuTrack entries ................................................... " << Nzmtc << endl;
749  cout << "n of ZMuTrack events with 0 cand ..........................................." << Nzmtc_0Z << endl;
750  cout << "n of ZMuTrack events with 1 cand ..........................................." << Nzmtc_1Z << endl;
751  cout << "n of ZMuTrack events with 2 or more cand ..................................." << Nzmtc_moreZ << endl<< endl ;
752 
753  cout << "n of ZMuTrack not contained events with 0 cand ............................ " << Nzmtc_notcontained_0Z << endl;
754  cout << "n of ZMuTrack events not contained with 1 cand ............................ " << Nzmtc_notcontained_1Z << endl;
755  cout << "n of ZMuTrack events no contained with 2 or more cand ..................... " << Nzmtc_notcontained_moreZ << endl<< endl ;
756 
757  cout << "n of ZMuTrack cand not selectd by cuts ....................................." << Nzmtc_passed_0Z << endl;
758  cout << "n of ZMuTrack events with 1 cand selected by cuts .........................." << Nzmtc_passed_1Z << endl;
759  cout << "n of ZMuTrack events with 2 or more cand selected by cuts .................." << Nzmtc_passed_moreZ << endl<< endl ;
760 
761  cout << "n of ZMuTrack MCmatched cand not selectd by cuts .......................... " << Nzmtc_MCmatched_passed_0Z << endl;
762  cout << "n of ZMuTrcak MCmatched events with 1 cand selected by cuts ............... " << Nzmtc_MCmatched_passed_1Z << endl;
763  cout << "n of ZMuTrack MCmatched events with 2 or more cand selected by cuts ....... " << Nzmtc_MCmatched_passed_moreZ << endl;
764 
765  cout << "------------------------------------------------------------------------------------------" << endl;
766 
767  double Nzmm = h_zMuMu_mass_->GetEntries() ;
768  double Nzsm = h_zMuSingleStandAlone_mass_->GetEntries() ;
769  double Nzsnom = h_zMuSingleStandAloneOverlap_mass_->GetEntries() ;
770  double Nztm = h_zMuSingleTrack_mass_->GetEntries();
771 
772  double NzmmMatch = h_zMuMuMatched_mass_->GetEntries() ;
773  double NzsmMatch = h_zMuSingleStandAloneMatched_mass_->GetEntries() ;
774  double NzsnomMatch = h_zMuSingleStandAloneOverlapMatched_mass_->GetEntries() ;
775  double NztmMatch = h_zMuSingleTrackMatched_mass_->GetEntries();
776 
777  cout<<"-- N SingleTrackMu = "<<Nztm<<endl;
778  cout<<"-----N SinglStandAloneMu = "<<Nzsm<<endl;
779  cout<<"-----N SingleStandAloneOverlapMu = "<<Nzsnom<<endl;
780  cout<<"------- N MuMu = "<<Nzmm<<endl;
781 
782  cout<<"-- N SingleTrackMuMatched = "<<NztmMatch<<endl;
783  cout<<"-----N SinglStandAloneMuMatched = "<<NzsmMatch<<endl;
784  cout<<"-----N SingleStandAloneOverlapMuMatched = "<<NzsnomMatch<<endl;
785  cout<<"------- N MuMu Matched = "<<NzmmMatch<<endl;
786 }
787 
789 
791 
edm::AssociationVector< reco::CandidateRefProd, std::vector< double > > IsolationCollection
const_iterator end() const
last iterator over the map (read only)
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:17
virtual const Candidate * daughter(size_type i) const =0
return daughter at a given position, i = 0, ... numberOfDaughters() - 1 (read only mode) ...
const_iterator find(const key_type &k) const
find element with specified reference key
size_type size() const
Definition: OwnVector.h:264
stand alone muon component tag
Definition: RecoCandidate.h:78
def setup(process, global_tag, zero_tesla=False)
Definition: GeneralSetup.py:2
T * make(const Args &...args) const
make new ROOT object
Definition: TFileService.h:64
key_type key() const
Accessor for product key.
Definition: Ref.h:265
EDGetTokenT< CandMatchMap > zMuMuMapToken_
void analyze(const edm::Event &event, const edm::EventSetup &setup) override
ProductID id() const
Accessor for product ID.
Definition: Ref.h:259
ZMuMuAnalyzer_cynematics(const edm::ParameterSet &pset)
void Fill(HcalDetId &id, double val, std::vector< TH2F > &depth)
T * make(const Args &...args) const
make new ROOT object
EDGetTokenT< CandidateCollection > zMuMuToken_
T const * get() const
Returns C++ pointer to the item.
Definition: Ref.h:245
bool isContained(const Candidate &, const Candidate &)
EDGetTokenT< IsolationCollection > trackIsoToken_
virtual const CandidateBaseRef & masterClone() const =0
TFileDirectory mkdir(const std::string &dir, const std::string &descr="")
create a new subdirectory
Definition: TFileService.h:69
conbined muon component tag
Definition: RecoCandidate.h:80
virtual double mass() const =0
mass
REF castTo() const
Definition: RefToBase.h:289
edm::Ref< TrackCollection > TrackRef
persistent reference to a Track
Definition: TrackFwd.h:20
double b
Definition: hdecay.h:120
EDGetTokenT< CandMatchMap > zMuStandAloneMapToken_
susybsm::MuonSegment ms
Definition: classes.h:31
fixed size matrix
HLT enums.
double a
Definition: hdecay.h:121
T get() const
get a component
Definition: Candidate.h:217
EDGetTokenT< CandidateCollection > zMuStandAloneToken_
lep1
print &#39;MRbb(1b)&#39;,event.mr_bb
EDGetTokenT< IsolationCollection > standAloneIsoToken_
virtual size_type numberOfDaughters() const =0
number of daughters
virtual example_stream void analyze(const edm::Event &, const edm::EventSetup &) override
EDGetTokenT< CandMatchMap > zMuTrackMapToken_
Definition: event.py:1
EDGetTokenT< CandidateCollection > zMuTrackToken_
EDGetTokenT< IsolationCollection > muIsoToken_