ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MuJetAnalysis/AnalysisTools/FitNtuple/src/FitNtuple.cc
Revision: 1.24
Committed: Tue Apr 10 17:44:13 2012 UTC (13 years ago) by aysen
Content type: text/plain
Branch: MAIN
CVS Tags: YP_2012-12-04_2011Data
Changes since 1.23: +432 -492 lines
Log Message:
add all 2011 DoubleMu triggers

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 aysen 1.24 // $Id: FitNtuple.cc,v 1.23 2012/01/30 06:54:31 aysen 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 aysen 1.23 #include "FWCore/Framework/interface/ESHandle.h"
32 pivarski 1.1
33     #include "SimDataFormats/GeneratorProducts/interface/GenEventInfoProduct.h"
34     #include "DataFormats/Candidate/interface/Candidate.h"
35     #include "AnalysisDataFormats/MuJetAnalysis/interface/MultiMuon.h"
36     #include "DataFormats/PatCandidates/interface/Muon.h"
37     #include "DataFormats/PatCandidates/interface/TriggerEvent.h"
38     #include "DataFormats/TrackReco/interface/Track.h"
39     #include "DataFormats/TrackReco/interface/TrackFwd.h"
40     #include "DataFormats/VertexReco/interface/Vertex.h"
41     #include "DataFormats/VertexReco/interface/VertexFwd.h"
42     #include "DataFormats/HepMCCandidate/interface/GenParticleFwd.h"
43     #include "DataFormats/HepMCCandidate/interface/GenParticle.h"
44 pivarski 1.6 #include "DataFormats/MuonReco/interface/Muon.h"
45     #include "DataFormats/MuonReco/interface/MuonChamberMatch.h"
46     #include "DataFormats/MuonReco/interface/MuonSegmentMatch.h"
47 pivarski 1.1 #include "CommonTools/UtilAlgos/interface/TFileService.h"
48 aysen 1.23 #include "DataFormats/GeometrySurface/interface/Cylinder.h"
49     #include "DataFormats/GeometrySurface/interface/Plane.h"
50 pivarski 1.1 #include "FWCore/ServiceRegistry/interface/Service.h"
51 aysen 1.23 #include "MagneticField/Engine/interface/MagneticField.h"
52     #include "MagneticField/Records/interface/IdealMagneticFieldRecord.h"
53     #include "TrackingTools/GeomPropagators/interface/Propagator.h"
54     #include "TrackingTools/Records/interface/TrackingComponentsRecord.h"
55     #include "TrackingTools/TrajectoryState/interface/FreeTrajectoryState.h"
56     #include "TrackingTools/TrajectoryState/interface/TrajectoryStateOnSurface.h"
57 pivarski 1.1 #include "TTree.h"
58 pivarski 1.7 #include "TRandom3.h"
59 aysen 1.23 #include "TMath.h"
60    
61     #include "TrackPropagation/SteppingHelixPropagator/interface/SteppingHelixPropagator.h"
62     #include "Geometry/CommonDetUnit/interface/GlobalTrackingGeometry.h"
63     #include "Geometry/Records/interface/GlobalTrackingGeometryRecord.h"
64     #include "DataFormats/DetId/interface/DetId.h"
65     #include "DataFormats/TrackingRecHit/interface/TrackingRecHit.h"
66     #include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h"
67     #include "Geometry/TrackerGeometryBuilder/interface/PixelGeomDetUnit.h"
68     #include "Geometry/Records/interface/TrackerDigiGeometryRecord.h"
69     #include "Geometry/CommonTopologies/interface/PixelTopology.h"
70     #include "DataFormats/TrackReco/interface/HitPattern.h"
71    
72 pivarski 1.1
73     //
74     // class declaration
75     //
76    
77     class FitNtuple : public edm::EDAnalyzer {
78     public:
79     explicit FitNtuple(const edm::ParameterSet&);
80     ~FitNtuple();
81    
82    
83     private:
84     virtual void beginJob() ;
85     virtual void analyze(const edm::Event&, const edm::EventSetup&);
86     virtual void endJob() ;
87    
88     // ----------member data ---------------------------
89    
90     // input parameters
91 pivarski 1.15 edm::InputTag m_muJets;
92     edm::InputTag m_muJetOrphans;
93 aysen 1.23 double m_trigpt;
94 aysen 1.24 std::string m_dataset;
95 pivarski 1.1
96 pivarski 1.7 TRandom3 m_trandom3;
97    
98 pivarski 1.1 // all ntuples need these variables
99 pivarski 1.10 // 1 = b-jets
100     // 2 = resonances
101     // 4 = any decays-in-flight
102     // 8 = any non-muons
103 pivarski 1.1 Int_t m_run; // run and event number so that we can look at
104     Int_t m_event; // interesting cases in the event display
105     Int_t m_trigger; // satisfied trigger? 0 = failed all
106     // 2 = passed HLT_Mu9
107     // 4 = passed HLT_Mu11
108 pivarski 1.12 // 8 = passed HLT_Mu15_v1
109 aysen 1.22 // 16 = passed HLT_Mu30_v*
110 pivarski 1.19 // it is negative if there are no pT > 15 GeV/c, |eta| < 0.9 muons matched to L3
111 aysen 1.23 Int_t m_trigger15;
112     Int_t m_trigger20;
113     Int_t m_trigger24;
114     Int_t m_trigger30;
115     Int_t m_trigger40;
116     Int_t m_trigger40eta;
117    
118     Int_t m_triggerIsoMu;
119     Int_t m_triggerMu;
120    
121     Int_t m_primaryverticessize;
122     Int_t m_generaltrackssize;
123    
124     Int_t m_maxtrackspervtx;
125    
126 pivarski 1.3 Float_t m_muon1pt;
127     Float_t m_muon1eta;
128     Float_t m_muon2pt;
129     Float_t m_muon2eta;
130     Float_t m_muon3pt;
131     Float_t m_muon3eta;
132     Float_t m_muon4pt;
133     Float_t m_muon4eta;
134     Float_t m_muontrigpt;
135     Float_t m_muontrigeta;
136 pivarski 1.1
137 pivarski 1.13 // control sample "lowdimuon" (single mu-jet with two muons and low pT)
138 pivarski 1.1 TTree *m_lowdimuon;
139 pivarski 1.10 Int_t m_lowdimuon_containstrig;
140 aysen 1.24 Int_t m_lowdimuon_containstrig2;
141 pivarski 1.1 Float_t m_lowdimuon_genmass;
142     Float_t m_lowdimuon_mass;
143 aysen 1.23 Float_t m_lowdimuon_corr_mass;
144     Float_t m_lowdimuon_recomass;
145 pivarski 1.1 Float_t m_lowdimuon_pt;
146     Float_t m_lowdimuon_eta;
147     Float_t m_lowdimuon_phi;
148     Float_t m_lowdimuon_dr;
149     Float_t m_lowdimuon_pluspx;
150     Float_t m_lowdimuon_pluspy;
151     Float_t m_lowdimuon_pluspz;
152     Float_t m_lowdimuon_minuspx;
153     Float_t m_lowdimuon_minuspy;
154     Float_t m_lowdimuon_minuspz;
155     Float_t m_lowdimuon_vprob;
156 aysen 1.23 Float_t m_lowdimuon_vnchi2;
157 pivarski 1.1 Float_t m_lowdimuon_vx;
158     Float_t m_lowdimuon_vy;
159     Float_t m_lowdimuon_vz;
160     Float_t m_lowdimuon_iso;
161 aysen 1.23 Float_t m_lowdimuon_iso_3mm;
162     Float_t m_lowdimuon_iso_2mm;
163     Float_t m_lowdimuon_iso_1mm;
164 pivarski 1.6 Int_t m_lowdimuon_plusmatches;
165     Int_t m_lowdimuon_plushits;
166     Float_t m_lowdimuon_plusnormchi2;
167     Int_t m_lowdimuon_minusmatches;
168     Int_t m_lowdimuon_minushits;
169     Float_t m_lowdimuon_minusnormchi2;
170 aysen 1.22 Float_t m_lowdimuon_lxy;
171     Int_t m_lowdimuon_bbbarlike;
172 pivarski 1.6
173 aysen 1.24 Float_t m_lowdimuon_trigpt1;
174     Float_t m_lowdimuon_trigeta1;
175     Float_t m_lowdimuon_trigpt2;
176     Float_t m_lowdimuon_trigeta2;
177    
178     /*
179 aysen 1.23 Float_t m_lowdimuon_dphi100;
180     Float_t m_lowdimuon_dphi200;
181     Float_t m_lowdimuon_dphi300;
182     Float_t m_lowdimuon_dphi425;
183     Float_t m_lowdimuon_dphi470;
184     Float_t m_lowdimuon_dphi510;
185     Float_t m_lowdimuon_dphi565;
186     Float_t m_lowdimuon_dphi620;
187     Float_t m_lowdimuon_dphi670;
188     Float_t m_lowdimuon_dphi720;
189     Float_t m_lowdimuon_dphi800;
190     Float_t m_lowdimuon_dphi900;
191 aysen 1.24 */
192 aysen 1.23
193     Int_t m_lowdimuon_plus_thits;
194     Int_t m_lowdimuon_plus_mhits;
195     Int_t m_lowdimuon_plus_phits;
196    
197     Int_t m_lowdimuon_minus_thits;
198     Int_t m_lowdimuon_minus_mhits;
199     Int_t m_lowdimuon_minus_phits;
200    
201     Float_t m_lowdimuon_plus_dxy;
202     Float_t m_lowdimuon_minus_dxy;
203    
204     Float_t m_lowdimuon_plus_pt;
205     Float_t m_lowdimuon_minus_pt;
206 aysen 1.24 Float_t m_lowdimuon_plus_eta;
207     Float_t m_lowdimuon_minus_eta;
208     Float_t m_lowdimuon_plus_phi;
209     Float_t m_lowdimuon_minus_phi;
210    
211     Float_t m_lowdimuon_Deltaphi;
212 pivarski 1.1
213 aysen 1.23 Float_t m_lowdimuon_dz;
214 pivarski 1.1
215 pivarski 1.8 // control sample "dimuorphan" (single, two-muon mu-jet and a single muon)
216     TTree *m_dimuorphan;
217     Float_t m_dimuorphan_deltaphi;
218     Float_t m_dimuorphan_orphanpt;
219     Float_t m_dimuorphan_orphaneta;
220     Float_t m_dimuorphan_orphanphi;
221 pivarski 1.9 Int_t m_dimuorphan_orphanisglobal;
222     Int_t m_dimuorphan_orphanmatches;
223 aysen 1.24 Int_t m_dimuorphan_stationmask;
224 pivarski 1.9 Int_t m_dimuorphan_orphanhits;
225     Float_t m_dimuorphan_orphanchi2;
226 pivarski 1.8 Int_t m_dimuorphan_containstrig;
227 aysen 1.24 Int_t m_dimuorphan_containstrig2;
228 pivarski 1.8 Float_t m_dimuorphan_mass;
229 aysen 1.23 Float_t m_dimuorphan_corr_mass;
230     Float_t m_dimuorphan_recomass;
231 pivarski 1.8 Float_t m_dimuorphan_pt;
232     Float_t m_dimuorphan_eta;
233     Float_t m_dimuorphan_phi;
234 aysen 1.23 Float_t m_dimuorphan_dphi;
235 pivarski 1.8 Float_t m_dimuorphan_dr;
236     Float_t m_dimuorphan_vprob;
237 aysen 1.23 Float_t m_dimuorphan_vnchi2;
238 pivarski 1.8 Float_t m_dimuorphan_lxy;
239     Float_t m_dimuorphan_lxyz;
240 aysen 1.23 Float_t m_dimuorphan_caloiso;
241 pivarski 1.8 Float_t m_dimuorphan_iso;
242 aysen 1.23 Float_t m_dimuorphan_iso_3mm;
243     Float_t m_dimuorphan_iso_2mm;
244     Float_t m_dimuorphan_iso_1mm;
245     Float_t m_dimuorphan_orphan_iso_3mm;
246     Float_t m_dimuorphan_orphan_iso_2mm;
247     Float_t m_dimuorphan_orphan_iso_1mm;
248 aysen 1.22 Int_t m_dimuorphan_dimuoncontainstrig;
249     Int_t m_dimuorphan_dimuonbbbarlike;
250 pivarski 1.8
251 aysen 1.24 Float_t m_dimuorphan_trigpt1;
252     Float_t m_dimuorphan_trigeta1;
253     Float_t m_dimuorphan_trigpt2;
254     Float_t m_dimuorphan_trigeta2;
255    
256 aysen 1.23 Int_t m_dimuorphan_trackdensity;
257    
258     Int_t m_dimuorphan_plusmatches;
259     Int_t m_dimuorphan_plushits;
260     Float_t m_dimuorphan_plusnormchi2;
261     Int_t m_dimuorphan_minusmatches;
262     Int_t m_dimuorphan_minushits;
263     Float_t m_dimuorphan_minusnormchi2;
264    
265 aysen 1.24 Int_t m_dimuorphan_plusstationmask;
266     Int_t m_dimuorphan_minusstationmask;
267    
268 aysen 1.23 Float_t m_dimuorphan_plus_qoverpError;
269     Float_t m_dimuorphan_plus_ptError;
270     Float_t m_dimuorphan_plus_phiError;
271     Float_t m_dimuorphan_plus_etaError;
272     Int_t m_dimuorphan_plus_isGlobal;
273     Int_t m_dimuorphan_plus_isStandAlone;
274     Int_t m_dimuorphan_plus_GlobalHits;
275     Float_t m_dimuorphan_plus_GlobalChi2;
276     Float_t m_dimuorphan_plus_StandAloneHits;
277     Float_t m_dimuorphan_plus_StandAloneChi2;
278    
279     Float_t m_dimuorphan_minus_qoverpError;
280     Float_t m_dimuorphan_minus_ptError;
281     Float_t m_dimuorphan_minus_phiError;
282     Float_t m_dimuorphan_minus_etaError;
283     Int_t m_dimuorphan_minus_isGlobal;
284     Int_t m_dimuorphan_minus_isStandAlone;
285     Int_t m_dimuorphan_minus_GlobalHits;
286     Float_t m_dimuorphan_minus_GlobalChi2;
287     Float_t m_dimuorphan_minus_StandAloneHits;
288     Float_t m_dimuorphan_minus_StandAloneChi2;
289    
290 aysen 1.24 /*
291 aysen 1.23 Float_t m_dimuorphan_dphi100;
292     Float_t m_dimuorphan_dphi200;
293     Float_t m_dimuorphan_dphi300;
294     Float_t m_dimuorphan_dphi425;
295     Float_t m_dimuorphan_dphi470;
296     Float_t m_dimuorphan_dphi510;
297     Float_t m_dimuorphan_dphi565;
298     Float_t m_dimuorphan_dphi620;
299     Float_t m_dimuorphan_dphi670;
300     Float_t m_dimuorphan_dphi720;
301     Float_t m_dimuorphan_dphi800;
302     Float_t m_dimuorphan_dphi900;
303 aysen 1.24 */
304 aysen 1.23
305     Int_t m_dimuorphan_plus_thits;
306     Int_t m_dimuorphan_plus_mhits;
307     Int_t m_dimuorphan_plus_phits;
308    
309     Int_t m_dimuorphan_minus_thits;
310     Int_t m_dimuorphan_minus_mhits;
311     Int_t m_dimuorphan_minus_phits;
312    
313     Float_t m_dimuorphan_plus_dxy;
314     Float_t m_dimuorphan_minus_dxy;
315    
316     Float_t m_dimuorphan_plus_pt;
317     Float_t m_dimuorphan_minus_pt;
318 aysen 1.24 Float_t m_dimuorphan_plus_eta;
319     Float_t m_dimuorphan_minus_eta;
320     Float_t m_dimuorphan_plus_phi;
321     Float_t m_dimuorphan_minus_phi;
322    
323     Float_t m_dimuorphan_Deltaphi;
324     Float_t m_dimuorphan_Deltaphi_orphan;
325 aysen 1.23
326     Float_t m_dimuorphan_dz1;
327     Float_t m_dimuorphan_dz2;
328     Float_t m_dimuorphan_deltaz;
329    
330     Int_t m_dimuorphan_muonssize;
331    
332     Float_t m_dimuorphan_dr1;
333     Float_t m_dimuorphan_dr2;
334    
335 pivarski 1.1 // signal region "dimudimu" (two mu-jets with two muons each)
336     TTree *m_dimudimu;
337 pivarski 1.13 Int_t m_dimudimu_orphans;
338 pivarski 1.7 Float_t m_dimudimu_wholemass;
339     Float_t m_dimudimu_wholept;
340     Float_t m_dimudimu_deltaphi;
341 pivarski 1.8 Int_t m_dimudimu_containstrig;
342 aysen 1.24 Int_t m_dimudimu_containstrig2;
343 pivarski 1.8 Float_t m_dimudimu_massC;
344     Float_t m_dimudimu_ptC;
345     Float_t m_dimudimu_etaC;
346     Float_t m_dimudimu_phiC;
347     Float_t m_dimudimu_drC;
348     Float_t m_dimudimu_vprobC;
349     Float_t m_dimudimu_lxyC;
350     Float_t m_dimudimu_lxyzC;
351     Float_t m_dimudimu_isoC;
352 aysen 1.23 Float_t m_dimudimu_isoC_3mm;
353     Float_t m_dimudimu_isoC_2mm;
354     Float_t m_dimudimu_isoC_1mm;
355 pivarski 1.8 Float_t m_dimudimu_massF;
356     Float_t m_dimudimu_ptF;
357     Float_t m_dimudimu_etaF;
358     Float_t m_dimudimu_phiF;
359     Float_t m_dimudimu_drF;
360     Float_t m_dimudimu_vprobF;
361     Float_t m_dimudimu_lxyF;
362     Float_t m_dimudimu_lxyzF;
363     Float_t m_dimudimu_isoF;
364 aysen 1.23 Float_t m_dimudimu_isoF_3mm;
365     Float_t m_dimudimu_isoF_2mm;
366     Float_t m_dimudimu_isoF_1mm;
367    
368     Float_t m_dimudimu_dz1;
369     Float_t m_dimudimu_dz2;
370     Float_t m_dimudimu_deltaz;
371    
372 pivarski 1.1 };
373    
374     //
375     // constants, enums and typedefs
376     //
377    
378     //
379     // static data member definitions
380     //
381    
382     //
383     // constructors and destructor
384     //
385     FitNtuple::FitNtuple(const edm::ParameterSet& iConfig)
386 aysen 1.24 : m_muJets(iConfig.getParameter<edm::InputTag>("muJets"))
387 pivarski 1.15 , m_muJetOrphans(iConfig.getParameter<edm::InputTag>("muJetOrphans"))
388 aysen 1.23 , m_trigpt(iConfig.getParameter<double>("trigpt"))
389 aysen 1.24 , m_dataset(iConfig.getParameter<std::string>("dataset"))
390 pivarski 1.1 {
391     //now do what ever initialization is needed
392     edm::Service<TFileService> tFile;
393    
394 pivarski 1.7 m_lowdimuon = tFile->make<TTree>("lowdimuon", "lowdimuon");
395 pivarski 1.1 m_lowdimuon->Branch("run", &m_run, "run/I");
396     m_lowdimuon->Branch("event", &m_event, "event/I");
397     m_lowdimuon->Branch("trigger", &m_trigger, "trigger/I");
398 aysen 1.23 m_lowdimuon->Branch("trigger15", &m_trigger15, "trigger15/I");
399     m_lowdimuon->Branch("trigger20", &m_trigger20, "trigger20/I");
400     m_lowdimuon->Branch("trigger24", &m_trigger24, "trigger24/I");
401     m_lowdimuon->Branch("trigger30", &m_trigger30, "trigger30/I");
402     m_lowdimuon->Branch("trigger40", &m_trigger40, "trigger40/I");
403     m_lowdimuon->Branch("trigger40eta", &m_trigger40eta, "trigger40eta/I");
404     m_lowdimuon->Branch("triggerIsoMu", &m_triggerIsoMu, "triggerIsoMu/I");
405     m_lowdimuon->Branch("triggerMu", &m_triggerMu, "triggerMu/I");
406 pivarski 1.3 m_lowdimuon->Branch("muon1pt", &m_muon1pt, "muon1pt/F");
407     m_lowdimuon->Branch("muon1eta", &m_muon1eta, "muon1eta/F");
408     m_lowdimuon->Branch("muon2pt", &m_muon2pt, "muon2pt/F");
409     m_lowdimuon->Branch("muon2eta", &m_muon2eta, "muon2eta/F");
410     m_lowdimuon->Branch("muontrigpt", &m_muontrigpt, "muontrigpt/F");
411     m_lowdimuon->Branch("muontrigeta", &m_muontrigeta, "muontrigeta/F");
412 pivarski 1.10 m_lowdimuon->Branch("containstrig", &m_lowdimuon_containstrig, "containstrig/I");
413 aysen 1.24 m_lowdimuon->Branch("containstrig2", &m_lowdimuon_containstrig2, "containstrig2/I");
414 pivarski 1.1 m_lowdimuon->Branch("genmass", &m_lowdimuon_genmass, "genmass/F");
415     m_lowdimuon->Branch("mass", &m_lowdimuon_mass, "mass/F");
416 aysen 1.23 m_lowdimuon->Branch("corr_mass", &m_lowdimuon_corr_mass, "corr_mass/F");
417     m_lowdimuon->Branch("recomass", &m_lowdimuon_recomass, "recomass/F");
418 pivarski 1.1 m_lowdimuon->Branch("pt", &m_lowdimuon_pt, "pt/F");
419     m_lowdimuon->Branch("eta", &m_lowdimuon_eta, "eta/F");
420     m_lowdimuon->Branch("phi", &m_lowdimuon_phi, "phi/F");
421     m_lowdimuon->Branch("dr", &m_lowdimuon_dr, "dr/F");
422     m_lowdimuon->Branch("pluspx", &m_lowdimuon_pluspx, "pluspx/F");
423     m_lowdimuon->Branch("pluspy", &m_lowdimuon_pluspy, "pluspy/F");
424     m_lowdimuon->Branch("pluspz", &m_lowdimuon_pluspz, "pluspz/F");
425     m_lowdimuon->Branch("minuspx", &m_lowdimuon_minuspx, "minuspx/F");
426     m_lowdimuon->Branch("minuspy", &m_lowdimuon_minuspy, "minuspy/F");
427     m_lowdimuon->Branch("minuspz", &m_lowdimuon_minuspz, "minuspz/F");
428     m_lowdimuon->Branch("vprob", &m_lowdimuon_vprob, "vprob/F");
429 aysen 1.23 m_lowdimuon->Branch("vnchi2", &m_lowdimuon_vnchi2, "vnchi2/F");
430 pivarski 1.1 m_lowdimuon->Branch("vx", &m_lowdimuon_vx, "vx/F");
431     m_lowdimuon->Branch("vy", &m_lowdimuon_vy, "vy/F");
432     m_lowdimuon->Branch("vz", &m_lowdimuon_vz, "vz/F");
433     m_lowdimuon->Branch("iso", &m_lowdimuon_iso, "iso/F");
434 aysen 1.23 m_lowdimuon->Branch("iso_3mm", &m_lowdimuon_iso_3mm, "iso_3mm/F");
435     m_lowdimuon->Branch("iso_2mm", &m_lowdimuon_iso_2mm, "iso_2mm/F");
436     m_lowdimuon->Branch("iso_1mm", &m_lowdimuon_iso_1mm, "iso_1mm/F");
437 pivarski 1.6 m_lowdimuon->Branch("plusmatches", &m_lowdimuon_plusmatches, "plusmatches/I");
438     m_lowdimuon->Branch("plushits", &m_lowdimuon_plushits, "plushits/I");
439     m_lowdimuon->Branch("plusnormchi2", &m_lowdimuon_plusnormchi2, "plusnormchi2/F");
440     m_lowdimuon->Branch("minusmatches", &m_lowdimuon_minusmatches, "minusmatches/I");
441     m_lowdimuon->Branch("minushits", &m_lowdimuon_minushits, "minushits/I");
442     m_lowdimuon->Branch("minusnormchi2", &m_lowdimuon_minusnormchi2, "minusnormchi2/F");
443 aysen 1.22 m_lowdimuon->Branch("lxy", &m_lowdimuon_lxy, "lxy/F");
444     m_lowdimuon->Branch("bbbarlike", &m_lowdimuon_bbbarlike, "bbbarlike/I");
445 pivarski 1.1
446 aysen 1.24 m_lowdimuon->Branch("trigpt1", &m_lowdimuon_trigpt1, "trigpt1/F");
447     m_lowdimuon->Branch("trigeta1", &m_lowdimuon_trigeta1, "trigeta1/F");
448     m_lowdimuon->Branch("trigpt2", &m_lowdimuon_trigpt2, "trigpt2/F");
449     m_lowdimuon->Branch("trigeta2", &m_lowdimuon_trigeta2, "trigeta2/F");
450    
451    
452     /*
453 aysen 1.23 m_lowdimuon->Branch("dphi100", &m_lowdimuon_dphi100, "dphi100/F");
454     m_lowdimuon->Branch("dphi200", &m_lowdimuon_dphi200, "dphi200/F");
455     m_lowdimuon->Branch("dphi300", &m_lowdimuon_dphi300, "dphi300/F");
456     m_lowdimuon->Branch("dphi425", &m_lowdimuon_dphi425, "dphi425/F");
457     m_lowdimuon->Branch("dphi470", &m_lowdimuon_dphi470, "dphi470/F");
458     m_lowdimuon->Branch("dphi510", &m_lowdimuon_dphi510, "dphi510/F");
459     m_lowdimuon->Branch("dphi565", &m_lowdimuon_dphi565, "dphi565/F");
460     m_lowdimuon->Branch("dphi620", &m_lowdimuon_dphi620, "dphi620/F");
461     m_lowdimuon->Branch("dphi670", &m_lowdimuon_dphi670, "dphi670/F");
462     m_lowdimuon->Branch("dphi720", &m_lowdimuon_dphi720, "dphi720/F");
463     m_lowdimuon->Branch("dphi800", &m_lowdimuon_dphi800, "dphi800/F");
464     m_lowdimuon->Branch("dphi900", &m_lowdimuon_dphi900, "dphi900/F");
465 aysen 1.24 */
466 aysen 1.23
467     m_lowdimuon->Branch("plus_thits", &m_lowdimuon_plus_thits, "plus_thits/I");
468     m_lowdimuon->Branch("plus_mhits", &m_lowdimuon_plus_mhits, "plus_mhits/I");
469     m_lowdimuon->Branch("plus_phits", &m_lowdimuon_plus_phits, "plus_phits/I");
470    
471     m_lowdimuon->Branch("minus_thits", &m_lowdimuon_minus_thits, "minus_thits/I");
472     m_lowdimuon->Branch("minus_mhits", &m_lowdimuon_minus_mhits, "minus_mhits/I");
473     m_lowdimuon->Branch("minus_phits", &m_lowdimuon_minus_phits, "minus_phits/I");
474    
475     m_lowdimuon->Branch("plus_dxy", &m_lowdimuon_plus_dxy, "plus_dxy/F");
476     m_lowdimuon->Branch("minus_dxy", &m_lowdimuon_minus_dxy, "minus_dxy/F");
477    
478     m_lowdimuon->Branch("plus_pt", &m_lowdimuon_plus_pt, "plus_pt/F");
479     m_lowdimuon->Branch("minus_pt", &m_lowdimuon_minus_pt, "minus_pt/F");
480 aysen 1.24 m_lowdimuon->Branch("plus_eta", &m_lowdimuon_plus_eta, "plus_eta/F");
481     m_lowdimuon->Branch("minus_eta", &m_lowdimuon_minus_eta, "minus_eta/F");
482     m_lowdimuon->Branch("plus_phi", &m_lowdimuon_plus_phi, "plus_phi/F");
483     m_lowdimuon->Branch("minus_phi", &m_lowdimuon_minus_phi, "minus_phi/F");
484    
485     m_lowdimuon->Branch("Deltaphi", &m_lowdimuon_Deltaphi, "Deltaphi/F");
486 aysen 1.23
487     m_lowdimuon->Branch("dz", &m_lowdimuon_dz, "dz/F");
488    
489     m_lowdimuon->Branch("pvsize", &m_primaryverticessize, "pvsize/I");
490     m_lowdimuon->Branch("trackssize", &m_generaltrackssize, "trackssize/I");
491     m_lowdimuon->Branch("maxtrackspervtx", &m_maxtrackspervtx, "maxtrackspervtx/I");
492 pivarski 1.1
493 pivarski 1.10 m_dimuorphan = tFile->make<TTree>("dimuorphan", "dimuorphan");
494 pivarski 1.8 m_dimuorphan->Branch("run", &m_run, "run/I");
495     m_dimuorphan->Branch("event", &m_event, "event/I");
496     m_dimuorphan->Branch("trigger", &m_trigger, "trigger/I");
497 aysen 1.23 m_dimuorphan->Branch("trigger15", &m_trigger15, "trigger15/I");
498     m_dimuorphan->Branch("trigger20", &m_trigger20, "trigger20/I");
499     m_dimuorphan->Branch("trigger24", &m_trigger24, "trigger24/I");
500     m_dimuorphan->Branch("trigger30", &m_trigger30, "trigger30/I");
501     m_dimuorphan->Branch("trigger40", &m_trigger40, "trigger40/I");
502     m_dimuorphan->Branch("trigger40eta", &m_trigger40eta, "trigger40eta/I");
503     m_dimuorphan->Branch("triggerIsoMu", &m_triggerIsoMu, "triggerIsoMu/I");
504 aysen 1.24 m_dimuorphan->Branch("triggerMu", &m_triggerMu, "triggerMu/I");
505 pivarski 1.8 m_dimuorphan->Branch("muon1pt", &m_muon1pt, "muon1pt/F");
506     m_dimuorphan->Branch("muon1eta", &m_muon1eta, "muon1eta/F");
507     m_dimuorphan->Branch("muon2pt", &m_muon2pt, "muon2pt/F");
508     m_dimuorphan->Branch("muon2eta", &m_muon2eta, "muon2eta/F");
509     m_dimuorphan->Branch("muon3pt", &m_muon3pt, "muon3pt/F");
510     m_dimuorphan->Branch("muon3eta", &m_muon3eta, "muon3eta/F");
511     m_dimuorphan->Branch("muon4pt", &m_muon4pt, "muon4pt/F");
512     m_dimuorphan->Branch("muon4eta", &m_muon4eta, "muon4eta/F");
513     m_dimuorphan->Branch("muontrigpt", &m_muontrigpt, "muontrigpt/F");
514     m_dimuorphan->Branch("muontrigeta", &m_muontrigeta, "muontrigeta/F");
515     m_dimuorphan->Branch("deltaphi", &m_dimuorphan_deltaphi, "deltaphi/F");
516     m_dimuorphan->Branch("orphanpt", &m_dimuorphan_orphanpt, "orphanpt/F");
517     m_dimuorphan->Branch("orphaneta", &m_dimuorphan_orphaneta, "orphaneta/F");
518     m_dimuorphan->Branch("orphanphi", &m_dimuorphan_orphanphi, "orphanphi/F");
519 pivarski 1.9 m_dimuorphan->Branch("orphanisglobal", &m_dimuorphan_orphanisglobal, "orphanisglobal/I");
520     m_dimuorphan->Branch("orphanmatches", &m_dimuorphan_orphanmatches, "orphan/I");
521 aysen 1.24 m_dimuorphan->Branch("orphanstationmask", &m_dimuorphan_stationmask, "stationmask/I");
522 pivarski 1.9 m_dimuorphan->Branch("orphanhits", &m_dimuorphan_orphanhits, "orphanhits/I");
523     m_dimuorphan->Branch("orphanchi2", &m_dimuorphan_orphanchi2, "orphanchi2/F");
524 pivarski 1.8 m_dimuorphan->Branch("containstrig", &m_dimuorphan_containstrig, "containstrig/I");
525 aysen 1.24 m_dimuorphan->Branch("containstrig2", &m_dimuorphan_containstrig2, "containstrig2/I");
526 pivarski 1.8 m_dimuorphan->Branch("mass", &m_dimuorphan_mass, "mass/F");
527 aysen 1.23 m_dimuorphan->Branch("corr_mass", &m_dimuorphan_corr_mass, "corr_mass/F");
528     m_dimuorphan->Branch("recomass", &m_dimuorphan_recomass, "recomass/F");
529 pivarski 1.8 m_dimuorphan->Branch("pt", &m_dimuorphan_pt, "pt/F");
530     m_dimuorphan->Branch("eta", &m_dimuorphan_eta, "eta/F");
531     m_dimuorphan->Branch("phi", &m_dimuorphan_phi, "phi/F");
532 aysen 1.23 m_dimuorphan->Branch("dphi", &m_dimuorphan_dphi, "dphi/F");
533 pivarski 1.8 m_dimuorphan->Branch("dr", &m_dimuorphan_dr, "dr/F");
534     m_dimuorphan->Branch("vprob", &m_dimuorphan_vprob, "vprob/F");
535 aysen 1.23 m_dimuorphan->Branch("vnchi2", &m_dimuorphan_vnchi2, "vnchi2/F");
536 pivarski 1.8 m_dimuorphan->Branch("lxy", &m_dimuorphan_lxy, "lxy/F");
537     m_dimuorphan->Branch("lxyz", &m_dimuorphan_lxyz, "lxyz/F");
538 aysen 1.23 m_dimuorphan->Branch("caloiso", &m_dimuorphan_caloiso, "caloiso/F");
539 pivarski 1.8 m_dimuorphan->Branch("iso", &m_dimuorphan_iso, "iso/F");
540 aysen 1.23 m_dimuorphan->Branch("iso_3mm", &m_dimuorphan_iso_3mm, "iso_3mm/F");
541     m_dimuorphan->Branch("iso_2mm", &m_dimuorphan_iso_2mm, "iso_2mm/F");
542     m_dimuorphan->Branch("iso_1mm", &m_dimuorphan_iso_1mm, "iso_1mm/F");
543     m_dimuorphan->Branch("orphan_iso_3mm", &m_dimuorphan_orphan_iso_3mm, "orphan_iso_3mm/F");
544     m_dimuorphan->Branch("orphan_iso_2mm", &m_dimuorphan_orphan_iso_2mm, "orphan_iso_2mm/F");
545     m_dimuorphan->Branch("orphan_iso_1mm", &m_dimuorphan_orphan_iso_1mm, "orphan_iso_1mm/F");
546 aysen 1.22 m_dimuorphan->Branch("dimuoncontainstrig", &m_dimuorphan_dimuoncontainstrig, "dimuoncontainstrig/I");
547     m_dimuorphan->Branch("dimuonbbbarlike", &m_dimuorphan_dimuonbbbarlike, "eta/I");
548 pivarski 1.8
549 aysen 1.24 m_dimuorphan->Branch("trigpt1", &m_dimuorphan_trigpt1, "trigpt1/F");
550     m_dimuorphan->Branch("trigeta1", &m_dimuorphan_trigeta1, "trigeta1/F");
551     m_dimuorphan->Branch("trigpt2", &m_dimuorphan_trigpt2, "trigpt2/F");
552     m_dimuorphan->Branch("trigeta2", &m_dimuorphan_trigeta2, "trigeta2/F");
553    
554 aysen 1.23 m_dimuorphan->Branch("plusmatches", &m_dimuorphan_plusmatches, "plusmatches/I");
555     m_dimuorphan->Branch("plushits", &m_dimuorphan_plushits, "plushits/I");
556     m_dimuorphan->Branch("plusnormchi2", &m_dimuorphan_plusnormchi2, "plusnormchi2/F");
557     m_dimuorphan->Branch("minusmatches", &m_dimuorphan_minusmatches, "minusmatches/I");
558     m_dimuorphan->Branch("minushits", &m_dimuorphan_minushits, "minushits/I");
559     m_dimuorphan->Branch("minusnormchi2", &m_dimuorphan_minusnormchi2, "minusnormchi2/F");
560    
561 aysen 1.24 m_dimuorphan->Branch("plusstationmask", &m_dimuorphan_plusstationmask, "plusstationmask/I");
562     m_dimuorphan->Branch("minusstationmask", &m_dimuorphan_minusstationmask, "minusstationmask/I");
563    
564 aysen 1.23 m_dimuorphan->Branch("plus_qoverpError", &m_dimuorphan_plus_qoverpError, "plus_qoverpError/F");
565     m_dimuorphan->Branch("plus_ptError", &m_dimuorphan_plus_ptError, "plus_ptError/F");
566     m_dimuorphan->Branch("plus_phiError", &m_dimuorphan_plus_phiError, "plus_phiError/F");
567     m_dimuorphan->Branch("plus_etaError", &m_dimuorphan_plus_etaError, "plus_etaError/F");
568     m_dimuorphan->Branch("plus_isGlobal", &m_dimuorphan_plus_isGlobal, "plus_isGlobal/I");
569     m_dimuorphan->Branch("plus_isStandAlone", &m_dimuorphan_plus_isStandAlone, "plus_isStandAlone/I");
570     m_dimuorphan->Branch("plus_GlobalHits", &m_dimuorphan_plus_GlobalHits, "plus_GlobalHits/I");
571     m_dimuorphan->Branch("plus_GlobalChi2", &m_dimuorphan_plus_GlobalChi2, "plus_GlobalChi2/F");
572     m_dimuorphan->Branch("plus_StandAloneHits", &m_dimuorphan_plus_StandAloneHits, "plus_StandAloneHits/I");
573     m_dimuorphan->Branch("plus_StandAloneChi2", &m_dimuorphan_plus_StandAloneChi2, "plus_StandAloneChi2/F");
574    
575     m_dimuorphan->Branch("minus_qoverpError", &m_dimuorphan_minus_qoverpError, "minus_qoverpError/F");
576     m_dimuorphan->Branch("minus_ptError", &m_dimuorphan_minus_ptError, "minus_ptError/F");
577     m_dimuorphan->Branch("minus_phiError", &m_dimuorphan_minus_phiError, "minus_phiError/F");
578     m_dimuorphan->Branch("minus_etaError", &m_dimuorphan_minus_etaError, "minus_etaError/F");
579     m_dimuorphan->Branch("minus_isGlobal", &m_dimuorphan_minus_isGlobal, "minus_isGlobal/I");
580     m_dimuorphan->Branch("minus_isStandAlone", &m_dimuorphan_minus_isStandAlone, "minus_isStandAlone/I");
581     m_dimuorphan->Branch("minus_GlobalHits", &m_dimuorphan_minus_GlobalHits, "minus_GlobalHits/I");
582     m_dimuorphan->Branch("minus_GlobalChi2", &m_dimuorphan_minus_GlobalChi2, "minus_GlobalChi2/F");
583     m_dimuorphan->Branch("minus_StandAloneHits", &m_dimuorphan_minus_StandAloneHits, "minus_StandAloneHits/I");
584     m_dimuorphan->Branch("minus_StandAloneChi2", &m_dimuorphan_minus_StandAloneChi2, "minus_StandAloneChi2/F");
585    
586 aysen 1.24 /*
587 aysen 1.23 m_dimuorphan->Branch("dphi100", &m_dimuorphan_dphi100, "dphi100/F");
588     m_dimuorphan->Branch("dphi200", &m_dimuorphan_dphi200, "dphi200/F");
589     m_dimuorphan->Branch("dphi300", &m_dimuorphan_dphi300, "dphi300/F");
590     m_dimuorphan->Branch("dphi425", &m_dimuorphan_dphi425, "dphi425/F");
591     m_dimuorphan->Branch("dphi470", &m_dimuorphan_dphi470, "dphi470/F");
592     m_dimuorphan->Branch("dphi510", &m_dimuorphan_dphi510, "dphi510/F");
593     m_dimuorphan->Branch("dphi565", &m_dimuorphan_dphi565, "dphi565/F");
594     m_dimuorphan->Branch("dphi620", &m_dimuorphan_dphi620, "dphi620/F");
595     m_dimuorphan->Branch("dphi670", &m_dimuorphan_dphi670, "dphi670/F");
596     m_dimuorphan->Branch("dphi720", &m_dimuorphan_dphi720, "dphi720/F");
597     m_dimuorphan->Branch("dphi800", &m_dimuorphan_dphi800, "dphi800/F");
598     m_dimuorphan->Branch("dphi900", &m_dimuorphan_dphi900, "dphi900/F");
599 aysen 1.24 */
600 aysen 1.23
601     m_dimuorphan->Branch("plus_thits", &m_dimuorphan_plus_thits, "plus_thits/I");
602     m_dimuorphan->Branch("plus_mhits", &m_dimuorphan_plus_mhits, "plus_mhits/I");
603     m_dimuorphan->Branch("plus_phits", &m_dimuorphan_plus_phits, "plus_phits/I");
604    
605     m_dimuorphan->Branch("minus_thits", &m_dimuorphan_minus_thits, "minus_thits/I");
606     m_dimuorphan->Branch("minus_mhits", &m_dimuorphan_minus_mhits, "minus_mhits/I");
607     m_dimuorphan->Branch("minus_phits", &m_dimuorphan_minus_phits, "minus_phits/I");
608    
609     m_dimuorphan->Branch("plus_dxy", &m_dimuorphan_plus_dxy, "plus_dxy/F");
610     m_dimuorphan->Branch("minus_dxy", &m_dimuorphan_minus_dxy, "minus_dxy/F");
611    
612     m_dimuorphan->Branch("plus_pt", &m_dimuorphan_plus_pt, "plus_pt/F");
613     m_dimuorphan->Branch("minus_pt", &m_dimuorphan_minus_pt, "minus_pt/F");
614 aysen 1.24 m_dimuorphan->Branch("plus_eta", &m_dimuorphan_plus_eta, "plus_eta/F");
615     m_dimuorphan->Branch("minus_eta", &m_dimuorphan_minus_eta, "minus_eta/F");
616     m_dimuorphan->Branch("plus_phi", &m_dimuorphan_plus_phi, "plus_phi/F");
617     m_dimuorphan->Branch("minus_phi", &m_dimuorphan_minus_phi, "minus_phi/F");
618    
619     m_dimuorphan->Branch("Deltaphi", &m_dimuorphan_Deltaphi, "Deltaphi/F");
620     m_dimuorphan->Branch("Deltaphi_orphan", &m_dimuorphan_Deltaphi_orphan, "Deltaphi_orphan/F");
621 aysen 1.23
622     m_dimuorphan->Branch("dz1", &m_dimuorphan_dz1, "dz1/F");
623     m_dimuorphan->Branch("dz2", &m_dimuorphan_dz2, "dz2/F");
624     m_dimuorphan->Branch("deltaz", &m_dimuorphan_deltaz, "deltaz/F");
625    
626     m_dimuorphan->Branch("muonssize", &m_dimuorphan_muonssize, "muonssize/I");
627    
628     m_dimuorphan->Branch("pvsize", &m_primaryverticessize, "pvsize/I");
629     m_dimuorphan->Branch("trackssize", &m_generaltrackssize, "trackssize/I");
630     m_dimuorphan->Branch("maxtrackspervtx", &m_maxtrackspervtx, "maxtrackspervtx/I");
631    
632     m_dimuorphan->Branch("dr1", &m_dimuorphan_dr1, "dr1/F");
633     m_dimuorphan->Branch("dr2", &m_dimuorphan_dr2, "dr2/F");
634    
635     m_dimuorphan->Branch("trackdensity", &m_dimuorphan_trackdensity, "trackdensity/I");
636    
637 pivarski 1.10 m_dimudimu = tFile->make<TTree>("dimudimu", "dimudimu");
638 pivarski 1.1 m_dimudimu->Branch("run", &m_run, "run/I");
639     m_dimudimu->Branch("event", &m_event, "event/I");
640     m_dimudimu->Branch("trigger", &m_trigger, "trigger/I");
641 pivarski 1.3 m_dimudimu->Branch("muon1pt", &m_muon1pt, "muon1pt/F");
642     m_dimudimu->Branch("muon1eta", &m_muon1eta, "muon1eta/F");
643     m_dimudimu->Branch("muon2pt", &m_muon2pt, "muon2pt/F");
644     m_dimudimu->Branch("muon2eta", &m_muon2eta, "muon2eta/F");
645     m_dimudimu->Branch("muon3pt", &m_muon3pt, "muon3pt/F");
646     m_dimudimu->Branch("muon3eta", &m_muon3eta, "muon3eta/F");
647     m_dimudimu->Branch("muon4pt", &m_muon4pt, "muon4pt/F");
648     m_dimudimu->Branch("muon4eta", &m_muon4eta, "muon4eta/F");
649     m_dimudimu->Branch("muontrigpt", &m_muontrigpt, "muontrigpt/F");
650     m_dimudimu->Branch("muontrigeta", &m_muontrigeta, "muontrigeta/F");
651 pivarski 1.13 m_dimudimu->Branch("orphans", &m_dimudimu_orphans, "orphans/I");
652 pivarski 1.7 m_dimudimu->Branch("wholemass", &m_dimudimu_wholemass, "wholemass/F");
653     m_dimudimu->Branch("wholept", &m_dimudimu_wholept, "wholept/F");
654     m_dimudimu->Branch("deltaphi", &m_dimudimu_deltaphi, "deltaphi/F");
655 pivarski 1.8 m_dimudimu->Branch("containstrig", &m_dimudimu_containstrig, "containstrig/I");
656 aysen 1.24 m_dimudimu->Branch("containstrig2", &m_dimudimu_containstrig2, "containstrig2/I");
657 pivarski 1.8 m_dimudimu->Branch("massC", &m_dimudimu_massC, "massC/F");
658     m_dimudimu->Branch("ptC", &m_dimudimu_ptC, "ptC/F");
659     m_dimudimu->Branch("etaC", &m_dimudimu_etaC, "etaC/F");
660     m_dimudimu->Branch("phiC", &m_dimudimu_phiC, "phiC/F");
661     m_dimudimu->Branch("drC", &m_dimudimu_drC, "drC/F");
662     m_dimudimu->Branch("vprobC", &m_dimudimu_vprobC, "vprobC/F");
663     m_dimudimu->Branch("lxyC", &m_dimudimu_lxyC, "lxyC/F");
664     m_dimudimu->Branch("lxyzC", &m_dimudimu_lxyzC, "lxyzC/F");
665     m_dimudimu->Branch("isoC", &m_dimudimu_isoC, "isoC/F");
666 aysen 1.23 m_dimudimu->Branch("isoC_3mm", &m_dimudimu_isoC_3mm, "isoC_3mm/F");
667     m_dimudimu->Branch("isoC_2mm", &m_dimudimu_isoC_2mm, "isoC_2mm/F");
668     m_dimudimu->Branch("isoC_1mm", &m_dimudimu_isoC_1mm, "isoC_1mm/F");
669 pivarski 1.8 m_dimudimu->Branch("massF", &m_dimudimu_massF, "massF/F");
670     m_dimudimu->Branch("ptF", &m_dimudimu_ptF, "ptF/F");
671     m_dimudimu->Branch("etaF", &m_dimudimu_etaF, "etaF/F");
672     m_dimudimu->Branch("phiF", &m_dimudimu_phiF, "phiF/F");
673     m_dimudimu->Branch("drF", &m_dimudimu_drF, "drF/F");
674     m_dimudimu->Branch("vprobF", &m_dimudimu_vprobF, "vprobF/F");
675     m_dimudimu->Branch("lxyF", &m_dimudimu_lxyF, "lxyF/F");
676     m_dimudimu->Branch("lxyzF", &m_dimudimu_lxyzF, "lxyzF/F");
677     m_dimudimu->Branch("isoF", &m_dimudimu_isoF, "isoF/F");
678 aysen 1.23 m_dimudimu->Branch("isoF_3mm", &m_dimudimu_isoF_3mm, "isoF_3mm/F");
679     m_dimudimu->Branch("isoF_2mm", &m_dimudimu_isoF_2mm, "isoF_2mm/F");
680     m_dimudimu->Branch("isoF_1mm", &m_dimudimu_isoF_1mm, "isoF_1mm/F");
681    
682     m_dimudimu->Branch("dz1", &m_dimudimu_dz1, "dz1/F");
683     m_dimudimu->Branch("dz2", &m_dimudimu_dz2, "dz2/F");
684     m_dimudimu->Branch("deltaz", &m_dimudimu_deltaz, "deltaz/F");
685 pivarski 1.1
686 aysen 1.23 m_dimudimu->Branch("pvsize", &m_primaryverticessize, "pvsize/I");
687     m_dimudimu->Branch("trackssize", &m_generaltrackssize, "trackssize/I");
688     m_dimudimu->Branch("maxtrackspervtx", &m_maxtrackspervtx, "maxtrackspervtx/I");
689 pivarski 1.1 }
690    
691    
692     FitNtuple::~FitNtuple()
693     {
694    
695     // do anything here that needs to be done at desctruction time
696     // (e.g. close files, deallocate resources etc.)
697     }
698    
699    
700     //
701     // member functions
702     //
703    
704 aysen 1.23
705     double scalePt(double pt, double eta, double phi, int charge) {
706    
707     double b = -5.03313e-6;
708     double c = -4.41463e-5;
709     double d0 = -0.000148871;
710     double e0 = 1.59501;
711     double d1 = 7.95495e-05;
712     double e1 = -0.364823;
713     double d2 = 0.000152032;
714     double e2 = 0.410195;
715    
716     double d = 0;
717     double e = 0;
718    
719     double signeta = 0;
720    
721     if (fabs(eta) <= 0.9) {
722     d = d0; e = e0;
723     }
724     if (eta > 0.9) {
725     d = d1; e = e1;
726     }
727     if (eta < -0.9) {
728     d = d2; e = e2;
729     }
730    
731     if (eta >= 0) signeta = 1;
732     if (eta < 0) signeta = -1;
733    
734     return 1+b*pt+c*charge*pt*signeta*eta*eta+charge*d*pt*sin(phi+e);
735    
736     }
737    
738 pivarski 1.1 // ------------ method called to for each event ------------
739     void
740     FitNtuple::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup)
741     {
742 aysen 1.23
743     edm::ESHandle<Propagator> propagator;
744     iSetup.get<TrackingComponentsRecord>().get("SteppingHelixPropagatorAny", propagator);
745    
746     edm::ESHandle<MagneticField> magneticField;
747     iSetup.get<IdealMagneticFieldRecord>().get(magneticField);
748    
749     edm::ESHandle<GlobalTrackingGeometry> globalGeometry;
750     iSetup.get<GlobalTrackingGeometryRecord>().get(globalGeometry);
751    
752     edm::ESHandle<TrackerGeometry> tkgeom;
753     iSetup.get<TrackerDigiGeometryRecord>().get(tkgeom);
754    
755     edm::Handle<reco::BeamSpot> theBeamSpot;
756     iEvent.getByLabel("offlineBeamSpot",theBeamSpot);
757    
758 pivarski 1.1 // get the run and event number
759     m_run = iEvent.id().run();
760     m_event = iEvent.id().event();
761    
762     // mu-jets (muons grouped by mass and vertex compatibility)
763     edm::Handle<pat::MultiMuonCollection> muJets;
764 pivarski 1.15 iEvent.getByLabel(m_muJets, muJets);
765 pivarski 1.1
766 pivarski 1.8 // orphans (muons not found in any group)
767     edm::Handle<pat::MuonCollection> orphans;
768 pivarski 1.15 iEvent.getByLabel(m_muJetOrphans, orphans);
769 pivarski 1.10
770 aysen 1.23 edm::Handle<reco::TrackCollection> tracks;
771     iEvent.getByLabel("generalTracks", tracks);
772    
773 aysen 1.24 edm::Handle<pat::MuonCollection> allmuons;
774     iEvent.getByLabel("cleanPatMuons", allmuons);
775 pivarski 1.14
776 pivarski 1.3 // find the top four muons in the event (-1000. if not found)
777     edm::Handle<pat::MuonCollection> muons;
778 pivarski 1.10 iEvent.getByLabel("cleanPatMuonsTriggerMatch", muons);
779 pivarski 1.3 m_muon1pt = -1000.; m_muon1eta = -1000.;
780     m_muon2pt = -1000.; m_muon2eta = -1000.;
781     m_muon3pt = -1000.; m_muon3eta = -1000.;
782     m_muon4pt = -1000.; m_muon4eta = -1000.;
783     m_muontrigpt = -1000.; m_muontrigeta = -1000.;
784 aysen 1.24 std::vector<pat::MuonCollection::const_iterator> hightrigmuons;
785     std::vector<pat::MuonCollection::const_iterator> lowtrigmuons;
786    
787     double iso_track_pt_treshold = 0.5;
788 pivarski 1.10
789 aysen 1.24 /*
790 aysen 1.23 Cylinder::CylinderPointer m_cylinder100 = Cylinder::build(Cylinder::PositionType(0., 0., 0.), Cylinder::RotationType(), 100.);
791     Cylinder::CylinderPointer m_cylinder200 = Cylinder::build(Cylinder::PositionType(0., 0., 0.), Cylinder::RotationType(), 200.);
792     Cylinder::CylinderPointer m_cylinder300 = Cylinder::build(Cylinder::PositionType(0., 0., 0.), Cylinder::RotationType(), 300.);
793     Cylinder::CylinderPointer m_cylinder425 = Cylinder::build(Cylinder::PositionType(0., 0., 0.), Cylinder::RotationType(), 425.);
794     Cylinder::CylinderPointer m_cylinder470 = Cylinder::build(Cylinder::PositionType(0., 0., 0.), Cylinder::RotationType(), 470.);
795     Cylinder::CylinderPointer m_cylinder510 = Cylinder::build(Cylinder::PositionType(0., 0., 0.), Cylinder::RotationType(), 510.);
796     Cylinder::CylinderPointer m_cylinder565 = Cylinder::build(Cylinder::PositionType(0., 0., 0.), Cylinder::RotationType(), 565.);
797     Cylinder::CylinderPointer m_cylinder620 = Cylinder::build(Cylinder::PositionType(0., 0., 0.), Cylinder::RotationType(), 620.);
798     Cylinder::CylinderPointer m_cylinder670 = Cylinder::build(Cylinder::PositionType(0., 0., 0.), Cylinder::RotationType(), 670.);
799     Cylinder::CylinderPointer m_cylinder720 = Cylinder::build(Cylinder::PositionType(0., 0., 0.), Cylinder::RotationType(), 720.);
800     Cylinder::CylinderPointer m_cylinder800 = Cylinder::build(Cylinder::PositionType(0., 0., 0.), Cylinder::RotationType(), 800.);
801     Cylinder::CylinderPointer m_cylinder900 = Cylinder::build(Cylinder::PositionType(0., 0., 0.), Cylinder::RotationType(), 900.);
802 aysen 1.24 */
803 aysen 1.23
804 pivarski 1.3 for (pat::MuonCollection::const_iterator muon = muons->begin(); muon != muons->end(); ++muon) {
805     if (fabs(muon->eta()) < 2.4 && muon->isTrackerMuon() && muon->numberOfMatches(reco::Muon::SegmentAndTrackArbitration) >= 2 && muon->innerTrack()->numberOfValidHits() >= 8 && muon->innerTrack()->normalizedChi2() < 4.) {
806     if (muon->pt() > m_muon1pt) {
807     m_muon4pt = m_muon3pt; m_muon4eta = m_muon3eta;
808     m_muon3pt = m_muon2pt; m_muon3eta = m_muon2eta;
809     m_muon2pt = m_muon1pt; m_muon2eta = m_muon1eta;
810     m_muon1pt = muon->pt(); m_muon1eta = muon->eta();
811     }
812     else if (muon->pt() > m_muon2pt) {
813     m_muon4pt = m_muon3pt; m_muon4eta = m_muon3eta;
814     m_muon3pt = m_muon2pt; m_muon3eta = m_muon2eta;
815     m_muon2pt = muon->pt(); m_muon2eta = muon->eta();
816     }
817     else if (muon->pt() > m_muon3pt) {
818     m_muon4pt = m_muon3pt; m_muon4eta = m_muon3eta;
819     m_muon3pt = muon->pt(); m_muon3eta = muon->eta();
820     }
821     else if (muon->pt() > m_muon4pt) {
822     m_muon4pt = muon->pt(); m_muon4eta = muon->eta();
823     }
824    
825     // special muon within a more limited |eta| range, to guarantee the trigger
826 aysen 1.24 if (fabs(muon->eta()) < 2.4) {
827 pivarski 1.3 if (muon->pt() > m_muontrigpt) {
828     m_muontrigpt = muon->pt(); m_muontrigeta = muon->eta();
829     }
830     }
831 pivarski 1.8
832 aysen 1.24 if (m_dataset == "SingleMu") {
833     if (muon->pt() > m_trigpt && fabs(muon->eta()) < 2.4) {
834     const pat::TriggerObjectStandAlone *mu01 = muon->triggerObjectMatchByPath("HLT_Mu15_v2");
835     const pat::TriggerObjectStandAlone *mu02 = muon->triggerObjectMatchByPath("HLT_Mu20_v1");
836     const pat::TriggerObjectStandAlone *mu03 = muon->triggerObjectMatchByPath("HLT_Mu24_v1");
837     const pat::TriggerObjectStandAlone *mu04 = muon->triggerObjectMatchByPath("HLT_Mu24_v2");
838     const pat::TriggerObjectStandAlone *mu05 = muon->triggerObjectMatchByPath("HLT_Mu30_v1");
839     const pat::TriggerObjectStandAlone *mu06 = muon->triggerObjectMatchByPath("HLT_Mu30_v2");
840     const pat::TriggerObjectStandAlone *mu07 = muon->triggerObjectMatchByPath("HLT_Mu30_v3");
841     const pat::TriggerObjectStandAlone *mu08 = muon->triggerObjectMatchByPath("HLT_Mu40_v1");
842     const pat::TriggerObjectStandAlone *mu09 = muon->triggerObjectMatchByPath("HLT_Mu40_v2");
843     const pat::TriggerObjectStandAlone *mu10 = muon->triggerObjectMatchByPath("HLT_Mu40_v3");
844     const pat::TriggerObjectStandAlone *mu11 = muon->triggerObjectMatchByPath("HLT_Mu40_v5");
845     const pat::TriggerObjectStandAlone *mu12 = muon->triggerObjectMatchByPath("HLT_Mu40_eta2p1_v1");
846     const pat::TriggerObjectStandAlone *mu13 = muon->triggerObjectMatchByPath("HLT_Mu40_eta2p1_v4");
847     const pat::TriggerObjectStandAlone *mu14 = muon->triggerObjectMatchByPath("HLT_Mu40_eta2p1_v5");
848    
849     if ((mu01 != NULL && mu01->collection() == std::string("hltL3MuonCandidates::HLT") && mu01->pt() > m_trigpt) ||
850     (mu02 != NULL && mu02->collection() == std::string("hltL3MuonCandidates::HLT") && mu02->pt() > m_trigpt) ||
851     (mu03 != NULL && mu03->collection() == std::string("hltL3MuonCandidates::HLT") && mu03->pt() > m_trigpt) ||
852     (mu04 != NULL && mu04->collection() == std::string("hltL3MuonCandidates::HLT") && mu04->pt() > m_trigpt) ||
853     (mu05 != NULL && mu05->collection() == std::string("hltL3MuonCandidates::HLT") && mu05->pt() > m_trigpt) ||
854     (mu06 != NULL && mu06->collection() == std::string("hltL3MuonCandidates::HLT") && mu06->pt() > m_trigpt) ||
855     (mu07 != NULL && mu07->collection() == std::string("hltL3MuonCandidates::HLT") && mu07->pt() > m_trigpt) ||
856     (mu08 != NULL && mu08->collection() == std::string("hltL3MuonCandidates::HLT") && mu08->pt() > m_trigpt) ||
857     (mu09 != NULL && mu09->collection() == std::string("hltL3MuonCandidates::HLT") && mu09->pt() > m_trigpt) ||
858     (mu10 != NULL && mu10->collection() == std::string("hltL3MuonCandidates::HLT") && mu10->pt() > m_trigpt) ||
859     (mu11 != NULL && mu11->collection() == std::string("hltL3MuonCandidates::HLT") && mu11->pt() > m_trigpt) ||
860     (mu12 != NULL && mu12->collection() == std::string("hltL3MuonCandidates::HLT") && mu12->pt() > m_trigpt) ||
861     (mu13 != NULL && mu13->collection() == std::string("hltL3MuonCandidates::HLT") && mu13->pt() > m_trigpt) ||
862     (mu14 != NULL && mu14->collection() == std::string("hltL3MuonCandidates::HLT") && mu14->pt() > m_trigpt))
863     hightrigmuons.push_back(muon);
864     }
865     }
866     if (m_dataset == "DoubleMu") {
867     if (muon->pt() > m_trigpt && fabs(muon->eta()) < 0.9) {
868     //if (muon->pt() > m_trigpt) {
869     const pat::TriggerObjectStandAlone *mu01 = muon->triggerObjectMatchByPath("HLT_DoubleMu6_v1");
870     const pat::TriggerObjectStandAlone *mu02 = muon->triggerObjectMatchByPath("HLT_DoubleMu7_v1");
871     const pat::TriggerObjectStandAlone *mu03 = muon->triggerObjectMatchByPath("HLT_DoubleMu7_v2");
872     const pat::TriggerObjectStandAlone *mu04 = muon->triggerObjectMatchByPath("HLT_Mu13_Mu8_v2");
873     const pat::TriggerObjectStandAlone *mu05 = muon->triggerObjectMatchByPath("HLT_Mu13_Mu8_v3");
874     const pat::TriggerObjectStandAlone *mu06 = muon->triggerObjectMatchByPath("HLT_Mu13_Mu8_v4");
875     const pat::TriggerObjectStandAlone *mu07 = muon->triggerObjectMatchByPath("HLT_Mu13_Mu8_v6");
876     const pat::TriggerObjectStandAlone *mu08 = muon->triggerObjectMatchByPath("HLT_Mu13_Mu8_v7");
877     const pat::TriggerObjectStandAlone *mu09 = muon->triggerObjectMatchByPath("HLT_Mu17_Mu8_v2");
878     const pat::TriggerObjectStandAlone *mu10 = muon->triggerObjectMatchByPath("HLT_Mu17_Mu8_v3");
879     const pat::TriggerObjectStandAlone *mu11 = muon->triggerObjectMatchByPath("HLT_Mu17_Mu8_v4");
880     const pat::TriggerObjectStandAlone *mu12 = muon->triggerObjectMatchByPath("HLT_Mu17_Mu8_v6");
881     const pat::TriggerObjectStandAlone *mu13 = muon->triggerObjectMatchByPath("HLT_Mu17_Mu8_v7");
882     const pat::TriggerObjectStandAlone *mu14 = muon->triggerObjectMatchByPath("HLT_Mu17_Mu8_v10");
883     const pat::TriggerObjectStandAlone *mu15 = muon->triggerObjectMatchByPath("HLT_Mu17_Mu8_v11");
884    
885     if ((mu01 != NULL && mu01->collection() == std::string("hltL3MuonCandidates::HLT") && mu01->pt() > m_trigpt) ||
886     (mu02 != NULL && mu02->collection() == std::string("hltL3MuonCandidates::HLT") && mu02->pt() > m_trigpt) ||
887     (mu03 != NULL && mu03->collection() == std::string("hltL3MuonCandidates::HLT") && mu03->pt() > m_trigpt) ||
888     (mu04 != NULL && mu04->collection() == std::string("hltL3MuonCandidates::HLT") && mu04->pt() > m_trigpt) ||
889     (mu05 != NULL && mu05->collection() == std::string("hltL3MuonCandidates::HLT") && mu05->pt() > m_trigpt) ||
890     (mu06 != NULL && mu06->collection() == std::string("hltL3MuonCandidates::HLT") && mu06->pt() > m_trigpt) ||
891     (mu07 != NULL && mu07->collection() == std::string("hltL3MuonCandidates::HLT") && mu07->pt() > m_trigpt) ||
892     (mu08 != NULL && mu08->collection() == std::string("hltL3MuonCandidates::HLT") && mu08->pt() > m_trigpt) ||
893     (mu09 != NULL && mu09->collection() == std::string("hltL3MuonCandidates::HLT") && mu09->pt() > m_trigpt) ||
894     (mu10 != NULL && mu10->collection() == std::string("hltL3MuonCandidates::HLT") && mu10->pt() > m_trigpt) ||
895     (mu11 != NULL && mu11->collection() == std::string("hltL3MuonCandidates::HLT") && mu11->pt() > m_trigpt) ||
896     (mu12 != NULL && mu12->collection() == std::string("hltL3MuonCandidates::HLT") && mu12->pt() > m_trigpt) ||
897     (mu13 != NULL && mu13->collection() == std::string("hltL3MuonCandidates::HLT") && mu13->pt() > m_trigpt) ||
898     (mu14 != NULL && mu14->collection() == std::string("hltL3MuonCandidates::HLT") && mu14->pt() > m_trigpt) ||
899     (mu15 != NULL && mu15->collection() == std::string("hltL3MuonCandidates::HLT") && mu15->pt() > m_trigpt))
900     hightrigmuons.push_back(muon);
901     }
902     //if (muon->pt() > 8. && fabs(muon->eta()) < 0.9) {
903     if (muon->pt() > 8.) {
904     const pat::TriggerObjectStandAlone *mu01 = muon->triggerObjectMatchByPath("HLT_Mu17_Mu8_v2");
905     const pat::TriggerObjectStandAlone *mu02 = muon->triggerObjectMatchByPath("HLT_Mu17_Mu8_v3");
906     const pat::TriggerObjectStandAlone *mu03 = muon->triggerObjectMatchByPath("HLT_Mu17_Mu8_v4");
907     const pat::TriggerObjectStandAlone *mu04 = muon->triggerObjectMatchByPath("HLT_Mu17_Mu8_v6");
908     const pat::TriggerObjectStandAlone *mu05 = muon->triggerObjectMatchByPath("HLT_Mu17_Mu8_v7");
909     const pat::TriggerObjectStandAlone *mu06 = muon->triggerObjectMatchByPath("HLT_Mu17_Mu8_v10");
910     const pat::TriggerObjectStandAlone *mu07 = muon->triggerObjectMatchByPath("HLT_Mu17_Mu8_v11");
911    
912     if ((mu01 != NULL && mu01->collection() == std::string("hltL3MuonCandidates::HLT") && mu01->pt() > 8.) ||
913     (mu02 != NULL && mu02->collection() == std::string("hltL3MuonCandidates::HLT") && mu02->pt() > 8.) ||
914     (mu03 != NULL && mu03->collection() == std::string("hltL3MuonCandidates::HLT") && mu03->pt() > 8.) ||
915     (mu04 != NULL && mu04->collection() == std::string("hltL3MuonCandidates::HLT") && mu04->pt() > 8.) ||
916     (mu05 != NULL && mu05->collection() == std::string("hltL3MuonCandidates::HLT") && mu05->pt() > 8.) ||
917     (mu06 != NULL && mu06->collection() == std::string("hltL3MuonCandidates::HLT") && mu06->pt() > 8.) ||
918     (mu07 != NULL && mu07->collection() == std::string("hltL3MuonCandidates::HLT") && mu07->pt() > 8.))
919     lowtrigmuons.push_back(muon);
920     }
921     }
922     }
923 pivarski 1.3 }
924 pivarski 1.1
925     // // all tracker-tracks
926     // edm::Handle<reco::TrackCollection> tracks;
927     // iEvent.getByLabel("generalTracks", tracks);
928    
929     // // generator-level 4-vectors
930     // edm::Handle<reco::GenParticleCollection> genParticles;
931     // iEvent.getByLabel("genParticles", genParticles);
932    
933     // find the closest primary vertex (in Z) to the first muJet with a valid vertex
934     edm::Handle<reco::VertexCollection> primaryVertices;
935     iEvent.getByLabel("offlinePrimaryVertices", primaryVertices);
936     reco::VertexCollection::const_iterator closestPrimaryVertex = primaryVertices->end();
937     if (muJets->size() > 0) {
938     pat::MultiMuonCollection::const_iterator muJet0 = muJets->end();
939     for (pat::MultiMuonCollection::const_iterator muJet = muJets->begin(); muJet != muJets->end(); ++muJet) {
940     if (muJet->vertexValid()) {
941     muJet0 = muJet;
942     break;
943     }
944     }
945    
946     if (muJet0 != muJets->end()) {
947     for (reco::VertexCollection::const_iterator vertex = primaryVertices->begin(); vertex != primaryVertices->end(); ++vertex) {
948     if (vertex->isValid() && !vertex->isFake() && vertex->tracksSize() > 3 && fabs(vertex->z()) < 24.) {
949     if (closestPrimaryVertex == primaryVertices->end() || fabs(vertex->z() - muJet0->vertexPoint().z()) < fabs(closestPrimaryVertex->z() - muJet0->vertexPoint().z())) {
950     closestPrimaryVertex = vertex;
951     }
952     } // end vertex quality cuts
953     } // end loop over primary vertices
954     } // end if muJet0 exists
955     } // end if muJets->size > 0
956    
957 aysen 1.23 //m_primaryverticessize = primaryVertices->size();
958     m_primaryverticessize = 0;
959    
960     for (reco::VertexCollection::const_iterator vertex = primaryVertices->begin(); vertex != primaryVertices->end(); ++vertex) {
961     if (vertex->isValid() && !vertex->isFake() && vertex->tracksSize() > 3 && fabs(vertex->z()) < 24.) {
962     m_primaryverticessize++;
963     }
964     }
965    
966     m_generaltrackssize = tracks->size();
967     m_maxtrackspervtx = 0;
968    
969     for (reco::VertexCollection::const_iterator vertex = primaryVertices->begin(); vertex != primaryVertices->end(); ++vertex) {
970     if (vertex->isValid() && fabs(vertex->z()) < 24.) {
971     if (int(vertex->tracksSize()) > m_maxtrackspervtx) m_maxtrackspervtx = int(vertex->tracksSize());
972     }
973     }
974    
975 pivarski 1.1 // find out which trigger bits were fired
976     edm::Handle<pat::TriggerEvent> triggerEvent;
977     iEvent.getByLabel("patTriggerEvent", triggerEvent);
978     m_trigger = 0;
979 aysen 1.24 m_triggerIsoMu = 0;
980     m_triggerMu = 0;
981    
982     if (m_dataset == "DoubleMu") {
983     if (triggerEvent->path("HLT_DoubleMu6_v1") && triggerEvent->path("HLT_DoubleMu6_v1")->wasAccept()) m_trigger += 1;
984     if (triggerEvent->path("HLT_DoubleMu7_v1") && triggerEvent->path("HLT_DoubleMu7_v1")->wasAccept()) m_trigger += 2;
985     if (triggerEvent->path("HLT_DoubleMu7_v2") && triggerEvent->path("HLT_DoubleMu7_v2")->wasAccept()) m_trigger += 2;
986     if (triggerEvent->path("HLT_Mu13_Mu8_v2") && triggerEvent->path("HLT_Mu13_Mu8_v2")->wasAccept()) m_trigger += 4;
987     if (triggerEvent->path("HLT_Mu13_Mu8_v3") && triggerEvent->path("HLT_Mu13_Mu8_v3")->wasAccept()) m_trigger += 4;
988     if (triggerEvent->path("HLT_Mu13_Mu8_v4") && triggerEvent->path("HLT_Mu13_Mu8_v4")->wasAccept()) m_trigger += 4;
989     if (triggerEvent->path("HLT_Mu13_Mu8_v6") && triggerEvent->path("HLT_Mu13_Mu8_v6")->wasAccept()) m_trigger += 4;
990     if (triggerEvent->path("HLT_Mu13_Mu8_v7") && triggerEvent->path("HLT_Mu13_Mu8_v7")->wasAccept()) m_trigger += 4;
991     if (triggerEvent->path("HLT_Mu17_Mu8_v2") && triggerEvent->path("HLT_Mu17_Mu8_v2")->wasAccept()) m_trigger += 8;
992     if (triggerEvent->path("HLT_Mu17_Mu8_v3") && triggerEvent->path("HLT_Mu17_Mu8_v3")->wasAccept()) m_trigger += 8;
993     if (triggerEvent->path("HLT_Mu17_Mu8_v4") && triggerEvent->path("HLT_Mu17_Mu8_v4")->wasAccept()) m_trigger += 8;
994     if (triggerEvent->path("HLT_Mu17_Mu8_v6") && triggerEvent->path("HLT_Mu17_Mu8_v6")->wasAccept()) m_trigger += 8;
995     if (triggerEvent->path("HLT_Mu17_Mu8_v7") && triggerEvent->path("HLT_Mu17_Mu8_v7")->wasAccept()) m_trigger += 8;
996     if (triggerEvent->path("HLT_Mu17_Mu8_v10") && triggerEvent->path("HLT_Mu17_Mu8_v10")->wasAccept()) m_trigger += 8;
997     if (triggerEvent->path("HLT_Mu17_Mu8_v11") && triggerEvent->path("HLT_Mu17_Mu8_v11")->wasAccept()) m_trigger += 8;
998     }
999     if (m_dataset == "SingleMu") {
1000     if (triggerEvent->path("HLT_Mu15_v2") && triggerEvent->path("HLT_Mu15_v2")->wasAccept()) m_trigger += 1;
1001     if (triggerEvent->path("HLT_Mu20_v1") && triggerEvent->path("HLT_Mu20_v1")->wasAccept()) m_trigger += 2;
1002     if (triggerEvent->path("HLT_Mu24_v1") && triggerEvent->path("HLT_Mu24_v1")->wasAccept()) m_trigger += 4;
1003     if (triggerEvent->path("HLT_Mu24_v2") && triggerEvent->path("HLT_Mu24_v2")->wasAccept()) m_trigger += 4;
1004     if (triggerEvent->path("HLT_Mu30_v1") && triggerEvent->path("HLT_Mu30_v1")->wasAccept()) m_trigger += 8;
1005     if (triggerEvent->path("HLT_Mu30_v2") && triggerEvent->path("HLT_Mu30_v2")->wasAccept()) m_trigger += 8;
1006     if (triggerEvent->path("HLT_Mu30_v3") && triggerEvent->path("HLT_Mu30_v3")->wasAccept()) m_trigger += 8;
1007     if (triggerEvent->path("HLT_Mu40_v1") && triggerEvent->path("HLT_Mu40_v1")->wasAccept()) m_trigger += 16;
1008     if (triggerEvent->path("HLT_Mu40_v2") && triggerEvent->path("HLT_Mu40_v2")->wasAccept()) m_trigger += 16;
1009     if (triggerEvent->path("HLT_Mu40_v3") && triggerEvent->path("HLT_Mu40_v3")->wasAccept()) m_trigger += 16;
1010     if (triggerEvent->path("HLT_Mu40_v5") && triggerEvent->path("HLT_Mu40_v5")->wasAccept()) m_trigger += 16;
1011     if (triggerEvent->path("HLT_Mu40_eta2p1_v1") && triggerEvent->path("HLT_Mu40_eta2p1_v1")->wasAccept()) m_trigger += 16;
1012     if (triggerEvent->path("HLT_Mu40_eta2p1_v4") && triggerEvent->path("HLT_Mu40_eta2p1_v4")->wasAccept()) m_trigger += 16;
1013     if (triggerEvent->path("HLT_Mu40_eta2p1_v5") && triggerEvent->path("HLT_Mu40_eta2p1_v5")->wasAccept()) m_trigger += 16;
1014     }
1015    
1016    
1017 pivarski 1.10
1018 aysen 1.23 m_trigger15 = 0;
1019     m_trigger20 = 0;
1020     m_trigger24 = 0;
1021     m_trigger30 = 0;
1022     m_trigger40 = 0;
1023     m_trigger40eta = 0;
1024    
1025     if (triggerEvent->path("HLT_Mu15_v2") && triggerEvent->path("HLT_Mu15_v2")->wasAccept()) m_trigger15 = 1;
1026     if (triggerEvent->path("HLT_Mu20_v1") && triggerEvent->path("HLT_Mu20_v1")->wasAccept()) m_trigger20 = 1;
1027     if (triggerEvent->path("HLT_Mu24_v2") && triggerEvent->path("HLT_Mu24_v2")->wasAccept()) m_trigger24 = 1;
1028     if (triggerEvent->path("HLT_Mu30_v3") && triggerEvent->path("HLT_Mu30_v3")->wasAccept()) m_trigger30 = 1;
1029     if (triggerEvent->path("HLT_Mu40_v1") && triggerEvent->path("HLT_Mu40_v1")->wasAccept()) m_trigger40 = 1;
1030     if (triggerEvent->path("HLT_Mu40_v2") && triggerEvent->path("HLT_Mu40_v2")->wasAccept()) m_trigger40 = 1;
1031     if (triggerEvent->path("HLT_Mu40_v3") && triggerEvent->path("HLT_Mu40_v3")->wasAccept()) m_trigger40 = 1;
1032     if (triggerEvent->path("HLT_Mu40_v5") && triggerEvent->path("HLT_Mu40_v5")->wasAccept()) m_trigger40 = 1;
1033     if (triggerEvent->path("HLT_Mu40_eta2p1_v1") && triggerEvent->path("HLT_Mu40_eta2p1_v1")->wasAccept()) m_trigger40eta = 1;
1034     if (triggerEvent->path("HLT_Mu40_eta2p1_v4") && triggerEvent->path("HLT_Mu40_eta2p1_v4")->wasAccept()) m_trigger40eta = 1;
1035     if (triggerEvent->path("HLT_Mu40_eta2p1_v5") && triggerEvent->path("HLT_Mu40_eta2p1_v5")->wasAccept()) m_trigger40eta = 1;
1036    
1037 aysen 1.24 ////////////////////////////////////////////////////////// lowdimuon and highdimuon:
1038    
1039     //if (muJets->size() == 1 && (*muJets)[0].numberOfDaughters() == 2 && orphans->size() == 0 && m_trigger > 0) {
1040     if (muJets->size() == 1 && (*muJets)[0].numberOfDaughters() == 2 && orphans->size() == 0) {
1041     pat::MultiMuonCollection::const_iterator muJet = muJets->begin();
1042 pivarski 1.10
1043 aysen 1.24 m_lowdimuon_trigpt1 = -20;
1044     m_lowdimuon_trigeta1 = -20;
1045     m_lowdimuon_trigpt2 = -20;
1046     m_lowdimuon_trigeta2 = -20;
1047 pivarski 1.10
1048 aysen 1.24 m_lowdimuon_containstrig = 0;
1049     m_lowdimuon_containstrig2 = 0;
1050 pivarski 1.10
1051 aysen 1.24 for (std::vector<pat::MuonCollection::const_iterator>::const_iterator iter = lowtrigmuons.begin(); iter != lowtrigmuons.end(); ++iter) {
1052     if (muJet->muon(0)->innerTrack().isAvailable() && (*iter)->innerTrack().isAvailable() &&
1053     muJet->sameTrack(&*(muJet->muon(0)->innerTrack()), &*((*iter)->innerTrack()))) {
1054     m_lowdimuon_containstrig2++;
1055     }
1056     if (muJet->muon(1)->innerTrack().isAvailable() && (*iter)->innerTrack().isAvailable() &&
1057     muJet->sameTrack(&*(muJet->muon(1)->innerTrack()), &*((*iter)->innerTrack()))) {
1058     m_lowdimuon_containstrig2++;
1059     }
1060 pivarski 1.10 }
1061    
1062 aysen 1.24 for (std::vector<pat::MuonCollection::const_iterator>::const_iterator iter = hightrigmuons.begin(); iter != hightrigmuons.end(); ++iter) {
1063 pivarski 1.10 if (muJet->muon(0)->innerTrack().isAvailable() && (*iter)->innerTrack().isAvailable() &&
1064     muJet->sameTrack(&*(muJet->muon(0)->innerTrack()), &*((*iter)->innerTrack()))) {
1065 aysen 1.24 m_lowdimuon_containstrig++;
1066     if (m_lowdimuon_containstrig2 == 2) {
1067     m_lowdimuon_trigpt1 = muJet->muon(0)->pt();
1068     m_lowdimuon_trigeta1 = muJet->muon(0)->eta();
1069     m_lowdimuon_trigpt2 = muJet->muon(1)->pt();
1070     m_lowdimuon_trigeta2 = muJet->muon(1)->eta();
1071     }
1072 pivarski 1.10 }
1073     if (muJet->muon(1)->innerTrack().isAvailable() && (*iter)->innerTrack().isAvailable() &&
1074     muJet->sameTrack(&*(muJet->muon(1)->innerTrack()), &*((*iter)->innerTrack()))) {
1075 aysen 1.24 m_lowdimuon_containstrig++;
1076     if (m_lowdimuon_containstrig2 == 2) {
1077     m_lowdimuon_trigpt1 = muJet->muon(1)->pt();
1078     m_lowdimuon_trigeta1 = muJet->muon(1)->eta();
1079     m_lowdimuon_trigpt2 = muJet->muon(0)->pt();
1080     m_lowdimuon_trigeta2 = muJet->muon(0)->eta();
1081     }
1082 pivarski 1.10 }
1083     }
1084    
1085 pivarski 1.1 // generator-level mass using matched genParticles (for resolution of fit peak)
1086     m_lowdimuon_genmass = -1000.;
1087 pivarski 1.5 if (muJet->muon(0)->genParticlesSize() == 1 && muJet->muon(1)->genParticlesSize() == 1) {
1088 pivarski 1.4 const reco::GenParticle *mu0 = muJet->muon(0)->genParticle();
1089     const reco::GenParticle *mu1 = muJet->muon(1)->genParticle();
1090 pivarski 1.1
1091     double total_energy = mu0->energy() + mu1->energy();
1092     double total_px = mu0->px() + mu1->px();
1093     double total_py = mu0->py() + mu1->py();
1094     double total_pz = mu0->pz() + mu1->pz();
1095     m_lowdimuon_genmass = sqrt(total_energy*total_energy - total_px*total_px - total_py*total_py - total_pz*total_pz);
1096     }
1097    
1098     m_lowdimuon_mass = muJet->mass();
1099 aysen 1.23 m_lowdimuon_corr_mass = -1;
1100     m_lowdimuon_recomass = muJet->mass();
1101 pivarski 1.1 m_lowdimuon_pt = muJet->pt();
1102     m_lowdimuon_eta = muJet->eta();
1103     m_lowdimuon_phi = muJet->phi();
1104     m_lowdimuon_dr = muJet->dRmax();
1105 pivarski 1.3 if (muJet->daughter(0)->charge() > 0) {
1106     m_lowdimuon_pluspx = muJet->daughter(0)->px();
1107     m_lowdimuon_pluspy = muJet->daughter(0)->py();
1108     m_lowdimuon_pluspz = muJet->daughter(0)->pz();
1109     m_lowdimuon_minuspx = muJet->daughter(1)->px();
1110     m_lowdimuon_minuspy = muJet->daughter(1)->py();
1111     m_lowdimuon_minuspz = muJet->daughter(1)->pz();
1112     }
1113     else {
1114     m_lowdimuon_pluspx = muJet->daughter(1)->px();
1115     m_lowdimuon_pluspy = muJet->daughter(1)->py();
1116     m_lowdimuon_pluspz = muJet->daughter(1)->pz();
1117     m_lowdimuon_minuspx = muJet->daughter(0)->px();
1118     m_lowdimuon_minuspy = muJet->daughter(0)->py();
1119     m_lowdimuon_minuspz = muJet->daughter(0)->pz();
1120     }
1121 pivarski 1.1 m_lowdimuon_vprob = -1000.;
1122 aysen 1.23 m_lowdimuon_vnchi2 = -1000.;
1123 pivarski 1.1 m_lowdimuon_vx = -1000.;
1124     m_lowdimuon_vy = -1000.;
1125     m_lowdimuon_vz = -1000.;
1126    
1127 aysen 1.23 m_lowdimuon_lxy = -1000.;
1128 aysen 1.22
1129 pivarski 1.2 // replace all values with vertex-updated values if vertex fitting succeeded
1130 pivarski 1.1 if (muJet->vertexValid()) {
1131     m_lowdimuon_mass = muJet->vertexMass();
1132 aysen 1.23 m_lowdimuon_corr_mass = muJet->vertexMass();
1133 pivarski 1.1 m_lowdimuon_pt = muJet->vertexMomentum().perp();
1134     m_lowdimuon_eta = muJet->vertexMomentum().eta();
1135     m_lowdimuon_phi = muJet->vertexMomentum().phi();
1136     m_lowdimuon_dr = muJet->dRmax(true);
1137 pivarski 1.3 if (muJet->daughter(0)->charge() > 0) {
1138     m_lowdimuon_pluspx = muJet->vertexMomentum(0).x();
1139     m_lowdimuon_pluspy = muJet->vertexMomentum(0).y();
1140     m_lowdimuon_pluspz = muJet->vertexMomentum(0).z();
1141     m_lowdimuon_minuspx = muJet->vertexMomentum(1).x();
1142     m_lowdimuon_minuspy = muJet->vertexMomentum(1).y();
1143     m_lowdimuon_minuspz = muJet->vertexMomentum(1).z();
1144     }
1145     else {
1146     m_lowdimuon_pluspx = muJet->vertexMomentum(1).x();
1147     m_lowdimuon_pluspy = muJet->vertexMomentum(1).y();
1148     m_lowdimuon_pluspz = muJet->vertexMomentum(1).z();
1149     m_lowdimuon_minuspx = muJet->vertexMomentum(0).x();
1150     m_lowdimuon_minuspy = muJet->vertexMomentum(0).y();
1151     m_lowdimuon_minuspz = muJet->vertexMomentum(0).z();
1152     }
1153 pivarski 1.1 m_lowdimuon_vprob = muJet->vertexProb();
1154 aysen 1.23 m_lowdimuon_vnchi2 = muJet->vertexNormalizedChi2();
1155 pivarski 1.1
1156     if (closestPrimaryVertex != primaryVertices->end()) {
1157     m_lowdimuon_vx = muJet->vertexPoint().x() - closestPrimaryVertex->x();
1158     m_lowdimuon_vy = muJet->vertexPoint().y() - closestPrimaryVertex->y();
1159     m_lowdimuon_vz = muJet->vertexPoint().z() - closestPrimaryVertex->z();
1160 aysen 1.23 m_lowdimuon_lxy = muJet->lxy(GlobalPoint(closestPrimaryVertex->x(), closestPrimaryVertex->y(), closestPrimaryVertex->z()));
1161 pivarski 1.1 }
1162    
1163 aysen 1.23 double scale0 = scalePt(muJet->vertexMomentum(0).perp(),muJet->vertexMomentum(0).eta(),muJet->vertexMomentum(0).phi(),muJet->muon(0)->charge());
1164     double scale1 = scalePt(muJet->vertexMomentum(1).perp(),muJet->vertexMomentum(1).eta(),muJet->vertexMomentum(1).phi(),muJet->muon(1)->charge());
1165    
1166     double e1 = pow(pow(muJet->vertexMomentum(0).perp()*scale0,2)+pow(muJet->vertexMomentum(0).z(),2)+pow(muJet->muon(0)->mass(),2),0.5);
1167     double e2 = pow(pow(muJet->vertexMomentum(1).perp()*scale1,2)+pow(muJet->vertexMomentum(1).z(),2)+pow(muJet->muon(1)->mass(),2),0.5);
1168     double e = e1 + e2;
1169    
1170     double px = muJet->vertexMomentum(0).x()*scale0 + muJet->vertexMomentum(1).x()*scale1;
1171     double py = muJet->vertexMomentum(0).y()*scale0 + muJet->vertexMomentum(1).y()*scale1;
1172     double pz = muJet->vertexMomentum(0).z() + muJet->vertexMomentum(1).z();
1173    
1174     m_lowdimuon_corr_mass = pow(e*e-px*px-py*py-pz*pz,0.5);
1175    
1176 pivarski 1.1 } // end of replacements with quantities measured at the vertex
1177    
1178     m_lowdimuon_iso = muJet->centralTrackIsolation();
1179 aysen 1.23
1180     m_lowdimuon_iso_3mm = 0;
1181     m_lowdimuon_iso_2mm = 0;
1182     m_lowdimuon_iso_1mm = 0;
1183    
1184 aysen 1.24 for (reco::TrackCollection::const_iterator track = tracks->begin(); track != tracks->end(); ++track) {
1185     bool track_is_muon = false;
1186     for (pat::MuonCollection::const_iterator muon = allmuons->begin(); muon != allmuons->end(); ++muon) {
1187     if (muJet->sameTrack(&*track,&*(muon->innerTrack()))) { track_is_muon = true; break; }
1188 aysen 1.23 }
1189 aysen 1.24 if (!track_is_muon) {
1190     double dphi = muJet->phi() - track->phi();
1191     if (dphi > M_PI) dphi -= 2.*M_PI;
1192     if (dphi < -M_PI) dphi += 2.*M_PI;
1193     double deta = muJet->eta() - track->eta();
1194     double dR = sqrt(pow(dphi, 2) + pow(deta, 2));
1195     if (dR < 0.4 && track->pt() > iso_track_pt_treshold) {
1196     double dz = fabs(track->dz(theBeamSpot->position())-muJet->dz(theBeamSpot->position()));
1197     if (dz < 0.3) m_lowdimuon_iso_3mm += track->pt();
1198     if (dz < 0.2) m_lowdimuon_iso_2mm += track->pt();
1199     if (dz < 0.1) m_lowdimuon_iso_1mm += track->pt();
1200     }
1201     }
1202     }
1203 pivarski 1.1
1204 pivarski 1.6 std::vector<reco::MuonChamberMatch> plusmatches, minusmatches;
1205     if (muJet->daughter(0)->charge() > 0) {
1206     m_lowdimuon_plusmatches = muJet->muon(0)->numberOfMatches(reco::Muon::SegmentAndTrackArbitration);
1207     m_lowdimuon_minusmatches = muJet->muon(1)->numberOfMatches(reco::Muon::SegmentAndTrackArbitration);
1208     plusmatches = muJet->muon(0)->matches();
1209     minusmatches = muJet->muon(1)->matches();
1210     m_lowdimuon_plushits = muJet->muon(0)->innerTrack()->numberOfValidHits();
1211     m_lowdimuon_minushits = muJet->muon(1)->innerTrack()->numberOfValidHits();
1212     m_lowdimuon_plusnormchi2 = muJet->muon(0)->innerTrack()->normalizedChi2();
1213     m_lowdimuon_minusnormchi2 = muJet->muon(1)->innerTrack()->normalizedChi2();
1214 aysen 1.23
1215     m_lowdimuon_plus_thits = muJet->muon(0)->innerTrack()->hitPattern().numberOfValidTrackerHits();
1216     m_lowdimuon_plus_mhits = 0;
1217     if (muJet->muon(0)->isGlobalMuon()) m_lowdimuon_plus_mhits = muJet->muon(0)->globalTrack()->hitPattern().numberOfValidMuonHits();
1218     m_lowdimuon_plus_phits = muJet->muon(0)->innerTrack()->hitPattern().numberOfValidPixelHits();
1219    
1220     m_lowdimuon_minus_thits = muJet->muon(1)->innerTrack()->hitPattern().numberOfValidTrackerHits();
1221     m_lowdimuon_minus_mhits = 0;
1222     if (muJet->muon(1)->isGlobalMuon()) m_lowdimuon_minus_mhits = muJet->muon(1)->globalTrack()->hitPattern().numberOfValidMuonHits();
1223     m_lowdimuon_minus_phits = muJet->muon(1)->innerTrack()->hitPattern().numberOfValidPixelHits();
1224    
1225    
1226     m_lowdimuon_plus_dxy = muJet->muon(0)->innerTrack()->dxy(theBeamSpot->position());
1227     m_lowdimuon_minus_dxy = muJet->muon(1)->innerTrack()->dxy(theBeamSpot->position());
1228    
1229 aysen 1.24 m_lowdimuon_plus_pt = muJet->muon(0)->pt();
1230     m_lowdimuon_minus_pt = muJet->muon(1)->pt();
1231     m_lowdimuon_plus_eta = muJet->muon(0)->eta();
1232     m_lowdimuon_minus_eta = muJet->muon(1)->eta();
1233     m_lowdimuon_plus_phi = muJet->muon(0)->phi();
1234     m_lowdimuon_minus_phi = muJet->muon(1)->phi();
1235    
1236     m_lowdimuon_Deltaphi = m_lowdimuon_plus_phi-m_lowdimuon_minus_phi;
1237     if (m_lowdimuon_Deltaphi > M_PI) m_lowdimuon_Deltaphi -= 2.*M_PI;
1238     if (m_lowdimuon_Deltaphi < -M_PI) m_lowdimuon_Deltaphi += 2.*M_PI;
1239    
1240 aysen 1.23
1241     /*
1242     for (trackingRecHit_iterator hit = muJet->muon(0)->innerTrack()->recHitsBegin(); hit != muJet->muon(0)->innerTrack()->recHitsEnd(); ++hit) {
1243     if ((*hit)->isValid()) {
1244     GlobalPoint p = tkgeom->idToDet((*hit)->geographicalId())->toGlobal((*hit)->localPosition());
1245     m_lowdimuon_plus_innerR = pow(p.x()*p.x()+p.y()*p.y(),0.5);
1246     break;
1247     }
1248     }
1249     for (trackingRecHit_iterator hit = muJet->muon(1)->innerTrack()->recHitsBegin(); hit != muJet->muon(1)->innerTrack()->recHitsEnd(); ++hit) {
1250     if ((*hit)->isValid()) {
1251     GlobalPoint p = tkgeom->idToDet((*hit)->geographicalId())->toGlobal((*hit)->localPosition());
1252     m_lowdimuon_minus_innerR = pow(p.x()*p.x()+p.y()*p.y(),0.5);
1253     break;
1254     }
1255     }
1256     */
1257    
1258 pivarski 1.6 }
1259     else {
1260     m_lowdimuon_plusmatches = muJet->muon(1)->numberOfMatches(reco::Muon::SegmentAndTrackArbitration);
1261     m_lowdimuon_minusmatches = muJet->muon(0)->numberOfMatches(reco::Muon::SegmentAndTrackArbitration);
1262     plusmatches = muJet->muon(1)->matches();
1263     minusmatches = muJet->muon(0)->matches();
1264     m_lowdimuon_plushits = muJet->muon(1)->innerTrack()->numberOfValidHits();
1265     m_lowdimuon_minushits = muJet->muon(0)->innerTrack()->numberOfValidHits();
1266     m_lowdimuon_plusnormchi2 = muJet->muon(1)->innerTrack()->normalizedChi2();
1267     m_lowdimuon_minusnormchi2 = muJet->muon(0)->innerTrack()->normalizedChi2();
1268 aysen 1.23
1269     m_lowdimuon_plus_thits = muJet->muon(1)->innerTrack()->hitPattern().numberOfValidTrackerHits();
1270     m_lowdimuon_plus_mhits = 0;
1271     if (muJet->muon(1)->isGlobalMuon()) m_lowdimuon_plus_mhits = muJet->muon(1)->globalTrack()->hitPattern().numberOfValidMuonHits();
1272     m_lowdimuon_plus_phits = muJet->muon(1)->innerTrack()->hitPattern().numberOfValidPixelHits();
1273    
1274     m_lowdimuon_minus_thits = muJet->muon(0)->innerTrack()->hitPattern().numberOfValidTrackerHits();
1275     m_lowdimuon_minus_mhits = 0;
1276     if (muJet->muon(0)->isGlobalMuon()) m_lowdimuon_minus_mhits = muJet->muon(0)->globalTrack()->hitPattern().numberOfValidMuonHits();
1277     m_lowdimuon_minus_phits = muJet->muon(0)->innerTrack()->hitPattern().numberOfValidPixelHits();
1278    
1279     m_lowdimuon_plus_dxy = muJet->muon(1)->innerTrack()->dxy(theBeamSpot->position());
1280     m_lowdimuon_minus_dxy = muJet->muon(0)->innerTrack()->dxy(theBeamSpot->position());
1281    
1282 aysen 1.24 m_lowdimuon_plus_pt = muJet->muon(1)->pt();
1283     m_lowdimuon_minus_pt = muJet->muon(0)->pt();
1284     m_lowdimuon_plus_eta = muJet->muon(1)->eta();
1285     m_lowdimuon_minus_eta = muJet->muon(0)->eta();
1286     m_lowdimuon_plus_phi = muJet->muon(1)->phi();
1287     m_lowdimuon_minus_phi = muJet->muon(0)->phi();
1288    
1289     m_lowdimuon_Deltaphi = m_lowdimuon_plus_phi-m_lowdimuon_minus_phi;
1290     if (m_lowdimuon_Deltaphi > M_PI) m_lowdimuon_Deltaphi -= 2.*M_PI;
1291     if (m_lowdimuon_Deltaphi < -M_PI) m_lowdimuon_Deltaphi += 2.*M_PI;
1292 pivarski 1.6 }
1293    
1294 aysen 1.24 /*
1295 aysen 1.23 const pat::Muon *muplus = NULL;
1296     const pat::Muon *muminus = NULL;
1297    
1298     if (muJet->muon(0)->charge() > 0) {
1299     muplus = &*muJet->muon(0);
1300     muminus = &*muJet->muon(1);
1301     }
1302     if (muJet->muon(0)->charge() < 0) {
1303     muplus = &*muJet->muon(1);
1304     muminus = &*muJet->muon(0);
1305     }
1306    
1307     FreeTrajectoryState plus_initial(GlobalPoint(muplus->vx(), muplus->vy(), muplus->vz()), GlobalVector(muplus->px(), muplus->py(), muplus->pz()), 1, &*magneticField);
1308     FreeTrajectoryState minus_initial(GlobalPoint(muminus->vx(), muminus->vy(), muminus->vz()), GlobalVector(muminus->px(), muminus->py(), muminus->pz()), -1, &*magneticField);
1309    
1310     if (fabs(m_lowdimuon_eta) < 0.9) {
1311     TrajectoryStateOnSurface plus_final = propagator->propagate(plus_initial, *m_cylinder100);
1312     TrajectoryStateOnSurface minus_final = propagator->propagate(minus_initial, *m_cylinder100);
1313     if (plus_final.isValid() && minus_final.isValid()) {
1314     double dphi = plus_final.globalPosition().phi() - minus_final.globalPosition().phi();
1315     while (dphi > M_PI) dphi -= 2.*M_PI;
1316     while (dphi < -M_PI) dphi += 2.*M_PI;
1317     m_lowdimuon_dphi100 = dphi;
1318     }
1319     plus_final = propagator->propagate(plus_initial, *m_cylinder200);
1320     minus_final = propagator->propagate(minus_initial, *m_cylinder200);
1321     if (plus_final.isValid() && minus_final.isValid()) {
1322     double dphi = plus_final.globalPosition().phi() - minus_final.globalPosition().phi();
1323     while (dphi > M_PI) dphi -= 2.*M_PI;
1324     while (dphi < -M_PI) dphi += 2.*M_PI;
1325     m_lowdimuon_dphi200 = dphi;
1326     }
1327     plus_final = propagator->propagate(plus_initial, *m_cylinder300);
1328     minus_final = propagator->propagate(minus_initial, *m_cylinder300);
1329     if (plus_final.isValid() && minus_final.isValid()) {
1330     double dphi = plus_final.globalPosition().phi() - minus_final.globalPosition().phi();
1331     while (dphi > M_PI) dphi -= 2.*M_PI;
1332     while (dphi < -M_PI) dphi += 2.*M_PI;
1333     m_lowdimuon_dphi300 = dphi;
1334     }
1335     plus_final = propagator->propagate(plus_initial, *m_cylinder425);
1336     minus_final = propagator->propagate(minus_initial, *m_cylinder425);
1337     if (plus_final.isValid() && minus_final.isValid()) {
1338     double dphi = plus_final.globalPosition().phi() - minus_final.globalPosition().phi();
1339     while (dphi > M_PI) dphi -= 2.*M_PI;
1340     while (dphi < -M_PI) dphi += 2.*M_PI;
1341     m_lowdimuon_dphi425 = dphi;
1342     }
1343     plus_final = propagator->propagate(plus_initial, *m_cylinder470);
1344     minus_final = propagator->propagate(minus_initial, *m_cylinder470);
1345     if (plus_final.isValid() && minus_final.isValid()) {
1346     double dphi = plus_final.globalPosition().phi() - minus_final.globalPosition().phi();
1347     while (dphi > M_PI) dphi -= 2.*M_PI;
1348     while (dphi < -M_PI) dphi += 2.*M_PI;
1349     m_lowdimuon_dphi470 = dphi;
1350     }
1351     plus_final = propagator->propagate(plus_initial, *m_cylinder510);
1352     minus_final = propagator->propagate(minus_initial, *m_cylinder510);
1353     if (plus_final.isValid() && minus_final.isValid()) {
1354     double dphi = plus_final.globalPosition().phi() - minus_final.globalPosition().phi();
1355     while (dphi > M_PI) dphi -= 2.*M_PI;
1356     while (dphi < -M_PI) dphi += 2.*M_PI;
1357     m_lowdimuon_dphi510 = dphi;
1358     }
1359     plus_final = propagator->propagate(plus_initial, *m_cylinder565);
1360     minus_final = propagator->propagate(minus_initial, *m_cylinder565);
1361     if (plus_final.isValid() && minus_final.isValid()) {
1362     double dphi = plus_final.globalPosition().phi() - minus_final.globalPosition().phi();
1363     while (dphi > M_PI) dphi -= 2.*M_PI;
1364     while (dphi < -M_PI) dphi += 2.*M_PI;
1365     m_lowdimuon_dphi565 = dphi;
1366     }
1367     plus_final = propagator->propagate(plus_initial, *m_cylinder620);
1368     minus_final = propagator->propagate(minus_initial, *m_cylinder620);
1369     if (plus_final.isValid() && minus_final.isValid()) {
1370     double dphi = plus_final.globalPosition().phi() - minus_final.globalPosition().phi();
1371     while (dphi > M_PI) dphi -= 2.*M_PI;
1372     while (dphi < -M_PI) dphi += 2.*M_PI;
1373     m_lowdimuon_dphi620 = dphi;
1374     }
1375     plus_final = propagator->propagate(plus_initial, *m_cylinder670);
1376     minus_final = propagator->propagate(minus_initial, *m_cylinder670);
1377     if (plus_final.isValid() && minus_final.isValid()) {
1378     double dphi = plus_final.globalPosition().phi() - minus_final.globalPosition().phi();
1379     while (dphi > M_PI) dphi -= 2.*M_PI;
1380     while (dphi < -M_PI) dphi += 2.*M_PI;
1381     m_lowdimuon_dphi670 = dphi;
1382     }
1383     plus_final = propagator->propagate(plus_initial, *m_cylinder720);
1384     minus_final = propagator->propagate(minus_initial, *m_cylinder720);
1385     if (plus_final.isValid() && minus_final.isValid()) {
1386     double dphi = plus_final.globalPosition().phi() - minus_final.globalPosition().phi();
1387     while (dphi > M_PI) dphi -= 2.*M_PI;
1388     while (dphi < -M_PI) dphi += 2.*M_PI;
1389     m_lowdimuon_dphi720 = dphi;
1390     }
1391     plus_final = propagator->propagate(plus_initial, *m_cylinder800);
1392     minus_final = propagator->propagate(minus_initial, *m_cylinder800);
1393     if (plus_final.isValid() && minus_final.isValid()) {
1394     double dphi = plus_final.globalPosition().phi() - minus_final.globalPosition().phi();
1395     while (dphi > M_PI) dphi -= 2.*M_PI;
1396     while (dphi < -M_PI) dphi += 2.*M_PI;
1397     m_lowdimuon_dphi800 = dphi;
1398     }
1399     plus_final = propagator->propagate(plus_initial, *m_cylinder900);
1400     minus_final = propagator->propagate(minus_initial, *m_cylinder900);
1401     if (plus_final.isValid() && minus_final.isValid()) {
1402     double dphi = plus_final.globalPosition().phi() - minus_final.globalPosition().phi();
1403     while (dphi > M_PI) dphi -= 2.*M_PI;
1404     while (dphi < -M_PI) dphi += 2.*M_PI;
1405     m_lowdimuon_dphi900 = dphi;
1406     }
1407     }
1408 aysen 1.24 */
1409 aysen 1.23
1410 aysen 1.22 m_lowdimuon_bbbarlike = -1;
1411     if (m_lowdimuon_iso > 4.5 || m_lowdimuon_lxy > 0.2) m_lowdimuon_bbbarlike = 1;
1412     if (m_lowdimuon_iso < 4.5 && m_lowdimuon_lxy < 0.2) m_lowdimuon_bbbarlike = 0;
1413    
1414 aysen 1.23 m_lowdimuon_dz = muJet->dz(theBeamSpot->position());
1415 pivarski 1.18
1416 aysen 1.24 if (m_lowdimuon_containstrig > 0 && m_lowdimuon_containstrig2 > 1) m_lowdimuon->Fill();
1417 pivarski 1.1 }
1418    
1419 pivarski 1.8 ////////////////////////////////////////////////////////// dimuorphan
1420 aysen 1.24
1421     if (muJets->size() == 1 && (*muJets)[0].numberOfDaughters() == 2 && orphans->size() == 1 && m_trigger > 0) {
1422     //if (muJets->size() == 1 && (*muJets)[0].numberOfDaughters() == 2 && orphans->size() == 1) {
1423 pivarski 1.8 pat::MultiMuonCollection::const_iterator muJet = muJets->begin();
1424     pat::MuonCollection::const_iterator orphan = orphans->begin();
1425    
1426     m_dimuorphan_deltaphi = muJet->phi() - orphan->phi();
1427     while (m_dimuorphan_deltaphi > M_PI) m_dimuorphan_deltaphi -= 2.*M_PI;
1428     while (m_dimuorphan_deltaphi < -M_PI) m_dimuorphan_deltaphi += 2.*M_PI;
1429    
1430 aysen 1.23 double deta = orphan->innerTrack()->eta() - muJet->muon(0)->innerTrack()->eta();
1431     double dphi = orphan->innerTrack()->phi() - muJet->muon(0)->innerTrack()->phi();
1432     if (dphi > M_PI) dphi -= 2.*M_PI;
1433     if (dphi < -M_PI) dphi += 2.*M_PI;
1434     m_dimuorphan_dr1 = pow(dphi*dphi+deta*deta,0.5);
1435    
1436     deta = orphan->innerTrack()->eta() - muJet->muon(1)->innerTrack()->eta();
1437     dphi = orphan->innerTrack()->phi() - muJet->muon(1)->innerTrack()->phi();
1438     if (dphi > M_PI) dphi -= 2.*M_PI;
1439     if (dphi < -M_PI) dphi += 2.*M_PI;
1440     m_dimuorphan_dr2 = pow(dphi*dphi+deta*deta,0.5);
1441    
1442 pivarski 1.8 m_dimuorphan_orphanpt = orphan->pt();
1443     m_dimuorphan_orphaneta = orphan->eta();
1444     m_dimuorphan_orphanphi = orphan->phi();
1445 pivarski 1.9 m_dimuorphan_orphanisglobal = (orphan->isGlobalMuon() ? 1 : 0);
1446     m_dimuorphan_orphanmatches = orphan->numberOfMatches(reco::Muon::SegmentAndTrackArbitration);
1447 aysen 1.24 m_dimuorphan_stationmask = orphan->stationMask();
1448 pivarski 1.9 m_dimuorphan_orphanhits = (orphan->innerTrack().isAvailable() ? orphan->innerTrack()->numberOfValidHits(): -1);
1449     m_dimuorphan_orphanchi2 = (orphan->innerTrack().isAvailable() ? orphan->innerTrack()->normalizedChi2(): -1.);
1450 aysen 1.24
1451     m_dimuorphan_trigpt1 = -20;
1452     m_dimuorphan_trigeta1 = -20;
1453     m_dimuorphan_trigpt2 = -20;
1454     m_dimuorphan_trigeta2 = -20;
1455 pivarski 1.8
1456 pivarski 1.10 m_dimuorphan_containstrig = 0;
1457 aysen 1.24 m_dimuorphan_containstrig2 = 0;
1458    
1459     for (std::vector<pat::MuonCollection::const_iterator>::const_iterator iter = hightrigmuons.begin(); iter != hightrigmuons.end(); ++iter) {
1460 pivarski 1.10 if (orphan->innerTrack().isAvailable() && (*iter)->innerTrack().isAvailable() &&
1461     muJet->sameTrack(&*(orphan->innerTrack()), &*((*iter)->innerTrack()))) {
1462 aysen 1.24 m_dimuorphan_containstrig++;
1463 pivarski 1.10 }
1464 pivarski 1.8 }
1465 aysen 1.22
1466 aysen 1.24 for (std::vector<pat::MuonCollection::const_iterator>::const_iterator iter = hightrigmuons.begin(); iter != hightrigmuons.end(); ++iter) {
1467 aysen 1.22 if (muJet->muon(0)->innerTrack().isAvailable() && (*iter)->innerTrack().isAvailable() &&
1468     muJet->sameTrack(&*(muJet->muon(0)->innerTrack()), &*((*iter)->innerTrack()))) {
1469 aysen 1.24 m_dimuorphan_containstrig2++;
1470     if (m_dimuorphan_containstrig2 == 2) {
1471     m_dimuorphan_trigpt1 = muJet->muon(0)->pt();
1472     m_dimuorphan_trigeta1 = muJet->muon(0)->eta();
1473     m_dimuorphan_trigpt2 = orphan->pt();
1474     m_dimuorphan_trigeta2 = orphan->eta();
1475     }
1476 aysen 1.22 }
1477     if (muJet->muon(1)->innerTrack().isAvailable() && (*iter)->innerTrack().isAvailable() &&
1478     muJet->sameTrack(&*(muJet->muon(1)->innerTrack()), &*((*iter)->innerTrack()))) {
1479 aysen 1.24 m_dimuorphan_containstrig2++;
1480     if (m_dimuorphan_containstrig2 == 2) {
1481     m_dimuorphan_trigpt1 = muJet->muon(1)->pt();
1482     m_dimuorphan_trigeta1 = muJet->muon(1)->eta();
1483     m_dimuorphan_trigpt2 = orphan->pt();
1484     m_dimuorphan_trigeta2 = orphan->eta();
1485     }
1486 aysen 1.22 }
1487     }
1488 aysen 1.24
1489    
1490 pivarski 1.10
1491 pivarski 1.8 m_dimuorphan_mass = muJet->mass();
1492 aysen 1.23 m_dimuorphan_corr_mass = -1;
1493     m_dimuorphan_recomass = muJet->mass();
1494 pivarski 1.8 m_dimuorphan_pt = muJet->pt();
1495     m_dimuorphan_eta = muJet->eta();
1496     m_dimuorphan_phi = muJet->phi();
1497     m_dimuorphan_dr = muJet->dRmax();
1498     m_dimuorphan_vprob = -1.;
1499 aysen 1.23 m_dimuorphan_vnchi2 = -1.;
1500 pivarski 1.8 m_dimuorphan_lxy = -1000.;
1501     m_dimuorphan_lxyz = -1000.;
1502 aysen 1.23 m_dimuorphan_caloiso = muJet->centralCaloIsolation();
1503 pivarski 1.8 m_dimuorphan_iso = muJet->centralTrackIsolation();
1504    
1505 aysen 1.23 m_dimuorphan_iso_3mm = 0;
1506     m_dimuorphan_iso_2mm = 0;
1507     m_dimuorphan_iso_1mm = 0;
1508    
1509 aysen 1.24 for (reco::TrackCollection::const_iterator track = tracks->begin(); track != tracks->end(); ++track) {
1510     bool track_is_muon = false;
1511     //for (pat::MuonCollection::const_iterator muon = allmuons->begin(); muon != allmuons->end(); ++muon) {
1512     // if (muJet->sameTrack(&*track,&*(muon->innerTrack()))) { track_is_muon = true; break; }
1513     //}
1514     if (muJet->sameTrack(&*track,&*(muJet->muon(0)->innerTrack())) || muJet->sameTrack(&*track,&*(muJet->muon(1)->innerTrack()))) track_is_muon = true;
1515     if (!track_is_muon) {
1516     double dphi = muJet->phi() - track->phi();
1517     if (dphi > M_PI) dphi -= 2.*M_PI;
1518     if (dphi < -M_PI) dphi += 2.*M_PI;
1519     double deta = muJet->eta() - track->eta();
1520     double dR = sqrt(pow(dphi, 2) + pow(deta, 2));
1521     if (dR < 0.4 && track->pt() > iso_track_pt_treshold) {
1522     double dz = fabs(track->dz(theBeamSpot->position())-muJet->dz(theBeamSpot->position()));
1523     if (dz < 0.3) m_dimuorphan_iso_3mm += track->pt();
1524     if (dz < 0.2) m_dimuorphan_iso_2mm += track->pt();
1525     if (dz < 0.1) m_dimuorphan_iso_1mm += track->pt();
1526     }
1527     }
1528     }
1529 aysen 1.23
1530     m_dimuorphan_orphan_iso_3mm = 0;
1531     m_dimuorphan_orphan_iso_2mm = 0;
1532     m_dimuorphan_orphan_iso_1mm = 0;
1533    
1534 aysen 1.24 for (reco::TrackCollection::const_iterator track = tracks->begin(); track != tracks->end(); ++track) {
1535     bool track_is_muon = false;
1536     //for (pat::MuonCollection::const_iterator muon = allmuons->begin(); muon != allmuons->end(); ++muon) {
1537     // if (!muJet->sameTrack(&*track,&*(muon->innerTrack()))) { track_is_muon = true; break; }
1538     //}
1539     if (muJet->sameTrack(&*track,&*(orphan->innerTrack()))) track_is_muon = true;
1540     if (!track_is_muon) {
1541     double dphi = orphan->innerTrack()->phi() - track->phi();
1542     if (dphi > M_PI) dphi -= 2.*M_PI;
1543     if (dphi < -M_PI) dphi += 2.*M_PI;
1544     double deta = orphan->innerTrack()->eta() - track->eta();
1545     double dR = sqrt(pow(dphi, 2) + pow(deta, 2));
1546     if (dR < 0.4 && track->pt() > iso_track_pt_treshold) {
1547     double dz = fabs(track->dz(theBeamSpot->position())-orphan->innerTrack()->dz(theBeamSpot->position()));
1548     if (dz < 0.3) m_dimuorphan_orphan_iso_3mm += track->pt();
1549     if (dz < 0.2) m_dimuorphan_orphan_iso_2mm += track->pt();
1550     if (dz < 0.1) m_dimuorphan_orphan_iso_1mm += track->pt();
1551     }
1552     }
1553     }
1554    
1555 aysen 1.23 for (reco::TrackCollection::const_iterator track = tracks->begin(); track != tracks->end(); ++track) {
1556     if (!muJet->sameTrack(&*track,&*(orphan->innerTrack()))) {
1557     double dphi = orphan->innerTrack()->phi() - track->phi();
1558     if (dphi > M_PI) dphi -= 2.*M_PI;
1559     if (dphi < -M_PI) dphi += 2.*M_PI;
1560     double deta = orphan->innerTrack()->eta() - track->eta();
1561     double dR = sqrt(pow(dphi, 2) + pow(deta, 2));
1562     if (dR < 0.4 && track->pt() > 1.5) {
1563     double dz = fabs(track->dz(theBeamSpot->position())-orphan->innerTrack()->dz(theBeamSpot->position()));
1564     if (dz < 0.3) m_dimuorphan_orphan_iso_3mm += track->pt();
1565     if (dz < 0.2) m_dimuorphan_orphan_iso_2mm += track->pt();
1566     if (dz < 0.1) m_dimuorphan_orphan_iso_1mm += track->pt();
1567     }
1568     }
1569     }
1570    
1571     m_dimuorphan_trackdensity = 0;
1572    
1573     for (reco::TrackCollection::const_iterator track = tracks->begin(); track != tracks->end(); ++track) {
1574     if (!muJet->sameTrack(&*track,&*(muJet->muon(0)->innerTrack())) && !muJet->sameTrack(&*track,&*(muJet->muon(1)->innerTrack()))) {
1575     double dphi0 = muJet->muon(0)->innerTrack()->phi() - track->phi();
1576     if (dphi0 > M_PI) dphi0 -= 2.*M_PI;
1577     if (dphi0 < -M_PI) dphi0 += 2.*M_PI;
1578     double deta0 = muJet->muon(0)->innerTrack()->eta() - track->eta();
1579     double dR0 = sqrt(pow(dphi0, 2) + pow(deta0, 2));
1580     double dphi1 = muJet->muon(1)->innerTrack()->phi() - track->phi();
1581     if (dphi1 > M_PI) dphi1 -= 2.*M_PI;
1582     if (dphi1 < -M_PI) dphi1 += 2.*M_PI;
1583     double deta1 = muJet->muon(1)->innerTrack()->eta() - track->eta();
1584     double dR1 = sqrt(pow(dphi1, 2) + pow(deta1, 2));
1585     if ((dR0 < 0.2 || dR1 < 0.2) && track->pt() > 1.) {
1586     double dz0 = fabs(track->dz(theBeamSpot->position())-muJet->muon(0)->innerTrack()->dz(theBeamSpot->position()));
1587     double dz1 = fabs(track->dz(theBeamSpot->position())-muJet->muon(1)->innerTrack()->dz(theBeamSpot->position()));
1588     if (dz0 < 0.2 || dz1 < 0.2) m_dimuorphan_trackdensity++;
1589     }
1590     }
1591     }
1592    
1593 pivarski 1.8 if (muJet->vertexValid()) {
1594     m_dimuorphan_deltaphi = muJet->vertexMomentum().phi() - orphan->phi();
1595     while (m_dimuorphan_deltaphi > M_PI) m_dimuorphan_deltaphi -= 2.*M_PI;
1596     while (m_dimuorphan_deltaphi < -M_PI) m_dimuorphan_deltaphi += 2.*M_PI;
1597    
1598     m_dimuorphan_mass = muJet->vertexMass();
1599 aysen 1.23 m_dimuorphan_corr_mass = muJet->vertexMass();
1600 pivarski 1.8 m_dimuorphan_pt = muJet->vertexMomentum().perp();
1601     m_dimuorphan_eta = muJet->vertexMomentum().eta();
1602     m_dimuorphan_phi = muJet->vertexMomentum().phi();
1603     m_dimuorphan_dr = muJet->dRmax(true);
1604     m_dimuorphan_vprob = muJet->vertexProb();
1605 aysen 1.23 m_dimuorphan_vnchi2 = muJet->vertexNormalizedChi2();
1606 pivarski 1.10 if (closestPrimaryVertex != primaryVertices->end()) {
1607     m_dimuorphan_lxy = muJet->lxy(GlobalPoint(closestPrimaryVertex->x(), closestPrimaryVertex->y(), closestPrimaryVertex->z()));
1608     m_dimuorphan_lxyz = muJet->lxyz(GlobalPoint(closestPrimaryVertex->x(), closestPrimaryVertex->y(), closestPrimaryVertex->z()));
1609     }
1610 aysen 1.23
1611     double scale0 = scalePt(muJet->vertexMomentum(0).perp(),muJet->vertexMomentum(0).eta(),muJet->vertexMomentum(0).phi(),muJet->muon(0)->charge());
1612     double scale1 = scalePt(muJet->vertexMomentum(1).perp(),muJet->vertexMomentum(1).eta(),muJet->vertexMomentum(1).phi(),muJet->muon(1)->charge());
1613    
1614     double e1 = pow(pow(muJet->vertexMomentum(0).perp()*scale0,2)+pow(muJet->vertexMomentum(0).z(),2)+pow(muJet->muon(0)->mass(),2),0.5);
1615     double e2 = pow(pow(muJet->vertexMomentum(1).perp()*scale1,2)+pow(muJet->vertexMomentum(1).z(),2)+pow(muJet->muon(1)->mass(),2),0.5);
1616     double e = e1 + e2;
1617    
1618     double px = muJet->vertexMomentum(0).x()*scale0 + muJet->vertexMomentum(1).x()*scale1;
1619     double py = muJet->vertexMomentum(0).y()*scale0 + muJet->vertexMomentum(1).y()*scale1;
1620     double pz = muJet->vertexMomentum(0).z() + muJet->vertexMomentum(1).z();
1621    
1622     m_dimuorphan_corr_mass = pow(e*e-px*px-py*py-pz*pz,0.5);
1623    
1624 pivarski 1.8 }
1625    
1626 aysen 1.23 if (muJet->daughter(0)->charge() > 0) {
1627     m_dimuorphan_plusmatches = muJet->muon(0)->numberOfMatches(reco::Muon::SegmentAndTrackArbitration);
1628     m_dimuorphan_minusmatches = muJet->muon(1)->numberOfMatches(reco::Muon::SegmentAndTrackArbitration);
1629     m_dimuorphan_plushits = muJet->muon(0)->innerTrack()->numberOfValidHits();
1630     m_dimuorphan_minushits = muJet->muon(1)->innerTrack()->numberOfValidHits();
1631     m_dimuorphan_plusnormchi2 = muJet->muon(0)->innerTrack()->normalizedChi2();
1632     m_dimuorphan_minusnormchi2 = muJet->muon(1)->innerTrack()->normalizedChi2();
1633    
1634 aysen 1.24 m_dimuorphan_plusstationmask = muJet->muon(0)->stationMask();
1635     m_dimuorphan_minusstationmask = muJet->muon(1)->stationMask();
1636    
1637 aysen 1.23 m_dimuorphan_plus_thits = muJet->muon(0)->innerTrack()->hitPattern().numberOfValidTrackerHits();
1638     m_dimuorphan_plus_mhits = 0;
1639     if (muJet->muon(0)->isGlobalMuon()) m_dimuorphan_plus_mhits = muJet->muon(0)->globalTrack()->hitPattern().numberOfValidMuonHits();
1640     m_dimuorphan_plus_phits = muJet->muon(0)->innerTrack()->hitPattern().numberOfValidPixelHits();
1641    
1642     m_dimuorphan_minus_thits = muJet->muon(1)->innerTrack()->hitPattern().numberOfValidTrackerHits();
1643     m_dimuorphan_minus_mhits = 0;
1644     if (muJet->muon(1)->isGlobalMuon()) m_dimuorphan_minus_mhits = muJet->muon(1)->globalTrack()->hitPattern().numberOfValidMuonHits();
1645     m_dimuorphan_minus_phits = muJet->muon(1)->innerTrack()->hitPattern().numberOfValidPixelHits();
1646    
1647     m_dimuorphan_plus_dxy = muJet->muon(0)->innerTrack()->dxy(theBeamSpot->position());
1648     m_dimuorphan_minus_dxy = muJet->muon(1)->innerTrack()->dxy(theBeamSpot->position());
1649    
1650 aysen 1.24 m_dimuorphan_plus_pt = muJet->muon(0)->pt();
1651     m_dimuorphan_minus_pt = muJet->muon(1)->pt();
1652     m_dimuorphan_plus_eta = muJet->muon(0)->eta();
1653     m_dimuorphan_minus_eta = muJet->muon(1)->eta();
1654     m_dimuorphan_plus_phi = muJet->muon(0)->phi();
1655     m_dimuorphan_minus_phi = muJet->muon(1)->phi();
1656    
1657     m_dimuorphan_Deltaphi = m_dimuorphan_plus_phi-m_dimuorphan_minus_phi;
1658     if (m_dimuorphan_Deltaphi > M_PI) m_dimuorphan_Deltaphi -= 2.*M_PI;
1659     if (m_dimuorphan_Deltaphi < -M_PI) m_dimuorphan_Deltaphi += 2.*M_PI;
1660 aysen 1.23 /*
1661     for (trackingRecHit_iterator hit = muJet->muon(0)->innerTrack()->recHitsBegin(); hit != muJet->muon(0)->innerTrack()->recHitsEnd(); ++hit) {
1662     if ((*hit)->isValid()) {
1663     GlobalPoint p = tkgeom->idToDet((*hit)->geographicalId())->toGlobal((*hit)->localPosition());
1664     m_dimuorphan_plus_innerR = pow(p.x()*p.x()+p.y()*p.y(),0.5);
1665     break;
1666     }
1667     }
1668     for (trackingRecHit_iterator hit = muJet->muon(1)->innerTrack()->recHitsBegin(); hit != muJet->muon(1)->innerTrack()->recHitsEnd(); ++hit) {
1669     if ((*hit)->isValid()) {
1670     GlobalPoint p = tkgeom->idToDet((*hit)->geographicalId())->toGlobal((*hit)->localPosition());
1671     m_dimuorphan_minus_innerR = pow(p.x()*p.x()+p.y()*p.y(),0.5);
1672     break;
1673     }
1674     }
1675     */
1676    
1677     }
1678     else {
1679     m_dimuorphan_plusmatches = muJet->muon(1)->numberOfMatches(reco::Muon::SegmentAndTrackArbitration);
1680     m_dimuorphan_minusmatches = muJet->muon(0)->numberOfMatches(reco::Muon::SegmentAndTrackArbitration);
1681     m_dimuorphan_plushits = muJet->muon(1)->innerTrack()->numberOfValidHits();
1682     m_dimuorphan_minushits = muJet->muon(0)->innerTrack()->numberOfValidHits();
1683     m_dimuorphan_plusnormchi2 = muJet->muon(1)->innerTrack()->normalizedChi2();
1684     m_dimuorphan_minusnormchi2 = muJet->muon(0)->innerTrack()->normalizedChi2();
1685    
1686 aysen 1.24 m_dimuorphan_plusstationmask = muJet->muon(1)->stationMask();
1687     m_dimuorphan_minusstationmask = muJet->muon(0)->stationMask();
1688    
1689 aysen 1.23 m_dimuorphan_plus_thits = muJet->muon(1)->innerTrack()->hitPattern().numberOfValidTrackerHits();
1690     m_dimuorphan_plus_mhits = 0;
1691     if (muJet->muon(1)->isGlobalMuon()) m_dimuorphan_plus_mhits = muJet->muon(1)->globalTrack()->hitPattern().numberOfValidMuonHits();
1692     m_dimuorphan_plus_phits = muJet->muon(1)->innerTrack()->hitPattern().numberOfValidPixelHits();
1693    
1694     m_dimuorphan_minus_thits = muJet->muon(0)->innerTrack()->hitPattern().numberOfValidTrackerHits();
1695     m_dimuorphan_minus_mhits = 0;
1696     if (muJet->muon(0)->isGlobalMuon()) m_dimuorphan_minus_mhits = muJet->muon(0)->globalTrack()->hitPattern().numberOfValidMuonHits();
1697     m_dimuorphan_minus_phits = muJet->muon(0)->innerTrack()->hitPattern().numberOfValidPixelHits();
1698    
1699     m_dimuorphan_plus_dxy = muJet->muon(1)->innerTrack()->dxy(theBeamSpot->position());
1700     m_dimuorphan_minus_dxy = muJet->muon(0)->innerTrack()->dxy(theBeamSpot->position());
1701    
1702 aysen 1.24 m_dimuorphan_plus_pt = muJet->muon(1)->pt();
1703     m_dimuorphan_minus_pt = muJet->muon(0)->pt();
1704     m_dimuorphan_plus_eta = muJet->muon(1)->eta();
1705     m_dimuorphan_minus_eta = muJet->muon(0)->eta();
1706     m_dimuorphan_plus_phi = muJet->muon(1)->phi();
1707     m_dimuorphan_minus_phi = muJet->muon(0)->phi();
1708    
1709     m_dimuorphan_Deltaphi = m_dimuorphan_plus_phi-m_dimuorphan_minus_phi;
1710     if (m_dimuorphan_Deltaphi > M_PI) m_dimuorphan_Deltaphi -= 2.*M_PI;
1711     if (m_dimuorphan_Deltaphi < -M_PI) m_dimuorphan_Deltaphi += 2.*M_PI;
1712 aysen 1.23 /*
1713     for (trackingRecHit_iterator hit = muJet->muon(0)->innerTrack()->recHitsBegin(); hit != muJet->muon(0)->innerTrack()->recHitsEnd(); ++hit) {
1714     if ((*hit)->isValid()) {
1715     GlobalPoint p = tkgeom->idToDet((*hit)->geographicalId())->toGlobal((*hit)->localPosition());
1716     m_dimuorphan_minus_innerR = pow(p.x()*p.x()+p.y()*p.y(),0.5);
1717     break;
1718     }
1719     }
1720     for (trackingRecHit_iterator hit = muJet->muon(1)->innerTrack()->recHitsBegin(); hit != muJet->muon(1)->innerTrack()->recHitsEnd(); ++hit) {
1721     if ((*hit)->isValid()) {
1722     GlobalPoint p = tkgeom->idToDet((*hit)->geographicalId())->toGlobal((*hit)->localPosition());
1723     m_dimuorphan_plus_innerR = pow(p.x()*p.x()+p.y()*p.y(),0.5);
1724     break;
1725     }
1726     }
1727     */
1728    
1729     }
1730 aysen 1.24 m_dimuorphan_Deltaphi_orphan = m_dimuorphan_orphanphi - m_dimuorphan_phi;
1731     if (m_dimuorphan_Deltaphi_orphan > M_PI) m_dimuorphan_Deltaphi_orphan -= 2.*M_PI;
1732     if (m_dimuorphan_Deltaphi_orphan < -M_PI) m_dimuorphan_Deltaphi_orphan += 2.*M_PI;
1733 aysen 1.23
1734     m_dimuorphan_plus_isGlobal = 0;
1735     m_dimuorphan_plus_isStandAlone = 0;
1736     m_dimuorphan_plus_GlobalHits = -1;
1737     m_dimuorphan_plus_GlobalChi2 = -1;
1738     m_dimuorphan_plus_StandAloneHits = -1;
1739     m_dimuorphan_plus_StandAloneChi2 = -1;
1740    
1741     m_dimuorphan_minus_isGlobal = 0;
1742     m_dimuorphan_minus_isStandAlone = 0;
1743     m_dimuorphan_minus_GlobalHits = -1;
1744     m_dimuorphan_minus_GlobalChi2 = -1;
1745     m_dimuorphan_minus_StandAloneHits = -1;
1746     m_dimuorphan_minus_StandAloneChi2 = -1;
1747    
1748     if (muJet->daughter(0)->charge() > 0) {
1749     m_dimuorphan_plus_qoverpError = muJet->muon(0)->innerTrack()->qoverpError();
1750     m_dimuorphan_plus_ptError = muJet->muon(0)->innerTrack()->ptError();
1751     m_dimuorphan_plus_phiError = muJet->muon(0)->innerTrack()->phiError();
1752     m_dimuorphan_plus_etaError = muJet->muon(0)->innerTrack()->etaError();
1753     if (muJet->muon(0)->isGlobalMuon()) {
1754     m_dimuorphan_plus_isGlobal = 1;
1755     m_dimuorphan_plus_GlobalHits = muJet->muon(0)->globalTrack()->numberOfValidHits();
1756     m_dimuorphan_plus_GlobalChi2 = muJet->muon(0)->globalTrack()->normalizedChi2();
1757     }
1758     if (muJet->muon(0)->isStandAloneMuon()) {
1759     m_dimuorphan_plus_isStandAlone = 1;
1760     m_dimuorphan_plus_StandAloneHits = muJet->muon(0)->outerTrack()->numberOfValidHits();
1761     m_dimuorphan_plus_StandAloneChi2 = muJet->muon(0)->outerTrack()->normalizedChi2();
1762     }
1763     m_dimuorphan_minus_qoverpError = muJet->muon(1)->innerTrack()->qoverpError();
1764     m_dimuorphan_minus_ptError = muJet->muon(1)->innerTrack()->ptError();
1765     m_dimuorphan_minus_phiError = muJet->muon(1)->innerTrack()->phiError();
1766     m_dimuorphan_minus_etaError = muJet->muon(1)->innerTrack()->etaError();
1767     if (muJet->muon(1)->isGlobalMuon()) {
1768     m_dimuorphan_minus_isGlobal = 1;
1769     m_dimuorphan_minus_GlobalHits = muJet->muon(1)->globalTrack()->numberOfValidHits();
1770     m_dimuorphan_minus_GlobalChi2 = muJet->muon(1)->globalTrack()->normalizedChi2();
1771     }
1772     if (muJet->muon(1)->isStandAloneMuon()) {
1773     m_dimuorphan_minus_isStandAlone = 1;
1774     m_dimuorphan_minus_StandAloneHits = muJet->muon(1)->outerTrack()->numberOfValidHits();
1775     m_dimuorphan_minus_StandAloneChi2 = muJet->muon(1)->outerTrack()->normalizedChi2();
1776     }
1777     }
1778     else {
1779     m_dimuorphan_plus_qoverpError = muJet->muon(1)->innerTrack()->qoverpError();
1780     m_dimuorphan_plus_ptError = muJet->muon(1)->innerTrack()->ptError();
1781     m_dimuorphan_plus_phiError = muJet->muon(1)->innerTrack()->phiError();
1782     m_dimuorphan_plus_etaError = muJet->muon(1)->innerTrack()->etaError();
1783     if (muJet->muon(1)->isGlobalMuon()) {
1784     m_dimuorphan_plus_isGlobal = 1;
1785     m_dimuorphan_plus_GlobalHits = muJet->muon(1)->globalTrack()->numberOfValidHits();
1786     m_dimuorphan_plus_GlobalChi2 = muJet->muon(1)->globalTrack()->normalizedChi2();
1787     }
1788     if (muJet->muon(1)->isStandAloneMuon()) {
1789     m_dimuorphan_plus_isStandAlone = 1;
1790     m_dimuorphan_plus_StandAloneHits = muJet->muon(1)->outerTrack()->numberOfValidHits();
1791     m_dimuorphan_plus_StandAloneChi2 = muJet->muon(1)->outerTrack()->normalizedChi2();
1792     }
1793     m_dimuorphan_minus_qoverpError = muJet->muon(0)->innerTrack()->qoverpError();
1794     m_dimuorphan_minus_ptError = muJet->muon(0)->innerTrack()->ptError();
1795     m_dimuorphan_minus_phiError = muJet->muon(0)->innerTrack()->phiError();
1796     m_dimuorphan_minus_etaError = muJet->muon(0)->innerTrack()->etaError();
1797     if (muJet->muon(0)->isGlobalMuon()) {
1798     m_dimuorphan_minus_isGlobal = 1;
1799     m_dimuorphan_minus_GlobalHits = muJet->muon(0)->globalTrack()->numberOfValidHits();
1800     m_dimuorphan_minus_GlobalChi2 = muJet->muon(0)->globalTrack()->normalizedChi2();
1801     }
1802     if (muJet->muon(0)->isStandAloneMuon()) {
1803     m_dimuorphan_minus_isStandAlone = 1;
1804     m_dimuorphan_minus_StandAloneHits = muJet->muon(0)->outerTrack()->numberOfValidHits();
1805     m_dimuorphan_minus_StandAloneChi2 = muJet->muon(0)->outerTrack()->normalizedChi2();
1806     }
1807     }
1808    
1809 aysen 1.22 m_dimuorphan_dimuonbbbarlike = -1;
1810     if (m_dimuorphan_iso > 4.5 || m_dimuorphan_lxy > 0.2) m_dimuorphan_dimuonbbbarlike = 1;
1811     if (m_dimuorphan_iso < 4.5 && m_dimuorphan_lxy < 0.2) m_dimuorphan_dimuonbbbarlike = 0;
1812    
1813 aysen 1.24 /*
1814 aysen 1.23 const pat::Muon *muplus = NULL;
1815     const pat::Muon *muminus = NULL;
1816    
1817     if (muJet->muon(0)->charge() > 0) {
1818     muplus = &*muJet->muon(0);
1819     muminus = &*muJet->muon(1);
1820     }
1821     if (muJet->muon(0)->charge() < 0) {
1822     muplus = &*muJet->muon(1);
1823     muminus = &*muJet->muon(0);
1824     }
1825    
1826     FreeTrajectoryState plus_initial(GlobalPoint(muplus->vx(), muplus->vy(), muplus->vz()), GlobalVector(muplus->px(), muplus->py(), muplus->pz()), 1, &*magneticField);
1827     FreeTrajectoryState minus_initial(GlobalPoint(muminus->vx(), muminus->vy(), muminus->vz()), GlobalVector(muminus->px(), muminus->py(), muminus->pz()), -1, &*magneticField);
1828    
1829     Cylinder::CylinderPointer m_cylinder = Cylinder::build(Cylinder::PositionType(0., 0., 0.), Cylinder::RotationType(), 600.);
1830     Plane::PlanePointer m_plane = Plane::build(Plane::PositionType(0., 0., 800.), Plane::RotationType());
1831    
1832    
1833     if (fabs(m_dimuorphan_eta) < 1.1) {
1834     TrajectoryStateOnSurface plus_final = propagator->propagate(plus_initial, *m_cylinder);
1835     TrajectoryStateOnSurface minus_final = propagator->propagate(minus_initial, *m_cylinder);
1836     if (plus_final.isValid() && minus_final.isValid()) {
1837     double dphi = plus_final.globalPosition().phi() - minus_final.globalPosition().phi();
1838     while (dphi > M_PI) dphi -= 2.*M_PI;
1839     while (dphi < -M_PI) dphi += 2.*M_PI;
1840     m_dimuorphan_dphi = dphi;
1841     }
1842     }
1843     else {
1844     TrajectoryStateOnSurface plus_final = propagator->propagate(plus_initial, *m_plane);
1845     TrajectoryStateOnSurface minus_final = propagator->propagate(minus_initial, *m_plane);
1846     if (plus_final.isValid() && minus_final.isValid()) {
1847     double dphi = plus_final.globalPosition().phi() - minus_final.globalPosition().phi();
1848     while (dphi > M_PI) dphi -= 2.*M_PI;
1849     while (dphi < -M_PI) dphi += 2.*M_PI;
1850     m_dimuorphan_dphi = dphi;
1851     }
1852     }
1853    
1854     if (fabs(m_dimuorphan_eta) < 0.9) {
1855     TrajectoryStateOnSurface plus_final = propagator->propagate(plus_initial, *m_cylinder100);
1856     TrajectoryStateOnSurface minus_final = propagator->propagate(minus_initial, *m_cylinder100);
1857     if (plus_final.isValid() && minus_final.isValid()) {
1858     double dphi = plus_final.globalPosition().phi() - minus_final.globalPosition().phi();
1859     while (dphi > M_PI) dphi -= 2.*M_PI;
1860     while (dphi < -M_PI) dphi += 2.*M_PI;
1861     m_dimuorphan_dphi100 = dphi;
1862     }
1863     plus_final = propagator->propagate(plus_initial, *m_cylinder200);
1864     minus_final = propagator->propagate(minus_initial, *m_cylinder200);
1865     if (plus_final.isValid() && minus_final.isValid()) {
1866     double dphi = plus_final.globalPosition().phi() - minus_final.globalPosition().phi();
1867     while (dphi > M_PI) dphi -= 2.*M_PI;
1868     while (dphi < -M_PI) dphi += 2.*M_PI;
1869     m_dimuorphan_dphi200 = dphi;
1870     }
1871     plus_final = propagator->propagate(plus_initial, *m_cylinder300);
1872     minus_final = propagator->propagate(minus_initial, *m_cylinder300);
1873     if (plus_final.isValid() && minus_final.isValid()) {
1874     double dphi = plus_final.globalPosition().phi() - minus_final.globalPosition().phi();
1875     while (dphi > M_PI) dphi -= 2.*M_PI;
1876     while (dphi < -M_PI) dphi += 2.*M_PI;
1877     m_dimuorphan_dphi300 = dphi;
1878     }
1879     plus_final = propagator->propagate(plus_initial, *m_cylinder425);
1880     minus_final = propagator->propagate(minus_initial, *m_cylinder425);
1881     if (plus_final.isValid() && minus_final.isValid()) {
1882     double dphi = plus_final.globalPosition().phi() - minus_final.globalPosition().phi();
1883     while (dphi > M_PI) dphi -= 2.*M_PI;
1884     while (dphi < -M_PI) dphi += 2.*M_PI;
1885     m_dimuorphan_dphi425 = dphi;
1886     }
1887     plus_final = propagator->propagate(plus_initial, *m_cylinder470);
1888     minus_final = propagator->propagate(minus_initial, *m_cylinder470);
1889     if (plus_final.isValid() && minus_final.isValid()) {
1890     double dphi = plus_final.globalPosition().phi() - minus_final.globalPosition().phi();
1891     while (dphi > M_PI) dphi -= 2.*M_PI;
1892     while (dphi < -M_PI) dphi += 2.*M_PI;
1893     m_dimuorphan_dphi470 = dphi;
1894     }
1895     plus_final = propagator->propagate(plus_initial, *m_cylinder510);
1896     minus_final = propagator->propagate(minus_initial, *m_cylinder510);
1897     if (plus_final.isValid() && minus_final.isValid()) {
1898     double dphi = plus_final.globalPosition().phi() - minus_final.globalPosition().phi();
1899     while (dphi > M_PI) dphi -= 2.*M_PI;
1900     while (dphi < -M_PI) dphi += 2.*M_PI;
1901     m_dimuorphan_dphi510 = dphi;
1902     }
1903     plus_final = propagator->propagate(plus_initial, *m_cylinder565);
1904     minus_final = propagator->propagate(minus_initial, *m_cylinder565);
1905     if (plus_final.isValid() && minus_final.isValid()) {
1906     double dphi = plus_final.globalPosition().phi() - minus_final.globalPosition().phi();
1907     while (dphi > M_PI) dphi -= 2.*M_PI;
1908     while (dphi < -M_PI) dphi += 2.*M_PI;
1909     m_dimuorphan_dphi565 = dphi;
1910     }
1911     plus_final = propagator->propagate(plus_initial, *m_cylinder620);
1912     minus_final = propagator->propagate(minus_initial, *m_cylinder620);
1913     if (plus_final.isValid() && minus_final.isValid()) {
1914     double dphi = plus_final.globalPosition().phi() - minus_final.globalPosition().phi();
1915     while (dphi > M_PI) dphi -= 2.*M_PI;
1916     while (dphi < -M_PI) dphi += 2.*M_PI;
1917     m_dimuorphan_dphi620 = dphi;
1918     }
1919     plus_final = propagator->propagate(plus_initial, *m_cylinder670);
1920     minus_final = propagator->propagate(minus_initial, *m_cylinder670);
1921     if (plus_final.isValid() && minus_final.isValid()) {
1922     double dphi = plus_final.globalPosition().phi() - minus_final.globalPosition().phi();
1923     while (dphi > M_PI) dphi -= 2.*M_PI;
1924     while (dphi < -M_PI) dphi += 2.*M_PI;
1925     m_dimuorphan_dphi670 = dphi;
1926     }
1927     plus_final = propagator->propagate(plus_initial, *m_cylinder720);
1928     minus_final = propagator->propagate(minus_initial, *m_cylinder720);
1929     if (plus_final.isValid() && minus_final.isValid()) {
1930     double dphi = plus_final.globalPosition().phi() - minus_final.globalPosition().phi();
1931     while (dphi > M_PI) dphi -= 2.*M_PI;
1932     while (dphi < -M_PI) dphi += 2.*M_PI;
1933     m_dimuorphan_dphi720 = dphi;
1934     }
1935     plus_final = propagator->propagate(plus_initial, *m_cylinder800);
1936     minus_final = propagator->propagate(minus_initial, *m_cylinder800);
1937     if (plus_final.isValid() && minus_final.isValid()) {
1938     double dphi = plus_final.globalPosition().phi() - minus_final.globalPosition().phi();
1939     while (dphi > M_PI) dphi -= 2.*M_PI;
1940     while (dphi < -M_PI) dphi += 2.*M_PI;
1941     m_dimuorphan_dphi800 = dphi;
1942     }
1943     plus_final = propagator->propagate(plus_initial, *m_cylinder900);
1944     minus_final = propagator->propagate(minus_initial, *m_cylinder900);
1945     if (plus_final.isValid() && minus_final.isValid()) {
1946     double dphi = plus_final.globalPosition().phi() - minus_final.globalPosition().phi();
1947     while (dphi > M_PI) dphi -= 2.*M_PI;
1948     while (dphi < -M_PI) dphi += 2.*M_PI;
1949     m_dimuorphan_dphi900 = dphi;
1950     }
1951     }
1952 aysen 1.24 */
1953 aysen 1.23
1954     m_dimuorphan_dz1 = muJet->dz(theBeamSpot->position());
1955     m_dimuorphan_dz2 = orphan->innerTrack()->dz(theBeamSpot->position());
1956     m_dimuorphan_deltaz = m_dimuorphan_dz1 - m_dimuorphan_dz2;
1957    
1958     m_dimuorphan_muonssize = allmuons->size();
1959    
1960 aysen 1.24 if ((m_dimuorphan_containstrig > 0 || m_dimuorphan_containstrig2 > 0) && fabs(m_dimuorphan_deltaz) < 0.1) m_dimuorphan->Fill();
1961 aysen 1.23
1962 pivarski 1.8 }
1963    
1964 aysen 1.23
1965 pivarski 1.1 ////////////////////////////////////////////////////////// dimudimu
1966 aysen 1.24 if (muJets->size() == 2 && (*muJets)[0].numberOfDaughters() == 2 && (*muJets)[1].numberOfDaughters() == 2 && orphans->size() == 0 && m_trigger > 0) {
1967 pivarski 1.10 const pat::MultiMuon *muJet0 = &((*muJets)[0]);
1968     const pat::MultiMuon *muJet1 = &((*muJets)[1]);
1969    
1970     bool muJet0_canBeC = false;
1971     bool muJet1_canBeC = false;
1972 aysen 1.24 for (std::vector<pat::MuonCollection::const_iterator>::const_iterator iter = hightrigmuons.begin(); iter != hightrigmuons.end(); ++iter) {
1973 pivarski 1.10 if (muJet0->muon(0)->innerTrack().isAvailable() && (*iter)->innerTrack().isAvailable() &&
1974     muJet0->sameTrack(&*(muJet0->muon(0)->innerTrack()), &*((*iter)->innerTrack()))) {
1975     muJet0_canBeC = true;
1976     }
1977     if (muJet0->muon(1)->innerTrack().isAvailable() && (*iter)->innerTrack().isAvailable() &&
1978     muJet0->sameTrack(&*(muJet0->muon(1)->innerTrack()), &*((*iter)->innerTrack()))) {
1979     muJet0_canBeC = true;
1980     }
1981    
1982     if (muJet1->muon(0)->innerTrack().isAvailable() && (*iter)->innerTrack().isAvailable() &&
1983     muJet1->sameTrack(&*(muJet1->muon(0)->innerTrack()), &*((*iter)->innerTrack()))) {
1984     muJet1_canBeC = true;
1985 pivarski 1.8 }
1986 pivarski 1.10 if (muJet1->muon(1)->innerTrack().isAvailable() && (*iter)->innerTrack().isAvailable() &&
1987     muJet1->sameTrack(&*(muJet1->muon(1)->innerTrack()), &*((*iter)->innerTrack()))) {
1988     muJet1_canBeC = true;
1989 pivarski 1.8 }
1990     }
1991 pivarski 1.10
1992 aysen 1.24 for (std::vector<pat::MuonCollection::const_iterator>::const_iterator iter = lowtrigmuons.begin(); iter != lowtrigmuons.end(); ++iter) {
1993     if (muJet0->muon(0)->innerTrack().isAvailable() && (*iter)->innerTrack().isAvailable() &&
1994     muJet0->sameTrack(&*(muJet0->muon(0)->innerTrack()), &*((*iter)->innerTrack()))) {
1995     m_dimudimu_containstrig2++;
1996     }
1997     if (muJet0->muon(1)->innerTrack().isAvailable() && (*iter)->innerTrack().isAvailable() &&
1998     muJet0->sameTrack(&*(muJet0->muon(1)->innerTrack()), &*((*iter)->innerTrack()))) {
1999     m_dimudimu_containstrig2++;
2000     }
2001    
2002     if (muJet1->muon(0)->innerTrack().isAvailable() && (*iter)->innerTrack().isAvailable() &&
2003     muJet1->sameTrack(&*(muJet1->muon(0)->innerTrack()), &*((*iter)->innerTrack()))) {
2004     m_dimudimu_containstrig2++;
2005     }
2006     if (muJet1->muon(1)->innerTrack().isAvailable() && (*iter)->innerTrack().isAvailable() &&
2007     muJet1->sameTrack(&*(muJet1->muon(1)->innerTrack()), &*((*iter)->innerTrack()))) {
2008     m_dimudimu_containstrig2++;
2009     }
2010     }
2011    
2012 pivarski 1.10 const pat::MultiMuon *muJetC = NULL;
2013     const pat::MultiMuon *muJetF = NULL;
2014     if (muJet0_canBeC && muJet1_canBeC) {
2015 pivarski 1.16 m_dimudimu_containstrig = 1;
2016    
2017 pivarski 1.10 if (m_trandom3.Integer(2) == 0) {
2018 pivarski 1.8 muJetC = muJet0;
2019     muJetF = muJet1;
2020     }
2021     else {
2022     muJetC = muJet1;
2023     muJetF = muJet0;
2024     }
2025     }
2026 pivarski 1.10 else if (muJet0_canBeC) {
2027 pivarski 1.16 m_dimudimu_containstrig = 1;
2028    
2029 pivarski 1.10 muJetC = muJet0;
2030     muJetF = muJet1;
2031     }
2032     else if (muJet1_canBeC) {
2033 pivarski 1.16 m_dimudimu_containstrig = 1;
2034    
2035 pivarski 1.10 muJetC = muJet1;
2036     muJetF = muJet0;
2037     }
2038 pivarski 1.16 else {
2039     m_dimudimu_containstrig = 0;
2040     }
2041 pivarski 1.8
2042 pivarski 1.10 if (muJetC != NULL && muJetF != NULL) {
2043 pivarski 1.13 m_dimudimu_orphans = orphans->size();
2044    
2045 pivarski 1.10 double total_energy = muJetC->energy() + muJetF->energy();
2046     double total_px = muJetC->px() + muJetF->px();
2047     double total_py = muJetC->py() + muJetF->py();
2048     double total_pz = muJetC->pz() + muJetF->pz();
2049 pivarski 1.7
2050     m_dimudimu_wholemass = sqrt(total_energy*total_energy - total_px*total_px - total_py*total_py - total_pz*total_pz);
2051     m_dimudimu_wholept = sqrt(total_px*total_px + total_py*total_py);
2052    
2053 pivarski 1.10 m_dimudimu_deltaphi = muJetC->phi() - muJetF->phi();
2054 pivarski 1.7 while (m_dimudimu_deltaphi > M_PI) m_dimudimu_deltaphi -= 2.*M_PI;
2055     while (m_dimudimu_deltaphi < -M_PI) m_dimudimu_deltaphi += 2.*M_PI;
2056    
2057 pivarski 1.10 m_dimudimu_massC = muJetC->mass();
2058     m_dimudimu_ptC = muJetC->pt();
2059     m_dimudimu_etaC = muJetC->eta();
2060     m_dimudimu_phiC = muJetC->phi();
2061     m_dimudimu_drC = muJetC->dRmax();
2062     m_dimudimu_vprobC = -1.;
2063     m_dimudimu_lxyC = -1000.;
2064     m_dimudimu_lxyzC = -1000.;
2065     m_dimudimu_isoC = muJetC->centralTrackIsolation();
2066    
2067 aysen 1.23 m_dimudimu_isoC_3mm = 0;
2068     m_dimudimu_isoC_2mm = 0;
2069     m_dimudimu_isoC_1mm = 0;
2070    
2071     for (reco::TrackCollection::const_iterator track = tracks->begin(); track != tracks->end(); ++track) {
2072 aysen 1.24 bool track_is_muon = false;
2073     //for (pat::MuonCollection::const_iterator muon = allmuons->begin(); muon != allmuons->end(); ++muon) {
2074     // if (muJetC->sameTrack(&*track,&*(muon->innerTrack()))) { track_is_muon = true; break; }
2075     //}
2076     if (muJetC->sameTrack(&*track,&*(muJetC->muon(0)->innerTrack())) || muJetC->sameTrack(&*track,&*(muJetC->muon(1)->innerTrack()))) track_is_muon = true;
2077     if (!track_is_muon) {
2078 aysen 1.23 double dphi = muJetC->phi() - track->phi();
2079     if (dphi > M_PI) dphi -= 2.*M_PI;
2080     if (dphi < -M_PI) dphi += 2.*M_PI;
2081     double deta = muJetC->eta() - track->eta();
2082 aysen 1.24 double dR = sqrt(pow(dphi, 2) + pow(deta, 2));
2083     if (dR < 0.4 && track->pt() > iso_track_pt_treshold) {
2084 aysen 1.23 double dz = fabs(track->dz(theBeamSpot->position())-muJetC->dz(theBeamSpot->position()));
2085     if (dz < 0.3) m_dimudimu_isoC_3mm += track->pt();
2086     if (dz < 0.2) m_dimudimu_isoC_2mm += track->pt();
2087     if (dz < 0.1) m_dimudimu_isoC_1mm += track->pt();
2088 aysen 1.24 }
2089 aysen 1.23 }
2090     }
2091    
2092 pivarski 1.10 m_dimudimu_massF = muJetF->mass();
2093     m_dimudimu_ptF = muJetF->pt();
2094     m_dimudimu_etaF = muJetF->eta();
2095     m_dimudimu_phiF = muJetF->phi();
2096     m_dimudimu_drF = muJetF->dRmax();
2097     m_dimudimu_vprobF = -1.;
2098     m_dimudimu_lxyF = -1000.;
2099     m_dimudimu_lxyzF = -1000.;
2100     m_dimudimu_isoF = muJetF->centralTrackIsolation();
2101    
2102 aysen 1.23 m_dimudimu_isoF_3mm = 0;
2103     m_dimudimu_isoF_2mm = 0;
2104     m_dimudimu_isoF_1mm = 0;
2105    
2106     for (reco::TrackCollection::const_iterator track = tracks->begin(); track != tracks->end(); ++track) {
2107 aysen 1.24 bool track_is_muon = false;
2108     //for (pat::MuonCollection::const_iterator muon = allmuons->begin(); muon != allmuons->end(); ++muon) {
2109     // if (muJetF->sameTrack(&*track,&*(muon->innerTrack()))) { track_is_muon = true; break; }
2110     //}
2111     if (muJetF->sameTrack(&*track,&*(muJetF->muon(0)->innerTrack())) || muJetF->sameTrack(&*track,&*(muJetF->muon(1)->innerTrack()))) track_is_muon = true;
2112     if (!track_is_muon) {
2113 aysen 1.23 double dphi = muJetF->phi() - track->phi();
2114     if (dphi > M_PI) dphi -= 2.*M_PI;
2115     if (dphi < -M_PI) dphi += 2.*M_PI;
2116     double deta = muJetF->eta() - track->eta();
2117 aysen 1.24 double dR = sqrt(pow(dphi, 2) + pow(deta, 2));
2118     if (dR < 0.4 && track->pt() > iso_track_pt_treshold) {
2119 aysen 1.23 double dz = fabs(track->dz(theBeamSpot->position())-muJetF->dz(theBeamSpot->position()));
2120     if (dz < 0.3) m_dimudimu_isoF_3mm += track->pt();
2121     if (dz < 0.2) m_dimudimu_isoF_2mm += track->pt();
2122     if (dz < 0.1) m_dimudimu_isoF_1mm += track->pt();
2123     }
2124     }
2125     }
2126    
2127 pivarski 1.10 if (muJetC->vertexValid() && muJetF->vertexValid()) {
2128     total_energy = muJetC->vertexP4().energy() + muJetF->vertexP4().energy();
2129     total_px = muJetC->vertexMomentum().x() + muJetF->vertexMomentum().x();
2130     total_py = muJetC->vertexMomentum().y() + muJetF->vertexMomentum().y();
2131     total_pz = muJetC->vertexMomentum().z() + muJetF->vertexMomentum().z();
2132    
2133     m_dimudimu_wholemass = sqrt(total_energy*total_energy - total_px*total_px - total_py*total_py - total_pz*total_pz);
2134     m_dimudimu_wholept = sqrt(total_px*total_px + total_py*total_py);
2135    
2136     m_dimudimu_deltaphi = muJetC->vertexMomentum().phi() - muJetF->vertexMomentum().phi();
2137     while (m_dimudimu_deltaphi > M_PI) m_dimudimu_deltaphi -= 2.*M_PI;
2138     while (m_dimudimu_deltaphi < -M_PI) m_dimudimu_deltaphi += 2.*M_PI;
2139    
2140     m_dimudimu_massC = muJetC->vertexMass();
2141     m_dimudimu_ptC = muJetC->vertexMomentum().perp();
2142     m_dimudimu_etaC = muJetC->vertexMomentum().eta();
2143     m_dimudimu_phiC = muJetC->vertexMomentum().phi();
2144     m_dimudimu_drC = muJetC->dRmax(true);
2145     m_dimudimu_vprobC = muJetC->vertexProb();
2146     if (closestPrimaryVertex != primaryVertices->end()) {
2147     m_dimudimu_lxyC = muJetC->lxy(GlobalPoint(closestPrimaryVertex->x(), closestPrimaryVertex->y(), closestPrimaryVertex->z()));
2148     m_dimudimu_lxyzC = muJetC->lxyz(GlobalPoint(closestPrimaryVertex->x(), closestPrimaryVertex->y(), closestPrimaryVertex->z()));
2149     }
2150    
2151     m_dimudimu_massF = muJetF->vertexMass();
2152     m_dimudimu_ptF = muJetF->vertexMomentum().perp();
2153     m_dimudimu_etaF = muJetF->vertexMomentum().eta();
2154     m_dimudimu_phiF = muJetF->vertexMomentum().phi();
2155     m_dimudimu_drF = muJetF->dRmax(true);
2156     m_dimudimu_vprobF = muJetF->vertexProb();
2157     if (closestPrimaryVertex != primaryVertices->end()) {
2158     m_dimudimu_lxyF = muJetF->lxy(GlobalPoint(closestPrimaryVertex->x(), closestPrimaryVertex->y(), closestPrimaryVertex->z()));
2159     m_dimudimu_lxyzF = muJetF->lxyz(GlobalPoint(closestPrimaryVertex->x(), closestPrimaryVertex->y(), closestPrimaryVertex->z()));
2160     }
2161     }
2162    
2163 aysen 1.23 m_dimudimu_dz1 = muJet0->dz(theBeamSpot->position());
2164     m_dimudimu_dz2 = muJet1->dz(theBeamSpot->position());
2165     m_dimudimu_deltaz = m_dimudimu_dz1 - m_dimudimu_dz2;
2166    
2167 aysen 1.24 if (m_dimudimu_containstrig > 0 && fabs(m_dimudimu_deltaz) < 0.1) m_dimudimu->Fill();
2168 pivarski 1.14 }
2169     }
2170 pivarski 1.1 }
2171    
2172    
2173     // ------------ method called once each job just before starting event loop ------------
2174     void
2175     FitNtuple::beginJob()
2176     {
2177     }
2178    
2179     // ------------ method called once each job just after ending the event loop ------------
2180     void
2181     FitNtuple::endJob() {
2182     }
2183    
2184     //define this as a plug-in
2185     DEFINE_FWK_MODULE(FitNtuple);