ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MuJetAnalysis/AnalysisTools/FitNtuple/src/FitNtuple.cc
Revision: 1.26
Committed: Fri Feb 1 07:03:03 2013 UTC (12 years, 3 months ago) by pakhotin
Content type: text/plain
Branch: MAIN
Changes since 1.25: +11 -7 lines
Log Message:
add input tags for muons in config file

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