ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MuJetAnalysis/AnalysisTools/FitNtuple/src/FitNtuple.cc
Revision: 1.15
Committed: Tue Jan 4 20:21:50 2011 UTC (14 years, 4 months ago) by pivarski
Content type: text/plain
Branch: MAIN
CVS Tags: JP-2011-01-04-a
Changes since 1.14: +110 -10 lines
Log Message:
add massatype and FitNtuple9, FitNtuple15

File Contents

# User Rev Content
1 pivarski 1.1 // -*- C++ -*-
2     //
3     // Package: FitNtuple
4     // Class: FitNtuple
5     //
6     /**\class FitNtuple FitNtuple.cc AnalysisTools/FitNtuple/src/FitNtuple.cc
7    
8     Description: [one line class summary]
9    
10     Implementation:
11     [Notes on implementation]
12     */
13     //
14     // Original Author: James Pivarski
15     // Created: Fri Nov 19 17:04:33 CST 2010
16 pivarski 1.15 // $Id: FitNtuple.cc,v 1.14 2010/12/21 01:16:31 pivarski Exp $
17 pivarski 1.1 //
18     //
19    
20    
21     // system include files
22     #include <memory>
23    
24     // user include files
25     #include "FWCore/Framework/interface/Frameworkfwd.h"
26     #include "FWCore/Framework/interface/EDAnalyzer.h"
27     #include "FWCore/Framework/interface/Event.h"
28     #include "FWCore/Framework/interface/MakerMacros.h"
29     #include "FWCore/ParameterSet/interface/ParameterSet.h"
30     #include "FWCore/Utilities/interface/InputTag.h"
31    
32     #include "SimDataFormats/GeneratorProducts/interface/GenEventInfoProduct.h"
33     #include "DataFormats/Candidate/interface/Candidate.h"
34     #include "AnalysisDataFormats/MuJetAnalysis/interface/MultiMuon.h"
35     #include "DataFormats/PatCandidates/interface/Muon.h"
36     #include "DataFormats/PatCandidates/interface/TriggerEvent.h"
37     #include "DataFormats/TrackReco/interface/Track.h"
38     #include "DataFormats/TrackReco/interface/TrackFwd.h"
39     #include "DataFormats/VertexReco/interface/Vertex.h"
40     #include "DataFormats/VertexReco/interface/VertexFwd.h"
41     #include "DataFormats/HepMCCandidate/interface/GenParticleFwd.h"
42     #include "DataFormats/HepMCCandidate/interface/GenParticle.h"
43 pivarski 1.6 #include "DataFormats/MuonReco/interface/Muon.h"
44     #include "DataFormats/MuonReco/interface/MuonChamberMatch.h"
45     #include "DataFormats/MuonReco/interface/MuonSegmentMatch.h"
46 pivarski 1.1
47     #include "CommonTools/UtilAlgos/interface/TFileService.h"
48     #include "FWCore/ServiceRegistry/interface/Service.h"
49     #include "TTree.h"
50 pivarski 1.7 #include "TRandom3.h"
51 pivarski 1.1
52     //
53     // class declaration
54     //
55    
56     class FitNtuple : public edm::EDAnalyzer {
57     public:
58     explicit FitNtuple(const edm::ParameterSet&);
59     ~FitNtuple();
60    
61    
62     private:
63     virtual void beginJob() ;
64     virtual void analyze(const edm::Event&, const edm::EventSetup&);
65     virtual void endJob() ;
66    
67     // ----------member data ---------------------------
68    
69     // input parameters
70     bool m_getQscale;
71     bool m_getAlternating;
72 pivarski 1.10 bool m_fillGenLevel;
73 pivarski 1.15 edm::InputTag m_muJets;
74     edm::InputTag m_muJetOrphans;
75     edm::InputTag m_muJetPlusTracks;
76 pivarski 1.1
77 pivarski 1.7 TRandom3 m_trandom3;
78    
79 pivarski 1.1 // all ntuples need these variables
80     Float_t m_qscale; // also known as "pt-hat" ($\hat{p}_T$)
81 pivarski 1.10 Int_t m_genLevel; // gen-level information about all mu-jets
82     // 1 = b-jets
83     // 2 = resonances
84     // 4 = any decays-in-flight
85     // 8 = any non-muons
86 pivarski 1.1 Int_t m_run; // run and event number so that we can look at
87     Int_t m_event; // interesting cases in the event display
88     Int_t m_trigger; // satisfied trigger? 0 = failed all
89     // 1 = passed HLT_Mu5
90     // 2 = passed HLT_Mu9
91     // 4 = passed HLT_Mu11
92 pivarski 1.12 // 8 = passed HLT_Mu15_v1
93 pivarski 1.14 // 16 = passed HLT_Mu20_NoVertex
94 pivarski 1.3 Float_t m_muon1pt;
95     Float_t m_muon1eta;
96     Float_t m_muon2pt;
97     Float_t m_muon2eta;
98     Float_t m_muon3pt;
99     Float_t m_muon3eta;
100     Float_t m_muon4pt;
101     Float_t m_muon4eta;
102     Float_t m_muontrigpt;
103     Float_t m_muontrigeta;
104 pivarski 1.1
105 pivarski 1.7 // for scaling to the Z peak
106     TTree *m_alldimuons;
107     Float_t m_alldimuons_mass;
108     Float_t m_alldimuons_iso;
109    
110 pivarski 1.13 // control sample "lowdimuon" (single mu-jet with two muons and low pT)
111 pivarski 1.1 TTree *m_lowdimuon;
112 pivarski 1.10 Int_t m_lowdimuon_containstrig;
113 pivarski 1.1 Float_t m_lowdimuon_genmass;
114     Float_t m_lowdimuon_mass;
115     Float_t m_lowdimuon_pt;
116     Float_t m_lowdimuon_eta;
117     Float_t m_lowdimuon_phi;
118     Float_t m_lowdimuon_dr;
119     Float_t m_lowdimuon_pluspx;
120     Float_t m_lowdimuon_pluspy;
121     Float_t m_lowdimuon_pluspz;
122     Float_t m_lowdimuon_minuspx;
123     Float_t m_lowdimuon_minuspy;
124     Float_t m_lowdimuon_minuspz;
125     Float_t m_lowdimuon_vprob;
126     Float_t m_lowdimuon_vx;
127     Float_t m_lowdimuon_vy;
128     Float_t m_lowdimuon_vz;
129     Float_t m_lowdimuon_iso;
130 pivarski 1.2 Float_t m_lowdimuon_compluspx;
131     Float_t m_lowdimuon_compluspy;
132     Float_t m_lowdimuon_compluspz;
133 pivarski 1.6 Float_t m_lowdimuon_comrotpluspx;
134     Float_t m_lowdimuon_comrotpluspy;
135     Float_t m_lowdimuon_comrotpluspz;
136     Int_t m_lowdimuon_plusmatches;
137     Float_t m_lowdimuon_plusst1x;
138     Float_t m_lowdimuon_plusst1xsig;
139     Float_t m_lowdimuon_plusst1dxdz;
140     Float_t m_lowdimuon_plusst1dxdzsig;
141     Int_t m_lowdimuon_plushits;
142     Float_t m_lowdimuon_plusnormchi2;
143     Int_t m_lowdimuon_minusmatches;
144     Float_t m_lowdimuon_minusst1x;
145     Float_t m_lowdimuon_minusst1xsig;
146     Float_t m_lowdimuon_minusst1dxdz;
147     Float_t m_lowdimuon_minusst1dxdzsig;
148     Int_t m_lowdimuon_minushits;
149     Float_t m_lowdimuon_minusnormchi2;
150    
151 pivarski 1.13 // signal region "highdimuon" (single mu-jet with two muons and high pT)
152 pivarski 1.1 TTree *m_highdimuon;
153    
154 pivarski 1.10 // control sample "mujetplustracks" (single mu-jet with 2-3 muons and 1-2 random, nearby tracks)
155     TTree *m_mujetplustracks;
156     Int_t m_mujetplustracks_containstrig;
157     Int_t m_mujetplustracks_muons;
158     Int_t m_mujetplustracks_fakes;
159 pivarski 1.11 Int_t m_mujetplustracks_charge;
160 pivarski 1.10 Float_t m_mujetplustracks_mass;
161 pivarski 1.11 Float_t m_mujetplustracks_massa;
162     Float_t m_mujetplustracks_massb;
163 pivarski 1.15 Int_t m_mujetplustracks_massatype;
164     Int_t m_mujetplustracks_massbtype;
165 pivarski 1.10 Float_t m_mujetplustracks_pt;
166     Float_t m_mujetplustracks_eta;
167     Float_t m_mujetplustracks_phi;
168     Float_t m_mujetplustracks_dr;
169     Float_t m_mujetplustracks_vprob;
170     Float_t m_mujetplustracks_lxy;
171     Float_t m_mujetplustracks_lxyz;
172     Float_t m_mujetplustracks_iso;
173     Float_t m_mujetplustracks_mupt1;
174     Float_t m_mujetplustracks_mupt2;
175     Float_t m_mujetplustracks_mupt3;
176     Float_t m_mujetplustracks_fakept1;
177     Float_t m_mujetplustracks_fakept2;
178 pivarski 1.1
179 pivarski 1.13 // signal region "quadmuon" (single mu-jet with four or more muons)
180 pivarski 1.1 TTree *m_quadmuon;
181 pivarski 1.13 Int_t m_quadmuon_containstrig;
182     Int_t m_quadmuon_muons;
183     Int_t m_quadmuon_orphans;
184     Int_t m_quadmuon_charge;
185     Float_t m_quadmuon_mass;
186     Float_t m_quadmuon_massa;
187     Float_t m_quadmuon_massb;
188     Float_t m_quadmuon_massc;
189     Float_t m_quadmuon_massd;
190     Float_t m_quadmuon_masse;
191     Float_t m_quadmuon_massf;
192     Float_t m_quadmuon_pt;
193     Float_t m_quadmuon_eta;
194     Float_t m_quadmuon_phi;
195     Float_t m_quadmuon_dr;
196     Float_t m_quadmuon_vchi2;
197     Int_t m_quadmuon_vndof;
198     Float_t m_quadmuon_vprob;
199     Float_t m_quadmuon_lxy;
200     Float_t m_quadmuon_lxyz;
201     Float_t m_quadmuon_iso;
202 pivarski 1.1
203 pivarski 1.8 // control sample "dimuorphan" (single, two-muon mu-jet and a single muon)
204     TTree *m_dimuorphan;
205     Float_t m_dimuorphan_deltaphi;
206     Float_t m_dimuorphan_orphanpt;
207     Float_t m_dimuorphan_orphaneta;
208     Float_t m_dimuorphan_orphanphi;
209 pivarski 1.9 Int_t m_dimuorphan_orphanisglobal;
210     Int_t m_dimuorphan_orphanmatches;
211     Int_t m_dimuorphan_orphanhits;
212     Float_t m_dimuorphan_orphanchi2;
213     Float_t m_dimuorphan_orphanst1x;
214     Float_t m_dimuorphan_orphanst1xsig;
215     Float_t m_dimuorphan_orphanst1dxdz;
216     Float_t m_dimuorphan_orphanst1dxdzsig;
217 pivarski 1.8 Int_t m_dimuorphan_containstrig;
218     Float_t m_dimuorphan_mass;
219     Float_t m_dimuorphan_pt;
220     Float_t m_dimuorphan_eta;
221     Float_t m_dimuorphan_phi;
222     Float_t m_dimuorphan_dr;
223     Float_t m_dimuorphan_vprob;
224     Float_t m_dimuorphan_lxy;
225     Float_t m_dimuorphan_lxyz;
226     Float_t m_dimuorphan_iso;
227    
228 pivarski 1.1 // signal region "dimudimu" (two mu-jets with two muons each)
229     TTree *m_dimudimu;
230 pivarski 1.13 Int_t m_dimudimu_orphans;
231 pivarski 1.7 Float_t m_dimudimu_wholemass;
232     Float_t m_dimudimu_wholept;
233     Float_t m_dimudimu_deltaphi;
234 pivarski 1.8 Int_t m_dimudimu_containstrig;
235     Float_t m_dimudimu_massC;
236     Float_t m_dimudimu_ptC;
237     Float_t m_dimudimu_etaC;
238     Float_t m_dimudimu_phiC;
239     Float_t m_dimudimu_drC;
240     Float_t m_dimudimu_vprobC;
241     Float_t m_dimudimu_lxyC;
242     Float_t m_dimudimu_lxyzC;
243     Float_t m_dimudimu_isoC;
244     Float_t m_dimudimu_massF;
245     Float_t m_dimudimu_ptF;
246     Float_t m_dimudimu_etaF;
247     Float_t m_dimudimu_phiF;
248     Float_t m_dimudimu_drF;
249     Float_t m_dimudimu_vprobF;
250     Float_t m_dimudimu_lxyF;
251     Float_t m_dimudimu_lxyzF;
252     Float_t m_dimudimu_isoF;
253 pivarski 1.1
254 pivarski 1.13 // signal region "twomujets"
255     TTree *m_twomujets;
256     Int_t m_twomujets_muonsC;
257     Int_t m_twomujets_muonsF;
258     Float_t m_twomujets_massCa;
259     Float_t m_twomujets_massCb;
260     Float_t m_twomujets_massCc;
261     Float_t m_twomujets_massFa;
262     Float_t m_twomujets_massFb;
263     Float_t m_twomujets_massFc;
264    
265     // signal region "moremujets"
266     TTree *m_moremujets;
267     Int_t m_moremujets_mujets;
268     Int_t m_moremujets_orphans;
269     Float_t m_moremujets_wholemass;
270     Float_t m_moremujets_wholept;
271     Float_t m_moremujets_massa;
272     Float_t m_moremujets_massb;
273     Float_t m_moremujets_massc;
274     Float_t m_moremujets_massd;
275     Float_t m_moremujets_masse;
276     Float_t m_moremujets_massf;
277     Int_t m_moremujets_muons1;
278     Int_t m_moremujets_containstrig1;
279     Float_t m_moremujets_mass1;
280     Float_t m_moremujets_pt1;
281     Float_t m_moremujets_iso1;
282     Int_t m_moremujets_muons2;
283     Int_t m_moremujets_containstrig2;
284     Float_t m_moremujets_mass2;
285     Float_t m_moremujets_pt2;
286     Float_t m_moremujets_iso2;
287     Int_t m_moremujets_muons3;
288     Int_t m_moremujets_containstrig3;
289     Float_t m_moremujets_mass3;
290     Float_t m_moremujets_pt3;
291     Float_t m_moremujets_iso3;
292     Int_t m_moremujets_muons4;
293     Int_t m_moremujets_containstrig4;
294     Float_t m_moremujets_mass4;
295     Float_t m_moremujets_pt4;
296     Float_t m_moremujets_iso4;
297     Int_t m_moremujets_muons5;
298     Int_t m_moremujets_containstrig5;
299     Float_t m_moremujets_mass5;
300     Float_t m_moremujets_pt5;
301     Float_t m_moremujets_iso5;
302     Int_t m_moremujets_muons6;
303     Int_t m_moremujets_containstrig6;
304     Float_t m_moremujets_mass6;
305     Float_t m_moremujets_pt6;
306     Float_t m_moremujets_iso6;
307 pivarski 1.14
308     // background-enriched and signal for displaced muons
309     TTree *m_displacedFake;
310     TTree *m_displaced;
311     Int_t m_displaced_mujets;
312     Int_t m_displaced_orphans;
313     Int_t m_displaced_muons;
314     Float_t m_displaced_mass;
315     Float_t m_displaced_pt;
316     Float_t m_displaced_eta;
317     Float_t m_displaced_phi;
318     Float_t m_displaced_vx;
319     Float_t m_displaced_vy;
320     Float_t m_displaced_vz;
321     Float_t m_displaced_zclosest;
322     Float_t m_displaced_zcloseness;
323     Float_t m_displaced_lxy;
324     Float_t m_displaced_lxyz;
325     Float_t m_displaced_iso;
326     Float_t m_displaced_vprob;
327     Float_t m_displaced_mupt1;
328     Float_t m_displaced_mupt2;
329     Int_t m_displaced_plusmatches;
330     Float_t m_displaced_plusst1x;
331     Float_t m_displaced_plusst1xsig;
332     Float_t m_displaced_plusst1dxdz;
333     Float_t m_displaced_plusst1dxdzsig;
334     Int_t m_displaced_plushits;
335     Float_t m_displaced_plusnormchi2;
336     Int_t m_displaced_minusmatches;
337     Float_t m_displaced_minusst1x;
338     Float_t m_displaced_minusst1xsig;
339     Float_t m_displaced_minusst1dxdz;
340     Float_t m_displaced_minusst1dxdzsig;
341     Int_t m_displaced_minushits;
342     Float_t m_displaced_minusnormchi2;
343     Int_t m_displacedFake_fakes;
344 pivarski 1.1 };
345    
346     //
347     // constants, enums and typedefs
348     //
349    
350     //
351     // static data member definitions
352     //
353    
354     //
355     // constructors and destructor
356     //
357     FitNtuple::FitNtuple(const edm::ParameterSet& iConfig)
358 pivarski 1.10 : m_getQscale(iConfig.getParameter<bool>("getQscale"))
359 pivarski 1.1 , m_getAlternating(iConfig.getParameter<bool>("getAlternating"))
360 pivarski 1.10 , m_fillGenLevel(iConfig.getParameter<bool>("fillGenLevel"))
361 pivarski 1.15 , m_muJets(iConfig.getParameter<edm::InputTag>("muJets"))
362     , m_muJetOrphans(iConfig.getParameter<edm::InputTag>("muJetOrphans"))
363     , m_muJetPlusTracks(iConfig.getParameter<edm::InputTag>("muJetPlusTracks"))
364 pivarski 1.1 {
365     //now do what ever initialization is needed
366     edm::Service<TFileService> tFile;
367    
368 pivarski 1.7 m_alldimuons = tFile->make<TTree>("alldimuons", "alldimuons");
369     m_alldimuons->Branch("trigger", &m_trigger, "trigger/I");
370     m_alldimuons->Branch("muon1pt", &m_muon1pt, "muon1pt/F");
371     m_alldimuons->Branch("muon1eta", &m_muon1eta, "muon1eta/F");
372     m_alldimuons->Branch("muon2pt", &m_muon2pt, "muon2pt/F");
373     m_alldimuons->Branch("muon2eta", &m_muon2eta, "muon2eta/F");
374     m_alldimuons->Branch("muontrigpt", &m_muontrigpt, "muontrigpt/F");
375     m_alldimuons->Branch("muontrigeta", &m_muontrigeta, "muontrigeta/F");
376     m_alldimuons->Branch("mass", &m_alldimuons_mass, "mass/F");
377     m_alldimuons->Branch("iso", &m_alldimuons_iso, "iso/F");
378    
379     m_lowdimuon = tFile->make<TTree>("lowdimuon", "lowdimuon");
380 pivarski 1.1 m_lowdimuon->Branch("qscale", &m_qscale, "qscale/F");
381 pivarski 1.10 m_lowdimuon->Branch("genLevel", &m_genLevel, "genLevel/I");
382 pivarski 1.1 m_lowdimuon->Branch("run", &m_run, "run/I");
383     m_lowdimuon->Branch("event", &m_event, "event/I");
384     m_lowdimuon->Branch("trigger", &m_trigger, "trigger/I");
385 pivarski 1.3 m_lowdimuon->Branch("muon1pt", &m_muon1pt, "muon1pt/F");
386     m_lowdimuon->Branch("muon1eta", &m_muon1eta, "muon1eta/F");
387     m_lowdimuon->Branch("muon2pt", &m_muon2pt, "muon2pt/F");
388     m_lowdimuon->Branch("muon2eta", &m_muon2eta, "muon2eta/F");
389     m_lowdimuon->Branch("muontrigpt", &m_muontrigpt, "muontrigpt/F");
390     m_lowdimuon->Branch("muontrigeta", &m_muontrigeta, "muontrigeta/F");
391 pivarski 1.10 m_lowdimuon->Branch("containstrig", &m_lowdimuon_containstrig, "containstrig/I");
392 pivarski 1.1 m_lowdimuon->Branch("genmass", &m_lowdimuon_genmass, "genmass/F");
393     m_lowdimuon->Branch("mass", &m_lowdimuon_mass, "mass/F");
394     m_lowdimuon->Branch("pt", &m_lowdimuon_pt, "pt/F");
395     m_lowdimuon->Branch("eta", &m_lowdimuon_eta, "eta/F");
396     m_lowdimuon->Branch("phi", &m_lowdimuon_phi, "phi/F");
397     m_lowdimuon->Branch("dr", &m_lowdimuon_dr, "dr/F");
398     m_lowdimuon->Branch("pluspx", &m_lowdimuon_pluspx, "pluspx/F");
399     m_lowdimuon->Branch("pluspy", &m_lowdimuon_pluspy, "pluspy/F");
400     m_lowdimuon->Branch("pluspz", &m_lowdimuon_pluspz, "pluspz/F");
401     m_lowdimuon->Branch("minuspx", &m_lowdimuon_minuspx, "minuspx/F");
402     m_lowdimuon->Branch("minuspy", &m_lowdimuon_minuspy, "minuspy/F");
403     m_lowdimuon->Branch("minuspz", &m_lowdimuon_minuspz, "minuspz/F");
404     m_lowdimuon->Branch("vprob", &m_lowdimuon_vprob, "vprob/F");
405     m_lowdimuon->Branch("vx", &m_lowdimuon_vx, "vx/F");
406     m_lowdimuon->Branch("vy", &m_lowdimuon_vy, "vy/F");
407     m_lowdimuon->Branch("vz", &m_lowdimuon_vz, "vz/F");
408     m_lowdimuon->Branch("iso", &m_lowdimuon_iso, "iso/F");
409 pivarski 1.2 m_lowdimuon->Branch("compluspx", &m_lowdimuon_compluspx, "compluspx/F");
410     m_lowdimuon->Branch("compluspy", &m_lowdimuon_compluspy, "compluspy/F");
411     m_lowdimuon->Branch("compluspz", &m_lowdimuon_compluspz, "compluspz/F");
412 pivarski 1.6 m_lowdimuon->Branch("comrotpluspx", &m_lowdimuon_comrotpluspx, "comrotpluspx/F");
413     m_lowdimuon->Branch("comrotpluspy", &m_lowdimuon_comrotpluspy, "comrotpluspy/F");
414     m_lowdimuon->Branch("comrotpluspz", &m_lowdimuon_comrotpluspz, "comrotpluspz/F");
415     m_lowdimuon->Branch("plusmatches", &m_lowdimuon_plusmatches, "plusmatches/I");
416     m_lowdimuon->Branch("plusst1x", &m_lowdimuon_plusst1x, "plusst1x/F");
417     m_lowdimuon->Branch("plusst1xsig", &m_lowdimuon_plusst1xsig, "plusst1xsig/F");
418     m_lowdimuon->Branch("plusst1dxdz", &m_lowdimuon_plusst1dxdz, "plusst1dxdz/F");
419     m_lowdimuon->Branch("plusst1dxdzsig", &m_lowdimuon_plusst1dxdzsig, "plusst1dxdzsig/F");
420     m_lowdimuon->Branch("plushits", &m_lowdimuon_plushits, "plushits/I");
421     m_lowdimuon->Branch("plusnormchi2", &m_lowdimuon_plusnormchi2, "plusnormchi2/F");
422     m_lowdimuon->Branch("minusmatches", &m_lowdimuon_minusmatches, "minusmatches/I");
423     m_lowdimuon->Branch("minusst1x", &m_lowdimuon_minusst1x, "minusst1x/F");
424     m_lowdimuon->Branch("minusst1xsig", &m_lowdimuon_minusst1xsig, "minusst1xsig/F");
425     m_lowdimuon->Branch("minusst1dxdz", &m_lowdimuon_minusst1dxdz, "minusst1dxdz/F");
426     m_lowdimuon->Branch("minusst1dxdzsig", &m_lowdimuon_minusst1dxdzsig, "minusst1dxdzsig/F");
427     m_lowdimuon->Branch("minushits", &m_lowdimuon_minushits, "minushits/I");
428     m_lowdimuon->Branch("minusnormchi2", &m_lowdimuon_minusnormchi2, "minusnormchi2/F");
429 pivarski 1.1
430 pivarski 1.10 m_highdimuon = tFile->make<TTree>("highdimuon", "highdimuon");
431 pivarski 1.1 m_highdimuon->Branch("qscale", &m_qscale, "qscale/F");
432 pivarski 1.10 m_highdimuon->Branch("genLevel", &m_genLevel, "genLevel/I");
433 pivarski 1.1 m_highdimuon->Branch("run", &m_run, "run/I");
434     m_highdimuon->Branch("event", &m_event, "event/I");
435     m_highdimuon->Branch("trigger", &m_trigger, "trigger/I");
436 pivarski 1.3 m_highdimuon->Branch("muon1pt", &m_muon1pt, "muon1pt/F");
437     m_highdimuon->Branch("muon1eta", &m_muon1eta, "muon1eta/F");
438     m_highdimuon->Branch("muon2pt", &m_muon2pt, "muon2pt/F");
439     m_highdimuon->Branch("muon2eta", &m_muon2eta, "muon2eta/F");
440     m_highdimuon->Branch("muontrigpt", &m_muontrigpt, "muontrigpt/F");
441     m_highdimuon->Branch("muontrigeta", &m_muontrigeta, "muontrigeta/F");
442 pivarski 1.13 m_highdimuon->Branch("containstrig", &m_lowdimuon_containstrig, "containstrig/I");
443     m_highdimuon->Branch("genmass", &m_lowdimuon_genmass, "genmass/F");
444     m_highdimuon->Branch("mass", &m_lowdimuon_mass, "mass/F");
445     m_highdimuon->Branch("pt", &m_lowdimuon_pt, "pt/F");
446     m_highdimuon->Branch("eta", &m_lowdimuon_eta, "eta/F");
447     m_highdimuon->Branch("phi", &m_lowdimuon_phi, "phi/F");
448     m_highdimuon->Branch("dr", &m_lowdimuon_dr, "dr/F");
449     m_highdimuon->Branch("pluspx", &m_lowdimuon_pluspx, "pluspx/F");
450     m_highdimuon->Branch("pluspy", &m_lowdimuon_pluspy, "pluspy/F");
451     m_highdimuon->Branch("pluspz", &m_lowdimuon_pluspz, "pluspz/F");
452     m_highdimuon->Branch("minuspx", &m_lowdimuon_minuspx, "minuspx/F");
453     m_highdimuon->Branch("minuspy", &m_lowdimuon_minuspy, "minuspy/F");
454     m_highdimuon->Branch("minuspz", &m_lowdimuon_minuspz, "minuspz/F");
455     m_highdimuon->Branch("vprob", &m_lowdimuon_vprob, "vprob/F");
456     m_highdimuon->Branch("vx", &m_lowdimuon_vx, "vx/F");
457     m_highdimuon->Branch("vy", &m_lowdimuon_vy, "vy/F");
458     m_highdimuon->Branch("vz", &m_lowdimuon_vz, "vz/F");
459     m_highdimuon->Branch("iso", &m_lowdimuon_iso, "iso/F");
460     m_highdimuon->Branch("compluspx", &m_lowdimuon_compluspx, "compluspx/F");
461     m_highdimuon->Branch("compluspy", &m_lowdimuon_compluspy, "compluspy/F");
462     m_highdimuon->Branch("compluspz", &m_lowdimuon_compluspz, "compluspz/F");
463     m_highdimuon->Branch("comrotpluspx", &m_lowdimuon_comrotpluspx, "comrotpluspx/F");
464     m_highdimuon->Branch("comrotpluspy", &m_lowdimuon_comrotpluspy, "comrotpluspy/F");
465     m_highdimuon->Branch("comrotpluspz", &m_lowdimuon_comrotpluspz, "comrotpluspz/F");
466     m_highdimuon->Branch("plusmatches", &m_lowdimuon_plusmatches, "plusmatches/I");
467     m_highdimuon->Branch("plusst1x", &m_lowdimuon_plusst1x, "plusst1x/F");
468     m_highdimuon->Branch("plusst1xsig", &m_lowdimuon_plusst1xsig, "plusst1xsig/F");
469     m_highdimuon->Branch("plusst1dxdz", &m_lowdimuon_plusst1dxdz, "plusst1dxdz/F");
470     m_highdimuon->Branch("plusst1dxdzsig", &m_lowdimuon_plusst1dxdzsig, "plusst1dxdzsig/F");
471     m_highdimuon->Branch("plushits", &m_lowdimuon_plushits, "plushits/I");
472     m_highdimuon->Branch("plusnormchi2", &m_lowdimuon_plusnormchi2, "plusnormchi2/F");
473     m_highdimuon->Branch("minusmatches", &m_lowdimuon_minusmatches, "minusmatches/I");
474     m_highdimuon->Branch("minusst1x", &m_lowdimuon_minusst1x, "minusst1x/F");
475     m_highdimuon->Branch("minusst1xsig", &m_lowdimuon_minusst1xsig, "minusst1xsig/F");
476     m_highdimuon->Branch("minusst1dxdz", &m_lowdimuon_minusst1dxdz, "minusst1dxdz/F");
477     m_highdimuon->Branch("minusst1dxdzsig", &m_lowdimuon_minusst1dxdzsig, "minusst1dxdzsig/F");
478     m_highdimuon->Branch("minushits", &m_lowdimuon_minushits, "minushits/I");
479     m_highdimuon->Branch("minusnormchi2", &m_lowdimuon_minusnormchi2, "minusnormchi2/F");
480 pivarski 1.1
481 pivarski 1.10 m_mujetplustracks = tFile->make<TTree>("mujetplustracks", "mujetplustracks");
482     m_mujetplustracks->Branch("qscale", &m_qscale, "qscale/F");
483     m_mujetplustracks->Branch("run", &m_run, "run/I");
484     m_mujetplustracks->Branch("event", &m_event, "event/I");
485     m_mujetplustracks->Branch("trigger", &m_trigger, "trigger/I");
486     m_mujetplustracks->Branch("muon1pt", &m_muon1pt, "muon1pt/F");
487     m_mujetplustracks->Branch("muon1eta", &m_muon1eta, "muon1eta/F");
488     m_mujetplustracks->Branch("muon2pt", &m_muon2pt, "muon2pt/F");
489     m_mujetplustracks->Branch("muon2eta", &m_muon2eta, "muon2eta/F");
490     m_mujetplustracks->Branch("muontrigpt", &m_muontrigpt, "muontrigpt/F");
491     m_mujetplustracks->Branch("muontrigeta", &m_muontrigeta, "muontrigeta/F");
492     m_mujetplustracks->Branch("containstrig", &m_mujetplustracks_containstrig, "containstrig/I");
493     m_mujetplustracks->Branch("muons", &m_mujetplustracks_muons, "muons/I");
494     m_mujetplustracks->Branch("fakes", &m_mujetplustracks_fakes, "fakes/I");
495 pivarski 1.11 m_mujetplustracks->Branch("charge", &m_mujetplustracks_charge, "charge/I");
496 pivarski 1.10 m_mujetplustracks->Branch("mass", &m_mujetplustracks_mass, "mass/F");
497 pivarski 1.11 m_mujetplustracks->Branch("massa", &m_mujetplustracks_massa, "massa/F");
498     m_mujetplustracks->Branch("massb", &m_mujetplustracks_massb, "massb/F");
499 pivarski 1.15 m_mujetplustracks->Branch("massatype", &m_mujetplustracks_massatype, "massatype/I");
500     m_mujetplustracks->Branch("massbtype", &m_mujetplustracks_massbtype, "massbtype/I");
501 pivarski 1.10 m_mujetplustracks->Branch("pt", &m_mujetplustracks_pt, "pt/F");
502     m_mujetplustracks->Branch("eta", &m_mujetplustracks_eta, "eta/F");
503     m_mujetplustracks->Branch("phi", &m_mujetplustracks_phi, "phi/F");
504     m_mujetplustracks->Branch("dr", &m_mujetplustracks_dr, "dr/F");
505     m_mujetplustracks->Branch("vprob", &m_mujetplustracks_vprob, "vprob/F");
506     m_mujetplustracks->Branch("lxy", &m_mujetplustracks_lxy, "lxy/F");
507     m_mujetplustracks->Branch("lxyz", &m_mujetplustracks_lxyz, "lxyz/F");
508     m_mujetplustracks->Branch("iso", &m_mujetplustracks_iso, "iso/F");
509     m_mujetplustracks->Branch("mupt1", &m_mujetplustracks_mupt1, "mupt1/F");
510     m_mujetplustracks->Branch("mupt2", &m_mujetplustracks_mupt2, "mupt2/F");
511     m_mujetplustracks->Branch("mupt3", &m_mujetplustracks_mupt3, "mupt3/F");
512     m_mujetplustracks->Branch("fakept1", &m_mujetplustracks_fakept1, "fakept1/F");
513     m_mujetplustracks->Branch("fakept2", &m_mujetplustracks_fakept2, "fakept2/F");
514 pivarski 1.1
515 pivarski 1.10 m_quadmuon = tFile->make<TTree>("quadmuon", "quadmuon");
516 pivarski 1.1 m_quadmuon->Branch("qscale", &m_qscale, "qscale/F");
517 pivarski 1.10 m_quadmuon->Branch("genLevel", &m_genLevel, "genLevel/I");
518 pivarski 1.1 m_quadmuon->Branch("run", &m_run, "run/I");
519     m_quadmuon->Branch("event", &m_event, "event/I");
520     m_quadmuon->Branch("trigger", &m_trigger, "trigger/I");
521 pivarski 1.3 m_quadmuon->Branch("muon1pt", &m_muon1pt, "muon1pt/F");
522     m_quadmuon->Branch("muon1eta", &m_muon1eta, "muon1eta/F");
523     m_quadmuon->Branch("muon2pt", &m_muon2pt, "muon2pt/F");
524     m_quadmuon->Branch("muon2eta", &m_muon2eta, "muon2eta/F");
525     m_quadmuon->Branch("muon3pt", &m_muon3pt, "muon3pt/F");
526     m_quadmuon->Branch("muon3eta", &m_muon3eta, "muon3eta/F");
527     m_quadmuon->Branch("muon4pt", &m_muon4pt, "muon4pt/F");
528     m_quadmuon->Branch("muon4eta", &m_muon4eta, "muon4eta/F");
529     m_quadmuon->Branch("muontrigpt", &m_muontrigpt, "muontrigpt/F");
530     m_quadmuon->Branch("muontrigeta", &m_muontrigeta, "muontrigeta/F");
531 pivarski 1.13 m_quadmuon->Branch("containstrig", &m_quadmuon_containstrig, "containstrig/I");
532     m_quadmuon->Branch("muons", &m_quadmuon_muons, "muons/I");
533     m_quadmuon->Branch("orphans", &m_quadmuon_orphans, "orphans/I");
534     m_quadmuon->Branch("charge", &m_quadmuon_charge, "charge/I");
535     m_quadmuon->Branch("mass", &m_quadmuon_mass, "mass/F");
536     m_quadmuon->Branch("massa", &m_quadmuon_massa, "massa/F");
537     m_quadmuon->Branch("massb", &m_quadmuon_massb, "massb/F");
538     m_quadmuon->Branch("massc", &m_quadmuon_massc, "massc/F");
539     m_quadmuon->Branch("massd", &m_quadmuon_massd, "massd/F");
540     m_quadmuon->Branch("masse", &m_quadmuon_masse, "masse/F");
541     m_quadmuon->Branch("massf", &m_quadmuon_massf, "massf/F");
542     m_quadmuon->Branch("pt", &m_quadmuon_pt, "pt/F");
543     m_quadmuon->Branch("eta", &m_quadmuon_eta, "eta/F");
544     m_quadmuon->Branch("phi", &m_quadmuon_phi, "phi/F");
545     m_quadmuon->Branch("dr", &m_quadmuon_dr, "dr/F");
546     m_quadmuon->Branch("vchi2", &m_quadmuon_vchi2, "vchi2/F");
547     m_quadmuon->Branch("vndof", &m_quadmuon_vndof, "vndof/I");
548     m_quadmuon->Branch("vprob", &m_quadmuon_vprob, "vprob/F");
549     m_quadmuon->Branch("lxy", &m_quadmuon_lxy, "lxy/F");
550     m_quadmuon->Branch("lxyz", &m_quadmuon_lxyz, "lxyz/F");
551     m_quadmuon->Branch("iso", &m_quadmuon_iso, "iso/F");
552 pivarski 1.1
553 pivarski 1.10 m_dimuorphan = tFile->make<TTree>("dimuorphan", "dimuorphan");
554 pivarski 1.8 m_dimuorphan->Branch("qscale", &m_qscale, "qscale/F");
555 pivarski 1.10 m_dimuorphan->Branch("genLevel", &m_genLevel, "genLevel/I");
556 pivarski 1.8 m_dimuorphan->Branch("run", &m_run, "run/I");
557     m_dimuorphan->Branch("event", &m_event, "event/I");
558     m_dimuorphan->Branch("trigger", &m_trigger, "trigger/I");
559     m_dimuorphan->Branch("muon1pt", &m_muon1pt, "muon1pt/F");
560     m_dimuorphan->Branch("muon1eta", &m_muon1eta, "muon1eta/F");
561     m_dimuorphan->Branch("muon2pt", &m_muon2pt, "muon2pt/F");
562     m_dimuorphan->Branch("muon2eta", &m_muon2eta, "muon2eta/F");
563     m_dimuorphan->Branch("muon3pt", &m_muon3pt, "muon3pt/F");
564     m_dimuorphan->Branch("muon3eta", &m_muon3eta, "muon3eta/F");
565     m_dimuorphan->Branch("muon4pt", &m_muon4pt, "muon4pt/F");
566     m_dimuorphan->Branch("muon4eta", &m_muon4eta, "muon4eta/F");
567     m_dimuorphan->Branch("muontrigpt", &m_muontrigpt, "muontrigpt/F");
568     m_dimuorphan->Branch("muontrigeta", &m_muontrigeta, "muontrigeta/F");
569     m_dimuorphan->Branch("deltaphi", &m_dimuorphan_deltaphi, "deltaphi/F");
570     m_dimuorphan->Branch("orphanpt", &m_dimuorphan_orphanpt, "orphanpt/F");
571     m_dimuorphan->Branch("orphaneta", &m_dimuorphan_orphaneta, "orphaneta/F");
572     m_dimuorphan->Branch("orphanphi", &m_dimuorphan_orphanphi, "orphanphi/F");
573 pivarski 1.9 m_dimuorphan->Branch("orphanisglobal", &m_dimuorphan_orphanisglobal, "orphanisglobal/I");
574     m_dimuorphan->Branch("orphanmatches", &m_dimuorphan_orphanmatches, "orphan/I");
575     m_dimuorphan->Branch("orphanhits", &m_dimuorphan_orphanhits, "orphanhits/I");
576     m_dimuorphan->Branch("orphanchi2", &m_dimuorphan_orphanchi2, "orphanchi2/F");
577     m_dimuorphan->Branch("orphanst1x", &m_dimuorphan_orphanst1x, "orphanst1x/F");
578     m_dimuorphan->Branch("orphanst1xsig", &m_dimuorphan_orphanst1xsig, "orphanst1xsig/F");
579     m_dimuorphan->Branch("orphanst1dxdz", &m_dimuorphan_orphanst1dxdz, "orphanst1dxdz/F");
580     m_dimuorphan->Branch("orphanst1dxdzsig", &m_dimuorphan_orphanst1dxdzsig, "orphanst1dxdzsig/F");
581 pivarski 1.8 m_dimuorphan->Branch("containstrig", &m_dimuorphan_containstrig, "containstrig/I");
582     m_dimuorphan->Branch("mass", &m_dimuorphan_mass, "mass/F");
583     m_dimuorphan->Branch("pt", &m_dimuorphan_pt, "pt/F");
584     m_dimuorphan->Branch("eta", &m_dimuorphan_eta, "eta/F");
585     m_dimuorphan->Branch("phi", &m_dimuorphan_phi, "phi/F");
586     m_dimuorphan->Branch("dr", &m_dimuorphan_dr, "dr/F");
587     m_dimuorphan->Branch("vprob", &m_dimuorphan_vprob, "vprob/F");
588     m_dimuorphan->Branch("lxy", &m_dimuorphan_lxy, "lxy/F");
589     m_dimuorphan->Branch("lxyz", &m_dimuorphan_lxyz, "lxyz/F");
590     m_dimuorphan->Branch("iso", &m_dimuorphan_iso, "iso/F");
591    
592 pivarski 1.10 m_dimudimu = tFile->make<TTree>("dimudimu", "dimudimu");
593 pivarski 1.1 m_dimudimu->Branch("qscale", &m_qscale, "qscale/F");
594 pivarski 1.10 m_dimudimu->Branch("genLevel", &m_genLevel, "genLevel/I");
595 pivarski 1.1 m_dimudimu->Branch("run", &m_run, "run/I");
596     m_dimudimu->Branch("event", &m_event, "event/I");
597     m_dimudimu->Branch("trigger", &m_trigger, "trigger/I");
598 pivarski 1.3 m_dimudimu->Branch("muon1pt", &m_muon1pt, "muon1pt/F");
599     m_dimudimu->Branch("muon1eta", &m_muon1eta, "muon1eta/F");
600     m_dimudimu->Branch("muon2pt", &m_muon2pt, "muon2pt/F");
601     m_dimudimu->Branch("muon2eta", &m_muon2eta, "muon2eta/F");
602     m_dimudimu->Branch("muon3pt", &m_muon3pt, "muon3pt/F");
603     m_dimudimu->Branch("muon3eta", &m_muon3eta, "muon3eta/F");
604     m_dimudimu->Branch("muon4pt", &m_muon4pt, "muon4pt/F");
605     m_dimudimu->Branch("muon4eta", &m_muon4eta, "muon4eta/F");
606     m_dimudimu->Branch("muontrigpt", &m_muontrigpt, "muontrigpt/F");
607     m_dimudimu->Branch("muontrigeta", &m_muontrigeta, "muontrigeta/F");
608 pivarski 1.13 m_dimudimu->Branch("orphans", &m_dimudimu_orphans, "orphans/I");
609 pivarski 1.7 m_dimudimu->Branch("wholemass", &m_dimudimu_wholemass, "wholemass/F");
610     m_dimudimu->Branch("wholept", &m_dimudimu_wholept, "wholept/F");
611     m_dimudimu->Branch("deltaphi", &m_dimudimu_deltaphi, "deltaphi/F");
612 pivarski 1.8 m_dimudimu->Branch("containstrig", &m_dimudimu_containstrig, "containstrig/I");
613     m_dimudimu->Branch("massC", &m_dimudimu_massC, "massC/F");
614     m_dimudimu->Branch("ptC", &m_dimudimu_ptC, "ptC/F");
615     m_dimudimu->Branch("etaC", &m_dimudimu_etaC, "etaC/F");
616     m_dimudimu->Branch("phiC", &m_dimudimu_phiC, "phiC/F");
617     m_dimudimu->Branch("drC", &m_dimudimu_drC, "drC/F");
618     m_dimudimu->Branch("vprobC", &m_dimudimu_vprobC, "vprobC/F");
619     m_dimudimu->Branch("lxyC", &m_dimudimu_lxyC, "lxyC/F");
620     m_dimudimu->Branch("lxyzC", &m_dimudimu_lxyzC, "lxyzC/F");
621     m_dimudimu->Branch("isoC", &m_dimudimu_isoC, "isoC/F");
622     m_dimudimu->Branch("massF", &m_dimudimu_massF, "massF/F");
623     m_dimudimu->Branch("ptF", &m_dimudimu_ptF, "ptF/F");
624     m_dimudimu->Branch("etaF", &m_dimudimu_etaF, "etaF/F");
625     m_dimudimu->Branch("phiF", &m_dimudimu_phiF, "phiF/F");
626     m_dimudimu->Branch("drF", &m_dimudimu_drF, "drF/F");
627     m_dimudimu->Branch("vprobF", &m_dimudimu_vprobF, "vprobF/F");
628     m_dimudimu->Branch("lxyF", &m_dimudimu_lxyF, "lxyF/F");
629     m_dimudimu->Branch("lxyzF", &m_dimudimu_lxyzF, "lxyzF/F");
630     m_dimudimu->Branch("isoF", &m_dimudimu_isoF, "isoF/F");
631 pivarski 1.1
632 pivarski 1.13 m_twomujets = tFile->make<TTree>("twomujets", "twomujets");
633     m_twomujets->Branch("qscale", &m_qscale, "qscale/F");
634     m_twomujets->Branch("genLevel", &m_genLevel, "genLevel/I");
635     m_twomujets->Branch("run", &m_run, "run/I");
636     m_twomujets->Branch("event", &m_event, "event/I");
637     m_twomujets->Branch("trigger", &m_trigger, "trigger/I");
638     m_twomujets->Branch("muon1pt", &m_muon1pt, "muon1pt/F");
639     m_twomujets->Branch("muon1eta", &m_muon1eta, "muon1eta/F");
640     m_twomujets->Branch("muon2pt", &m_muon2pt, "muon2pt/F");
641     m_twomujets->Branch("muon2eta", &m_muon2eta, "muon2eta/F");
642     m_twomujets->Branch("muon3pt", &m_muon3pt, "muon3pt/F");
643     m_twomujets->Branch("muon3eta", &m_muon3eta, "muon3eta/F");
644     m_twomujets->Branch("muon4pt", &m_muon4pt, "muon4pt/F");
645     m_twomujets->Branch("muon4eta", &m_muon4eta, "muon4eta/F");
646     m_twomujets->Branch("muontrigpt", &m_muontrigpt, "muontrigpt/F");
647     m_twomujets->Branch("muontrigeta", &m_muontrigeta, "muontrigeta/F");
648     m_twomujets->Branch("orphans", &m_dimudimu_orphans, "orphans/I");
649     m_twomujets->Branch("wholemass", &m_dimudimu_wholemass, "wholemass/F");
650     m_twomujets->Branch("wholept", &m_dimudimu_wholept, "wholept/F");
651     m_twomujets->Branch("deltaphi", &m_dimudimu_deltaphi, "deltaphi/F");
652     m_twomujets->Branch("containstrig", &m_dimudimu_containstrig, "containstrig/I");
653     m_twomujets->Branch("massC", &m_dimudimu_massC, "massC/F");
654     m_twomujets->Branch("ptC", &m_dimudimu_ptC, "ptC/F");
655     m_twomujets->Branch("etaC", &m_dimudimu_etaC, "etaC/F");
656     m_twomujets->Branch("phiC", &m_dimudimu_phiC, "phiC/F");
657     m_twomujets->Branch("drC", &m_dimudimu_drC, "drC/F");
658     m_twomujets->Branch("vprobC", &m_dimudimu_vprobC, "vprobC/F");
659     m_twomujets->Branch("lxyC", &m_dimudimu_lxyC, "lxyC/F");
660     m_twomujets->Branch("lxyzC", &m_dimudimu_lxyzC, "lxyzC/F");
661     m_twomujets->Branch("isoC", &m_dimudimu_isoC, "isoC/F");
662     m_twomujets->Branch("massF", &m_dimudimu_massF, "massF/F");
663     m_twomujets->Branch("ptF", &m_dimudimu_ptF, "ptF/F");
664     m_twomujets->Branch("etaF", &m_dimudimu_etaF, "etaF/F");
665     m_twomujets->Branch("phiF", &m_dimudimu_phiF, "phiF/F");
666     m_twomujets->Branch("drF", &m_dimudimu_drF, "drF/F");
667     m_twomujets->Branch("vprobF", &m_dimudimu_vprobF, "vprobF/F");
668     m_twomujets->Branch("lxyF", &m_dimudimu_lxyF, "lxyF/F");
669     m_twomujets->Branch("lxyzF", &m_dimudimu_lxyzF, "lxyzF/F");
670     m_twomujets->Branch("isoF", &m_dimudimu_isoF, "isoF/F");
671     m_twomujets->Branch("muonsC", &m_twomujets_muonsC, "muonsC/I");
672     m_twomujets->Branch("muonsF", &m_twomujets_muonsF, "muonsF/I");
673     m_twomujets->Branch("massCa", &m_twomujets_massCa, "massCa/F");
674     m_twomujets->Branch("massCb", &m_twomujets_massCb, "massCb/F");
675     m_twomujets->Branch("massCc", &m_twomujets_massCc, "massCc/F");
676     m_twomujets->Branch("massFa", &m_twomujets_massFa, "massFa/F");
677     m_twomujets->Branch("massFb", &m_twomujets_massFb, "massFb/F");
678     m_twomujets->Branch("massFc", &m_twomujets_massFc, "massFc/F");
679    
680     m_moremujets = tFile->make<TTree>("moremujets", "moremujets");
681     m_moremujets->Branch("qscale", &m_qscale, "qscale/F");
682     m_moremujets->Branch("genLevel", &m_genLevel, "genLevel/I");
683     m_moremujets->Branch("run", &m_run, "run/I");
684     m_moremujets->Branch("event", &m_event, "event/I");
685     m_moremujets->Branch("trigger", &m_trigger, "trigger/I");
686     m_moremujets->Branch("muon1pt", &m_muon1pt, "muon1pt/F");
687     m_moremujets->Branch("muon1eta", &m_muon1eta, "muon1eta/F");
688     m_moremujets->Branch("muon2pt", &m_muon2pt, "muon2pt/F");
689     m_moremujets->Branch("muon2eta", &m_muon2eta, "muon2eta/F");
690     m_moremujets->Branch("muon3pt", &m_muon3pt, "muon3pt/F");
691     m_moremujets->Branch("muon3eta", &m_muon3eta, "muon3eta/F");
692     m_moremujets->Branch("muon4pt", &m_muon4pt, "muon4pt/F");
693     m_moremujets->Branch("muon4eta", &m_muon4eta, "muon4eta/F");
694     m_moremujets->Branch("muontrigpt", &m_muontrigpt, "muontrigpt/F");
695     m_moremujets->Branch("muontrigeta", &m_muontrigeta, "muontrigeta/F");
696     m_moremujets->Branch("mujets", &m_moremujets_mujets, "mujets/I");
697     m_moremujets->Branch("orphans", &m_moremujets_orphans, "orphans/I");
698     m_moremujets->Branch("wholemass", &m_moremujets_wholemass, "wholemass/F");
699     m_moremujets->Branch("wholept", &m_moremujets_wholept, "wholept/F");
700     m_moremujets->Branch("massa", &m_moremujets_massa, "massa/F");
701     m_moremujets->Branch("massb", &m_moremujets_massb, "massb/F");
702     m_moremujets->Branch("massc", &m_moremujets_massc, "massc/F");
703     m_moremujets->Branch("massd", &m_moremujets_massd, "massd/F");
704     m_moremujets->Branch("masse", &m_moremujets_masse, "masse/F");
705     m_moremujets->Branch("massf", &m_moremujets_massf, "massf/F");
706     m_moremujets->Branch("muons1", &m_moremujets_muons1, "muons1/I");
707     m_moremujets->Branch("containstrig1", &m_moremujets_containstrig1, "containstrig1/I");
708     m_moremujets->Branch("mass1", &m_moremujets_mass1, "mass1/F");
709     m_moremujets->Branch("pt1", &m_moremujets_pt1, "pt1/F");
710     m_moremujets->Branch("iso1", &m_moremujets_iso1, "iso1/F");
711     m_moremujets->Branch("muons2", &m_moremujets_muons2, "muons2/I");
712     m_moremujets->Branch("containstrig2", &m_moremujets_containstrig2, "containstrig2/I");
713     m_moremujets->Branch("mass2", &m_moremujets_mass2, "mass2/F");
714     m_moremujets->Branch("pt2", &m_moremujets_pt2, "pt2/F");
715     m_moremujets->Branch("iso2", &m_moremujets_iso2, "iso2/F");
716     m_moremujets->Branch("muons3", &m_moremujets_muons3, "muons3/I");
717     m_moremujets->Branch("containstrig3", &m_moremujets_containstrig3, "containstrig3/I");
718     m_moremujets->Branch("mass3", &m_moremujets_mass3, "mass3/F");
719     m_moremujets->Branch("pt3", &m_moremujets_pt3, "pt3/F");
720     m_moremujets->Branch("iso3", &m_moremujets_iso3, "iso3/F");
721     m_moremujets->Branch("muons4", &m_moremujets_muons4, "muons4/I");
722     m_moremujets->Branch("containstrig4", &m_moremujets_containstrig4, "containstrig4/I");
723     m_moremujets->Branch("mass4", &m_moremujets_mass4, "mass4/F");
724     m_moremujets->Branch("pt4", &m_moremujets_pt4, "pt4/F");
725     m_moremujets->Branch("iso4", &m_moremujets_iso4, "iso4/F");
726     m_moremujets->Branch("muons5", &m_moremujets_muons5, "muons5/I");
727     m_moremujets->Branch("containstrig5", &m_moremujets_containstrig5, "containstrig5/I");
728     m_moremujets->Branch("mass5", &m_moremujets_mass5, "mass5/F");
729     m_moremujets->Branch("pt5", &m_moremujets_pt5, "pt5/F");
730     m_moremujets->Branch("iso5", &m_moremujets_iso5, "iso5/F");
731     m_moremujets->Branch("muons6", &m_moremujets_muons6, "muons6/I");
732     m_moremujets->Branch("containstrig6", &m_moremujets_containstrig6, "containstrig6/I");
733     m_moremujets->Branch("mass6", &m_moremujets_mass6, "mass6/F");
734     m_moremujets->Branch("pt6", &m_moremujets_pt6, "pt6/F");
735     m_moremujets->Branch("iso6", &m_moremujets_iso6, "iso6/F");
736 pivarski 1.14
737     m_displaced = tFile->make<TTree>("displaced", "displaced");
738     m_displaced->Branch("qscale", &m_qscale, "qscale/F");
739     m_displaced->Branch("genLevel", &m_genLevel, "genLevel/I");
740     m_displaced->Branch("run", &m_run, "run/I");
741     m_displaced->Branch("event", &m_event, "event/I");
742     m_displaced->Branch("trigger", &m_trigger, "trigger/I");
743     m_displaced->Branch("muon1pt", &m_muon1pt, "muon1pt/F");
744     m_displaced->Branch("muon1eta", &m_muon1eta, "muon1eta/F");
745     m_displaced->Branch("muon2pt", &m_muon2pt, "muon2pt/F");
746     m_displaced->Branch("muon2eta", &m_muon2eta, "muon2eta/F");
747     m_displaced->Branch("muon3pt", &m_muon3pt, "muon3pt/F");
748     m_displaced->Branch("muon3eta", &m_muon3eta, "muon3eta/F");
749     m_displaced->Branch("muon4pt", &m_muon4pt, "muon4pt/F");
750     m_displaced->Branch("muon4eta", &m_muon4eta, "muon4eta/F");
751     m_displaced->Branch("muontrigpt", &m_muontrigpt, "muontrigpt/F");
752     m_displaced->Branch("muontrigeta", &m_muontrigeta, "muontrigeta/F");
753     m_displaced->Branch("mujets", &m_displaced_mujets, "mujets/I");
754     m_displaced->Branch("orphans", &m_displaced_orphans, "orphans/I");
755     m_displaced->Branch("muons", &m_displaced_muons, "muons/I");
756     m_displaced->Branch("mass", &m_displaced_mass, "mass/F");
757     m_displaced->Branch("pt", &m_displaced_pt, "pt/F");
758     m_displaced->Branch("eta", &m_displaced_eta, "eta/F");
759     m_displaced->Branch("phi", &m_displaced_phi, "phi/F");
760     m_displaced->Branch("vx", &m_displaced_vx, "vx/F");
761     m_displaced->Branch("vy", &m_displaced_vy, "vy/F");
762     m_displaced->Branch("vz", &m_displaced_vz, "vz/F");
763     m_displaced->Branch("zclosest", &m_displaced_zclosest, "zclosest/F");
764     m_displaced->Branch("zcloseness", &m_displaced_zcloseness, "zcloseness/F");
765     m_displaced->Branch("lxy", &m_displaced_lxy, "lxy/F");
766     m_displaced->Branch("lxyz", &m_displaced_lxyz, "lxyz/F");
767     m_displaced->Branch("iso", &m_displaced_iso, "iso/F");
768     m_displaced->Branch("vprob", &m_displaced_vprob, "vprob/F");
769     m_displaced->Branch("mupt1", &m_displaced_mupt1, "mupt1/F");
770     m_displaced->Branch("mupt2", &m_displaced_mupt2, "mupt2/F");
771     m_displaced->Branch("plusmatches", &m_displaced_plusmatches, "plusmatches/I");
772     m_displaced->Branch("plusst1x", &m_displaced_plusst1x, "plusst1x/F");
773     m_displaced->Branch("plusst1xsig", &m_displaced_plusst1xsig, "plusst1xsig/F");
774     m_displaced->Branch("plusst1dxdz", &m_displaced_plusst1dxdz, "plusst1dxdz/F");
775     m_displaced->Branch("plusst1dxdzsig", &m_displaced_plusst1dxdzsig, "plusst1dxdzsig/F");
776     m_displaced->Branch("plushits", &m_displaced_plushits, "plushits/I");
777     m_displaced->Branch("plusnormchi2", &m_displaced_plusnormchi2, "plusnormchi2/F");
778     m_displaced->Branch("minusmatches", &m_displaced_minusmatches, "minusmatches/I");
779     m_displaced->Branch("minusst1x", &m_displaced_minusst1x, "minusst1x/F");
780     m_displaced->Branch("minusst1xsig", &m_displaced_minusst1xsig, "minusst1xsig/F");
781     m_displaced->Branch("minusst1dxdz", &m_displaced_minusst1dxdz, "minusst1dxdz/F");
782     m_displaced->Branch("minusst1dxdzsig", &m_displaced_minusst1dxdzsig, "minusst1dxdzsig/F");
783     m_displaced->Branch("minushits", &m_displaced_minushits, "minushits/I");
784     m_displaced->Branch("minusnormchi2", &m_displaced_minusnormchi2, "minusnormchi2/F");
785    
786     m_displacedFake = tFile->make<TTree>("displacedFake", "displacedFake");
787     m_displacedFake->Branch("qscale", &m_qscale, "qscale/F");
788     m_displacedFake->Branch("genLevel", &m_genLevel, "genLevel/I");
789     m_displacedFake->Branch("run", &m_run, "run/I");
790     m_displacedFake->Branch("event", &m_event, "event/I");
791     m_displacedFake->Branch("trigger", &m_trigger, "trigger/I");
792     m_displacedFake->Branch("muon1pt", &m_muon1pt, "muon1pt/F");
793     m_displacedFake->Branch("muon1eta", &m_muon1eta, "muon1eta/F");
794     m_displacedFake->Branch("muon2pt", &m_muon2pt, "muon2pt/F");
795     m_displacedFake->Branch("muon2eta", &m_muon2eta, "muon2eta/F");
796     m_displacedFake->Branch("muon3pt", &m_muon3pt, "muon3pt/F");
797     m_displacedFake->Branch("muon3eta", &m_muon3eta, "muon3eta/F");
798     m_displacedFake->Branch("muon4pt", &m_muon4pt, "muon4pt/F");
799     m_displacedFake->Branch("muon4eta", &m_muon4eta, "muon4eta/F");
800     m_displacedFake->Branch("muontrigpt", &m_muontrigpt, "muontrigpt/F");
801     m_displacedFake->Branch("muontrigeta", &m_muontrigeta, "muontrigeta/F");
802     m_displacedFake->Branch("mujets", &m_displaced_mujets, "mujets/I");
803     m_displacedFake->Branch("orphans", &m_displaced_orphans, "orphans/I");
804     m_displacedFake->Branch("muons", &m_displaced_muons, "muons/I");
805     m_displacedFake->Branch("mass", &m_displaced_mass, "mass/F");
806     m_displacedFake->Branch("pt", &m_displaced_pt, "pt/F");
807     m_displacedFake->Branch("eta", &m_displaced_eta, "eta/F");
808     m_displacedFake->Branch("phi", &m_displaced_phi, "phi/F");
809     m_displacedFake->Branch("vx", &m_displaced_vx, "vx/F");
810     m_displacedFake->Branch("vy", &m_displaced_vy, "vy/F");
811     m_displacedFake->Branch("vz", &m_displaced_vz, "vz/F");
812     m_displacedFake->Branch("zclosest", &m_displaced_zclosest, "zclosest/F");
813     m_displacedFake->Branch("zcloseness", &m_displaced_zcloseness, "zcloseness/F");
814     m_displacedFake->Branch("lxy", &m_displaced_lxy, "lxy/F");
815     m_displacedFake->Branch("lxyz", &m_displaced_lxyz, "lxyz/F");
816     m_displacedFake->Branch("iso", &m_displaced_iso, "iso/F");
817     m_displacedFake->Branch("vprob", &m_displaced_vprob, "vprob/F");
818     m_displacedFake->Branch("mupt1", &m_displaced_mupt1, "mupt1/F");
819     m_displacedFake->Branch("mupt2", &m_displaced_mupt2, "mupt2/F");
820     m_displacedFake->Branch("plusmatches", &m_displaced_plusmatches, "plusmatches/I");
821     m_displacedFake->Branch("plusst1x", &m_displaced_plusst1x, "plusst1x/F");
822     m_displacedFake->Branch("plusst1xsig", &m_displaced_plusst1xsig, "plusst1xsig/F");
823     m_displacedFake->Branch("plusst1dxdz", &m_displaced_plusst1dxdz, "plusst1dxdz/F");
824     m_displacedFake->Branch("plusst1dxdzsig", &m_displaced_plusst1dxdzsig, "plusst1dxdzsig/F");
825     m_displacedFake->Branch("plushits", &m_displaced_plushits, "plushits/I");
826     m_displacedFake->Branch("plusnormchi2", &m_displaced_plusnormchi2, "plusnormchi2/F");
827     m_displacedFake->Branch("minusmatches", &m_displaced_minusmatches, "minusmatches/I");
828     m_displacedFake->Branch("minusst1x", &m_displaced_minusst1x, "minusst1x/F");
829     m_displacedFake->Branch("minusst1xsig", &m_displaced_minusst1xsig, "minusst1xsig/F");
830     m_displacedFake->Branch("minusst1dxdz", &m_displaced_minusst1dxdz, "minusst1dxdz/F");
831     m_displacedFake->Branch("minusst1dxdzsig", &m_displaced_minusst1dxdzsig, "minusst1dxdzsig/F");
832     m_displacedFake->Branch("minushits", &m_displaced_minushits, "minushits/I");
833     m_displacedFake->Branch("minusnormchi2", &m_displaced_minusnormchi2, "minusnormchi2/F");
834     m_displacedFake->Branch("fakes", &m_displacedFake_fakes, "fakes/I");
835 pivarski 1.1 }
836    
837    
838     FitNtuple::~FitNtuple()
839     {
840    
841     // do anything here that needs to be done at desctruction time
842     // (e.g. close files, deallocate resources etc.)
843    
844     }
845    
846    
847     //
848     // member functions
849     //
850    
851     // ------------ method called to for each event ------------
852     void
853     FitNtuple::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup)
854     {
855     // the QCD scale only exists for certain kinds of Monte Carlo, but if it's available, get it
856     m_qscale = 0.;
857     if (m_getQscale) {
858     edm::Handle<GenEventInfoProduct> genEventInfoProduct;
859     iEvent.getByLabel("generator", genEventInfoProduct);
860     m_qscale = genEventInfoProduct->qScale();
861     }
862    
863     // the pair-gun Monte Carlos have a (never used) feature called
864     // alteration; the real events are the ones in which particleNumber == 0
865     bool alternating = true;
866     if (m_getAlternating) {
867     edm::Handle<unsigned int> particleNumber;
868     iEvent.getByLabel("generator", "particleNumber", particleNumber);
869     alternating = (*particleNumber == 0);
870     }
871     if (!alternating) return;
872    
873     // get the run and event number
874     m_run = iEvent.id().run();
875     m_event = iEvent.id().event();
876    
877     // mu-jets (muons grouped by mass and vertex compatibility)
878     edm::Handle<pat::MultiMuonCollection> muJets;
879 pivarski 1.15 iEvent.getByLabel(m_muJets, muJets);
880 pivarski 1.1
881 pivarski 1.8 // orphans (muons not found in any group)
882     edm::Handle<pat::MuonCollection> orphans;
883 pivarski 1.15 iEvent.getByLabel(m_muJetOrphans, orphans);
884 pivarski 1.10
885     // mu-jets plus at most two tracks as fake muons
886     edm::Handle<pat::MultiMuonCollection> muJetPlusTracks;
887 pivarski 1.15 iEvent.getByLabel(m_muJetPlusTracks, muJetPlusTracks);
888 pivarski 1.1
889 pivarski 1.14 edm::Handle<pat::MultiMuonCollection> displacedMuJet;
890     iEvent.getByLabel("DisplacedMuJet", displacedMuJet);
891    
892     edm::Handle<pat::MultiMuonCollection> displacedMuJetFake;
893     iEvent.getByLabel("DisplacedMuJetFake", displacedMuJetFake);
894    
895 pivarski 1.3 // find the top four muons in the event (-1000. if not found)
896     edm::Handle<pat::MuonCollection> muons;
897 pivarski 1.10 iEvent.getByLabel("cleanPatMuonsTriggerMatch", muons);
898 pivarski 1.3 m_muon1pt = -1000.; m_muon1eta = -1000.;
899     m_muon2pt = -1000.; m_muon2eta = -1000.;
900     m_muon3pt = -1000.; m_muon3eta = -1000.;
901     m_muon4pt = -1000.; m_muon4eta = -1000.;
902     m_muontrigpt = -1000.; m_muontrigeta = -1000.;
903 pivarski 1.10 std::vector<pat::MuonCollection::const_iterator> muontrig;
904    
905 pivarski 1.3 for (pat::MuonCollection::const_iterator muon = muons->begin(); muon != muons->end(); ++muon) {
906     if (fabs(muon->eta()) < 2.4 && muon->isTrackerMuon() && muon->numberOfMatches(reco::Muon::SegmentAndTrackArbitration) >= 2 && muon->innerTrack()->numberOfValidHits() >= 8 && muon->innerTrack()->normalizedChi2() < 4.) {
907     if (muon->pt() > m_muon1pt) {
908     m_muon4pt = m_muon3pt; m_muon4eta = m_muon3eta;
909     m_muon3pt = m_muon2pt; m_muon3eta = m_muon2eta;
910     m_muon2pt = m_muon1pt; m_muon2eta = m_muon1eta;
911     m_muon1pt = muon->pt(); m_muon1eta = muon->eta();
912     }
913     else if (muon->pt() > m_muon2pt) {
914     m_muon4pt = m_muon3pt; m_muon4eta = m_muon3eta;
915     m_muon3pt = m_muon2pt; m_muon3eta = m_muon2eta;
916     m_muon2pt = muon->pt(); m_muon2eta = muon->eta();
917     }
918     else if (muon->pt() > m_muon3pt) {
919     m_muon4pt = m_muon3pt; m_muon4eta = m_muon3eta;
920     m_muon3pt = muon->pt(); m_muon3eta = muon->eta();
921     }
922     else if (muon->pt() > m_muon4pt) {
923     m_muon4pt = muon->pt(); m_muon4eta = muon->eta();
924     }
925    
926     // special muon within a more limited |eta| range, to guarantee the trigger
927 pivarski 1.8 if (fabs(muon->eta()) < 0.9) {
928 pivarski 1.3 if (muon->pt() > m_muontrigpt) {
929     m_muontrigpt = muon->pt(); m_muontrigeta = muon->eta();
930     }
931     }
932 pivarski 1.8
933 pivarski 1.10 // all muons with pT > 15 GeV/c and |eta| < 0.9, matched to a trigger object
934     if (muon->pt() > 15. && fabs(muon->eta()) < 0.9) {
935     const pat::TriggerObjectStandAlone *mu3 = muon->triggerObjectMatchByPath("HLT_Mu3");
936     const pat::TriggerObjectStandAlone *mu5 = muon->triggerObjectMatchByPath("HLT_Mu5");
937     const pat::TriggerObjectStandAlone *mu9 = muon->triggerObjectMatchByPath("HLT_Mu9");
938     const pat::TriggerObjectStandAlone *mu11 = muon->triggerObjectMatchByPath("HLT_Mu11");
939 pivarski 1.12 const pat::TriggerObjectStandAlone *mu15 = muon->triggerObjectMatchByPath("HLT_Mu15_v1");
940 pivarski 1.10
941     if ((mu3 != NULL && mu3->collection() == std::string("hltL3MuonCandidates::HLT") && mu3->pt() > 15.) ||
942     (mu5 != NULL && mu5->collection() == std::string("hltL3MuonCandidates::HLT") && mu5->pt() > 15.) ||
943     (mu9 != NULL && mu9->collection() == std::string("hltL3MuonCandidates::HLT") && mu9->pt() > 15.) ||
944     (mu11 != NULL && mu11->collection() == std::string("hltL3MuonCandidates::HLT") && mu11->pt() > 15.) ||
945     (mu15 != NULL && mu15->collection() == std::string("hltL3MuonCandidates::HLT") && mu15->pt() > 15.)) {
946     muontrig.push_back(muon);
947 pivarski 1.8 }
948     }
949 pivarski 1.3 }
950     }
951 pivarski 1.1
952     // // all tracker-tracks
953     // edm::Handle<reco::TrackCollection> tracks;
954     // iEvent.getByLabel("generalTracks", tracks);
955    
956     // // generator-level 4-vectors
957     // edm::Handle<reco::GenParticleCollection> genParticles;
958     // iEvent.getByLabel("genParticles", genParticles);
959    
960     // find the closest primary vertex (in Z) to the first muJet with a valid vertex
961     edm::Handle<reco::VertexCollection> primaryVertices;
962     iEvent.getByLabel("offlinePrimaryVertices", primaryVertices);
963     reco::VertexCollection::const_iterator closestPrimaryVertex = primaryVertices->end();
964     if (muJets->size() > 0) {
965     pat::MultiMuonCollection::const_iterator muJet0 = muJets->end();
966     for (pat::MultiMuonCollection::const_iterator muJet = muJets->begin(); muJet != muJets->end(); ++muJet) {
967     if (muJet->vertexValid()) {
968     muJet0 = muJet;
969     break;
970     }
971     }
972    
973     if (muJet0 != muJets->end()) {
974     for (reco::VertexCollection::const_iterator vertex = primaryVertices->begin(); vertex != primaryVertices->end(); ++vertex) {
975     if (vertex->isValid() && !vertex->isFake() && vertex->tracksSize() > 3 && fabs(vertex->z()) < 24.) {
976     if (closestPrimaryVertex == primaryVertices->end() || fabs(vertex->z() - muJet0->vertexPoint().z()) < fabs(closestPrimaryVertex->z() - muJet0->vertexPoint().z())) {
977     closestPrimaryVertex = vertex;
978     }
979     } // end vertex quality cuts
980     } // end loop over primary vertices
981     } // end if muJet0 exists
982     } // end if muJets->size > 0
983    
984     // find out which trigger bits were fired
985     edm::Handle<pat::TriggerEvent> triggerEvent;
986     iEvent.getByLabel("patTriggerEvent", triggerEvent);
987     m_trigger = 0;
988     if (triggerEvent->path("HLT_Mu5") && triggerEvent->path("HLT_Mu5")->wasAccept()) m_trigger += 1;
989     if (triggerEvent->path("HLT_Mu9") && triggerEvent->path("HLT_Mu9")->wasAccept()) m_trigger += 2;
990     if (triggerEvent->path("HLT_Mu11") && triggerEvent->path("HLT_Mu11")->wasAccept()) m_trigger += 4;
991 pivarski 1.12 if (triggerEvent->path("HLT_Mu15_v1") && triggerEvent->path("HLT_Mu15_v1")->wasAccept()) m_trigger += 8;
992 pivarski 1.14 if (triggerEvent->path("HLT_Mu20_NoVertex") && triggerEvent->path("HLT_Mu20_NoVertex")->wasAccept()) m_trigger += 16;
993 pivarski 1.10
994     // get some gen-level information
995     m_genLevel = -1;
996     if (m_fillGenLevel) {
997     bool any_missing_mcmatch = false;
998     bool any_decays_in_flight = false;
999     unsigned int bjets = 0;
1000     unsigned int resonances = 0;
1001     for (pat::MultiMuonCollection::const_iterator muJet = muJets->begin(); muJet != muJets->end(); ++muJet) {
1002     for (unsigned int i = 0; i < muJet->numberOfDaughters(); i++) {
1003     const pat::Muon *muon = dynamic_cast<const pat::Muon*>(muJet->daughter(i));
1004    
1005     if (muon->genParticlesSize() == 0) any_missing_mcmatch = true;
1006    
1007     else if (muon->genParticle()->mother()) {
1008     int mother = muon->genParticle()->mother()->pdgId();
1009     if (abs(mother) == 13 && muon->genParticle()->mother()->mother()) muon->genParticle()->mother()->mother()->pdgId(); // don't let muons be their own mothers
1010    
1011     if (abs(mother) == 211 /* charged pion */ ||
1012     abs(mother) == 321 /* charged kaon */ ||
1013     (3000 <= abs(mother) && abs(mother) < 4000) /* strange baryon */ ) any_decays_in_flight = true;
1014     }
1015     }
1016    
1017     if (muJet->genParticlesSize() == 1) {
1018     for (const reco::Candidate *particle = muJet->genParticle(); particle != NULL; particle = particle->mother()) {
1019     int pdgId = particle->pdgId();
1020     if (abs(pdgId) == 511 ||
1021     abs(pdgId) == 521 ||
1022     abs(pdgId) == 513 ||
1023     abs(pdgId) == 523 ||
1024     abs(pdgId) == 515 ||
1025     abs(pdgId) == 525 ||
1026     abs(pdgId) == 531 ||
1027     abs(pdgId) == 533 ||
1028     abs(pdgId) == 535 ||
1029     abs(pdgId) == 541 ||
1030     abs(pdgId) == 543 ||
1031     abs(pdgId) == 545 ||
1032     (5000 <= abs(pdgId) && abs(pdgId) < 6000)) {
1033     bjets++;
1034     break;
1035     }
1036     }
1037    
1038     if (muJet->genParticle()->pdgId() == 113 /* rho */ ||
1039     muJet->genParticle()->pdgId() == 221 /* eta */ ||
1040     muJet->genParticle()->pdgId() == 223 /* omega(782) */ ||
1041     muJet->genParticle()->pdgId() == 333 /* phi(1020) */ ||
1042     muJet->genParticle()->pdgId() == 443 /* J/psi */ ||
1043     muJet->genParticle()->pdgId() == 100443 /* psi(2S) */ ) {
1044     resonances++;
1045     }
1046     }
1047     }
1048    
1049     m_genLevel = 0;
1050     if (bjets > 0 && bjets == muJets->size()) m_genLevel += 1;
1051     if (resonances > 0 && resonances == muJets->size()) m_genLevel += 2;
1052     if (any_decays_in_flight) m_genLevel += 4;
1053     if (any_missing_mcmatch) m_genLevel += 8;
1054     }
1055 pivarski 1.1
1056 pivarski 1.7 ////////////////////////////////////////////////////////// alldimuons (special case for scaling to the Z)
1057     if (muons->size() == 2) {
1058     double total_energy = (*muons)[0].energy() + (*muons)[1].energy();
1059     double total_px = (*muons)[0].px() + (*muons)[1].px();
1060     double total_py = (*muons)[0].py() + (*muons)[1].py();
1061     double total_pz = (*muons)[0].pz() + (*muons)[1].pz();
1062     m_alldimuons_mass = sqrt(total_energy*total_energy - total_px*total_px - total_py*total_py - total_pz*total_pz);
1063     if (muJets->size() == 1 && (*muJets)[0].numberOfDaughters() == 2) {
1064     m_alldimuons_iso = (*muJets)[0].centralTrackIsolation();
1065     }
1066     else {
1067     m_alldimuons_iso = -1.;
1068     }
1069     m_alldimuons->Fill();
1070     }
1071    
1072 pivarski 1.13 ////////////////////////////////////////////////////////// lowdimuon and highdimuon:
1073     if (muJets->size() == 1 && (*muJets)[0].numberOfDaughters() == 2 && orphans->size() == 0) {
1074 pivarski 1.1 pat::MultiMuonCollection::const_iterator muJet = muJets->begin();
1075    
1076 pivarski 1.10 m_lowdimuon_containstrig = 0;
1077     for (std::vector<pat::MuonCollection::const_iterator>::const_iterator iter = muontrig.begin(); iter != muontrig.end(); ++iter) {
1078     if (muJet->muon(0)->innerTrack().isAvailable() && (*iter)->innerTrack().isAvailable() &&
1079     muJet->sameTrack(&*(muJet->muon(0)->innerTrack()), &*((*iter)->innerTrack()))) {
1080     m_lowdimuon_containstrig = 1;
1081     }
1082     if (muJet->muon(1)->innerTrack().isAvailable() && (*iter)->innerTrack().isAvailable() &&
1083     muJet->sameTrack(&*(muJet->muon(1)->innerTrack()), &*((*iter)->innerTrack()))) {
1084     m_lowdimuon_containstrig = 1;
1085     }
1086     }
1087    
1088 pivarski 1.1 // generator-level mass using matched genParticles (for resolution of fit peak)
1089     m_lowdimuon_genmass = -1000.;
1090 pivarski 1.5 if (muJet->muon(0)->genParticlesSize() == 1 && muJet->muon(1)->genParticlesSize() == 1) {
1091 pivarski 1.4 const reco::GenParticle *mu0 = muJet->muon(0)->genParticle();
1092     const reco::GenParticle *mu1 = muJet->muon(1)->genParticle();
1093 pivarski 1.1
1094     double total_energy = mu0->energy() + mu1->energy();
1095     double total_px = mu0->px() + mu1->px();
1096     double total_py = mu0->py() + mu1->py();
1097     double total_pz = mu0->pz() + mu1->pz();
1098     m_lowdimuon_genmass = sqrt(total_energy*total_energy - total_px*total_px - total_py*total_py - total_pz*total_pz);
1099     }
1100    
1101     m_lowdimuon_mass = muJet->mass();
1102     m_lowdimuon_pt = muJet->pt();
1103     m_lowdimuon_eta = muJet->eta();
1104     m_lowdimuon_phi = muJet->phi();
1105     m_lowdimuon_dr = muJet->dRmax();
1106 pivarski 1.3 if (muJet->daughter(0)->charge() > 0) {
1107     m_lowdimuon_pluspx = muJet->daughter(0)->px();
1108     m_lowdimuon_pluspy = muJet->daughter(0)->py();
1109     m_lowdimuon_pluspz = muJet->daughter(0)->pz();
1110     m_lowdimuon_minuspx = muJet->daughter(1)->px();
1111     m_lowdimuon_minuspy = muJet->daughter(1)->py();
1112     m_lowdimuon_minuspz = muJet->daughter(1)->pz();
1113     }
1114     else {
1115     m_lowdimuon_pluspx = muJet->daughter(1)->px();
1116     m_lowdimuon_pluspy = muJet->daughter(1)->py();
1117     m_lowdimuon_pluspz = muJet->daughter(1)->pz();
1118     m_lowdimuon_minuspx = muJet->daughter(0)->px();
1119     m_lowdimuon_minuspy = muJet->daughter(0)->py();
1120     m_lowdimuon_minuspz = muJet->daughter(0)->pz();
1121     }
1122 pivarski 1.1 m_lowdimuon_vprob = -1000.;
1123     m_lowdimuon_vx = -1000.;
1124     m_lowdimuon_vy = -1000.;
1125     m_lowdimuon_vz = -1000.;
1126    
1127 pivarski 1.2 GlobalVector complus;
1128 pivarski 1.6 if (muJet->daughter(0)->charge() > 0) complus = muJet->daughterCOM(0);
1129     else complus = muJet->daughterCOM(1);
1130 pivarski 1.2 m_lowdimuon_compluspx = complus.x();
1131     m_lowdimuon_compluspy = complus.y();
1132     m_lowdimuon_compluspz = complus.z();
1133    
1134 pivarski 1.6 if (muJet->daughter(0)->charge() > 0) complus = muJet->daughterCOMrot(0);
1135     else complus = muJet->daughterCOMrot(1);
1136     m_lowdimuon_comrotpluspx = complus.x();
1137     m_lowdimuon_comrotpluspy = complus.y();
1138     m_lowdimuon_comrotpluspz = complus.z();
1139    
1140 pivarski 1.2 // replace all values with vertex-updated values if vertex fitting succeeded
1141 pivarski 1.1 if (muJet->vertexValid()) {
1142     m_lowdimuon_mass = muJet->vertexMass();
1143     m_lowdimuon_pt = muJet->vertexMomentum().perp();
1144     m_lowdimuon_eta = muJet->vertexMomentum().eta();
1145     m_lowdimuon_phi = muJet->vertexMomentum().phi();
1146     m_lowdimuon_dr = muJet->dRmax(true);
1147 pivarski 1.3 if (muJet->daughter(0)->charge() > 0) {
1148     m_lowdimuon_pluspx = muJet->vertexMomentum(0).x();
1149     m_lowdimuon_pluspy = muJet->vertexMomentum(0).y();
1150     m_lowdimuon_pluspz = muJet->vertexMomentum(0).z();
1151     m_lowdimuon_minuspx = muJet->vertexMomentum(1).x();
1152     m_lowdimuon_minuspy = muJet->vertexMomentum(1).y();
1153     m_lowdimuon_minuspz = muJet->vertexMomentum(1).z();
1154     }
1155     else {
1156     m_lowdimuon_pluspx = muJet->vertexMomentum(1).x();
1157     m_lowdimuon_pluspy = muJet->vertexMomentum(1).y();
1158     m_lowdimuon_pluspz = muJet->vertexMomentum(1).z();
1159     m_lowdimuon_minuspx = muJet->vertexMomentum(0).x();
1160     m_lowdimuon_minuspy = muJet->vertexMomentum(0).y();
1161     m_lowdimuon_minuspz = muJet->vertexMomentum(0).z();
1162     }
1163 pivarski 1.1 m_lowdimuon_vprob = muJet->vertexProb();
1164    
1165     if (closestPrimaryVertex != primaryVertices->end()) {
1166     m_lowdimuon_vx = muJet->vertexPoint().x() - closestPrimaryVertex->x();
1167     m_lowdimuon_vy = muJet->vertexPoint().y() - closestPrimaryVertex->y();
1168     m_lowdimuon_vz = muJet->vertexPoint().z() - closestPrimaryVertex->z();
1169     }
1170    
1171 pivarski 1.2 GlobalVector complus;
1172 pivarski 1.6 if (muJet->daughter(0)->charge() > 0) complus = muJet->daughterCOM(0, true);
1173     else complus = muJet->daughterCOM(1, true);
1174 pivarski 1.2 m_lowdimuon_compluspx = complus.x();
1175     m_lowdimuon_compluspy = complus.y();
1176     m_lowdimuon_compluspz = complus.z();
1177 pivarski 1.6
1178     if (muJet->daughter(0)->charge() > 0) complus = muJet->daughterCOMrot(0, true);
1179     else complus = muJet->daughterCOMrot(1, true);
1180     m_lowdimuon_comrotpluspx = complus.x();
1181     m_lowdimuon_comrotpluspy = complus.y();
1182     m_lowdimuon_comrotpluspz = complus.z();
1183    
1184 pivarski 1.1 } // end of replacements with quantities measured at the vertex
1185    
1186     m_lowdimuon_iso = muJet->centralTrackIsolation();
1187    
1188 pivarski 1.6 std::vector<reco::MuonChamberMatch> plusmatches, minusmatches;
1189     if (muJet->daughter(0)->charge() > 0) {
1190     m_lowdimuon_plusmatches = muJet->muon(0)->numberOfMatches(reco::Muon::SegmentAndTrackArbitration);
1191     m_lowdimuon_minusmatches = muJet->muon(1)->numberOfMatches(reco::Muon::SegmentAndTrackArbitration);
1192     plusmatches = muJet->muon(0)->matches();
1193     minusmatches = muJet->muon(1)->matches();
1194     m_lowdimuon_plushits = muJet->muon(0)->innerTrack()->numberOfValidHits();
1195     m_lowdimuon_minushits = muJet->muon(1)->innerTrack()->numberOfValidHits();
1196     m_lowdimuon_plusnormchi2 = muJet->muon(0)->innerTrack()->normalizedChi2();
1197     m_lowdimuon_minusnormchi2 = muJet->muon(1)->innerTrack()->normalizedChi2();
1198     }
1199     else {
1200     m_lowdimuon_plusmatches = muJet->muon(1)->numberOfMatches(reco::Muon::SegmentAndTrackArbitration);
1201     m_lowdimuon_minusmatches = muJet->muon(0)->numberOfMatches(reco::Muon::SegmentAndTrackArbitration);
1202     plusmatches = muJet->muon(1)->matches();
1203     minusmatches = muJet->muon(0)->matches();
1204     m_lowdimuon_plushits = muJet->muon(1)->innerTrack()->numberOfValidHits();
1205     m_lowdimuon_minushits = muJet->muon(0)->innerTrack()->numberOfValidHits();
1206     m_lowdimuon_plusnormchi2 = muJet->muon(1)->innerTrack()->normalizedChi2();
1207     m_lowdimuon_minusnormchi2 = muJet->muon(0)->innerTrack()->normalizedChi2();
1208     }
1209    
1210     m_lowdimuon_plusst1x = -1000.;
1211     m_lowdimuon_plusst1xsig = -1000.;
1212     m_lowdimuon_plusst1dxdz = -1000.;
1213     m_lowdimuon_plusst1dxdzsig = -1000.;
1214     for (std::vector<reco::MuonChamberMatch>::const_iterator chamberMatch = plusmatches.begin(); chamberMatch != plusmatches.end(); ++chamberMatch) {
1215     for (std::vector<reco::MuonSegmentMatch>::const_iterator segmentMatch = chamberMatch->segmentMatches.begin(); segmentMatch != chamberMatch->segmentMatches.end(); ++segmentMatch) {
1216     if (segmentMatch->isMask(reco::MuonSegmentMatch::BestInChamberByDR) &&
1217     segmentMatch->isMask(reco::MuonSegmentMatch::BelongsToTrackByDR)) {
1218     if (chamberMatch->station() == 1) {
1219     m_lowdimuon_plusst1x = (segmentMatch->x - chamberMatch->x);
1220     m_lowdimuon_plusst1xsig = (segmentMatch->x - chamberMatch->x)/sqrt(pow(segmentMatch->xErr, 2) + pow(chamberMatch->xErr, 2));
1221     m_lowdimuon_plusst1dxdz = (segmentMatch->dXdZ - chamberMatch->dXdZ);
1222     m_lowdimuon_plusst1dxdzsig = (segmentMatch->dXdZ - chamberMatch->dXdZ)/sqrt(pow(segmentMatch->dXdZErr, 2) + pow(chamberMatch->dXdZErr, 2));
1223     }
1224     }
1225     }
1226     }
1227    
1228     m_lowdimuon_minusst1x = -1000.;
1229     m_lowdimuon_minusst1xsig = -1000.;
1230     m_lowdimuon_minusst1dxdz = -1000.;
1231     m_lowdimuon_minusst1dxdzsig = -1000.;
1232     for (std::vector<reco::MuonChamberMatch>::const_iterator chamberMatch = minusmatches.begin(); chamberMatch != minusmatches.end(); ++chamberMatch) {
1233     for (std::vector<reco::MuonSegmentMatch>::const_iterator segmentMatch = chamberMatch->segmentMatches.begin(); segmentMatch != chamberMatch->segmentMatches.end(); ++segmentMatch) {
1234     if (segmentMatch->isMask(reco::MuonSegmentMatch::BestInChamberByDR) &&
1235     segmentMatch->isMask(reco::MuonSegmentMatch::BelongsToTrackByDR)) {
1236     if (chamberMatch->station() == 1) {
1237     m_lowdimuon_minusst1x = (segmentMatch->x - chamberMatch->x);
1238     m_lowdimuon_minusst1xsig = (segmentMatch->x - chamberMatch->x)/sqrt(pow(segmentMatch->xErr, 2) + pow(chamberMatch->xErr, 2));
1239     m_lowdimuon_minusst1dxdz = (segmentMatch->dXdZ - chamberMatch->dXdZ);
1240     m_lowdimuon_minusst1dxdzsig = (segmentMatch->dXdZ - chamberMatch->dXdZ)/sqrt(pow(segmentMatch->dXdZErr, 2) + pow(chamberMatch->dXdZErr, 2));
1241     }
1242     }
1243     }
1244     }
1245    
1246 pivarski 1.13 if (m_lowdimuon_pt > 80.) m_highdimuon->Fill();
1247     else m_lowdimuon->Fill();
1248 pivarski 1.1 }
1249    
1250     ////////////////////////////////////////////////////////// quadmuon
1251 pivarski 1.13 else if (muJets->size() == 1 && (*muJets)[0].numberOfDaughters() >= 4) {
1252     pat::MultiMuonCollection::const_iterator muJet = muJets->begin();
1253    
1254     m_quadmuon_containstrig = 0;
1255     for (std::vector<pat::MuonCollection::const_iterator>::const_iterator iter = muontrig.begin(); iter != muontrig.end(); ++iter) {
1256     for (unsigned int i = 0; i < muJet->numberOfDaughters(); i++) {
1257     if (muJet->muon(i)->innerTrack().isAvailable() && (*iter)->innerTrack().isAvailable() &&
1258     muJet->sameTrack(&*(muJet->muon(i)->innerTrack()), &*((*iter)->innerTrack()))) {
1259     m_quadmuon_containstrig = 1;
1260     }
1261     }
1262     }
1263    
1264     m_quadmuon_muons = muJet->numberOfDaughters();
1265     m_quadmuon_orphans = orphans->size();
1266     m_quadmuon_charge = muJet->charge();
1267     m_quadmuon_mass = muJet->mass();
1268     m_quadmuon_massa = -1.;
1269     m_quadmuon_massb = -1.;
1270     m_quadmuon_massc = -1.;
1271     m_quadmuon_massd = -1.;
1272     m_quadmuon_masse = -1.;
1273     m_quadmuon_massf = -1.;
1274     std::vector<double> masses = muJet->consistentPairMasses();
1275 pivarski 1.14 std::random_shuffle(masses.begin(), masses.end());
1276 pivarski 1.13 if (masses.size() >= 1) m_quadmuon_massa = masses[0];
1277     if (masses.size() >= 2) m_quadmuon_massb = masses[1];
1278     if (masses.size() >= 3) m_quadmuon_massc = masses[2];
1279     if (masses.size() >= 4) m_quadmuon_massd = masses[3];
1280     if (masses.size() >= 5) m_quadmuon_masse = masses[4];
1281     if (masses.size() >= 6) m_quadmuon_massf = masses[5];
1282     m_quadmuon_pt = muJet->pt();
1283     m_quadmuon_eta = muJet->eta();
1284     m_quadmuon_phi = muJet->phi();
1285     m_quadmuon_dr = muJet->dRmax();
1286     m_quadmuon_vchi2 = -1.;
1287     m_quadmuon_vndof = -1;
1288     m_quadmuon_vprob = -1.;
1289     m_quadmuon_lxy = -1000.;
1290     m_quadmuon_lxyz = -1000.;
1291     m_quadmuon_iso = muJet->centralTrackIsolation();
1292    
1293     if (muJet->vertexValid()) {
1294     m_quadmuon_mass = muJet->vertexMass();
1295     m_quadmuon_massa = -1.;
1296     m_quadmuon_massb = -1.;
1297     m_quadmuon_massc = -1.;
1298     m_quadmuon_massd = -1.;
1299     m_quadmuon_masse = -1.;
1300     m_quadmuon_massf = -1.;
1301     std::vector<double> masses = muJet->consistentPairMasses(true);
1302 pivarski 1.14 std::random_shuffle(masses.begin(), masses.end());
1303 pivarski 1.13 if (masses.size() >= 1) m_quadmuon_massa = masses[0];
1304     if (masses.size() >= 2) m_quadmuon_massb = masses[1];
1305     if (masses.size() >= 3) m_quadmuon_massc = masses[2];
1306     if (masses.size() >= 4) m_quadmuon_massd = masses[3];
1307     if (masses.size() >= 5) m_quadmuon_masse = masses[4];
1308     if (masses.size() >= 6) m_quadmuon_massf = masses[5];
1309     m_quadmuon_pt = muJet->vertexMomentum().perp();
1310     m_quadmuon_eta = muJet->vertexMomentum().eta();
1311     m_quadmuon_phi = muJet->vertexMomentum().phi();
1312     m_quadmuon_dr = muJet->dRmax(true);
1313     m_quadmuon_vchi2 = muJet->vertexChi2();
1314     m_quadmuon_vndof = muJet->vertexNdof();
1315     m_quadmuon_vprob = muJet->vertexProb();
1316     if (closestPrimaryVertex != primaryVertices->end()) {
1317     m_quadmuon_lxy = muJet->lxy(GlobalPoint(closestPrimaryVertex->x(), closestPrimaryVertex->y(), closestPrimaryVertex->z()));
1318     m_quadmuon_lxyz = muJet->lxyz(GlobalPoint(closestPrimaryVertex->x(), closestPrimaryVertex->y(), closestPrimaryVertex->z()));
1319     }
1320     }
1321    
1322     m_quadmuon->Fill();
1323 pivarski 1.1 }
1324    
1325 pivarski 1.8 ////////////////////////////////////////////////////////// dimuorphan
1326     else if (muJets->size() == 1 && (*muJets)[0].numberOfDaughters() == 2 && orphans->size() == 1) {
1327     pat::MultiMuonCollection::const_iterator muJet = muJets->begin();
1328     pat::MuonCollection::const_iterator orphan = orphans->begin();
1329    
1330     m_dimuorphan_deltaphi = muJet->phi() - orphan->phi();
1331     while (m_dimuorphan_deltaphi > M_PI) m_dimuorphan_deltaphi -= 2.*M_PI;
1332     while (m_dimuorphan_deltaphi < -M_PI) m_dimuorphan_deltaphi += 2.*M_PI;
1333    
1334     m_dimuorphan_orphanpt = orphan->pt();
1335     m_dimuorphan_orphaneta = orphan->eta();
1336     m_dimuorphan_orphanphi = orphan->phi();
1337 pivarski 1.9 m_dimuorphan_orphanisglobal = (orphan->isGlobalMuon() ? 1 : 0);
1338     m_dimuorphan_orphanmatches = orphan->numberOfMatches(reco::Muon::SegmentAndTrackArbitration);
1339     m_dimuorphan_orphanhits = (orphan->innerTrack().isAvailable() ? orphan->innerTrack()->numberOfValidHits(): -1);
1340     m_dimuorphan_orphanchi2 = (orphan->innerTrack().isAvailable() ? orphan->innerTrack()->normalizedChi2(): -1.);
1341     m_dimuorphan_orphanst1x = -1000.;
1342     m_dimuorphan_orphanst1xsig = -1000.;
1343     m_dimuorphan_orphanst1dxdz = -1000.;
1344     m_dimuorphan_orphanst1dxdzsig = -1000.;
1345     for (std::vector<reco::MuonChamberMatch>::const_iterator chamberMatch = orphan->matches().begin(); chamberMatch != orphan->matches().end(); ++chamberMatch) {
1346     for (std::vector<reco::MuonSegmentMatch>::const_iterator segmentMatch = chamberMatch->segmentMatches.begin(); segmentMatch != chamberMatch->segmentMatches.end(); ++segmentMatch) {
1347     if (segmentMatch->isMask(reco::MuonSegmentMatch::BestInChamberByDR) &&
1348     segmentMatch->isMask(reco::MuonSegmentMatch::BelongsToTrackByDR)) {
1349     if (chamberMatch->station() == 1) {
1350     m_dimuorphan_orphanst1x = (segmentMatch->x - chamberMatch->x);
1351     m_dimuorphan_orphanst1xsig = (segmentMatch->x - chamberMatch->x)/sqrt(pow(segmentMatch->xErr, 2) + pow(chamberMatch->xErr, 2));
1352     m_dimuorphan_orphanst1dxdz = (segmentMatch->dXdZ - chamberMatch->dXdZ);
1353     m_dimuorphan_orphanst1dxdzsig = (segmentMatch->dXdZ - chamberMatch->dXdZ)/sqrt(pow(segmentMatch->dXdZErr, 2) + pow(chamberMatch->dXdZErr, 2));
1354     }
1355     }
1356     }
1357     }
1358 pivarski 1.8
1359 pivarski 1.10 m_dimuorphan_containstrig = 0;
1360     for (std::vector<pat::MuonCollection::const_iterator>::const_iterator iter = muontrig.begin(); iter != muontrig.end(); ++iter) {
1361     if (orphan->innerTrack().isAvailable() && (*iter)->innerTrack().isAvailable() &&
1362     muJet->sameTrack(&*(orphan->innerTrack()), &*((*iter)->innerTrack()))) {
1363     m_dimuorphan_containstrig = 1;
1364     }
1365 pivarski 1.8 }
1366 pivarski 1.10
1367 pivarski 1.8 m_dimuorphan_mass = muJet->mass();
1368     m_dimuorphan_pt = muJet->pt();
1369     m_dimuorphan_eta = muJet->eta();
1370     m_dimuorphan_phi = muJet->phi();
1371     m_dimuorphan_dr = muJet->dRmax();
1372     m_dimuorphan_vprob = -1.;
1373     m_dimuorphan_lxy = -1000.;
1374     m_dimuorphan_lxyz = -1000.;
1375     m_dimuorphan_iso = muJet->centralTrackIsolation();
1376    
1377     if (muJet->vertexValid()) {
1378     m_dimuorphan_deltaphi = muJet->vertexMomentum().phi() - orphan->phi();
1379     while (m_dimuorphan_deltaphi > M_PI) m_dimuorphan_deltaphi -= 2.*M_PI;
1380     while (m_dimuorphan_deltaphi < -M_PI) m_dimuorphan_deltaphi += 2.*M_PI;
1381    
1382     m_dimuorphan_mass = muJet->vertexMass();
1383     m_dimuorphan_pt = muJet->vertexMomentum().perp();
1384     m_dimuorphan_eta = muJet->vertexMomentum().eta();
1385     m_dimuorphan_phi = muJet->vertexMomentum().phi();
1386     m_dimuorphan_dr = muJet->dRmax(true);
1387     m_dimuorphan_vprob = muJet->vertexProb();
1388 pivarski 1.10 if (closestPrimaryVertex != primaryVertices->end()) {
1389     m_dimuorphan_lxy = muJet->lxy(GlobalPoint(closestPrimaryVertex->x(), closestPrimaryVertex->y(), closestPrimaryVertex->z()));
1390     m_dimuorphan_lxyz = muJet->lxyz(GlobalPoint(closestPrimaryVertex->x(), closestPrimaryVertex->y(), closestPrimaryVertex->z()));
1391     }
1392 pivarski 1.8 }
1393    
1394     m_dimuorphan->Fill();
1395     }
1396    
1397 pivarski 1.1 ////////////////////////////////////////////////////////// dimudimu
1398 pivarski 1.13 else if (muJets->size() == 2) {
1399 pivarski 1.10 const pat::MultiMuon *muJet0 = &((*muJets)[0]);
1400     const pat::MultiMuon *muJet1 = &((*muJets)[1]);
1401    
1402     bool muJet0_canBeC = false;
1403     bool muJet1_canBeC = false;
1404     for (std::vector<pat::MuonCollection::const_iterator>::const_iterator iter = muontrig.begin(); iter != muontrig.end(); ++iter) {
1405     if (muJet0->muon(0)->innerTrack().isAvailable() && (*iter)->innerTrack().isAvailable() &&
1406     muJet0->sameTrack(&*(muJet0->muon(0)->innerTrack()), &*((*iter)->innerTrack()))) {
1407     muJet0_canBeC = true;
1408     }
1409     if (muJet0->muon(1)->innerTrack().isAvailable() && (*iter)->innerTrack().isAvailable() &&
1410     muJet0->sameTrack(&*(muJet0->muon(1)->innerTrack()), &*((*iter)->innerTrack()))) {
1411     muJet0_canBeC = true;
1412     }
1413    
1414     if (muJet1->muon(0)->innerTrack().isAvailable() && (*iter)->innerTrack().isAvailable() &&
1415     muJet1->sameTrack(&*(muJet1->muon(0)->innerTrack()), &*((*iter)->innerTrack()))) {
1416     muJet1_canBeC = true;
1417 pivarski 1.8 }
1418 pivarski 1.10 if (muJet1->muon(1)->innerTrack().isAvailable() && (*iter)->innerTrack().isAvailable() &&
1419     muJet1->sameTrack(&*(muJet1->muon(1)->innerTrack()), &*((*iter)->innerTrack()))) {
1420     muJet1_canBeC = true;
1421 pivarski 1.8 }
1422     }
1423 pivarski 1.10
1424     const pat::MultiMuon *muJetC = NULL;
1425     const pat::MultiMuon *muJetF = NULL;
1426     if (muJet0_canBeC && muJet1_canBeC) {
1427     if (m_trandom3.Integer(2) == 0) {
1428 pivarski 1.8 muJetC = muJet0;
1429     muJetF = muJet1;
1430     }
1431     else {
1432     muJetC = muJet1;
1433     muJetF = muJet0;
1434     }
1435     }
1436 pivarski 1.10 else if (muJet0_canBeC) {
1437     muJetC = muJet0;
1438     muJetF = muJet1;
1439     }
1440     else if (muJet1_canBeC) {
1441     muJetC = muJet1;
1442     muJetF = muJet0;
1443     }
1444 pivarski 1.8
1445 pivarski 1.10 if (muJetC != NULL && muJetF != NULL) {
1446 pivarski 1.13 m_dimudimu_orphans = orphans->size();
1447    
1448 pivarski 1.10 double total_energy = muJetC->energy() + muJetF->energy();
1449     double total_px = muJetC->px() + muJetF->px();
1450     double total_py = muJetC->py() + muJetF->py();
1451     double total_pz = muJetC->pz() + muJetF->pz();
1452 pivarski 1.7
1453     m_dimudimu_wholemass = sqrt(total_energy*total_energy - total_px*total_px - total_py*total_py - total_pz*total_pz);
1454     m_dimudimu_wholept = sqrt(total_px*total_px + total_py*total_py);
1455    
1456 pivarski 1.10 m_dimudimu_deltaphi = muJetC->phi() - muJetF->phi();
1457 pivarski 1.7 while (m_dimudimu_deltaphi > M_PI) m_dimudimu_deltaphi -= 2.*M_PI;
1458     while (m_dimudimu_deltaphi < -M_PI) m_dimudimu_deltaphi += 2.*M_PI;
1459    
1460 pivarski 1.10 m_dimudimu_massC = muJetC->mass();
1461     m_dimudimu_ptC = muJetC->pt();
1462     m_dimudimu_etaC = muJetC->eta();
1463     m_dimudimu_phiC = muJetC->phi();
1464     m_dimudimu_drC = muJetC->dRmax();
1465     m_dimudimu_vprobC = -1.;
1466     m_dimudimu_lxyC = -1000.;
1467     m_dimudimu_lxyzC = -1000.;
1468     m_dimudimu_isoC = muJetC->centralTrackIsolation();
1469    
1470     m_dimudimu_massF = muJetF->mass();
1471     m_dimudimu_ptF = muJetF->pt();
1472     m_dimudimu_etaF = muJetF->eta();
1473     m_dimudimu_phiF = muJetF->phi();
1474     m_dimudimu_drF = muJetF->dRmax();
1475     m_dimudimu_vprobF = -1.;
1476     m_dimudimu_lxyF = -1000.;
1477     m_dimudimu_lxyzF = -1000.;
1478     m_dimudimu_isoF = muJetF->centralTrackIsolation();
1479    
1480     if (muJetC->vertexValid() && muJetF->vertexValid()) {
1481     total_energy = muJetC->vertexP4().energy() + muJetF->vertexP4().energy();
1482     total_px = muJetC->vertexMomentum().x() + muJetF->vertexMomentum().x();
1483     total_py = muJetC->vertexMomentum().y() + muJetF->vertexMomentum().y();
1484     total_pz = muJetC->vertexMomentum().z() + muJetF->vertexMomentum().z();
1485    
1486     m_dimudimu_wholemass = sqrt(total_energy*total_energy - total_px*total_px - total_py*total_py - total_pz*total_pz);
1487     m_dimudimu_wholept = sqrt(total_px*total_px + total_py*total_py);
1488    
1489     m_dimudimu_deltaphi = muJetC->vertexMomentum().phi() - muJetF->vertexMomentum().phi();
1490     while (m_dimudimu_deltaphi > M_PI) m_dimudimu_deltaphi -= 2.*M_PI;
1491     while (m_dimudimu_deltaphi < -M_PI) m_dimudimu_deltaphi += 2.*M_PI;
1492    
1493     m_dimudimu_massC = muJetC->vertexMass();
1494     m_dimudimu_ptC = muJetC->vertexMomentum().perp();
1495     m_dimudimu_etaC = muJetC->vertexMomentum().eta();
1496     m_dimudimu_phiC = muJetC->vertexMomentum().phi();
1497     m_dimudimu_drC = muJetC->dRmax(true);
1498     m_dimudimu_vprobC = muJetC->vertexProb();
1499     if (closestPrimaryVertex != primaryVertices->end()) {
1500     m_dimudimu_lxyC = muJetC->lxy(GlobalPoint(closestPrimaryVertex->x(), closestPrimaryVertex->y(), closestPrimaryVertex->z()));
1501     m_dimudimu_lxyzC = muJetC->lxyz(GlobalPoint(closestPrimaryVertex->x(), closestPrimaryVertex->y(), closestPrimaryVertex->z()));
1502     }
1503    
1504     m_dimudimu_massF = muJetF->vertexMass();
1505     m_dimudimu_ptF = muJetF->vertexMomentum().perp();
1506     m_dimudimu_etaF = muJetF->vertexMomentum().eta();
1507     m_dimudimu_phiF = muJetF->vertexMomentum().phi();
1508     m_dimudimu_drF = muJetF->dRmax(true);
1509     m_dimudimu_vprobF = muJetF->vertexProb();
1510     if (closestPrimaryVertex != primaryVertices->end()) {
1511     m_dimudimu_lxyF = muJetF->lxy(GlobalPoint(closestPrimaryVertex->x(), closestPrimaryVertex->y(), closestPrimaryVertex->z()));
1512     m_dimudimu_lxyzF = muJetF->lxyz(GlobalPoint(closestPrimaryVertex->x(), closestPrimaryVertex->y(), closestPrimaryVertex->z()));
1513     }
1514     }
1515    
1516 pivarski 1.13 if (muJetC->numberOfDaughters() == 2 && muJetF->numberOfDaughters() == 2) {
1517     m_dimudimu->Fill();
1518     }
1519     else {
1520     m_twomujets_muonsC = muJetC->numberOfDaughters();
1521     m_twomujets_muonsF = muJetF->numberOfDaughters();
1522    
1523     m_twomujets_massCa = -1.;
1524     m_twomujets_massCb = -1.;
1525     m_twomujets_massCc = -1.;
1526     m_twomujets_massFa = -1.;
1527     m_twomujets_massFb = -1.;
1528     m_twomujets_massFc = -1.;
1529     std::vector<double> massesC = muJetC->consistentPairMasses(muJetC->vertexValid() && muJetF->vertexValid());
1530 pivarski 1.14 std::random_shuffle(massesC.begin(), massesC.end());
1531 pivarski 1.13 if (massesC.size() >= 1) m_twomujets_massCa = massesC[0];
1532     if (massesC.size() >= 2) m_twomujets_massCb = massesC[1];
1533     if (massesC.size() >= 3) m_twomujets_massCc = massesC[2];
1534     std::vector<double> massesF = muJetF->consistentPairMasses(muJetC->vertexValid() && muJetF->vertexValid());
1535 pivarski 1.14 std::random_shuffle(massesF.begin(), massesF.end());
1536 pivarski 1.13 if (massesF.size() >= 1) m_twomujets_massFa = massesF[0];
1537     if (massesF.size() >= 2) m_twomujets_massFb = massesF[1];
1538     if (massesF.size() >= 3) m_twomujets_massFc = massesF[2];
1539    
1540     m_twomujets->Fill();
1541     }
1542 pivarski 1.7 }
1543 pivarski 1.1 }
1544    
1545 pivarski 1.13 ////////////////////////////////////////////////////////// moremujets
1546 pivarski 1.14
1547 pivarski 1.13 else if (muJets->size() > 2) {
1548     m_moremujets_mujets = muJets->size();
1549     m_moremujets_orphans = orphans->size();
1550    
1551     double total_energy = 0.;
1552     double total_px = 0.;
1553     double total_py = 0.;
1554     double total_pz = 0.;
1555     for (pat::MultiMuonCollection::const_iterator muJet = muJets->begin(); muJet != muJets->end(); ++muJet) {
1556     total_energy += muJet->energy();
1557     total_px += muJet->px();
1558     total_py += muJet->py();
1559     total_pz += muJet->pz();
1560     }
1561     m_moremujets_wholemass = sqrt(total_energy*total_energy - total_px*total_px - total_py*total_py - total_pz*total_pz);
1562     m_moremujets_wholept = sqrt(total_px*total_px + total_py*total_py);
1563    
1564     m_moremujets_massa = -1.;
1565     m_moremujets_massb = -1.;
1566     m_moremujets_massc = -1.;
1567     m_moremujets_massd = -1.;
1568     m_moremujets_masse = -1.;
1569     m_moremujets_massf = -1.;
1570     std::vector<double> all_masses;
1571     for (pat::MultiMuonCollection::const_iterator muJet = muJets->begin(); muJet != muJets->end(); ++muJet) {
1572     std::vector<double> masses = muJet->consistentPairMasses();
1573 pivarski 1.14 std::random_shuffle(masses.begin(), masses.end());
1574 pivarski 1.13 for (std::vector<double>::const_iterator mass = masses.begin(); mass != masses.end(); ++mass) {
1575     all_masses.push_back(*mass);
1576     }
1577     }
1578     if (all_masses.size() >= 1) m_moremujets_massa = all_masses[0];
1579     if (all_masses.size() >= 2) m_moremujets_massb = all_masses[1];
1580     if (all_masses.size() >= 3) m_moremujets_massc = all_masses[2];
1581     if (all_masses.size() >= 4) m_moremujets_massd = all_masses[3];
1582     if (all_masses.size() >= 5) m_moremujets_masse = all_masses[4];
1583     if (all_masses.size() >= 6) m_moremujets_massf = all_masses[5];
1584    
1585     m_moremujets_muons1 = -1;
1586     m_moremujets_containstrig1 = -1;
1587     m_moremujets_mass1 = -1.;
1588     m_moremujets_pt1 = -1.;
1589     m_moremujets_iso1 = -1.;
1590     m_moremujets_muons2 = -1;
1591     m_moremujets_containstrig2 = -1;
1592     m_moremujets_mass2 = -1.;
1593     m_moremujets_pt2 = -1.;
1594     m_moremujets_iso2 = -1.;
1595     m_moremujets_muons3 = -1;
1596     m_moremujets_containstrig3 = -1;
1597     m_moremujets_mass3 = -1.;
1598     m_moremujets_pt3 = -1.;
1599     m_moremujets_iso3 = -1.;
1600     m_moremujets_muons4 = -1;
1601     m_moremujets_containstrig4 = -1;
1602     m_moremujets_mass4 = -1.;
1603     m_moremujets_pt4 = -1.;
1604     m_moremujets_iso4 = -1.;
1605     m_moremujets_muons5 = -1;
1606     m_moremujets_containstrig5 = -1;
1607     m_moremujets_mass5 = -1.;
1608     m_moremujets_pt5 = -1.;
1609     m_moremujets_iso5 = -1.;
1610     m_moremujets_muons6 = -1;
1611     m_moremujets_containstrig6 = -1;
1612     m_moremujets_mass6 = -1.;
1613     m_moremujets_pt6 = -1.;
1614     m_moremujets_iso6 = -1.;
1615    
1616     if (muJets->size() >= 1) {
1617     const pat::MultiMuon *muJet = &((*muJets)[0]);
1618     m_moremujets_muons1 = muJet->numberOfDaughters();
1619     m_moremujets_containstrig1 = 0;
1620     for (std::vector<pat::MuonCollection::const_iterator>::const_iterator iter = muontrig.begin(); iter != muontrig.end(); ++iter) {
1621     for (unsigned int i = 0; i < muJet->numberOfDaughters(); i++) {
1622     if (muJet->muon(i)->innerTrack().isAvailable() && (*iter)->innerTrack().isAvailable() &&
1623     muJet->sameTrack(&*(muJet->muon(i)->innerTrack()), &*((*iter)->innerTrack()))) {
1624     m_moremujets_containstrig1 = 1;
1625     }
1626     }
1627     }
1628     m_moremujets_mass1 = muJet->mass();
1629     m_moremujets_pt1 = muJet->pt();
1630     m_moremujets_iso1 = muJet->centralTrackIsolation();
1631     }
1632    
1633     if (muJets->size() >= 2) {
1634     const pat::MultiMuon *muJet = &((*muJets)[1]);
1635     m_moremujets_muons2 = muJet->numberOfDaughters();
1636     m_moremujets_containstrig2 = 0;
1637     for (std::vector<pat::MuonCollection::const_iterator>::const_iterator iter = muontrig.begin(); iter != muontrig.end(); ++iter) {
1638     for (unsigned int i = 0; i < muJet->numberOfDaughters(); i++) {
1639     if (muJet->muon(i)->innerTrack().isAvailable() && (*iter)->innerTrack().isAvailable() &&
1640     muJet->sameTrack(&*(muJet->muon(i)->innerTrack()), &*((*iter)->innerTrack()))) {
1641     m_moremujets_containstrig2 = 1;
1642     }
1643     }
1644     }
1645     m_moremujets_mass2 = muJet->mass();
1646     m_moremujets_pt2 = muJet->pt();
1647     m_moremujets_iso2 = muJet->centralTrackIsolation();
1648     }
1649    
1650     if (muJets->size() >= 3) {
1651     const pat::MultiMuon *muJet = &((*muJets)[2]);
1652     m_moremujets_muons3 = muJet->numberOfDaughters();
1653     m_moremujets_containstrig3 = 0;
1654     for (std::vector<pat::MuonCollection::const_iterator>::const_iterator iter = muontrig.begin(); iter != muontrig.end(); ++iter) {
1655     for (unsigned int i = 0; i < muJet->numberOfDaughters(); i++) {
1656     if (muJet->muon(i)->innerTrack().isAvailable() && (*iter)->innerTrack().isAvailable() &&
1657     muJet->sameTrack(&*(muJet->muon(i)->innerTrack()), &*((*iter)->innerTrack()))) {
1658     m_moremujets_containstrig3 = 1;
1659     }
1660     }
1661     }
1662     m_moremujets_mass3 = muJet->mass();
1663     m_moremujets_pt3 = muJet->pt();
1664     m_moremujets_iso3 = muJet->centralTrackIsolation();
1665     }
1666    
1667     if (muJets->size() >= 4) {
1668     const pat::MultiMuon *muJet = &((*muJets)[3]);
1669     m_moremujets_muons4 = muJet->numberOfDaughters();
1670     m_moremujets_containstrig4 = 0;
1671     for (std::vector<pat::MuonCollection::const_iterator>::const_iterator iter = muontrig.begin(); iter != muontrig.end(); ++iter) {
1672     for (unsigned int i = 0; i < muJet->numberOfDaughters(); i++) {
1673     if (muJet->muon(i)->innerTrack().isAvailable() && (*iter)->innerTrack().isAvailable() &&
1674     muJet->sameTrack(&*(muJet->muon(i)->innerTrack()), &*((*iter)->innerTrack()))) {
1675     m_moremujets_containstrig4 = 1;
1676     }
1677     }
1678     }
1679     m_moremujets_mass4 = muJet->mass();
1680     m_moremujets_pt4 = muJet->pt();
1681     m_moremujets_iso4 = muJet->centralTrackIsolation();
1682     }
1683    
1684     if (muJets->size() >= 5) {
1685     const pat::MultiMuon *muJet = &((*muJets)[4]);
1686     m_moremujets_muons5 = muJet->numberOfDaughters();
1687     m_moremujets_containstrig5 = 0;
1688     for (std::vector<pat::MuonCollection::const_iterator>::const_iterator iter = muontrig.begin(); iter != muontrig.end(); ++iter) {
1689     for (unsigned int i = 0; i < muJet->numberOfDaughters(); i++) {
1690     if (muJet->muon(i)->innerTrack().isAvailable() && (*iter)->innerTrack().isAvailable() &&
1691     muJet->sameTrack(&*(muJet->muon(i)->innerTrack()), &*((*iter)->innerTrack()))) {
1692     m_moremujets_containstrig5 = 1;
1693     }
1694     }
1695     }
1696     m_moremujets_mass5 = muJet->mass();
1697     m_moremujets_pt5 = muJet->pt();
1698     m_moremujets_iso5 = muJet->centralTrackIsolation();
1699     }
1700    
1701     if (muJets->size() >= 6) {
1702     const pat::MultiMuon *muJet = &((*muJets)[5]);
1703     m_moremujets_muons6 = muJet->numberOfDaughters();
1704     m_moremujets_containstrig6 = 0;
1705     for (std::vector<pat::MuonCollection::const_iterator>::const_iterator iter = muontrig.begin(); iter != muontrig.end(); ++iter) {
1706     for (unsigned int i = 0; i < muJet->numberOfDaughters(); i++) {
1707     if (muJet->muon(i)->innerTrack().isAvailable() && (*iter)->innerTrack().isAvailable() &&
1708     muJet->sameTrack(&*(muJet->muon(i)->innerTrack()), &*((*iter)->innerTrack()))) {
1709     m_moremujets_containstrig6 = 1;
1710     }
1711     }
1712     }
1713     m_moremujets_mass6 = muJet->mass();
1714     m_moremujets_pt6 = muJet->pt();
1715     m_moremujets_iso6 = muJet->centralTrackIsolation();
1716     }
1717 pivarski 1.1
1718 pivarski 1.13 m_moremujets->Fill();
1719 pivarski 1.1 }
1720 pivarski 1.10
1721     ////////////////////////////////////////////////////////// mujetplustracks
1722     if (muJetPlusTracks->size() == 1 && ((*muJetPlusTracks)[0].userInt("numReal") == 2 || (*muJetPlusTracks)[0].userInt("numReal") == 3) && (*muJetPlusTracks)[0].userInt("numFakes") > 0) {
1723     const pat::MultiMuon *muJet = &((*muJetPlusTracks)[0]);
1724    
1725     m_mujetplustracks_containstrig = 0;
1726     for (std::vector<pat::MuonCollection::const_iterator>::const_iterator iter = muontrig.begin(); iter != muontrig.end(); ++iter) {
1727     if (muJet->muon(0)->innerTrack().isAvailable() && (*iter)->innerTrack().isAvailable() &&
1728     muJet->sameTrack(&*(muJet->muon(0)->innerTrack()), &*((*iter)->innerTrack()))) {
1729     m_mujetplustracks_containstrig = 1;
1730     }
1731     if (muJet->muon(1)->innerTrack().isAvailable() && (*iter)->innerTrack().isAvailable() &&
1732     muJet->sameTrack(&*(muJet->muon(1)->innerTrack()), &*((*iter)->innerTrack()))) {
1733     m_mujetplustracks_containstrig = 1;
1734     }
1735     }
1736    
1737     m_mujetplustracks_muons = muJet->userInt("numReal");
1738     m_mujetplustracks_fakes = muJet->userInt("numFakes");
1739     m_mujetplustracks_mass = muJet->mass();
1740 pivarski 1.11 m_mujetplustracks_charge = muJet->charge();
1741     m_mujetplustracks_massa = -1.;
1742     m_mujetplustracks_massb = -1.;
1743 pivarski 1.15 m_mujetplustracks_massatype = -1;
1744     m_mujetplustracks_massbtype = -1;
1745     std::vector<std::pair<int,int> > masses = muJet->consistentPairs();
1746 pivarski 1.14 std::random_shuffle(masses.begin(), masses.end());
1747 pivarski 1.15 if (masses.size() >= 1) {
1748     const pat::Muon *muon0 = muJet->muon(masses[0].first);
1749     const pat::Muon *muon1 = muJet->muon(masses[0].second);
1750    
1751     double total_energy = muon0->energy() + muon1->energy();
1752     double total_px = muon0->px() + muon1->px();
1753     double total_py = muon0->py() + muon1->py();
1754     double total_pz = muon0->pz() + muon1->pz();
1755     m_mujetplustracks_massa = sqrt(total_energy*total_energy - total_px*total_px - total_py*total_py - total_pz*total_pz);
1756    
1757     bool muon0_isreal = false;
1758     bool muon1_isreal = false;
1759     for (int realMuIndex = 0; realMuIndex < muJet->userInt("numReal"); realMuIndex++) {
1760     if (muJet->muon(realMuIndex)->innerTrack().isAvailable() && muon0->innerTrack().isAvailable() && muJet->sameTrack(&*(muJet->muon(realMuIndex)->innerTrack()), &*(muon0->innerTrack()))) {
1761     muon0_isreal = true;
1762     }
1763     if (muJet->muon(realMuIndex)->innerTrack().isAvailable() && muon1->innerTrack().isAvailable() && muJet->sameTrack(&*(muJet->muon(realMuIndex)->innerTrack()), &*(muon1->innerTrack()))) {
1764     muon1_isreal = true;
1765     }
1766     }
1767     m_mujetplustracks_massatype = (muon0_isreal ? 1 : 0) + (muon1_isreal ? 1 : 0);
1768     }
1769    
1770     if (masses.size() >= 2) {
1771     const pat::Muon *muon0 = muJet->muon(masses[1].first);
1772     const pat::Muon *muon1 = muJet->muon(masses[1].second);
1773    
1774     double total_energy = muon0->energy() + muon1->energy();
1775     double total_px = muon0->px() + muon1->px();
1776     double total_py = muon0->py() + muon1->py();
1777     double total_pz = muon0->pz() + muon1->pz();
1778     m_mujetplustracks_massb = sqrt(total_energy*total_energy - total_px*total_px - total_py*total_py - total_pz*total_pz);
1779    
1780     bool muon0_isreal = false;
1781     bool muon1_isreal = false;
1782     for (int realMuIndex = 0; realMuIndex < muJet->userInt("numReal"); realMuIndex++) {
1783     if (muJet->muon(realMuIndex)->innerTrack().isAvailable() && muon0->innerTrack().isAvailable() && muJet->sameTrack(&*(muJet->muon(realMuIndex)->innerTrack()), &*(muon0->innerTrack()))) {
1784     muon0_isreal = true;
1785     }
1786     if (muJet->muon(realMuIndex)->innerTrack().isAvailable() && muon1->innerTrack().isAvailable() && muJet->sameTrack(&*(muJet->muon(realMuIndex)->innerTrack()), &*(muon1->innerTrack()))) {
1787     muon1_isreal = true;
1788     }
1789     }
1790     m_mujetplustracks_massbtype = (muon0_isreal ? 1 : 0) + (muon1_isreal ? 1 : 0);
1791     }
1792 pivarski 1.11
1793 pivarski 1.10 m_mujetplustracks_pt = muJet->pt();
1794     m_mujetplustracks_eta = muJet->eta();
1795     m_mujetplustracks_phi = muJet->phi();
1796     m_mujetplustracks_dr = muJet->dRmax();
1797     m_mujetplustracks_vprob = -1.;
1798     m_mujetplustracks_lxy = -1000.;
1799     m_mujetplustracks_lxyz = -1000.;
1800     m_mujetplustracks_iso = muJet->centralTrackIsolation();
1801    
1802     m_mujetplustracks_mupt1 = -1.;
1803     m_mujetplustracks_mupt2 = -1.;
1804     m_mujetplustracks_mupt3 = -1.;
1805     m_mujetplustracks_fakept1 = -1.;
1806     m_mujetplustracks_fakept2 = -1.;
1807     for (unsigned int i = 0; i < muJet->numberOfDaughters(); i++) {
1808     if (muJet->muon(i)->matches().size() > 0) {
1809     if (muJet->muon(i)->pt() > m_mujetplustracks_mupt1) {
1810     m_mujetplustracks_mupt3 = m_mujetplustracks_mupt2;
1811     m_mujetplustracks_mupt2 = m_mujetplustracks_mupt1;
1812     m_mujetplustracks_mupt1 = muJet->muon(i)->pt();
1813     }
1814     else if (muJet->muon(i)->pt() > m_mujetplustracks_mupt2) {
1815     m_mujetplustracks_mupt3 = m_mujetplustracks_mupt2;
1816     m_mujetplustracks_mupt2 = muJet->muon(i)->pt();
1817     }
1818     else if (muJet->muon(i)->pt() > m_mujetplustracks_mupt3) {
1819     m_mujetplustracks_mupt3 = muJet->muon(i)->pt();
1820     }
1821     }
1822     else {
1823     if (muJet->muon(i)->pt() > m_mujetplustracks_fakept1) {
1824     m_mujetplustracks_fakept2 = m_mujetplustracks_fakept1;
1825     m_mujetplustracks_fakept1 = muJet->muon(i)->pt();
1826     }
1827     else if (muJet->muon(i)->pt() > m_mujetplustracks_fakept1) {
1828     m_mujetplustracks_fakept2 = muJet->muon(i)->pt();
1829     }
1830     }
1831     }
1832    
1833     if (muJet->vertexValid()) {
1834     m_mujetplustracks_mass = muJet->vertexMass();
1835 pivarski 1.11 m_mujetplustracks_massa = -1.;
1836     m_mujetplustracks_massb = -1.;
1837 pivarski 1.15 m_mujetplustracks_massatype = -1;
1838     m_mujetplustracks_massbtype = -1;
1839     std::vector<std::pair<int,int> > masses = muJet->consistentPairs(true);
1840 pivarski 1.14 std::random_shuffle(masses.begin(), masses.end());
1841 pivarski 1.15 if (masses.size() >= 1) {
1842     const pat::Muon *muon0 = muJet->muon(masses[0].first);
1843     const pat::Muon *muon1 = muJet->muon(masses[0].second);
1844    
1845     double total_energy = muon0->energy() + muon1->energy();
1846     double total_px = muon0->px() + muon1->px();
1847     double total_py = muon0->py() + muon1->py();
1848     double total_pz = muon0->pz() + muon1->pz();
1849     m_mujetplustracks_massa = sqrt(total_energy*total_energy - total_px*total_px - total_py*total_py - total_pz*total_pz);
1850    
1851     bool muon0_isreal = false;
1852     bool muon1_isreal = false;
1853     for (int realMuIndex = 0; realMuIndex < muJet->userInt("numReal"); realMuIndex++) {
1854     if (muJet->muon(realMuIndex)->innerTrack().isAvailable() && muon0->innerTrack().isAvailable() && muJet->sameTrack(&*(muJet->muon(realMuIndex)->innerTrack()), &*(muon0->innerTrack()))) {
1855     muon0_isreal = true;
1856     }
1857     if (muJet->muon(realMuIndex)->innerTrack().isAvailable() && muon1->innerTrack().isAvailable() && muJet->sameTrack(&*(muJet->muon(realMuIndex)->innerTrack()), &*(muon1->innerTrack()))) {
1858     muon1_isreal = true;
1859     }
1860     }
1861     m_mujetplustracks_massatype = (muon0_isreal ? 1 : 0) + (muon1_isreal ? 1 : 0);
1862     }
1863    
1864     if (masses.size() >= 2) {
1865     const pat::Muon *muon0 = muJet->muon(masses[1].first);
1866     const pat::Muon *muon1 = muJet->muon(masses[1].second);
1867    
1868     double total_energy = muon0->energy() + muon1->energy();
1869     double total_px = muon0->px() + muon1->px();
1870     double total_py = muon0->py() + muon1->py();
1871     double total_pz = muon0->pz() + muon1->pz();
1872     m_mujetplustracks_massb = sqrt(total_energy*total_energy - total_px*total_px - total_py*total_py - total_pz*total_pz);
1873    
1874     bool muon0_isreal = false;
1875     bool muon1_isreal = false;
1876     for (int realMuIndex = 0; realMuIndex < muJet->userInt("numReal"); realMuIndex++) {
1877     if (muJet->muon(realMuIndex)->innerTrack().isAvailable() && muon0->innerTrack().isAvailable() && muJet->sameTrack(&*(muJet->muon(realMuIndex)->innerTrack()), &*(muon0->innerTrack()))) {
1878     muon0_isreal = true;
1879     }
1880     if (muJet->muon(realMuIndex)->innerTrack().isAvailable() && muon1->innerTrack().isAvailable() && muJet->sameTrack(&*(muJet->muon(realMuIndex)->innerTrack()), &*(muon1->innerTrack()))) {
1881     muon1_isreal = true;
1882     }
1883     }
1884     m_mujetplustracks_massbtype = (muon0_isreal ? 1 : 0) + (muon1_isreal ? 1 : 0);
1885     }
1886 pivarski 1.11
1887 pivarski 1.10 m_mujetplustracks_pt = muJet->vertexMomentum().perp();
1888     m_mujetplustracks_eta = muJet->vertexMomentum().eta();
1889     m_mujetplustracks_phi = muJet->vertexMomentum().phi();
1890     m_mujetplustracks_dr = muJet->dRmax(true);
1891     m_mujetplustracks_vprob = muJet->vertexProb();
1892     if (closestPrimaryVertex != primaryVertices->end()) {
1893     m_mujetplustracks_lxy = muJet->lxy(GlobalPoint(closestPrimaryVertex->x(), closestPrimaryVertex->y(), closestPrimaryVertex->z()));
1894     m_mujetplustracks_lxyz = muJet->lxyz(GlobalPoint(closestPrimaryVertex->x(), closestPrimaryVertex->y(), closestPrimaryVertex->z()));
1895     }
1896    
1897     m_mujetplustracks_mupt1 = -1.;
1898     m_mujetplustracks_mupt2 = -1.;
1899     m_mujetplustracks_mupt3 = -1.;
1900     m_mujetplustracks_fakept1 = -1.;
1901     m_mujetplustracks_fakept2 = -1.;
1902     for (unsigned int i = 0; i < muJet->numberOfDaughters(); i++) {
1903     if (muJet->muon(i)->matches().size() > 0) {
1904     if (muJet->vertexMomentum(i).perp() > m_mujetplustracks_mupt1) {
1905     m_mujetplustracks_mupt3 = m_mujetplustracks_mupt2;
1906     m_mujetplustracks_mupt2 = m_mujetplustracks_mupt1;
1907     m_mujetplustracks_mupt1 = muJet->vertexMomentum(i).perp();
1908     }
1909     else if (muJet->vertexMomentum(i).perp() > m_mujetplustracks_mupt2) {
1910     m_mujetplustracks_mupt3 = m_mujetplustracks_mupt2;
1911     m_mujetplustracks_mupt2 = muJet->vertexMomentum(i).perp();
1912     }
1913     else if (muJet->vertexMomentum(i).perp() > m_mujetplustracks_mupt3) {
1914     m_mujetplustracks_mupt3 = muJet->vertexMomentum(i).perp();
1915     }
1916     }
1917     else {
1918     if (muJet->vertexMomentum(i).perp() > m_mujetplustracks_fakept1) {
1919     m_mujetplustracks_fakept2 = m_mujetplustracks_fakept1;
1920     m_mujetplustracks_fakept1 = muJet->vertexMomentum(i).perp();
1921     }
1922     else if (muJet->vertexMomentum(i).perp() > m_mujetplustracks_fakept1) {
1923     m_mujetplustracks_fakept2 = muJet->vertexMomentum(i).perp();
1924     }
1925     }
1926     }
1927     }
1928    
1929     m_mujetplustracks->Fill();
1930     }
1931 pivarski 1.14
1932     ////////////////////////////////////////////////////////// displaced
1933     if (displacedMuJet->size() > 0) {
1934     m_displaced_mujets = displacedMuJet->size();
1935     m_displaced_orphans = orphans->size();
1936    
1937     pat::MultiMuonCollection::const_iterator muJet = displacedMuJet->begin();
1938     if (muJet->vertexValid()) {
1939     m_displaced_muons = muJet->numberOfDaughters();
1940     m_displaced_mass = muJet->mass();
1941     m_displaced_pt = muJet->pt();
1942     m_displaced_eta = muJet->eta();
1943     m_displaced_phi = muJet->phi();
1944     m_displaced_vx = muJet->vertexPoint().x();
1945     m_displaced_vy = muJet->vertexPoint().y();
1946     m_displaced_vz = muJet->vertexPoint().z();
1947    
1948     double px = muJet->vertexMomentum().x();
1949     double py = muJet->vertexMomentum().y();
1950     double pz = muJet->vertexMomentum().z();
1951     m_displaced_zclosest = m_displaced_vz - pz * (px*m_displaced_vx + py*m_displaced_vy) / pow(px + py, 2);
1952    
1953     reco::VertexCollection::const_iterator closest = primaryVertices->end();
1954     for (reco::VertexCollection::const_iterator vertex = primaryVertices->begin(); vertex != primaryVertices->end(); ++vertex) {
1955     if (vertex->isValid() && !vertex->isFake() && vertex->tracksSize() > 3 && fabs(vertex->z()) < 24.) {
1956     if (closest == primaryVertices->end() || fabs(vertex->z() - m_displaced_zclosest) < fabs(closest->z() - m_displaced_zclosest)) {
1957     closest = vertex;
1958     }
1959     } // end vertex quality cuts
1960     } // end loop over primary vertices
1961    
1962     m_displaced_zcloseness = -1000.;
1963     m_displaced_lxy = -1000.;
1964     m_displaced_lxyz = -1000.;
1965     if (closest != primaryVertices->end()) {
1966     m_displaced_zcloseness = m_displaced_zclosest - closest->z();
1967     m_displaced_lxy = muJet->lxy(GlobalPoint(closest->x(), closest->y(), closest->z()));
1968     m_displaced_lxyz = muJet->lxyz(GlobalPoint(closest->x(), closest->y(), closest->z()));
1969     }
1970     else if (m_getAlternating) {
1971     m_displaced_zcloseness = m_displaced_zclosest - 0.;
1972     m_displaced_lxy = muJet->lxy(GlobalPoint(0., 0., 0.));
1973     m_displaced_lxyz = muJet->lxyz(GlobalPoint(0., 0., 0.));
1974     }
1975    
1976     m_displaced_iso = muJet->centralTrackIsolation();
1977     m_displaced_vprob = muJet->vertexProb();
1978    
1979     const pat::Muon *plus = NULL;
1980     const pat::Muon *minus = NULL;
1981     m_displaced_mupt1 = 0.;
1982     m_displaced_mupt2 = 0.;
1983     for (unsigned int i = 0; i < muJet->numberOfDaughters(); i++) {
1984     const pat::Muon *muon = muJet->muon(i);
1985     if (muon->pt() > m_displaced_mupt1) {
1986     m_displaced_mupt2 = m_displaced_mupt1;
1987     m_displaced_mupt1 = muon->pt();
1988     }
1989     else if (muon->pt() > m_displaced_mupt2) {
1990     m_displaced_mupt2 = muon->pt();
1991     }
1992    
1993     if (muon->charge() > 0 && muon->innerTrack().isAvailable() && (plus == NULL || muon->pt() > plus->pt())) {
1994     plus = muon;
1995     }
1996     if (muon->charge() < 0 && muon->innerTrack().isAvailable() && (minus == NULL || muon->pt() > minus->pt())) {
1997     minus = muon;
1998     }
1999     }
2000    
2001     m_displaced_plusmatches = -1;
2002     m_displaced_plusst1x = -1000.;
2003     m_displaced_plusst1xsig = -1000.;
2004     m_displaced_plusst1dxdz = -1000.;
2005     m_displaced_plusst1dxdzsig = -1000.;
2006     m_displaced_plushits = -1;
2007     m_displaced_plusnormchi2 = -1.;
2008     m_displaced_minusmatches = -1;
2009     m_displaced_minusst1x = -1000.;
2010     m_displaced_minusst1xsig = -1000.;
2011     m_displaced_minusst1dxdz = -1000.;
2012     m_displaced_minusst1dxdzsig = -1000.;
2013     m_displaced_minushits = -1;
2014     m_displaced_minusnormchi2 = -1.;
2015    
2016     if (plus != NULL && minus != NULL) {
2017     m_displaced_plusmatches = plus->numberOfMatches(reco::Muon::SegmentAndTrackArbitration);
2018     m_displaced_plushits = plus->innerTrack()->numberOfValidHits();
2019     m_displaced_plusnormchi2 = plus->innerTrack()->normalizedChi2();
2020    
2021     std::vector<reco::MuonChamberMatch> plusmatches = plus->matches();
2022     for (std::vector<reco::MuonChamberMatch>::const_iterator chamberMatch = plusmatches.begin(); chamberMatch != plusmatches.end(); ++chamberMatch) {
2023     for (std::vector<reco::MuonSegmentMatch>::const_iterator segmentMatch = chamberMatch->segmentMatches.begin(); segmentMatch != chamberMatch->segmentMatches.end(); ++segmentMatch) {
2024     if (segmentMatch->isMask(reco::MuonSegmentMatch::BestInChamberByDR) &&
2025     segmentMatch->isMask(reco::MuonSegmentMatch::BelongsToTrackByDR)) {
2026     if (chamberMatch->station() == 1) {
2027     m_displaced_plusst1x = (segmentMatch->x - chamberMatch->x);
2028     m_displaced_plusst1xsig = (segmentMatch->x - chamberMatch->x)/sqrt(pow(segmentMatch->xErr, 2) + pow(chamberMatch->xErr, 2));
2029     m_displaced_plusst1dxdz = (segmentMatch->dXdZ - chamberMatch->dXdZ);
2030     m_displaced_plusst1dxdzsig = (segmentMatch->dXdZ - chamberMatch->dXdZ)/sqrt(pow(segmentMatch->dXdZErr, 2) + pow(chamberMatch->dXdZErr, 2));
2031     }
2032     }
2033     }
2034     }
2035    
2036     m_displaced_minusmatches = minus->numberOfMatches(reco::Muon::SegmentAndTrackArbitration);
2037     m_displaced_minushits = minus->innerTrack()->numberOfValidHits();
2038     m_displaced_minusnormchi2 = minus->innerTrack()->normalizedChi2();
2039    
2040     std::vector<reco::MuonChamberMatch> minusmatches = minus->matches();
2041     for (std::vector<reco::MuonChamberMatch>::const_iterator chamberMatch = minusmatches.begin(); chamberMatch != minusmatches.end(); ++chamberMatch) {
2042     for (std::vector<reco::MuonSegmentMatch>::const_iterator segmentMatch = chamberMatch->segmentMatches.begin(); segmentMatch != chamberMatch->segmentMatches.end(); ++segmentMatch) {
2043     if (segmentMatch->isMask(reco::MuonSegmentMatch::BestInChamberByDR) &&
2044     segmentMatch->isMask(reco::MuonSegmentMatch::BelongsToTrackByDR)) {
2045     if (chamberMatch->station() == 1) {
2046     m_displaced_minusst1x = (segmentMatch->x - chamberMatch->x);
2047     m_displaced_minusst1xsig = (segmentMatch->x - chamberMatch->x)/sqrt(pow(segmentMatch->xErr, 2) + pow(chamberMatch->xErr, 2));
2048     m_displaced_minusst1dxdz = (segmentMatch->dXdZ - chamberMatch->dXdZ);
2049     m_displaced_minusst1dxdzsig = (segmentMatch->dXdZ - chamberMatch->dXdZ)/sqrt(pow(segmentMatch->dXdZErr, 2) + pow(chamberMatch->dXdZErr, 2));
2050     }
2051     }
2052     }
2053     }
2054     }
2055    
2056     if (sqrt(pow(m_displaced_vx, 2) + pow(m_displaced_vy, 2)) > 0.2) {
2057     m_displaced->Fill();
2058     }
2059     }
2060     }
2061    
2062     ////////////////////////////////////////////////////////// displacedFake
2063     if (displacedMuJetFake->size() > 0) {
2064     m_displaced_mujets = displacedMuJetFake->size();
2065     m_displaced_orphans = orphans->size();
2066    
2067     pat::MultiMuonCollection::const_iterator muJet = displacedMuJetFake->begin();
2068     if (muJet->vertexValid()) {
2069     m_displaced_muons = muJet->numberOfDaughters();
2070     m_displaced_mass = muJet->mass();
2071     m_displaced_pt = muJet->pt();
2072     m_displaced_eta = muJet->eta();
2073     m_displaced_phi = muJet->phi();
2074     m_displaced_vx = muJet->vertexPoint().x();
2075     m_displaced_vy = muJet->vertexPoint().y();
2076     m_displaced_vz = muJet->vertexPoint().z();
2077    
2078     double px = muJet->vertexMomentum().x();
2079     double py = muJet->vertexMomentum().y();
2080     double pz = muJet->vertexMomentum().z();
2081     m_displaced_zclosest = m_displaced_vz - pz * (px*m_displaced_vx + py*m_displaced_vy) / pow(px + py, 2);
2082     reco::VertexCollection::const_iterator closest = primaryVertices->end();
2083     for (reco::VertexCollection::const_iterator vertex = primaryVertices->begin(); vertex != primaryVertices->end(); ++vertex) {
2084     if (vertex->isValid() && !vertex->isFake() && vertex->tracksSize() > 3 && fabs(vertex->z()) < 24.) {
2085     if (closest == primaryVertices->end() || fabs(vertex->z() - m_displaced_zclosest) < fabs(closest->z() - m_displaced_zclosest)) {
2086     closest = vertex;
2087     }
2088     } // end vertex quality cuts
2089     } // end loop over primary vertices
2090    
2091     m_displaced_zcloseness = -1000.;
2092     m_displaced_lxy = -1000.;
2093     m_displaced_lxyz = -1000.;
2094     if (closest != primaryVertices->end()) {
2095     m_displaced_zcloseness = m_displaced_zclosest - closest->z();
2096     m_displaced_lxy = muJet->lxy(GlobalPoint(closest->x(), closest->y(), closest->z()));
2097     m_displaced_lxyz = muJet->lxyz(GlobalPoint(closest->x(), closest->y(), closest->z()));
2098     }
2099     else if (m_getAlternating) {
2100     m_displaced_zcloseness = m_displaced_zclosest - 0.;
2101     m_displaced_lxy = muJet->lxy(GlobalPoint(0., 0., 0.));
2102     m_displaced_lxyz = muJet->lxyz(GlobalPoint(0., 0., 0.));
2103     }
2104    
2105     m_displaced_iso = muJet->centralTrackIsolation();
2106     m_displaced_vprob = muJet->vertexProb();
2107    
2108     const pat::Muon *plus = NULL;
2109     const pat::Muon *minus = NULL;
2110     m_displaced_mupt1 = 0.;
2111     m_displaced_mupt2 = 0.;
2112     for (unsigned int i = 0; i < muJet->numberOfDaughters(); i++) {
2113     const pat::Muon *muon = muJet->muon(i);
2114     if (muon->pt() > m_displaced_mupt1) {
2115     m_displaced_mupt2 = m_displaced_mupt1;
2116     m_displaced_mupt1 = muon->pt();
2117     }
2118     else if (muon->pt() > m_displaced_mupt2) {
2119     m_displaced_mupt2 = muon->pt();
2120     }
2121    
2122     if (muon->charge() > 0 && muon->innerTrack().isAvailable() && (plus == NULL || muon->pt() > plus->pt())) {
2123     plus = muon;
2124     }
2125     if (muon->charge() < 0 && muon->innerTrack().isAvailable() && (minus == NULL || muon->pt() > minus->pt())) {
2126     minus = muon;
2127     }
2128     }
2129    
2130     m_displaced_plusmatches = -1;
2131     m_displaced_plusst1x = -1000.;
2132     m_displaced_plusst1xsig = -1000.;
2133     m_displaced_plusst1dxdz = -1000.;
2134     m_displaced_plusst1dxdzsig = -1000.;
2135     m_displaced_plushits = -1;
2136     m_displaced_plusnormchi2 = -1.;
2137     m_displaced_minusmatches = -1;
2138     m_displaced_minusst1x = -1000.;
2139     m_displaced_minusst1xsig = -1000.;
2140     m_displaced_minusst1dxdz = -1000.;
2141     m_displaced_minusst1dxdzsig = -1000.;
2142     m_displaced_minushits = -1;
2143     m_displaced_minusnormchi2 = -1.;
2144    
2145     if (plus != NULL && minus != NULL) {
2146     m_displaced_plusmatches = plus->numberOfMatches(reco::Muon::SegmentAndTrackArbitration);
2147     m_displaced_plushits = plus->innerTrack()->numberOfValidHits();
2148     m_displaced_plusnormchi2 = plus->innerTrack()->normalizedChi2();
2149    
2150     std::vector<reco::MuonChamberMatch> plusmatches = plus->matches();
2151     for (std::vector<reco::MuonChamberMatch>::const_iterator chamberMatch = plusmatches.begin(); chamberMatch != plusmatches.end(); ++chamberMatch) {
2152     for (std::vector<reco::MuonSegmentMatch>::const_iterator segmentMatch = chamberMatch->segmentMatches.begin(); segmentMatch != chamberMatch->segmentMatches.end(); ++segmentMatch) {
2153     if (segmentMatch->isMask(reco::MuonSegmentMatch::BestInChamberByDR) &&
2154     segmentMatch->isMask(reco::MuonSegmentMatch::BelongsToTrackByDR)) {
2155     if (chamberMatch->station() == 1) {
2156     m_displaced_plusst1x = (segmentMatch->x - chamberMatch->x);
2157     m_displaced_plusst1xsig = (segmentMatch->x - chamberMatch->x)/sqrt(pow(segmentMatch->xErr, 2) + pow(chamberMatch->xErr, 2));
2158     m_displaced_plusst1dxdz = (segmentMatch->dXdZ - chamberMatch->dXdZ);
2159     m_displaced_plusst1dxdzsig = (segmentMatch->dXdZ - chamberMatch->dXdZ)/sqrt(pow(segmentMatch->dXdZErr, 2) + pow(chamberMatch->dXdZErr, 2));
2160     }
2161     }
2162     }
2163     }
2164    
2165     m_displaced_minusmatches = minus->numberOfMatches(reco::Muon::SegmentAndTrackArbitration);
2166     m_displaced_minushits = minus->innerTrack()->numberOfValidHits();
2167     m_displaced_minusnormchi2 = minus->innerTrack()->normalizedChi2();
2168    
2169     std::vector<reco::MuonChamberMatch> minusmatches = minus->matches();
2170     for (std::vector<reco::MuonChamberMatch>::const_iterator chamberMatch = minusmatches.begin(); chamberMatch != minusmatches.end(); ++chamberMatch) {
2171     for (std::vector<reco::MuonSegmentMatch>::const_iterator segmentMatch = chamberMatch->segmentMatches.begin(); segmentMatch != chamberMatch->segmentMatches.end(); ++segmentMatch) {
2172     if (segmentMatch->isMask(reco::MuonSegmentMatch::BestInChamberByDR) &&
2173     segmentMatch->isMask(reco::MuonSegmentMatch::BelongsToTrackByDR)) {
2174     if (chamberMatch->station() == 1) {
2175     m_displaced_minusst1x = (segmentMatch->x - chamberMatch->x);
2176     m_displaced_minusst1xsig = (segmentMatch->x - chamberMatch->x)/sqrt(pow(segmentMatch->xErr, 2) + pow(chamberMatch->xErr, 2));
2177     m_displaced_minusst1dxdz = (segmentMatch->dXdZ - chamberMatch->dXdZ);
2178     m_displaced_minusst1dxdzsig = (segmentMatch->dXdZ - chamberMatch->dXdZ)/sqrt(pow(segmentMatch->dXdZErr, 2) + pow(chamberMatch->dXdZErr, 2));
2179     }
2180     }
2181     }
2182     }
2183     }
2184    
2185     m_displacedFake_fakes = 0;
2186     for (unsigned int i = 0; i < muJet->numberOfDaughters(); i++) {
2187     if (muJet->muon(i)->numberOfMatches(reco::Muon::SegmentAndTrackArbitration) == 0) {
2188     m_displacedFake_fakes++;
2189     }
2190     }
2191    
2192     if (m_displacedFake_fakes > 0 && sqrt(pow(m_displaced_vx, 2) + pow(m_displaced_vy, 2)) > 0.2) {
2193     m_displacedFake->Fill();
2194     }
2195     }
2196     }
2197 pivarski 1.1 }
2198    
2199    
2200     // ------------ method called once each job just before starting event loop ------------
2201     void
2202     FitNtuple::beginJob()
2203     {
2204     }
2205    
2206     // ------------ method called once each job just after ending the event loop ------------
2207     void
2208     FitNtuple::endJob() {
2209     }
2210    
2211     //define this as a plug-in
2212     DEFINE_FWK_MODULE(FitNtuple);