test
CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
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  virtual void analyze(const edm::Event& event, const edm::EventSetup& setup) override;
54  bool isContained(const Candidate &, const Candidate &);
55  virtual 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 
int i
Definition: DBlmapReader.cc:9
virtual const Candidate * daughter(size_type i) const =0
return daughter at a given position, i = 0, ... numberOfDaughters() - 1 (read only mode) ...
ProductID id() const
Definition: HandleBase.cc:15
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:17
virtual double mass() const =0
mass
stand alone muon component tag
Definition: RecoCandidate.h:78
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:264
EDGetTokenT< CandMatchMap > zMuMuMapToken_
virtual void analyze(const edm::Event &event, const edm::EventSetup &setup) override
virtual void endJob() override
ProductID id() const
Accessor for product ID.
Definition: Ref.h:258
ZMuMuAnalyzer_cynematics(const edm::ParameterSet &pset)
virtual size_type numberOfDaughters() const =0
number of daughters
edm::ValueMap< float > IsolationCollection
tuple lep1
print &#39;MRbb(1b)&#39;,event.mr_bb
void Fill(HcalDetId &id, double val, std::vector< TH2F > &depth)
int j
Definition: DBlmapReader.cc:9
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:244
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
string key
FastSim: produces sample of signal events, overlayed with premixed minbias events.
bool isContained(const Candidate &, const Candidate &)
EDGetTokenT< IsolationCollection > trackIsoToken_
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
REF castTo() const
Definition: RefToBase.h:286
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
double a
Definition: hdecay.h:121
T get() const
get a component
Definition: Candidate.h:217
EDGetTokenT< CandidateCollection > zMuStandAloneToken_
tuple cout
Definition: gather_cfg.py:145
ProductIndex id() const
Definition: ProductID.h:38
EDGetTokenT< IsolationCollection > standAloneIsoToken_
EDGetTokenT< CandMatchMap > zMuTrackMapToken_
tuple zMuMu
zMuMu vector of PSet is common to all categories except zMuTrk category
EDGetTokenT< CandidateCollection > zMuTrackToken_
EDGetTokenT< IsolationCollection > muIsoToken_
virtual const CandidateBaseRef & masterClone() const =0