ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MuJetAnalysis/AnalysisTools/FitNtuple/src/FitNtuple.cc
Revision: 1.27
Committed: Fri Feb 1 09:08:31 2013 UTC (12 years, 3 months ago) by pakhotin
Content type: text/plain
Branch: MAIN
Changes since 1.26: +81 -71 lines
Log Message:
add 2012 HLT names

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.27 // $Id: FitNtuple.cc,v 1.26 2013/02/01 07:03:03 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 pakhotin 1.27 void FitNtuple::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup)
748 pivarski 1.1 {
749 aysen 1.23
750     edm::ESHandle<Propagator> propagator;
751     iSetup.get<TrackingComponentsRecord>().get("SteppingHelixPropagatorAny", propagator);
752    
753     edm::ESHandle<MagneticField> magneticField;
754     iSetup.get<IdealMagneticFieldRecord>().get(magneticField);
755    
756     edm::ESHandle<GlobalTrackingGeometry> globalGeometry;
757     iSetup.get<GlobalTrackingGeometryRecord>().get(globalGeometry);
758    
759     edm::ESHandle<TrackerGeometry> tkgeom;
760     iSetup.get<TrackerDigiGeometryRecord>().get(tkgeom);
761    
762     edm::Handle<reco::BeamSpot> theBeamSpot;
763     iEvent.getByLabel("offlineBeamSpot",theBeamSpot);
764    
765 pakhotin 1.27 // get the run and event number
766     m_run = iEvent.id().run();
767     m_lumi = iEvent.id().luminosityBlock();
768     m_event = iEvent.id().event();
769    
770     // mu-jets (muons grouped by mass and vertex compatibility)
771     edm::Handle<pat::MultiMuonCollection> muJets;
772     iEvent.getByLabel(m_muJets, muJets);
773    
774     // orphans (muons not found in any group)
775     edm::Handle<pat::MuonCollection> orphans;
776     iEvent.getByLabel(m_muJetOrphans, orphans);
777 pivarski 1.10
778 pakhotin 1.27 edm::Handle<reco::TrackCollection> tracks;
779 aysen 1.23 iEvent.getByLabel("generalTracks", tracks);
780    
781 pakhotin 1.27 edm::Handle<pat::MuonCollection> allmuons;
782     iEvent.getByLabel(m_muons, allmuons);
783 pivarski 1.14
784 pakhotin 1.27 // find the top four muons in the event (-1000. if not found)
785     edm::Handle<pat::MuonCollection> muons;
786     iEvent.getByLabel(m_muonsTriggerMatch, muons);
787     m_muon1pt = -1000.; m_muon1eta = -1000.;
788     m_muon2pt = -1000.; m_muon2eta = -1000.;
789     m_muon3pt = -1000.; m_muon3eta = -1000.;
790     m_muon4pt = -1000.; m_muon4eta = -1000.;
791     m_muontrigpt = -1000.; m_muontrigeta = -1000.;
792     std::vector<pat::MuonCollection::const_iterator> hightrigmuons;
793     std::vector<pat::MuonCollection::const_iterator> lowtrigmuons;
794 aysen 1.24
795 pakhotin 1.27 double iso_track_pt_treshold = 0.5;
796 pivarski 1.10
797 aysen 1.24 /*
798 aysen 1.23 Cylinder::CylinderPointer m_cylinder100 = Cylinder::build(Cylinder::PositionType(0., 0., 0.), Cylinder::RotationType(), 100.);
799     Cylinder::CylinderPointer m_cylinder200 = Cylinder::build(Cylinder::PositionType(0., 0., 0.), Cylinder::RotationType(), 200.);
800     Cylinder::CylinderPointer m_cylinder300 = Cylinder::build(Cylinder::PositionType(0., 0., 0.), Cylinder::RotationType(), 300.);
801     Cylinder::CylinderPointer m_cylinder425 = Cylinder::build(Cylinder::PositionType(0., 0., 0.), Cylinder::RotationType(), 425.);
802     Cylinder::CylinderPointer m_cylinder470 = Cylinder::build(Cylinder::PositionType(0., 0., 0.), Cylinder::RotationType(), 470.);
803     Cylinder::CylinderPointer m_cylinder510 = Cylinder::build(Cylinder::PositionType(0., 0., 0.), Cylinder::RotationType(), 510.);
804     Cylinder::CylinderPointer m_cylinder565 = Cylinder::build(Cylinder::PositionType(0., 0., 0.), Cylinder::RotationType(), 565.);
805     Cylinder::CylinderPointer m_cylinder620 = Cylinder::build(Cylinder::PositionType(0., 0., 0.), Cylinder::RotationType(), 620.);
806     Cylinder::CylinderPointer m_cylinder670 = Cylinder::build(Cylinder::PositionType(0., 0., 0.), Cylinder::RotationType(), 670.);
807     Cylinder::CylinderPointer m_cylinder720 = Cylinder::build(Cylinder::PositionType(0., 0., 0.), Cylinder::RotationType(), 720.);
808     Cylinder::CylinderPointer m_cylinder800 = Cylinder::build(Cylinder::PositionType(0., 0., 0.), Cylinder::RotationType(), 800.);
809     Cylinder::CylinderPointer m_cylinder900 = Cylinder::build(Cylinder::PositionType(0., 0., 0.), Cylinder::RotationType(), 900.);
810 aysen 1.24 */
811 aysen 1.23
812 pakhotin 1.27 for (pat::MuonCollection::const_iterator muon = muons->begin(); muon != muons->end(); ++muon) {
813     // std::cout << "MUON" << std::endl;
814     if ( fabs(muon->eta()) < 2.4
815     && muon->isTrackerMuon()
816     && muon->numberOfMatches(reco::Muon::SegmentAndTrackArbitration) >= 2
817     && muon->innerTrack()->numberOfValidHits() >= 8
818     && muon->innerTrack()->normalizedChi2() < 4.) {
819     // std::cout << "SELECTED MUON" << std::endl;
820     if (muon->pt() > m_muon1pt) {
821     m_muon4pt = m_muon3pt; m_muon4eta = m_muon3eta;
822     m_muon3pt = m_muon2pt; m_muon3eta = m_muon2eta;
823     m_muon2pt = m_muon1pt; m_muon2eta = m_muon1eta;
824     m_muon1pt = muon->pt(); m_muon1eta = muon->eta();
825     } else if (muon->pt() > m_muon2pt) {
826     m_muon4pt = m_muon3pt; m_muon4eta = m_muon3eta;
827     m_muon3pt = m_muon2pt; m_muon3eta = m_muon2eta;
828     m_muon2pt = muon->pt(); m_muon2eta = muon->eta();
829     } else if (muon->pt() > m_muon3pt) {
830     m_muon4pt = m_muon3pt; m_muon4eta = m_muon3eta;
831     m_muon3pt = muon->pt(); m_muon3eta = muon->eta();
832     } else if (muon->pt() > m_muon4pt) {
833     m_muon4pt = muon->pt(); m_muon4eta = muon->eta();
834     }
835 pivarski 1.3
836     // special muon within a more limited |eta| range, to guarantee the trigger
837 aysen 1.24 if (fabs(muon->eta()) < 2.4) {
838 pivarski 1.3 if (muon->pt() > m_muontrigpt) {
839     m_muontrigpt = muon->pt(); m_muontrigeta = muon->eta();
840     }
841     }
842 pivarski 1.8
843 aysen 1.24 if (m_dataset == "SingleMu") {
844     if (muon->pt() > m_trigpt && fabs(muon->eta()) < 2.4) {
845     const pat::TriggerObjectStandAlone *mu01 = muon->triggerObjectMatchByPath("HLT_Mu15_v2");
846     const pat::TriggerObjectStandAlone *mu02 = muon->triggerObjectMatchByPath("HLT_Mu20_v1");
847     const pat::TriggerObjectStandAlone *mu03 = muon->triggerObjectMatchByPath("HLT_Mu24_v1");
848     const pat::TriggerObjectStandAlone *mu04 = muon->triggerObjectMatchByPath("HLT_Mu24_v2");
849     const pat::TriggerObjectStandAlone *mu05 = muon->triggerObjectMatchByPath("HLT_Mu30_v1");
850     const pat::TriggerObjectStandAlone *mu06 = muon->triggerObjectMatchByPath("HLT_Mu30_v2");
851     const pat::TriggerObjectStandAlone *mu07 = muon->triggerObjectMatchByPath("HLT_Mu30_v3");
852     const pat::TriggerObjectStandAlone *mu08 = muon->triggerObjectMatchByPath("HLT_Mu40_v1");
853     const pat::TriggerObjectStandAlone *mu09 = muon->triggerObjectMatchByPath("HLT_Mu40_v2");
854     const pat::TriggerObjectStandAlone *mu10 = muon->triggerObjectMatchByPath("HLT_Mu40_v3");
855     const pat::TriggerObjectStandAlone *mu11 = muon->triggerObjectMatchByPath("HLT_Mu40_v5");
856     const pat::TriggerObjectStandAlone *mu12 = muon->triggerObjectMatchByPath("HLT_Mu40_eta2p1_v1");
857     const pat::TriggerObjectStandAlone *mu13 = muon->triggerObjectMatchByPath("HLT_Mu40_eta2p1_v4");
858     const pat::TriggerObjectStandAlone *mu14 = muon->triggerObjectMatchByPath("HLT_Mu40_eta2p1_v5");
859    
860     if ((mu01 != NULL && mu01->collection() == std::string("hltL3MuonCandidates::HLT") && mu01->pt() > m_trigpt) ||
861     (mu02 != NULL && mu02->collection() == std::string("hltL3MuonCandidates::HLT") && mu02->pt() > m_trigpt) ||
862     (mu03 != NULL && mu03->collection() == std::string("hltL3MuonCandidates::HLT") && mu03->pt() > m_trigpt) ||
863     (mu04 != NULL && mu04->collection() == std::string("hltL3MuonCandidates::HLT") && mu04->pt() > m_trigpt) ||
864     (mu05 != NULL && mu05->collection() == std::string("hltL3MuonCandidates::HLT") && mu05->pt() > m_trigpt) ||
865     (mu06 != NULL && mu06->collection() == std::string("hltL3MuonCandidates::HLT") && mu06->pt() > m_trigpt) ||
866     (mu07 != NULL && mu07->collection() == std::string("hltL3MuonCandidates::HLT") && mu07->pt() > m_trigpt) ||
867     (mu08 != NULL && mu08->collection() == std::string("hltL3MuonCandidates::HLT") && mu08->pt() > m_trigpt) ||
868     (mu09 != NULL && mu09->collection() == std::string("hltL3MuonCandidates::HLT") && mu09->pt() > m_trigpt) ||
869     (mu10 != NULL && mu10->collection() == std::string("hltL3MuonCandidates::HLT") && mu10->pt() > m_trigpt) ||
870     (mu11 != NULL && mu11->collection() == std::string("hltL3MuonCandidates::HLT") && mu11->pt() > m_trigpt) ||
871     (mu12 != NULL && mu12->collection() == std::string("hltL3MuonCandidates::HLT") && mu12->pt() > m_trigpt) ||
872     (mu13 != NULL && mu13->collection() == std::string("hltL3MuonCandidates::HLT") && mu13->pt() > m_trigpt) ||
873     (mu14 != NULL && mu14->collection() == std::string("hltL3MuonCandidates::HLT") && mu14->pt() > m_trigpt))
874     hightrigmuons.push_back(muon);
875     }
876     }
877     if (m_dataset == "DoubleMu") {
878     if (muon->pt() > m_trigpt && fabs(muon->eta()) < 0.9) {
879     //if (muon->pt() > m_trigpt) {
880     const pat::TriggerObjectStandAlone *mu01 = muon->triggerObjectMatchByPath("HLT_DoubleMu6_v1");
881     const pat::TriggerObjectStandAlone *mu02 = muon->triggerObjectMatchByPath("HLT_DoubleMu7_v1");
882     const pat::TriggerObjectStandAlone *mu03 = muon->triggerObjectMatchByPath("HLT_DoubleMu7_v2");
883 pakhotin 1.27 const pat::TriggerObjectStandAlone *mu04 = muon->triggerObjectMatchByPath("HLT_Mu13_Mu8_v22");
884     const pat::TriggerObjectStandAlone *mu05 = muon->triggerObjectMatchByPath("HLT_Mu13_Mu8_v21");
885     const pat::TriggerObjectStandAlone *mu06 = muon->triggerObjectMatchByPath("HLT_Mu13_Mu8_v19");
886     const pat::TriggerObjectStandAlone *mu07 = muon->triggerObjectMatchByPath("HLT_Mu13_Mu8_v18");
887     const pat::TriggerObjectStandAlone *mu08 = muon->triggerObjectMatchByPath("HLT_Mu13_Mu8_v17");
888     const pat::TriggerObjectStandAlone *mu09 = muon->triggerObjectMatchByPath("HLT_Mu13_Mu8_v16");
889     const pat::TriggerObjectStandAlone *mu10 = muon->triggerObjectMatchByPath("HLT_Mu17_Mu8_v22");
890     const pat::TriggerObjectStandAlone *mu11 = muon->triggerObjectMatchByPath("HLT_Mu17_Mu8_v21");
891     const pat::TriggerObjectStandAlone *mu12 = muon->triggerObjectMatchByPath("HLT_Mu17_Mu8_v19");
892     const pat::TriggerObjectStandAlone *mu13 = muon->triggerObjectMatchByPath("HLT_Mu17_Mu8_v18");
893     const pat::TriggerObjectStandAlone *mu14 = muon->triggerObjectMatchByPath("HLT_Mu17_Mu8_v17");
894     const pat::TriggerObjectStandAlone *mu15 = muon->triggerObjectMatchByPath("HLT_Mu17_Mu8_v16");
895 aysen 1.24
896     if ((mu01 != NULL && mu01->collection() == std::string("hltL3MuonCandidates::HLT") && mu01->pt() > m_trigpt) ||
897     (mu02 != NULL && mu02->collection() == std::string("hltL3MuonCandidates::HLT") && mu02->pt() > m_trigpt) ||
898     (mu03 != NULL && mu03->collection() == std::string("hltL3MuonCandidates::HLT") && mu03->pt() > m_trigpt) ||
899     (mu04 != NULL && mu04->collection() == std::string("hltL3MuonCandidates::HLT") && mu04->pt() > m_trigpt) ||
900     (mu05 != NULL && mu05->collection() == std::string("hltL3MuonCandidates::HLT") && mu05->pt() > m_trigpt) ||
901     (mu06 != NULL && mu06->collection() == std::string("hltL3MuonCandidates::HLT") && mu06->pt() > m_trigpt) ||
902     (mu07 != NULL && mu07->collection() == std::string("hltL3MuonCandidates::HLT") && mu07->pt() > m_trigpt) ||
903     (mu08 != NULL && mu08->collection() == std::string("hltL3MuonCandidates::HLT") && mu08->pt() > m_trigpt) ||
904     (mu09 != NULL && mu09->collection() == std::string("hltL3MuonCandidates::HLT") && mu09->pt() > m_trigpt) ||
905     (mu10 != NULL && mu10->collection() == std::string("hltL3MuonCandidates::HLT") && mu10->pt() > m_trigpt) ||
906     (mu11 != NULL && mu11->collection() == std::string("hltL3MuonCandidates::HLT") && mu11->pt() > m_trigpt) ||
907     (mu12 != NULL && mu12->collection() == std::string("hltL3MuonCandidates::HLT") && mu12->pt() > m_trigpt) ||
908     (mu13 != NULL && mu13->collection() == std::string("hltL3MuonCandidates::HLT") && mu13->pt() > m_trigpt) ||
909     (mu14 != NULL && mu14->collection() == std::string("hltL3MuonCandidates::HLT") && mu14->pt() > m_trigpt) ||
910     (mu15 != NULL && mu15->collection() == std::string("hltL3MuonCandidates::HLT") && mu15->pt() > m_trigpt))
911     hightrigmuons.push_back(muon);
912     }
913     //if (muon->pt() > 8. && fabs(muon->eta()) < 0.9) {
914     if (muon->pt() > 8.) {
915 pakhotin 1.27 const pat::TriggerObjectStandAlone *mu01 = muon->triggerObjectMatchByPath("HLT_Mu17_Mu8_v22");
916     const pat::TriggerObjectStandAlone *mu02 = muon->triggerObjectMatchByPath("HLT_Mu17_Mu8_v21");
917     const pat::TriggerObjectStandAlone *mu03 = muon->triggerObjectMatchByPath("HLT_Mu17_Mu8_v19");
918     const pat::TriggerObjectStandAlone *mu04 = muon->triggerObjectMatchByPath("HLT_Mu17_Mu8_v18");
919     const pat::TriggerObjectStandAlone *mu05 = muon->triggerObjectMatchByPath("HLT_Mu17_Mu8_v17");
920     const pat::TriggerObjectStandAlone *mu06 = muon->triggerObjectMatchByPath("HLT_Mu17_Mu8_v16");
921     // const pat::TriggerObjectStandAlone *mu07 = muon->triggerObjectMatchByPath("HLT_Mu17_Mu8_v11");
922 aysen 1.24
923     if ((mu01 != NULL && mu01->collection() == std::string("hltL3MuonCandidates::HLT") && mu01->pt() > 8.) ||
924     (mu02 != NULL && mu02->collection() == std::string("hltL3MuonCandidates::HLT") && mu02->pt() > 8.) ||
925     (mu03 != NULL && mu03->collection() == std::string("hltL3MuonCandidates::HLT") && mu03->pt() > 8.) ||
926     (mu04 != NULL && mu04->collection() == std::string("hltL3MuonCandidates::HLT") && mu04->pt() > 8.) ||
927     (mu05 != NULL && mu05->collection() == std::string("hltL3MuonCandidates::HLT") && mu05->pt() > 8.) ||
928 pakhotin 1.27 (mu06 != NULL && mu06->collection() == std::string("hltL3MuonCandidates::HLT") && mu06->pt() > 8.)
929     // || (mu07 != NULL && mu07->collection() == std::string("hltL3MuonCandidates::HLT") && mu07->pt() > 8.)
930     )
931 aysen 1.24 lowtrigmuons.push_back(muon);
932     }
933     }
934     }
935 pivarski 1.3 }
936 pivarski 1.1
937     // // all tracker-tracks
938     // edm::Handle<reco::TrackCollection> tracks;
939     // iEvent.getByLabel("generalTracks", tracks);
940    
941     // // generator-level 4-vectors
942     // edm::Handle<reco::GenParticleCollection> genParticles;
943     // iEvent.getByLabel("genParticles", genParticles);
944    
945     // find the closest primary vertex (in Z) to the first muJet with a valid vertex
946     edm::Handle<reco::VertexCollection> primaryVertices;
947     iEvent.getByLabel("offlinePrimaryVertices", primaryVertices);
948     reco::VertexCollection::const_iterator closestPrimaryVertex = primaryVertices->end();
949     if (muJets->size() > 0) {
950     pat::MultiMuonCollection::const_iterator muJet0 = muJets->end();
951     for (pat::MultiMuonCollection::const_iterator muJet = muJets->begin(); muJet != muJets->end(); ++muJet) {
952     if (muJet->vertexValid()) {
953     muJet0 = muJet;
954     break;
955     }
956     }
957    
958     if (muJet0 != muJets->end()) {
959     for (reco::VertexCollection::const_iterator vertex = primaryVertices->begin(); vertex != primaryVertices->end(); ++vertex) {
960     if (vertex->isValid() && !vertex->isFake() && vertex->tracksSize() > 3 && fabs(vertex->z()) < 24.) {
961     if (closestPrimaryVertex == primaryVertices->end() || fabs(vertex->z() - muJet0->vertexPoint().z()) < fabs(closestPrimaryVertex->z() - muJet0->vertexPoint().z())) {
962     closestPrimaryVertex = vertex;
963     }
964     } // end vertex quality cuts
965     } // end loop over primary vertices
966     } // end if muJet0 exists
967     } // end if muJets->size > 0
968    
969 aysen 1.23 //m_primaryverticessize = primaryVertices->size();
970     m_primaryverticessize = 0;
971    
972     for (reco::VertexCollection::const_iterator vertex = primaryVertices->begin(); vertex != primaryVertices->end(); ++vertex) {
973     if (vertex->isValid() && !vertex->isFake() && vertex->tracksSize() > 3 && fabs(vertex->z()) < 24.) {
974     m_primaryverticessize++;
975     }
976     }
977    
978     m_generaltrackssize = tracks->size();
979     m_maxtrackspervtx = 0;
980    
981     for (reco::VertexCollection::const_iterator vertex = primaryVertices->begin(); vertex != primaryVertices->end(); ++vertex) {
982     if (vertex->isValid() && fabs(vertex->z()) < 24.) {
983     if (int(vertex->tracksSize()) > m_maxtrackspervtx) m_maxtrackspervtx = int(vertex->tracksSize());
984     }
985     }
986    
987 pivarski 1.1 // find out which trigger bits were fired
988     edm::Handle<pat::TriggerEvent> triggerEvent;
989     iEvent.getByLabel("patTriggerEvent", triggerEvent);
990     m_trigger = 0;
991 aysen 1.24 m_triggerIsoMu = 0;
992     m_triggerMu = 0;
993    
994     if (m_dataset == "DoubleMu") {
995     if (triggerEvent->path("HLT_DoubleMu6_v1") && triggerEvent->path("HLT_DoubleMu6_v1")->wasAccept()) m_trigger += 1;
996     if (triggerEvent->path("HLT_DoubleMu7_v1") && triggerEvent->path("HLT_DoubleMu7_v1")->wasAccept()) m_trigger += 2;
997     if (triggerEvent->path("HLT_DoubleMu7_v2") && triggerEvent->path("HLT_DoubleMu7_v2")->wasAccept()) m_trigger += 2;
998     if (triggerEvent->path("HLT_Mu13_Mu8_v2") && triggerEvent->path("HLT_Mu13_Mu8_v2")->wasAccept()) m_trigger += 4;
999     if (triggerEvent->path("HLT_Mu13_Mu8_v3") && triggerEvent->path("HLT_Mu13_Mu8_v3")->wasAccept()) m_trigger += 4;
1000     if (triggerEvent->path("HLT_Mu13_Mu8_v4") && triggerEvent->path("HLT_Mu13_Mu8_v4")->wasAccept()) m_trigger += 4;
1001     if (triggerEvent->path("HLT_Mu13_Mu8_v6") && triggerEvent->path("HLT_Mu13_Mu8_v6")->wasAccept()) m_trigger += 4;
1002     if (triggerEvent->path("HLT_Mu13_Mu8_v7") && triggerEvent->path("HLT_Mu13_Mu8_v7")->wasAccept()) m_trigger += 4;
1003     if (triggerEvent->path("HLT_Mu17_Mu8_v2") && triggerEvent->path("HLT_Mu17_Mu8_v2")->wasAccept()) m_trigger += 8;
1004     if (triggerEvent->path("HLT_Mu17_Mu8_v3") && triggerEvent->path("HLT_Mu17_Mu8_v3")->wasAccept()) m_trigger += 8;
1005     if (triggerEvent->path("HLT_Mu17_Mu8_v4") && triggerEvent->path("HLT_Mu17_Mu8_v4")->wasAccept()) m_trigger += 8;
1006     if (triggerEvent->path("HLT_Mu17_Mu8_v6") && triggerEvent->path("HLT_Mu17_Mu8_v6")->wasAccept()) m_trigger += 8;
1007     if (triggerEvent->path("HLT_Mu17_Mu8_v7") && triggerEvent->path("HLT_Mu17_Mu8_v7")->wasAccept()) m_trigger += 8;
1008     if (triggerEvent->path("HLT_Mu17_Mu8_v10") && triggerEvent->path("HLT_Mu17_Mu8_v10")->wasAccept()) m_trigger += 8;
1009     if (triggerEvent->path("HLT_Mu17_Mu8_v11") && triggerEvent->path("HLT_Mu17_Mu8_v11")->wasAccept()) m_trigger += 8;
1010     }
1011     if (m_dataset == "SingleMu") {
1012     if (triggerEvent->path("HLT_Mu15_v2") && triggerEvent->path("HLT_Mu15_v2")->wasAccept()) m_trigger += 1;
1013     if (triggerEvent->path("HLT_Mu20_v1") && triggerEvent->path("HLT_Mu20_v1")->wasAccept()) m_trigger += 2;
1014     if (triggerEvent->path("HLT_Mu24_v1") && triggerEvent->path("HLT_Mu24_v1")->wasAccept()) m_trigger += 4;
1015     if (triggerEvent->path("HLT_Mu24_v2") && triggerEvent->path("HLT_Mu24_v2")->wasAccept()) m_trigger += 4;
1016     if (triggerEvent->path("HLT_Mu30_v1") && triggerEvent->path("HLT_Mu30_v1")->wasAccept()) m_trigger += 8;
1017     if (triggerEvent->path("HLT_Mu30_v2") && triggerEvent->path("HLT_Mu30_v2")->wasAccept()) m_trigger += 8;
1018     if (triggerEvent->path("HLT_Mu30_v3") && triggerEvent->path("HLT_Mu30_v3")->wasAccept()) m_trigger += 8;
1019     if (triggerEvent->path("HLT_Mu40_v1") && triggerEvent->path("HLT_Mu40_v1")->wasAccept()) m_trigger += 16;
1020     if (triggerEvent->path("HLT_Mu40_v2") && triggerEvent->path("HLT_Mu40_v2")->wasAccept()) m_trigger += 16;
1021     if (triggerEvent->path("HLT_Mu40_v3") && triggerEvent->path("HLT_Mu40_v3")->wasAccept()) m_trigger += 16;
1022     if (triggerEvent->path("HLT_Mu40_v5") && triggerEvent->path("HLT_Mu40_v5")->wasAccept()) m_trigger += 16;
1023     if (triggerEvent->path("HLT_Mu40_eta2p1_v1") && triggerEvent->path("HLT_Mu40_eta2p1_v1")->wasAccept()) m_trigger += 16;
1024     if (triggerEvent->path("HLT_Mu40_eta2p1_v4") && triggerEvent->path("HLT_Mu40_eta2p1_v4")->wasAccept()) m_trigger += 16;
1025     if (triggerEvent->path("HLT_Mu40_eta2p1_v5") && triggerEvent->path("HLT_Mu40_eta2p1_v5")->wasAccept()) m_trigger += 16;
1026     }
1027    
1028    
1029 pivarski 1.10
1030 aysen 1.23 m_trigger15 = 0;
1031     m_trigger20 = 0;
1032     m_trigger24 = 0;
1033     m_trigger30 = 0;
1034     m_trigger40 = 0;
1035     m_trigger40eta = 0;
1036    
1037     if (triggerEvent->path("HLT_Mu15_v2") && triggerEvent->path("HLT_Mu15_v2")->wasAccept()) m_trigger15 = 1;
1038     if (triggerEvent->path("HLT_Mu20_v1") && triggerEvent->path("HLT_Mu20_v1")->wasAccept()) m_trigger20 = 1;
1039     if (triggerEvent->path("HLT_Mu24_v2") && triggerEvent->path("HLT_Mu24_v2")->wasAccept()) m_trigger24 = 1;
1040     if (triggerEvent->path("HLT_Mu30_v3") && triggerEvent->path("HLT_Mu30_v3")->wasAccept()) m_trigger30 = 1;
1041     if (triggerEvent->path("HLT_Mu40_v1") && triggerEvent->path("HLT_Mu40_v1")->wasAccept()) m_trigger40 = 1;
1042     if (triggerEvent->path("HLT_Mu40_v2") && triggerEvent->path("HLT_Mu40_v2")->wasAccept()) m_trigger40 = 1;
1043     if (triggerEvent->path("HLT_Mu40_v3") && triggerEvent->path("HLT_Mu40_v3")->wasAccept()) m_trigger40 = 1;
1044     if (triggerEvent->path("HLT_Mu40_v5") && triggerEvent->path("HLT_Mu40_v5")->wasAccept()) m_trigger40 = 1;
1045     if (triggerEvent->path("HLT_Mu40_eta2p1_v1") && triggerEvent->path("HLT_Mu40_eta2p1_v1")->wasAccept()) m_trigger40eta = 1;
1046     if (triggerEvent->path("HLT_Mu40_eta2p1_v4") && triggerEvent->path("HLT_Mu40_eta2p1_v4")->wasAccept()) m_trigger40eta = 1;
1047     if (triggerEvent->path("HLT_Mu40_eta2p1_v5") && triggerEvent->path("HLT_Mu40_eta2p1_v5")->wasAccept()) m_trigger40eta = 1;
1048    
1049 aysen 1.24 ////////////////////////////////////////////////////////// lowdimuon and highdimuon:
1050    
1051     //if (muJets->size() == 1 && (*muJets)[0].numberOfDaughters() == 2 && orphans->size() == 0 && m_trigger > 0) {
1052     if (muJets->size() == 1 && (*muJets)[0].numberOfDaughters() == 2 && orphans->size() == 0) {
1053     pat::MultiMuonCollection::const_iterator muJet = muJets->begin();
1054 pivarski 1.10
1055 aysen 1.24 m_lowdimuon_trigpt1 = -20;
1056     m_lowdimuon_trigeta1 = -20;
1057     m_lowdimuon_trigpt2 = -20;
1058     m_lowdimuon_trigeta2 = -20;
1059 pivarski 1.10
1060 aysen 1.24 m_lowdimuon_containstrig = 0;
1061     m_lowdimuon_containstrig2 = 0;
1062 pivarski 1.10
1063 aysen 1.24 for (std::vector<pat::MuonCollection::const_iterator>::const_iterator iter = lowtrigmuons.begin(); iter != lowtrigmuons.end(); ++iter) {
1064     if (muJet->muon(0)->innerTrack().isAvailable() && (*iter)->innerTrack().isAvailable() &&
1065     muJet->sameTrack(&*(muJet->muon(0)->innerTrack()), &*((*iter)->innerTrack()))) {
1066     m_lowdimuon_containstrig2++;
1067     }
1068     if (muJet->muon(1)->innerTrack().isAvailable() && (*iter)->innerTrack().isAvailable() &&
1069     muJet->sameTrack(&*(muJet->muon(1)->innerTrack()), &*((*iter)->innerTrack()))) {
1070     m_lowdimuon_containstrig2++;
1071     }
1072 pivarski 1.10 }
1073    
1074 aysen 1.24 for (std::vector<pat::MuonCollection::const_iterator>::const_iterator iter = hightrigmuons.begin(); iter != hightrigmuons.end(); ++iter) {
1075 pivarski 1.10 if (muJet->muon(0)->innerTrack().isAvailable() && (*iter)->innerTrack().isAvailable() &&
1076     muJet->sameTrack(&*(muJet->muon(0)->innerTrack()), &*((*iter)->innerTrack()))) {
1077 aysen 1.24 m_lowdimuon_containstrig++;
1078     if (m_lowdimuon_containstrig2 == 2) {
1079     m_lowdimuon_trigpt1 = muJet->muon(0)->pt();
1080     m_lowdimuon_trigeta1 = muJet->muon(0)->eta();
1081     m_lowdimuon_trigpt2 = muJet->muon(1)->pt();
1082     m_lowdimuon_trigeta2 = muJet->muon(1)->eta();
1083     }
1084 pivarski 1.10 }
1085     if (muJet->muon(1)->innerTrack().isAvailable() && (*iter)->innerTrack().isAvailable() &&
1086     muJet->sameTrack(&*(muJet->muon(1)->innerTrack()), &*((*iter)->innerTrack()))) {
1087 aysen 1.24 m_lowdimuon_containstrig++;
1088     if (m_lowdimuon_containstrig2 == 2) {
1089     m_lowdimuon_trigpt1 = muJet->muon(1)->pt();
1090     m_lowdimuon_trigeta1 = muJet->muon(1)->eta();
1091     m_lowdimuon_trigpt2 = muJet->muon(0)->pt();
1092     m_lowdimuon_trigeta2 = muJet->muon(0)->eta();
1093     }
1094 pivarski 1.10 }
1095     }
1096    
1097 pivarski 1.1 // generator-level mass using matched genParticles (for resolution of fit peak)
1098     m_lowdimuon_genmass = -1000.;
1099 pivarski 1.5 if (muJet->muon(0)->genParticlesSize() == 1 && muJet->muon(1)->genParticlesSize() == 1) {
1100 pivarski 1.4 const reco::GenParticle *mu0 = muJet->muon(0)->genParticle();
1101     const reco::GenParticle *mu1 = muJet->muon(1)->genParticle();
1102 pivarski 1.1
1103     double total_energy = mu0->energy() + mu1->energy();
1104     double total_px = mu0->px() + mu1->px();
1105     double total_py = mu0->py() + mu1->py();
1106     double total_pz = mu0->pz() + mu1->pz();
1107     m_lowdimuon_genmass = sqrt(total_energy*total_energy - total_px*total_px - total_py*total_py - total_pz*total_pz);
1108     }
1109    
1110     m_lowdimuon_mass = muJet->mass();
1111 aysen 1.23 m_lowdimuon_corr_mass = -1;
1112     m_lowdimuon_recomass = muJet->mass();
1113 pivarski 1.1 m_lowdimuon_pt = muJet->pt();
1114     m_lowdimuon_eta = muJet->eta();
1115     m_lowdimuon_phi = muJet->phi();
1116     m_lowdimuon_dr = muJet->dRmax();
1117 pivarski 1.3 if (muJet->daughter(0)->charge() > 0) {
1118     m_lowdimuon_pluspx = muJet->daughter(0)->px();
1119     m_lowdimuon_pluspy = muJet->daughter(0)->py();
1120     m_lowdimuon_pluspz = muJet->daughter(0)->pz();
1121     m_lowdimuon_minuspx = muJet->daughter(1)->px();
1122     m_lowdimuon_minuspy = muJet->daughter(1)->py();
1123     m_lowdimuon_minuspz = muJet->daughter(1)->pz();
1124     }
1125     else {
1126     m_lowdimuon_pluspx = muJet->daughter(1)->px();
1127     m_lowdimuon_pluspy = muJet->daughter(1)->py();
1128     m_lowdimuon_pluspz = muJet->daughter(1)->pz();
1129     m_lowdimuon_minuspx = muJet->daughter(0)->px();
1130     m_lowdimuon_minuspy = muJet->daughter(0)->py();
1131     m_lowdimuon_minuspz = muJet->daughter(0)->pz();
1132     }
1133 pivarski 1.1 m_lowdimuon_vprob = -1000.;
1134 aysen 1.23 m_lowdimuon_vnchi2 = -1000.;
1135 pivarski 1.1 m_lowdimuon_vx = -1000.;
1136     m_lowdimuon_vy = -1000.;
1137     m_lowdimuon_vz = -1000.;
1138    
1139 aysen 1.23 m_lowdimuon_lxy = -1000.;
1140 aysen 1.22
1141 pivarski 1.2 // replace all values with vertex-updated values if vertex fitting succeeded
1142 pivarski 1.1 if (muJet->vertexValid()) {
1143     m_lowdimuon_mass = muJet->vertexMass();
1144 aysen 1.23 m_lowdimuon_corr_mass = muJet->vertexMass();
1145 pivarski 1.1 m_lowdimuon_pt = muJet->vertexMomentum().perp();
1146     m_lowdimuon_eta = muJet->vertexMomentum().eta();
1147     m_lowdimuon_phi = muJet->vertexMomentum().phi();
1148     m_lowdimuon_dr = muJet->dRmax(true);
1149 pivarski 1.3 if (muJet->daughter(0)->charge() > 0) {
1150     m_lowdimuon_pluspx = muJet->vertexMomentum(0).x();
1151     m_lowdimuon_pluspy = muJet->vertexMomentum(0).y();
1152     m_lowdimuon_pluspz = muJet->vertexMomentum(0).z();
1153     m_lowdimuon_minuspx = muJet->vertexMomentum(1).x();
1154     m_lowdimuon_minuspy = muJet->vertexMomentum(1).y();
1155     m_lowdimuon_minuspz = muJet->vertexMomentum(1).z();
1156     }
1157     else {
1158     m_lowdimuon_pluspx = muJet->vertexMomentum(1).x();
1159     m_lowdimuon_pluspy = muJet->vertexMomentum(1).y();
1160     m_lowdimuon_pluspz = muJet->vertexMomentum(1).z();
1161     m_lowdimuon_minuspx = muJet->vertexMomentum(0).x();
1162     m_lowdimuon_minuspy = muJet->vertexMomentum(0).y();
1163     m_lowdimuon_minuspz = muJet->vertexMomentum(0).z();
1164     }
1165 pivarski 1.1 m_lowdimuon_vprob = muJet->vertexProb();
1166 aysen 1.23 m_lowdimuon_vnchi2 = muJet->vertexNormalizedChi2();
1167 pivarski 1.1
1168     if (closestPrimaryVertex != primaryVertices->end()) {
1169     m_lowdimuon_vx = muJet->vertexPoint().x() - closestPrimaryVertex->x();
1170     m_lowdimuon_vy = muJet->vertexPoint().y() - closestPrimaryVertex->y();
1171     m_lowdimuon_vz = muJet->vertexPoint().z() - closestPrimaryVertex->z();
1172 aysen 1.23 m_lowdimuon_lxy = muJet->lxy(GlobalPoint(closestPrimaryVertex->x(), closestPrimaryVertex->y(), closestPrimaryVertex->z()));
1173 pivarski 1.1 }
1174    
1175 aysen 1.23 double scale0 = scalePt(muJet->vertexMomentum(0).perp(),muJet->vertexMomentum(0).eta(),muJet->vertexMomentum(0).phi(),muJet->muon(0)->charge());
1176     double scale1 = scalePt(muJet->vertexMomentum(1).perp(),muJet->vertexMomentum(1).eta(),muJet->vertexMomentum(1).phi(),muJet->muon(1)->charge());
1177    
1178     double e1 = pow(pow(muJet->vertexMomentum(0).perp()*scale0,2)+pow(muJet->vertexMomentum(0).z(),2)+pow(muJet->muon(0)->mass(),2),0.5);
1179     double e2 = pow(pow(muJet->vertexMomentum(1).perp()*scale1,2)+pow(muJet->vertexMomentum(1).z(),2)+pow(muJet->muon(1)->mass(),2),0.5);
1180     double e = e1 + e2;
1181    
1182     double px = muJet->vertexMomentum(0).x()*scale0 + muJet->vertexMomentum(1).x()*scale1;
1183     double py = muJet->vertexMomentum(0).y()*scale0 + muJet->vertexMomentum(1).y()*scale1;
1184     double pz = muJet->vertexMomentum(0).z() + muJet->vertexMomentum(1).z();
1185    
1186     m_lowdimuon_corr_mass = pow(e*e-px*px-py*py-pz*pz,0.5);
1187    
1188 pivarski 1.1 } // end of replacements with quantities measured at the vertex
1189    
1190     m_lowdimuon_iso = muJet->centralTrackIsolation();
1191 aysen 1.23
1192     m_lowdimuon_iso_3mm = 0;
1193     m_lowdimuon_iso_2mm = 0;
1194     m_lowdimuon_iso_1mm = 0;
1195    
1196 aysen 1.24 for (reco::TrackCollection::const_iterator track = tracks->begin(); track != tracks->end(); ++track) {
1197     bool track_is_muon = false;
1198     for (pat::MuonCollection::const_iterator muon = allmuons->begin(); muon != allmuons->end(); ++muon) {
1199     if (muJet->sameTrack(&*track,&*(muon->innerTrack()))) { track_is_muon = true; break; }
1200 aysen 1.23 }
1201 aysen 1.24 if (!track_is_muon) {
1202     double dphi = muJet->phi() - track->phi();
1203     if (dphi > M_PI) dphi -= 2.*M_PI;
1204     if (dphi < -M_PI) dphi += 2.*M_PI;
1205     double deta = muJet->eta() - track->eta();
1206     double dR = sqrt(pow(dphi, 2) + pow(deta, 2));
1207     if (dR < 0.4 && track->pt() > iso_track_pt_treshold) {
1208     double dz = fabs(track->dz(theBeamSpot->position())-muJet->dz(theBeamSpot->position()));
1209     if (dz < 0.3) m_lowdimuon_iso_3mm += track->pt();
1210     if (dz < 0.2) m_lowdimuon_iso_2mm += track->pt();
1211     if (dz < 0.1) m_lowdimuon_iso_1mm += track->pt();
1212     }
1213     }
1214     }
1215 pivarski 1.1
1216 pivarski 1.6 std::vector<reco::MuonChamberMatch> plusmatches, minusmatches;
1217     if (muJet->daughter(0)->charge() > 0) {
1218     m_lowdimuon_plusmatches = muJet->muon(0)->numberOfMatches(reco::Muon::SegmentAndTrackArbitration);
1219     m_lowdimuon_minusmatches = muJet->muon(1)->numberOfMatches(reco::Muon::SegmentAndTrackArbitration);
1220     plusmatches = muJet->muon(0)->matches();
1221     minusmatches = muJet->muon(1)->matches();
1222     m_lowdimuon_plushits = muJet->muon(0)->innerTrack()->numberOfValidHits();
1223     m_lowdimuon_minushits = muJet->muon(1)->innerTrack()->numberOfValidHits();
1224     m_lowdimuon_plusnormchi2 = muJet->muon(0)->innerTrack()->normalizedChi2();
1225     m_lowdimuon_minusnormchi2 = muJet->muon(1)->innerTrack()->normalizedChi2();
1226 aysen 1.23
1227     m_lowdimuon_plus_thits = muJet->muon(0)->innerTrack()->hitPattern().numberOfValidTrackerHits();
1228     m_lowdimuon_plus_mhits = 0;
1229     if (muJet->muon(0)->isGlobalMuon()) m_lowdimuon_plus_mhits = muJet->muon(0)->globalTrack()->hitPattern().numberOfValidMuonHits();
1230     m_lowdimuon_plus_phits = muJet->muon(0)->innerTrack()->hitPattern().numberOfValidPixelHits();
1231    
1232     m_lowdimuon_minus_thits = muJet->muon(1)->innerTrack()->hitPattern().numberOfValidTrackerHits();
1233     m_lowdimuon_minus_mhits = 0;
1234     if (muJet->muon(1)->isGlobalMuon()) m_lowdimuon_minus_mhits = muJet->muon(1)->globalTrack()->hitPattern().numberOfValidMuonHits();
1235     m_lowdimuon_minus_phits = muJet->muon(1)->innerTrack()->hitPattern().numberOfValidPixelHits();
1236    
1237    
1238     m_lowdimuon_plus_dxy = muJet->muon(0)->innerTrack()->dxy(theBeamSpot->position());
1239     m_lowdimuon_minus_dxy = muJet->muon(1)->innerTrack()->dxy(theBeamSpot->position());
1240    
1241 aysen 1.24 m_lowdimuon_plus_pt = muJet->muon(0)->pt();
1242     m_lowdimuon_minus_pt = muJet->muon(1)->pt();
1243     m_lowdimuon_plus_eta = muJet->muon(0)->eta();
1244     m_lowdimuon_minus_eta = muJet->muon(1)->eta();
1245     m_lowdimuon_plus_phi = muJet->muon(0)->phi();
1246     m_lowdimuon_minus_phi = muJet->muon(1)->phi();
1247    
1248     m_lowdimuon_Deltaphi = m_lowdimuon_plus_phi-m_lowdimuon_minus_phi;
1249     if (m_lowdimuon_Deltaphi > M_PI) m_lowdimuon_Deltaphi -= 2.*M_PI;
1250     if (m_lowdimuon_Deltaphi < -M_PI) m_lowdimuon_Deltaphi += 2.*M_PI;
1251    
1252 aysen 1.23
1253     /*
1254     for (trackingRecHit_iterator hit = muJet->muon(0)->innerTrack()->recHitsBegin(); hit != muJet->muon(0)->innerTrack()->recHitsEnd(); ++hit) {
1255     if ((*hit)->isValid()) {
1256     GlobalPoint p = tkgeom->idToDet((*hit)->geographicalId())->toGlobal((*hit)->localPosition());
1257     m_lowdimuon_plus_innerR = pow(p.x()*p.x()+p.y()*p.y(),0.5);
1258     break;
1259     }
1260     }
1261     for (trackingRecHit_iterator hit = muJet->muon(1)->innerTrack()->recHitsBegin(); hit != muJet->muon(1)->innerTrack()->recHitsEnd(); ++hit) {
1262     if ((*hit)->isValid()) {
1263     GlobalPoint p = tkgeom->idToDet((*hit)->geographicalId())->toGlobal((*hit)->localPosition());
1264     m_lowdimuon_minus_innerR = pow(p.x()*p.x()+p.y()*p.y(),0.5);
1265     break;
1266     }
1267     }
1268     */
1269    
1270 pivarski 1.6 }
1271     else {
1272     m_lowdimuon_plusmatches = muJet->muon(1)->numberOfMatches(reco::Muon::SegmentAndTrackArbitration);
1273     m_lowdimuon_minusmatches = muJet->muon(0)->numberOfMatches(reco::Muon::SegmentAndTrackArbitration);
1274     plusmatches = muJet->muon(1)->matches();
1275     minusmatches = muJet->muon(0)->matches();
1276     m_lowdimuon_plushits = muJet->muon(1)->innerTrack()->numberOfValidHits();
1277     m_lowdimuon_minushits = muJet->muon(0)->innerTrack()->numberOfValidHits();
1278     m_lowdimuon_plusnormchi2 = muJet->muon(1)->innerTrack()->normalizedChi2();
1279     m_lowdimuon_minusnormchi2 = muJet->muon(0)->innerTrack()->normalizedChi2();
1280 aysen 1.23
1281     m_lowdimuon_plus_thits = muJet->muon(1)->innerTrack()->hitPattern().numberOfValidTrackerHits();
1282     m_lowdimuon_plus_mhits = 0;
1283     if (muJet->muon(1)->isGlobalMuon()) m_lowdimuon_plus_mhits = muJet->muon(1)->globalTrack()->hitPattern().numberOfValidMuonHits();
1284     m_lowdimuon_plus_phits = muJet->muon(1)->innerTrack()->hitPattern().numberOfValidPixelHits();
1285    
1286     m_lowdimuon_minus_thits = muJet->muon(0)->innerTrack()->hitPattern().numberOfValidTrackerHits();
1287     m_lowdimuon_minus_mhits = 0;
1288     if (muJet->muon(0)->isGlobalMuon()) m_lowdimuon_minus_mhits = muJet->muon(0)->globalTrack()->hitPattern().numberOfValidMuonHits();
1289     m_lowdimuon_minus_phits = muJet->muon(0)->innerTrack()->hitPattern().numberOfValidPixelHits();
1290    
1291     m_lowdimuon_plus_dxy = muJet->muon(1)->innerTrack()->dxy(theBeamSpot->position());
1292     m_lowdimuon_minus_dxy = muJet->muon(0)->innerTrack()->dxy(theBeamSpot->position());
1293    
1294 aysen 1.24 m_lowdimuon_plus_pt = muJet->muon(1)->pt();
1295     m_lowdimuon_minus_pt = muJet->muon(0)->pt();
1296     m_lowdimuon_plus_eta = muJet->muon(1)->eta();
1297     m_lowdimuon_minus_eta = muJet->muon(0)->eta();
1298     m_lowdimuon_plus_phi = muJet->muon(1)->phi();
1299     m_lowdimuon_minus_phi = muJet->muon(0)->phi();
1300    
1301     m_lowdimuon_Deltaphi = m_lowdimuon_plus_phi-m_lowdimuon_minus_phi;
1302     if (m_lowdimuon_Deltaphi > M_PI) m_lowdimuon_Deltaphi -= 2.*M_PI;
1303     if (m_lowdimuon_Deltaphi < -M_PI) m_lowdimuon_Deltaphi += 2.*M_PI;
1304 pivarski 1.6 }
1305    
1306 aysen 1.24 /*
1307 aysen 1.23 const pat::Muon *muplus = NULL;
1308     const pat::Muon *muminus = NULL;
1309    
1310     if (muJet->muon(0)->charge() > 0) {
1311     muplus = &*muJet->muon(0);
1312     muminus = &*muJet->muon(1);
1313     }
1314     if (muJet->muon(0)->charge() < 0) {
1315     muplus = &*muJet->muon(1);
1316     muminus = &*muJet->muon(0);
1317     }
1318    
1319     FreeTrajectoryState plus_initial(GlobalPoint(muplus->vx(), muplus->vy(), muplus->vz()), GlobalVector(muplus->px(), muplus->py(), muplus->pz()), 1, &*magneticField);
1320     FreeTrajectoryState minus_initial(GlobalPoint(muminus->vx(), muminus->vy(), muminus->vz()), GlobalVector(muminus->px(), muminus->py(), muminus->pz()), -1, &*magneticField);
1321    
1322     if (fabs(m_lowdimuon_eta) < 0.9) {
1323     TrajectoryStateOnSurface plus_final = propagator->propagate(plus_initial, *m_cylinder100);
1324     TrajectoryStateOnSurface minus_final = propagator->propagate(minus_initial, *m_cylinder100);
1325     if (plus_final.isValid() && minus_final.isValid()) {
1326     double dphi = plus_final.globalPosition().phi() - minus_final.globalPosition().phi();
1327     while (dphi > M_PI) dphi -= 2.*M_PI;
1328     while (dphi < -M_PI) dphi += 2.*M_PI;
1329     m_lowdimuon_dphi100 = dphi;
1330     }
1331     plus_final = propagator->propagate(plus_initial, *m_cylinder200);
1332     minus_final = propagator->propagate(minus_initial, *m_cylinder200);
1333     if (plus_final.isValid() && minus_final.isValid()) {
1334     double dphi = plus_final.globalPosition().phi() - minus_final.globalPosition().phi();
1335     while (dphi > M_PI) dphi -= 2.*M_PI;
1336     while (dphi < -M_PI) dphi += 2.*M_PI;
1337     m_lowdimuon_dphi200 = dphi;
1338     }
1339     plus_final = propagator->propagate(plus_initial, *m_cylinder300);
1340     minus_final = propagator->propagate(minus_initial, *m_cylinder300);
1341     if (plus_final.isValid() && minus_final.isValid()) {
1342     double dphi = plus_final.globalPosition().phi() - minus_final.globalPosition().phi();
1343     while (dphi > M_PI) dphi -= 2.*M_PI;
1344     while (dphi < -M_PI) dphi += 2.*M_PI;
1345     m_lowdimuon_dphi300 = dphi;
1346     }
1347     plus_final = propagator->propagate(plus_initial, *m_cylinder425);
1348     minus_final = propagator->propagate(minus_initial, *m_cylinder425);
1349     if (plus_final.isValid() && minus_final.isValid()) {
1350     double dphi = plus_final.globalPosition().phi() - minus_final.globalPosition().phi();
1351     while (dphi > M_PI) dphi -= 2.*M_PI;
1352     while (dphi < -M_PI) dphi += 2.*M_PI;
1353     m_lowdimuon_dphi425 = dphi;
1354     }
1355     plus_final = propagator->propagate(plus_initial, *m_cylinder470);
1356     minus_final = propagator->propagate(minus_initial, *m_cylinder470);
1357     if (plus_final.isValid() && minus_final.isValid()) {
1358     double dphi = plus_final.globalPosition().phi() - minus_final.globalPosition().phi();
1359     while (dphi > M_PI) dphi -= 2.*M_PI;
1360     while (dphi < -M_PI) dphi += 2.*M_PI;
1361     m_lowdimuon_dphi470 = dphi;
1362     }
1363     plus_final = propagator->propagate(plus_initial, *m_cylinder510);
1364     minus_final = propagator->propagate(minus_initial, *m_cylinder510);
1365     if (plus_final.isValid() && minus_final.isValid()) {
1366     double dphi = plus_final.globalPosition().phi() - minus_final.globalPosition().phi();
1367     while (dphi > M_PI) dphi -= 2.*M_PI;
1368     while (dphi < -M_PI) dphi += 2.*M_PI;
1369     m_lowdimuon_dphi510 = dphi;
1370     }
1371     plus_final = propagator->propagate(plus_initial, *m_cylinder565);
1372     minus_final = propagator->propagate(minus_initial, *m_cylinder565);
1373     if (plus_final.isValid() && minus_final.isValid()) {
1374     double dphi = plus_final.globalPosition().phi() - minus_final.globalPosition().phi();
1375     while (dphi > M_PI) dphi -= 2.*M_PI;
1376     while (dphi < -M_PI) dphi += 2.*M_PI;
1377     m_lowdimuon_dphi565 = dphi;
1378     }
1379     plus_final = propagator->propagate(plus_initial, *m_cylinder620);
1380     minus_final = propagator->propagate(minus_initial, *m_cylinder620);
1381     if (plus_final.isValid() && minus_final.isValid()) {
1382     double dphi = plus_final.globalPosition().phi() - minus_final.globalPosition().phi();
1383     while (dphi > M_PI) dphi -= 2.*M_PI;
1384     while (dphi < -M_PI) dphi += 2.*M_PI;
1385     m_lowdimuon_dphi620 = dphi;
1386     }
1387     plus_final = propagator->propagate(plus_initial, *m_cylinder670);
1388     minus_final = propagator->propagate(minus_initial, *m_cylinder670);
1389     if (plus_final.isValid() && minus_final.isValid()) {
1390     double dphi = plus_final.globalPosition().phi() - minus_final.globalPosition().phi();
1391     while (dphi > M_PI) dphi -= 2.*M_PI;
1392     while (dphi < -M_PI) dphi += 2.*M_PI;
1393     m_lowdimuon_dphi670 = dphi;
1394     }
1395     plus_final = propagator->propagate(plus_initial, *m_cylinder720);
1396     minus_final = propagator->propagate(minus_initial, *m_cylinder720);
1397     if (plus_final.isValid() && minus_final.isValid()) {
1398     double dphi = plus_final.globalPosition().phi() - minus_final.globalPosition().phi();
1399     while (dphi > M_PI) dphi -= 2.*M_PI;
1400     while (dphi < -M_PI) dphi += 2.*M_PI;
1401     m_lowdimuon_dphi720 = dphi;
1402     }
1403     plus_final = propagator->propagate(plus_initial, *m_cylinder800);
1404     minus_final = propagator->propagate(minus_initial, *m_cylinder800);
1405     if (plus_final.isValid() && minus_final.isValid()) {
1406     double dphi = plus_final.globalPosition().phi() - minus_final.globalPosition().phi();
1407     while (dphi > M_PI) dphi -= 2.*M_PI;
1408     while (dphi < -M_PI) dphi += 2.*M_PI;
1409     m_lowdimuon_dphi800 = dphi;
1410     }
1411     plus_final = propagator->propagate(plus_initial, *m_cylinder900);
1412     minus_final = propagator->propagate(minus_initial, *m_cylinder900);
1413     if (plus_final.isValid() && minus_final.isValid()) {
1414     double dphi = plus_final.globalPosition().phi() - minus_final.globalPosition().phi();
1415     while (dphi > M_PI) dphi -= 2.*M_PI;
1416     while (dphi < -M_PI) dphi += 2.*M_PI;
1417     m_lowdimuon_dphi900 = dphi;
1418     }
1419     }
1420 aysen 1.24 */
1421 aysen 1.23
1422 aysen 1.22 m_lowdimuon_bbbarlike = -1;
1423     if (m_lowdimuon_iso > 4.5 || m_lowdimuon_lxy > 0.2) m_lowdimuon_bbbarlike = 1;
1424     if (m_lowdimuon_iso < 4.5 && m_lowdimuon_lxy < 0.2) m_lowdimuon_bbbarlike = 0;
1425    
1426 aysen 1.23 m_lowdimuon_dz = muJet->dz(theBeamSpot->position());
1427 pivarski 1.18
1428 pakhotin 1.27
1429    
1430     if (m_lowdimuon_containstrig > 0 && m_lowdimuon_containstrig2 > 1) {
1431     m_lowdimuon->Fill();
1432     }
1433 pivarski 1.1 }
1434    
1435 pivarski 1.8 ////////////////////////////////////////////////////////// dimuorphan
1436 aysen 1.24
1437     if (muJets->size() == 1 && (*muJets)[0].numberOfDaughters() == 2 && orphans->size() == 1 && m_trigger > 0) {
1438     //if (muJets->size() == 1 && (*muJets)[0].numberOfDaughters() == 2 && orphans->size() == 1) {
1439 pivarski 1.8 pat::MultiMuonCollection::const_iterator muJet = muJets->begin();
1440     pat::MuonCollection::const_iterator orphan = orphans->begin();
1441    
1442     m_dimuorphan_deltaphi = muJet->phi() - orphan->phi();
1443     while (m_dimuorphan_deltaphi > M_PI) m_dimuorphan_deltaphi -= 2.*M_PI;
1444     while (m_dimuorphan_deltaphi < -M_PI) m_dimuorphan_deltaphi += 2.*M_PI;
1445    
1446 aysen 1.23 double deta = orphan->innerTrack()->eta() - muJet->muon(0)->innerTrack()->eta();
1447     double dphi = orphan->innerTrack()->phi() - muJet->muon(0)->innerTrack()->phi();
1448     if (dphi > M_PI) dphi -= 2.*M_PI;
1449     if (dphi < -M_PI) dphi += 2.*M_PI;
1450     m_dimuorphan_dr1 = pow(dphi*dphi+deta*deta,0.5);
1451    
1452     deta = orphan->innerTrack()->eta() - muJet->muon(1)->innerTrack()->eta();
1453     dphi = orphan->innerTrack()->phi() - muJet->muon(1)->innerTrack()->phi();
1454     if (dphi > M_PI) dphi -= 2.*M_PI;
1455     if (dphi < -M_PI) dphi += 2.*M_PI;
1456     m_dimuorphan_dr2 = pow(dphi*dphi+deta*deta,0.5);
1457    
1458 pivarski 1.8 m_dimuorphan_orphanpt = orphan->pt();
1459     m_dimuorphan_orphaneta = orphan->eta();
1460     m_dimuorphan_orphanphi = orphan->phi();
1461 pivarski 1.9 m_dimuorphan_orphanisglobal = (orphan->isGlobalMuon() ? 1 : 0);
1462     m_dimuorphan_orphanmatches = orphan->numberOfMatches(reco::Muon::SegmentAndTrackArbitration);
1463 aysen 1.24 m_dimuorphan_stationmask = orphan->stationMask();
1464 pivarski 1.9 m_dimuorphan_orphanhits = (orphan->innerTrack().isAvailable() ? orphan->innerTrack()->numberOfValidHits(): -1);
1465     m_dimuorphan_orphanchi2 = (orphan->innerTrack().isAvailable() ? orphan->innerTrack()->normalizedChi2(): -1.);
1466 aysen 1.24
1467     m_dimuorphan_trigpt1 = -20;
1468     m_dimuorphan_trigeta1 = -20;
1469     m_dimuorphan_trigpt2 = -20;
1470     m_dimuorphan_trigeta2 = -20;
1471 pivarski 1.8
1472 pivarski 1.10 m_dimuorphan_containstrig = 0;
1473 aysen 1.24 m_dimuorphan_containstrig2 = 0;
1474    
1475     for (std::vector<pat::MuonCollection::const_iterator>::const_iterator iter = hightrigmuons.begin(); iter != hightrigmuons.end(); ++iter) {
1476 pivarski 1.10 if (orphan->innerTrack().isAvailable() && (*iter)->innerTrack().isAvailable() &&
1477     muJet->sameTrack(&*(orphan->innerTrack()), &*((*iter)->innerTrack()))) {
1478 aysen 1.24 m_dimuorphan_containstrig++;
1479 pivarski 1.10 }
1480 pivarski 1.8 }
1481 aysen 1.22
1482 aysen 1.24 for (std::vector<pat::MuonCollection::const_iterator>::const_iterator iter = hightrigmuons.begin(); iter != hightrigmuons.end(); ++iter) {
1483 aysen 1.22 if (muJet->muon(0)->innerTrack().isAvailable() && (*iter)->innerTrack().isAvailable() &&
1484     muJet->sameTrack(&*(muJet->muon(0)->innerTrack()), &*((*iter)->innerTrack()))) {
1485 aysen 1.24 m_dimuorphan_containstrig2++;
1486     if (m_dimuorphan_containstrig2 == 2) {
1487     m_dimuorphan_trigpt1 = muJet->muon(0)->pt();
1488     m_dimuorphan_trigeta1 = muJet->muon(0)->eta();
1489     m_dimuorphan_trigpt2 = orphan->pt();
1490     m_dimuorphan_trigeta2 = orphan->eta();
1491     }
1492 aysen 1.22 }
1493     if (muJet->muon(1)->innerTrack().isAvailable() && (*iter)->innerTrack().isAvailable() &&
1494     muJet->sameTrack(&*(muJet->muon(1)->innerTrack()), &*((*iter)->innerTrack()))) {
1495 aysen 1.24 m_dimuorphan_containstrig2++;
1496     if (m_dimuorphan_containstrig2 == 2) {
1497     m_dimuorphan_trigpt1 = muJet->muon(1)->pt();
1498     m_dimuorphan_trigeta1 = muJet->muon(1)->eta();
1499     m_dimuorphan_trigpt2 = orphan->pt();
1500     m_dimuorphan_trigeta2 = orphan->eta();
1501     }
1502 aysen 1.22 }
1503     }
1504 aysen 1.24
1505    
1506 pivarski 1.10
1507 pivarski 1.8 m_dimuorphan_mass = muJet->mass();
1508 aysen 1.23 m_dimuorphan_corr_mass = -1;
1509     m_dimuorphan_recomass = muJet->mass();
1510 pivarski 1.8 m_dimuorphan_pt = muJet->pt();
1511     m_dimuorphan_eta = muJet->eta();
1512     m_dimuorphan_phi = muJet->phi();
1513     m_dimuorphan_dr = muJet->dRmax();
1514     m_dimuorphan_vprob = -1.;
1515 aysen 1.23 m_dimuorphan_vnchi2 = -1.;
1516 pivarski 1.8 m_dimuorphan_lxy = -1000.;
1517     m_dimuorphan_lxyz = -1000.;
1518 aysen 1.23 m_dimuorphan_caloiso = muJet->centralCaloIsolation();
1519 pivarski 1.8 m_dimuorphan_iso = muJet->centralTrackIsolation();
1520    
1521 aysen 1.23 m_dimuorphan_iso_3mm = 0;
1522     m_dimuorphan_iso_2mm = 0;
1523     m_dimuorphan_iso_1mm = 0;
1524    
1525 aysen 1.24 for (reco::TrackCollection::const_iterator track = tracks->begin(); track != tracks->end(); ++track) {
1526     bool track_is_muon = false;
1527     //for (pat::MuonCollection::const_iterator muon = allmuons->begin(); muon != allmuons->end(); ++muon) {
1528     // if (muJet->sameTrack(&*track,&*(muon->innerTrack()))) { track_is_muon = true; break; }
1529     //}
1530     if (muJet->sameTrack(&*track,&*(muJet->muon(0)->innerTrack())) || muJet->sameTrack(&*track,&*(muJet->muon(1)->innerTrack()))) track_is_muon = true;
1531     if (!track_is_muon) {
1532     double dphi = muJet->phi() - track->phi();
1533     if (dphi > M_PI) dphi -= 2.*M_PI;
1534     if (dphi < -M_PI) dphi += 2.*M_PI;
1535     double deta = muJet->eta() - track->eta();
1536     double dR = sqrt(pow(dphi, 2) + pow(deta, 2));
1537     if (dR < 0.4 && track->pt() > iso_track_pt_treshold) {
1538     double dz = fabs(track->dz(theBeamSpot->position())-muJet->dz(theBeamSpot->position()));
1539     if (dz < 0.3) m_dimuorphan_iso_3mm += track->pt();
1540     if (dz < 0.2) m_dimuorphan_iso_2mm += track->pt();
1541     if (dz < 0.1) m_dimuorphan_iso_1mm += track->pt();
1542     }
1543     }
1544     }
1545 aysen 1.23
1546     m_dimuorphan_orphan_iso_3mm = 0;
1547     m_dimuorphan_orphan_iso_2mm = 0;
1548     m_dimuorphan_orphan_iso_1mm = 0;
1549    
1550 aysen 1.24 for (reco::TrackCollection::const_iterator track = tracks->begin(); track != tracks->end(); ++track) {
1551     bool track_is_muon = false;
1552     //for (pat::MuonCollection::const_iterator muon = allmuons->begin(); muon != allmuons->end(); ++muon) {
1553     // if (!muJet->sameTrack(&*track,&*(muon->innerTrack()))) { track_is_muon = true; break; }
1554     //}
1555     if (muJet->sameTrack(&*track,&*(orphan->innerTrack()))) track_is_muon = true;
1556     if (!track_is_muon) {
1557     double dphi = orphan->innerTrack()->phi() - track->phi();
1558     if (dphi > M_PI) dphi -= 2.*M_PI;
1559     if (dphi < -M_PI) dphi += 2.*M_PI;
1560     double deta = orphan->innerTrack()->eta() - track->eta();
1561     double dR = sqrt(pow(dphi, 2) + pow(deta, 2));
1562     if (dR < 0.4 && track->pt() > iso_track_pt_treshold) {
1563     double dz = fabs(track->dz(theBeamSpot->position())-orphan->innerTrack()->dz(theBeamSpot->position()));
1564     if (dz < 0.3) m_dimuorphan_orphan_iso_3mm += track->pt();
1565     if (dz < 0.2) m_dimuorphan_orphan_iso_2mm += track->pt();
1566     if (dz < 0.1) m_dimuorphan_orphan_iso_1mm += track->pt();
1567     }
1568     }
1569     }
1570    
1571 aysen 1.23 for (reco::TrackCollection::const_iterator track = tracks->begin(); track != tracks->end(); ++track) {
1572     if (!muJet->sameTrack(&*track,&*(orphan->innerTrack()))) {
1573     double dphi = orphan->innerTrack()->phi() - track->phi();
1574     if (dphi > M_PI) dphi -= 2.*M_PI;
1575     if (dphi < -M_PI) dphi += 2.*M_PI;
1576     double deta = orphan->innerTrack()->eta() - track->eta();
1577     double dR = sqrt(pow(dphi, 2) + pow(deta, 2));
1578     if (dR < 0.4 && track->pt() > 1.5) {
1579     double dz = fabs(track->dz(theBeamSpot->position())-orphan->innerTrack()->dz(theBeamSpot->position()));
1580     if (dz < 0.3) m_dimuorphan_orphan_iso_3mm += track->pt();
1581     if (dz < 0.2) m_dimuorphan_orphan_iso_2mm += track->pt();
1582     if (dz < 0.1) m_dimuorphan_orphan_iso_1mm += track->pt();
1583     }
1584     }
1585     }
1586    
1587     m_dimuorphan_trackdensity = 0;
1588    
1589     for (reco::TrackCollection::const_iterator track = tracks->begin(); track != tracks->end(); ++track) {
1590     if (!muJet->sameTrack(&*track,&*(muJet->muon(0)->innerTrack())) && !muJet->sameTrack(&*track,&*(muJet->muon(1)->innerTrack()))) {
1591     double dphi0 = muJet->muon(0)->innerTrack()->phi() - track->phi();
1592     if (dphi0 > M_PI) dphi0 -= 2.*M_PI;
1593     if (dphi0 < -M_PI) dphi0 += 2.*M_PI;
1594     double deta0 = muJet->muon(0)->innerTrack()->eta() - track->eta();
1595     double dR0 = sqrt(pow(dphi0, 2) + pow(deta0, 2));
1596     double dphi1 = muJet->muon(1)->innerTrack()->phi() - track->phi();
1597     if (dphi1 > M_PI) dphi1 -= 2.*M_PI;
1598     if (dphi1 < -M_PI) dphi1 += 2.*M_PI;
1599     double deta1 = muJet->muon(1)->innerTrack()->eta() - track->eta();
1600     double dR1 = sqrt(pow(dphi1, 2) + pow(deta1, 2));
1601     if ((dR0 < 0.2 || dR1 < 0.2) && track->pt() > 1.) {
1602     double dz0 = fabs(track->dz(theBeamSpot->position())-muJet->muon(0)->innerTrack()->dz(theBeamSpot->position()));
1603     double dz1 = fabs(track->dz(theBeamSpot->position())-muJet->muon(1)->innerTrack()->dz(theBeamSpot->position()));
1604     if (dz0 < 0.2 || dz1 < 0.2) m_dimuorphan_trackdensity++;
1605     }
1606     }
1607     }
1608    
1609 pivarski 1.8 if (muJet->vertexValid()) {
1610     m_dimuorphan_deltaphi = muJet->vertexMomentum().phi() - orphan->phi();
1611     while (m_dimuorphan_deltaphi > M_PI) m_dimuorphan_deltaphi -= 2.*M_PI;
1612     while (m_dimuorphan_deltaphi < -M_PI) m_dimuorphan_deltaphi += 2.*M_PI;
1613    
1614     m_dimuorphan_mass = muJet->vertexMass();
1615 aysen 1.23 m_dimuorphan_corr_mass = muJet->vertexMass();
1616 pivarski 1.8 m_dimuorphan_pt = muJet->vertexMomentum().perp();
1617     m_dimuorphan_eta = muJet->vertexMomentum().eta();
1618     m_dimuorphan_phi = muJet->vertexMomentum().phi();
1619     m_dimuorphan_dr = muJet->dRmax(true);
1620     m_dimuorphan_vprob = muJet->vertexProb();
1621 aysen 1.23 m_dimuorphan_vnchi2 = muJet->vertexNormalizedChi2();
1622 pivarski 1.10 if (closestPrimaryVertex != primaryVertices->end()) {
1623     m_dimuorphan_lxy = muJet->lxy(GlobalPoint(closestPrimaryVertex->x(), closestPrimaryVertex->y(), closestPrimaryVertex->z()));
1624     m_dimuorphan_lxyz = muJet->lxyz(GlobalPoint(closestPrimaryVertex->x(), closestPrimaryVertex->y(), closestPrimaryVertex->z()));
1625     }
1626 aysen 1.23
1627     double scale0 = scalePt(muJet->vertexMomentum(0).perp(),muJet->vertexMomentum(0).eta(),muJet->vertexMomentum(0).phi(),muJet->muon(0)->charge());
1628     double scale1 = scalePt(muJet->vertexMomentum(1).perp(),muJet->vertexMomentum(1).eta(),muJet->vertexMomentum(1).phi(),muJet->muon(1)->charge());
1629    
1630     double e1 = pow(pow(muJet->vertexMomentum(0).perp()*scale0,2)+pow(muJet->vertexMomentum(0).z(),2)+pow(muJet->muon(0)->mass(),2),0.5);
1631     double e2 = pow(pow(muJet->vertexMomentum(1).perp()*scale1,2)+pow(muJet->vertexMomentum(1).z(),2)+pow(muJet->muon(1)->mass(),2),0.5);
1632     double e = e1 + e2;
1633    
1634     double px = muJet->vertexMomentum(0).x()*scale0 + muJet->vertexMomentum(1).x()*scale1;
1635     double py = muJet->vertexMomentum(0).y()*scale0 + muJet->vertexMomentum(1).y()*scale1;
1636     double pz = muJet->vertexMomentum(0).z() + muJet->vertexMomentum(1).z();
1637    
1638     m_dimuorphan_corr_mass = pow(e*e-px*px-py*py-pz*pz,0.5);
1639    
1640 pivarski 1.8 }
1641    
1642 aysen 1.23 if (muJet->daughter(0)->charge() > 0) {
1643     m_dimuorphan_plusmatches = muJet->muon(0)->numberOfMatches(reco::Muon::SegmentAndTrackArbitration);
1644     m_dimuorphan_minusmatches = muJet->muon(1)->numberOfMatches(reco::Muon::SegmentAndTrackArbitration);
1645     m_dimuorphan_plushits = muJet->muon(0)->innerTrack()->numberOfValidHits();
1646     m_dimuorphan_minushits = muJet->muon(1)->innerTrack()->numberOfValidHits();
1647     m_dimuorphan_plusnormchi2 = muJet->muon(0)->innerTrack()->normalizedChi2();
1648     m_dimuorphan_minusnormchi2 = muJet->muon(1)->innerTrack()->normalizedChi2();
1649    
1650 aysen 1.24 m_dimuorphan_plusstationmask = muJet->muon(0)->stationMask();
1651     m_dimuorphan_minusstationmask = muJet->muon(1)->stationMask();
1652    
1653 aysen 1.23 m_dimuorphan_plus_thits = muJet->muon(0)->innerTrack()->hitPattern().numberOfValidTrackerHits();
1654     m_dimuorphan_plus_mhits = 0;
1655     if (muJet->muon(0)->isGlobalMuon()) m_dimuorphan_plus_mhits = muJet->muon(0)->globalTrack()->hitPattern().numberOfValidMuonHits();
1656     m_dimuorphan_plus_phits = muJet->muon(0)->innerTrack()->hitPattern().numberOfValidPixelHits();
1657    
1658     m_dimuorphan_minus_thits = muJet->muon(1)->innerTrack()->hitPattern().numberOfValidTrackerHits();
1659     m_dimuorphan_minus_mhits = 0;
1660     if (muJet->muon(1)->isGlobalMuon()) m_dimuorphan_minus_mhits = muJet->muon(1)->globalTrack()->hitPattern().numberOfValidMuonHits();
1661     m_dimuorphan_minus_phits = muJet->muon(1)->innerTrack()->hitPattern().numberOfValidPixelHits();
1662    
1663     m_dimuorphan_plus_dxy = muJet->muon(0)->innerTrack()->dxy(theBeamSpot->position());
1664     m_dimuorphan_minus_dxy = muJet->muon(1)->innerTrack()->dxy(theBeamSpot->position());
1665    
1666 aysen 1.24 m_dimuorphan_plus_pt = muJet->muon(0)->pt();
1667     m_dimuorphan_minus_pt = muJet->muon(1)->pt();
1668     m_dimuorphan_plus_eta = muJet->muon(0)->eta();
1669     m_dimuorphan_minus_eta = muJet->muon(1)->eta();
1670     m_dimuorphan_plus_phi = muJet->muon(0)->phi();
1671     m_dimuorphan_minus_phi = muJet->muon(1)->phi();
1672    
1673     m_dimuorphan_Deltaphi = m_dimuorphan_plus_phi-m_dimuorphan_minus_phi;
1674     if (m_dimuorphan_Deltaphi > M_PI) m_dimuorphan_Deltaphi -= 2.*M_PI;
1675     if (m_dimuorphan_Deltaphi < -M_PI) m_dimuorphan_Deltaphi += 2.*M_PI;
1676 aysen 1.23 /*
1677     for (trackingRecHit_iterator hit = muJet->muon(0)->innerTrack()->recHitsBegin(); hit != muJet->muon(0)->innerTrack()->recHitsEnd(); ++hit) {
1678     if ((*hit)->isValid()) {
1679     GlobalPoint p = tkgeom->idToDet((*hit)->geographicalId())->toGlobal((*hit)->localPosition());
1680     m_dimuorphan_plus_innerR = pow(p.x()*p.x()+p.y()*p.y(),0.5);
1681     break;
1682     }
1683     }
1684     for (trackingRecHit_iterator hit = muJet->muon(1)->innerTrack()->recHitsBegin(); hit != muJet->muon(1)->innerTrack()->recHitsEnd(); ++hit) {
1685     if ((*hit)->isValid()) {
1686     GlobalPoint p = tkgeom->idToDet((*hit)->geographicalId())->toGlobal((*hit)->localPosition());
1687     m_dimuorphan_minus_innerR = pow(p.x()*p.x()+p.y()*p.y(),0.5);
1688     break;
1689     }
1690     }
1691     */
1692    
1693     }
1694     else {
1695     m_dimuorphan_plusmatches = muJet->muon(1)->numberOfMatches(reco::Muon::SegmentAndTrackArbitration);
1696     m_dimuorphan_minusmatches = muJet->muon(0)->numberOfMatches(reco::Muon::SegmentAndTrackArbitration);
1697     m_dimuorphan_plushits = muJet->muon(1)->innerTrack()->numberOfValidHits();
1698     m_dimuorphan_minushits = muJet->muon(0)->innerTrack()->numberOfValidHits();
1699     m_dimuorphan_plusnormchi2 = muJet->muon(1)->innerTrack()->normalizedChi2();
1700     m_dimuorphan_minusnormchi2 = muJet->muon(0)->innerTrack()->normalizedChi2();
1701    
1702 aysen 1.24 m_dimuorphan_plusstationmask = muJet->muon(1)->stationMask();
1703     m_dimuorphan_minusstationmask = muJet->muon(0)->stationMask();
1704    
1705 aysen 1.23 m_dimuorphan_plus_thits = muJet->muon(1)->innerTrack()->hitPattern().numberOfValidTrackerHits();
1706     m_dimuorphan_plus_mhits = 0;
1707     if (muJet->muon(1)->isGlobalMuon()) m_dimuorphan_plus_mhits = muJet->muon(1)->globalTrack()->hitPattern().numberOfValidMuonHits();
1708     m_dimuorphan_plus_phits = muJet->muon(1)->innerTrack()->hitPattern().numberOfValidPixelHits();
1709    
1710     m_dimuorphan_minus_thits = muJet->muon(0)->innerTrack()->hitPattern().numberOfValidTrackerHits();
1711     m_dimuorphan_minus_mhits = 0;
1712     if (muJet->muon(0)->isGlobalMuon()) m_dimuorphan_minus_mhits = muJet->muon(0)->globalTrack()->hitPattern().numberOfValidMuonHits();
1713     m_dimuorphan_minus_phits = muJet->muon(0)->innerTrack()->hitPattern().numberOfValidPixelHits();
1714    
1715     m_dimuorphan_plus_dxy = muJet->muon(1)->innerTrack()->dxy(theBeamSpot->position());
1716     m_dimuorphan_minus_dxy = muJet->muon(0)->innerTrack()->dxy(theBeamSpot->position());
1717    
1718 aysen 1.24 m_dimuorphan_plus_pt = muJet->muon(1)->pt();
1719     m_dimuorphan_minus_pt = muJet->muon(0)->pt();
1720     m_dimuorphan_plus_eta = muJet->muon(1)->eta();
1721     m_dimuorphan_minus_eta = muJet->muon(0)->eta();
1722     m_dimuorphan_plus_phi = muJet->muon(1)->phi();
1723     m_dimuorphan_minus_phi = muJet->muon(0)->phi();
1724    
1725     m_dimuorphan_Deltaphi = m_dimuorphan_plus_phi-m_dimuorphan_minus_phi;
1726     if (m_dimuorphan_Deltaphi > M_PI) m_dimuorphan_Deltaphi -= 2.*M_PI;
1727     if (m_dimuorphan_Deltaphi < -M_PI) m_dimuorphan_Deltaphi += 2.*M_PI;
1728 aysen 1.23 /*
1729     for (trackingRecHit_iterator hit = muJet->muon(0)->innerTrack()->recHitsBegin(); hit != muJet->muon(0)->innerTrack()->recHitsEnd(); ++hit) {
1730     if ((*hit)->isValid()) {
1731     GlobalPoint p = tkgeom->idToDet((*hit)->geographicalId())->toGlobal((*hit)->localPosition());
1732     m_dimuorphan_minus_innerR = pow(p.x()*p.x()+p.y()*p.y(),0.5);
1733     break;
1734     }
1735     }
1736     for (trackingRecHit_iterator hit = muJet->muon(1)->innerTrack()->recHitsBegin(); hit != muJet->muon(1)->innerTrack()->recHitsEnd(); ++hit) {
1737     if ((*hit)->isValid()) {
1738     GlobalPoint p = tkgeom->idToDet((*hit)->geographicalId())->toGlobal((*hit)->localPosition());
1739     m_dimuorphan_plus_innerR = pow(p.x()*p.x()+p.y()*p.y(),0.5);
1740     break;
1741     }
1742     }
1743     */
1744    
1745     }
1746 aysen 1.24 m_dimuorphan_Deltaphi_orphan = m_dimuorphan_orphanphi - m_dimuorphan_phi;
1747     if (m_dimuorphan_Deltaphi_orphan > M_PI) m_dimuorphan_Deltaphi_orphan -= 2.*M_PI;
1748     if (m_dimuorphan_Deltaphi_orphan < -M_PI) m_dimuorphan_Deltaphi_orphan += 2.*M_PI;
1749 aysen 1.23
1750     m_dimuorphan_plus_isGlobal = 0;
1751     m_dimuorphan_plus_isStandAlone = 0;
1752     m_dimuorphan_plus_GlobalHits = -1;
1753     m_dimuorphan_plus_GlobalChi2 = -1;
1754     m_dimuorphan_plus_StandAloneHits = -1;
1755     m_dimuorphan_plus_StandAloneChi2 = -1;
1756    
1757     m_dimuorphan_minus_isGlobal = 0;
1758     m_dimuorphan_minus_isStandAlone = 0;
1759     m_dimuorphan_minus_GlobalHits = -1;
1760     m_dimuorphan_minus_GlobalChi2 = -1;
1761     m_dimuorphan_minus_StandAloneHits = -1;
1762     m_dimuorphan_minus_StandAloneChi2 = -1;
1763    
1764     if (muJet->daughter(0)->charge() > 0) {
1765     m_dimuorphan_plus_qoverpError = muJet->muon(0)->innerTrack()->qoverpError();
1766     m_dimuorphan_plus_ptError = muJet->muon(0)->innerTrack()->ptError();
1767     m_dimuorphan_plus_phiError = muJet->muon(0)->innerTrack()->phiError();
1768     m_dimuorphan_plus_etaError = muJet->muon(0)->innerTrack()->etaError();
1769     if (muJet->muon(0)->isGlobalMuon()) {
1770     m_dimuorphan_plus_isGlobal = 1;
1771     m_dimuorphan_plus_GlobalHits = muJet->muon(0)->globalTrack()->numberOfValidHits();
1772     m_dimuorphan_plus_GlobalChi2 = muJet->muon(0)->globalTrack()->normalizedChi2();
1773     }
1774     if (muJet->muon(0)->isStandAloneMuon()) {
1775     m_dimuorphan_plus_isStandAlone = 1;
1776     m_dimuorphan_plus_StandAloneHits = muJet->muon(0)->outerTrack()->numberOfValidHits();
1777     m_dimuorphan_plus_StandAloneChi2 = muJet->muon(0)->outerTrack()->normalizedChi2();
1778     }
1779     m_dimuorphan_minus_qoverpError = muJet->muon(1)->innerTrack()->qoverpError();
1780     m_dimuorphan_minus_ptError = muJet->muon(1)->innerTrack()->ptError();
1781     m_dimuorphan_minus_phiError = muJet->muon(1)->innerTrack()->phiError();
1782     m_dimuorphan_minus_etaError = muJet->muon(1)->innerTrack()->etaError();
1783     if (muJet->muon(1)->isGlobalMuon()) {
1784     m_dimuorphan_minus_isGlobal = 1;
1785     m_dimuorphan_minus_GlobalHits = muJet->muon(1)->globalTrack()->numberOfValidHits();
1786     m_dimuorphan_minus_GlobalChi2 = muJet->muon(1)->globalTrack()->normalizedChi2();
1787     }
1788     if (muJet->muon(1)->isStandAloneMuon()) {
1789     m_dimuorphan_minus_isStandAlone = 1;
1790     m_dimuorphan_minus_StandAloneHits = muJet->muon(1)->outerTrack()->numberOfValidHits();
1791     m_dimuorphan_minus_StandAloneChi2 = muJet->muon(1)->outerTrack()->normalizedChi2();
1792     }
1793     }
1794     else {
1795     m_dimuorphan_plus_qoverpError = muJet->muon(1)->innerTrack()->qoverpError();
1796     m_dimuorphan_plus_ptError = muJet->muon(1)->innerTrack()->ptError();
1797     m_dimuorphan_plus_phiError = muJet->muon(1)->innerTrack()->phiError();
1798     m_dimuorphan_plus_etaError = muJet->muon(1)->innerTrack()->etaError();
1799     if (muJet->muon(1)->isGlobalMuon()) {
1800     m_dimuorphan_plus_isGlobal = 1;
1801     m_dimuorphan_plus_GlobalHits = muJet->muon(1)->globalTrack()->numberOfValidHits();
1802     m_dimuorphan_plus_GlobalChi2 = muJet->muon(1)->globalTrack()->normalizedChi2();
1803     }
1804     if (muJet->muon(1)->isStandAloneMuon()) {
1805     m_dimuorphan_plus_isStandAlone = 1;
1806     m_dimuorphan_plus_StandAloneHits = muJet->muon(1)->outerTrack()->numberOfValidHits();
1807     m_dimuorphan_plus_StandAloneChi2 = muJet->muon(1)->outerTrack()->normalizedChi2();
1808     }
1809     m_dimuorphan_minus_qoverpError = muJet->muon(0)->innerTrack()->qoverpError();
1810     m_dimuorphan_minus_ptError = muJet->muon(0)->innerTrack()->ptError();
1811     m_dimuorphan_minus_phiError = muJet->muon(0)->innerTrack()->phiError();
1812     m_dimuorphan_minus_etaError = muJet->muon(0)->innerTrack()->etaError();
1813     if (muJet->muon(0)->isGlobalMuon()) {
1814     m_dimuorphan_minus_isGlobal = 1;
1815     m_dimuorphan_minus_GlobalHits = muJet->muon(0)->globalTrack()->numberOfValidHits();
1816     m_dimuorphan_minus_GlobalChi2 = muJet->muon(0)->globalTrack()->normalizedChi2();
1817     }
1818     if (muJet->muon(0)->isStandAloneMuon()) {
1819     m_dimuorphan_minus_isStandAlone = 1;
1820     m_dimuorphan_minus_StandAloneHits = muJet->muon(0)->outerTrack()->numberOfValidHits();
1821     m_dimuorphan_minus_StandAloneChi2 = muJet->muon(0)->outerTrack()->normalizedChi2();
1822     }
1823     }
1824    
1825 aysen 1.22 m_dimuorphan_dimuonbbbarlike = -1;
1826     if (m_dimuorphan_iso > 4.5 || m_dimuorphan_lxy > 0.2) m_dimuorphan_dimuonbbbarlike = 1;
1827     if (m_dimuorphan_iso < 4.5 && m_dimuorphan_lxy < 0.2) m_dimuorphan_dimuonbbbarlike = 0;
1828    
1829 aysen 1.24 /*
1830 aysen 1.23 const pat::Muon *muplus = NULL;
1831     const pat::Muon *muminus = NULL;
1832    
1833     if (muJet->muon(0)->charge() > 0) {
1834     muplus = &*muJet->muon(0);
1835     muminus = &*muJet->muon(1);
1836     }
1837     if (muJet->muon(0)->charge() < 0) {
1838     muplus = &*muJet->muon(1);
1839     muminus = &*muJet->muon(0);
1840     }
1841    
1842     FreeTrajectoryState plus_initial(GlobalPoint(muplus->vx(), muplus->vy(), muplus->vz()), GlobalVector(muplus->px(), muplus->py(), muplus->pz()), 1, &*magneticField);
1843     FreeTrajectoryState minus_initial(GlobalPoint(muminus->vx(), muminus->vy(), muminus->vz()), GlobalVector(muminus->px(), muminus->py(), muminus->pz()), -1, &*magneticField);
1844    
1845     Cylinder::CylinderPointer m_cylinder = Cylinder::build(Cylinder::PositionType(0., 0., 0.), Cylinder::RotationType(), 600.);
1846     Plane::PlanePointer m_plane = Plane::build(Plane::PositionType(0., 0., 800.), Plane::RotationType());
1847    
1848    
1849     if (fabs(m_dimuorphan_eta) < 1.1) {
1850     TrajectoryStateOnSurface plus_final = propagator->propagate(plus_initial, *m_cylinder);
1851     TrajectoryStateOnSurface minus_final = propagator->propagate(minus_initial, *m_cylinder);
1852     if (plus_final.isValid() && minus_final.isValid()) {
1853     double dphi = plus_final.globalPosition().phi() - minus_final.globalPosition().phi();
1854     while (dphi > M_PI) dphi -= 2.*M_PI;
1855     while (dphi < -M_PI) dphi += 2.*M_PI;
1856     m_dimuorphan_dphi = dphi;
1857     }
1858     }
1859     else {
1860     TrajectoryStateOnSurface plus_final = propagator->propagate(plus_initial, *m_plane);
1861     TrajectoryStateOnSurface minus_final = propagator->propagate(minus_initial, *m_plane);
1862     if (plus_final.isValid() && minus_final.isValid()) {
1863     double dphi = plus_final.globalPosition().phi() - minus_final.globalPosition().phi();
1864     while (dphi > M_PI) dphi -= 2.*M_PI;
1865     while (dphi < -M_PI) dphi += 2.*M_PI;
1866     m_dimuorphan_dphi = dphi;
1867     }
1868     }
1869    
1870     if (fabs(m_dimuorphan_eta) < 0.9) {
1871     TrajectoryStateOnSurface plus_final = propagator->propagate(plus_initial, *m_cylinder100);
1872     TrajectoryStateOnSurface minus_final = propagator->propagate(minus_initial, *m_cylinder100);
1873     if (plus_final.isValid() && minus_final.isValid()) {
1874     double dphi = plus_final.globalPosition().phi() - minus_final.globalPosition().phi();
1875     while (dphi > M_PI) dphi -= 2.*M_PI;
1876     while (dphi < -M_PI) dphi += 2.*M_PI;
1877     m_dimuorphan_dphi100 = dphi;
1878     }
1879     plus_final = propagator->propagate(plus_initial, *m_cylinder200);
1880     minus_final = propagator->propagate(minus_initial, *m_cylinder200);
1881     if (plus_final.isValid() && minus_final.isValid()) {
1882     double dphi = plus_final.globalPosition().phi() - minus_final.globalPosition().phi();
1883     while (dphi > M_PI) dphi -= 2.*M_PI;
1884     while (dphi < -M_PI) dphi += 2.*M_PI;
1885     m_dimuorphan_dphi200 = dphi;
1886     }
1887     plus_final = propagator->propagate(plus_initial, *m_cylinder300);
1888     minus_final = propagator->propagate(minus_initial, *m_cylinder300);
1889     if (plus_final.isValid() && minus_final.isValid()) {
1890     double dphi = plus_final.globalPosition().phi() - minus_final.globalPosition().phi();
1891     while (dphi > M_PI) dphi -= 2.*M_PI;
1892     while (dphi < -M_PI) dphi += 2.*M_PI;
1893     m_dimuorphan_dphi300 = dphi;
1894     }
1895     plus_final = propagator->propagate(plus_initial, *m_cylinder425);
1896     minus_final = propagator->propagate(minus_initial, *m_cylinder425);
1897     if (plus_final.isValid() && minus_final.isValid()) {
1898     double dphi = plus_final.globalPosition().phi() - minus_final.globalPosition().phi();
1899     while (dphi > M_PI) dphi -= 2.*M_PI;
1900     while (dphi < -M_PI) dphi += 2.*M_PI;
1901     m_dimuorphan_dphi425 = dphi;
1902     }
1903     plus_final = propagator->propagate(plus_initial, *m_cylinder470);
1904     minus_final = propagator->propagate(minus_initial, *m_cylinder470);
1905     if (plus_final.isValid() && minus_final.isValid()) {
1906     double dphi = plus_final.globalPosition().phi() - minus_final.globalPosition().phi();
1907     while (dphi > M_PI) dphi -= 2.*M_PI;
1908     while (dphi < -M_PI) dphi += 2.*M_PI;
1909     m_dimuorphan_dphi470 = dphi;
1910     }
1911     plus_final = propagator->propagate(plus_initial, *m_cylinder510);
1912     minus_final = propagator->propagate(minus_initial, *m_cylinder510);
1913     if (plus_final.isValid() && minus_final.isValid()) {
1914     double dphi = plus_final.globalPosition().phi() - minus_final.globalPosition().phi();
1915     while (dphi > M_PI) dphi -= 2.*M_PI;
1916     while (dphi < -M_PI) dphi += 2.*M_PI;
1917     m_dimuorphan_dphi510 = dphi;
1918     }
1919     plus_final = propagator->propagate(plus_initial, *m_cylinder565);
1920     minus_final = propagator->propagate(minus_initial, *m_cylinder565);
1921     if (plus_final.isValid() && minus_final.isValid()) {
1922     double dphi = plus_final.globalPosition().phi() - minus_final.globalPosition().phi();
1923     while (dphi > M_PI) dphi -= 2.*M_PI;
1924     while (dphi < -M_PI) dphi += 2.*M_PI;
1925     m_dimuorphan_dphi565 = dphi;
1926     }
1927     plus_final = propagator->propagate(plus_initial, *m_cylinder620);
1928     minus_final = propagator->propagate(minus_initial, *m_cylinder620);
1929     if (plus_final.isValid() && minus_final.isValid()) {
1930     double dphi = plus_final.globalPosition().phi() - minus_final.globalPosition().phi();
1931     while (dphi > M_PI) dphi -= 2.*M_PI;
1932     while (dphi < -M_PI) dphi += 2.*M_PI;
1933     m_dimuorphan_dphi620 = dphi;
1934     }
1935     plus_final = propagator->propagate(plus_initial, *m_cylinder670);
1936     minus_final = propagator->propagate(minus_initial, *m_cylinder670);
1937     if (plus_final.isValid() && minus_final.isValid()) {
1938     double dphi = plus_final.globalPosition().phi() - minus_final.globalPosition().phi();
1939     while (dphi > M_PI) dphi -= 2.*M_PI;
1940     while (dphi < -M_PI) dphi += 2.*M_PI;
1941     m_dimuorphan_dphi670 = dphi;
1942     }
1943     plus_final = propagator->propagate(plus_initial, *m_cylinder720);
1944     minus_final = propagator->propagate(minus_initial, *m_cylinder720);
1945     if (plus_final.isValid() && minus_final.isValid()) {
1946     double dphi = plus_final.globalPosition().phi() - minus_final.globalPosition().phi();
1947     while (dphi > M_PI) dphi -= 2.*M_PI;
1948     while (dphi < -M_PI) dphi += 2.*M_PI;
1949     m_dimuorphan_dphi720 = dphi;
1950     }
1951     plus_final = propagator->propagate(plus_initial, *m_cylinder800);
1952     minus_final = propagator->propagate(minus_initial, *m_cylinder800);
1953     if (plus_final.isValid() && minus_final.isValid()) {
1954     double dphi = plus_final.globalPosition().phi() - minus_final.globalPosition().phi();
1955     while (dphi > M_PI) dphi -= 2.*M_PI;
1956     while (dphi < -M_PI) dphi += 2.*M_PI;
1957     m_dimuorphan_dphi800 = dphi;
1958     }
1959     plus_final = propagator->propagate(plus_initial, *m_cylinder900);
1960     minus_final = propagator->propagate(minus_initial, *m_cylinder900);
1961     if (plus_final.isValid() && minus_final.isValid()) {
1962     double dphi = plus_final.globalPosition().phi() - minus_final.globalPosition().phi();
1963     while (dphi > M_PI) dphi -= 2.*M_PI;
1964     while (dphi < -M_PI) dphi += 2.*M_PI;
1965     m_dimuorphan_dphi900 = dphi;
1966     }
1967     }
1968 aysen 1.24 */
1969 aysen 1.23
1970     m_dimuorphan_dz1 = muJet->dz(theBeamSpot->position());
1971     m_dimuorphan_dz2 = orphan->innerTrack()->dz(theBeamSpot->position());
1972     m_dimuorphan_deltaz = m_dimuorphan_dz1 - m_dimuorphan_dz2;
1973    
1974     m_dimuorphan_muonssize = allmuons->size();
1975    
1976 aysen 1.24 if ((m_dimuorphan_containstrig > 0 || m_dimuorphan_containstrig2 > 0) && fabs(m_dimuorphan_deltaz) < 0.1) m_dimuorphan->Fill();
1977 aysen 1.23
1978 pivarski 1.8 }
1979    
1980 aysen 1.23
1981 pivarski 1.1 ////////////////////////////////////////////////////////// dimudimu
1982 aysen 1.24 if (muJets->size() == 2 && (*muJets)[0].numberOfDaughters() == 2 && (*muJets)[1].numberOfDaughters() == 2 && orphans->size() == 0 && m_trigger > 0) {
1983 pivarski 1.10 const pat::MultiMuon *muJet0 = &((*muJets)[0]);
1984     const pat::MultiMuon *muJet1 = &((*muJets)[1]);
1985    
1986     bool muJet0_canBeC = false;
1987     bool muJet1_canBeC = false;
1988 aysen 1.24 for (std::vector<pat::MuonCollection::const_iterator>::const_iterator iter = hightrigmuons.begin(); iter != hightrigmuons.end(); ++iter) {
1989 pivarski 1.10 if (muJet0->muon(0)->innerTrack().isAvailable() && (*iter)->innerTrack().isAvailable() &&
1990     muJet0->sameTrack(&*(muJet0->muon(0)->innerTrack()), &*((*iter)->innerTrack()))) {
1991     muJet0_canBeC = true;
1992     }
1993     if (muJet0->muon(1)->innerTrack().isAvailable() && (*iter)->innerTrack().isAvailable() &&
1994     muJet0->sameTrack(&*(muJet0->muon(1)->innerTrack()), &*((*iter)->innerTrack()))) {
1995     muJet0_canBeC = true;
1996     }
1997    
1998     if (muJet1->muon(0)->innerTrack().isAvailable() && (*iter)->innerTrack().isAvailable() &&
1999     muJet1->sameTrack(&*(muJet1->muon(0)->innerTrack()), &*((*iter)->innerTrack()))) {
2000     muJet1_canBeC = true;
2001 pivarski 1.8 }
2002 pivarski 1.10 if (muJet1->muon(1)->innerTrack().isAvailable() && (*iter)->innerTrack().isAvailable() &&
2003     muJet1->sameTrack(&*(muJet1->muon(1)->innerTrack()), &*((*iter)->innerTrack()))) {
2004     muJet1_canBeC = true;
2005 pivarski 1.8 }
2006     }
2007 pivarski 1.10
2008 aysen 1.24 for (std::vector<pat::MuonCollection::const_iterator>::const_iterator iter = lowtrigmuons.begin(); iter != lowtrigmuons.end(); ++iter) {
2009     if (muJet0->muon(0)->innerTrack().isAvailable() && (*iter)->innerTrack().isAvailable() &&
2010     muJet0->sameTrack(&*(muJet0->muon(0)->innerTrack()), &*((*iter)->innerTrack()))) {
2011     m_dimudimu_containstrig2++;
2012     }
2013     if (muJet0->muon(1)->innerTrack().isAvailable() && (*iter)->innerTrack().isAvailable() &&
2014     muJet0->sameTrack(&*(muJet0->muon(1)->innerTrack()), &*((*iter)->innerTrack()))) {
2015     m_dimudimu_containstrig2++;
2016     }
2017    
2018     if (muJet1->muon(0)->innerTrack().isAvailable() && (*iter)->innerTrack().isAvailable() &&
2019     muJet1->sameTrack(&*(muJet1->muon(0)->innerTrack()), &*((*iter)->innerTrack()))) {
2020     m_dimudimu_containstrig2++;
2021     }
2022     if (muJet1->muon(1)->innerTrack().isAvailable() && (*iter)->innerTrack().isAvailable() &&
2023     muJet1->sameTrack(&*(muJet1->muon(1)->innerTrack()), &*((*iter)->innerTrack()))) {
2024     m_dimudimu_containstrig2++;
2025     }
2026     }
2027    
2028 pivarski 1.10 const pat::MultiMuon *muJetC = NULL;
2029     const pat::MultiMuon *muJetF = NULL;
2030     if (muJet0_canBeC && muJet1_canBeC) {
2031 pivarski 1.16 m_dimudimu_containstrig = 1;
2032    
2033 pivarski 1.10 if (m_trandom3.Integer(2) == 0) {
2034 pivarski 1.8 muJetC = muJet0;
2035     muJetF = muJet1;
2036     }
2037     else {
2038     muJetC = muJet1;
2039     muJetF = muJet0;
2040     }
2041     }
2042 pivarski 1.10 else if (muJet0_canBeC) {
2043 pivarski 1.16 m_dimudimu_containstrig = 1;
2044    
2045 pivarski 1.10 muJetC = muJet0;
2046     muJetF = muJet1;
2047     }
2048     else if (muJet1_canBeC) {
2049 pivarski 1.16 m_dimudimu_containstrig = 1;
2050    
2051 pivarski 1.10 muJetC = muJet1;
2052     muJetF = muJet0;
2053     }
2054 pivarski 1.16 else {
2055     m_dimudimu_containstrig = 0;
2056     }
2057 pivarski 1.8
2058 pivarski 1.10 if (muJetC != NULL && muJetF != NULL) {
2059 pivarski 1.13 m_dimudimu_orphans = orphans->size();
2060    
2061 pivarski 1.10 double total_energy = muJetC->energy() + muJetF->energy();
2062     double total_px = muJetC->px() + muJetF->px();
2063     double total_py = muJetC->py() + muJetF->py();
2064     double total_pz = muJetC->pz() + muJetF->pz();
2065 pivarski 1.7
2066     m_dimudimu_wholemass = sqrt(total_energy*total_energy - total_px*total_px - total_py*total_py - total_pz*total_pz);
2067     m_dimudimu_wholept = sqrt(total_px*total_px + total_py*total_py);
2068    
2069 pivarski 1.10 m_dimudimu_deltaphi = muJetC->phi() - muJetF->phi();
2070 pivarski 1.7 while (m_dimudimu_deltaphi > M_PI) m_dimudimu_deltaphi -= 2.*M_PI;
2071     while (m_dimudimu_deltaphi < -M_PI) m_dimudimu_deltaphi += 2.*M_PI;
2072    
2073 pivarski 1.10 m_dimudimu_massC = muJetC->mass();
2074     m_dimudimu_ptC = muJetC->pt();
2075     m_dimudimu_etaC = muJetC->eta();
2076     m_dimudimu_phiC = muJetC->phi();
2077     m_dimudimu_drC = muJetC->dRmax();
2078     m_dimudimu_vprobC = -1.;
2079     m_dimudimu_lxyC = -1000.;
2080     m_dimudimu_lxyzC = -1000.;
2081     m_dimudimu_isoC = muJetC->centralTrackIsolation();
2082    
2083 aysen 1.23 m_dimudimu_isoC_3mm = 0;
2084     m_dimudimu_isoC_2mm = 0;
2085     m_dimudimu_isoC_1mm = 0;
2086    
2087     for (reco::TrackCollection::const_iterator track = tracks->begin(); track != tracks->end(); ++track) {
2088 aysen 1.24 bool track_is_muon = false;
2089     //for (pat::MuonCollection::const_iterator muon = allmuons->begin(); muon != allmuons->end(); ++muon) {
2090     // if (muJetC->sameTrack(&*track,&*(muon->innerTrack()))) { track_is_muon = true; break; }
2091     //}
2092     if (muJetC->sameTrack(&*track,&*(muJetC->muon(0)->innerTrack())) || muJetC->sameTrack(&*track,&*(muJetC->muon(1)->innerTrack()))) track_is_muon = true;
2093     if (!track_is_muon) {
2094 aysen 1.23 double dphi = muJetC->phi() - track->phi();
2095     if (dphi > M_PI) dphi -= 2.*M_PI;
2096     if (dphi < -M_PI) dphi += 2.*M_PI;
2097     double deta = muJetC->eta() - track->eta();
2098 aysen 1.24 double dR = sqrt(pow(dphi, 2) + pow(deta, 2));
2099     if (dR < 0.4 && track->pt() > iso_track_pt_treshold) {
2100 aysen 1.23 double dz = fabs(track->dz(theBeamSpot->position())-muJetC->dz(theBeamSpot->position()));
2101     if (dz < 0.3) m_dimudimu_isoC_3mm += track->pt();
2102     if (dz < 0.2) m_dimudimu_isoC_2mm += track->pt();
2103     if (dz < 0.1) m_dimudimu_isoC_1mm += track->pt();
2104 aysen 1.24 }
2105 aysen 1.23 }
2106     }
2107    
2108 pivarski 1.10 m_dimudimu_massF = muJetF->mass();
2109 pakhotin 1.27 std::cout << "m_dimudimu_massF = muJetF->mass(): " << m_dimudimu_massF << std::endl;
2110 pivarski 1.10 m_dimudimu_ptF = muJetF->pt();
2111     m_dimudimu_etaF = muJetF->eta();
2112     m_dimudimu_phiF = muJetF->phi();
2113     m_dimudimu_drF = muJetF->dRmax();
2114     m_dimudimu_vprobF = -1.;
2115     m_dimudimu_lxyF = -1000.;
2116     m_dimudimu_lxyzF = -1000.;
2117     m_dimudimu_isoF = muJetF->centralTrackIsolation();
2118    
2119 aysen 1.23 m_dimudimu_isoF_3mm = 0;
2120     m_dimudimu_isoF_2mm = 0;
2121     m_dimudimu_isoF_1mm = 0;
2122    
2123     for (reco::TrackCollection::const_iterator track = tracks->begin(); track != tracks->end(); ++track) {
2124 aysen 1.24 bool track_is_muon = false;
2125     //for (pat::MuonCollection::const_iterator muon = allmuons->begin(); muon != allmuons->end(); ++muon) {
2126     // if (muJetF->sameTrack(&*track,&*(muon->innerTrack()))) { track_is_muon = true; break; }
2127     //}
2128     if (muJetF->sameTrack(&*track,&*(muJetF->muon(0)->innerTrack())) || muJetF->sameTrack(&*track,&*(muJetF->muon(1)->innerTrack()))) track_is_muon = true;
2129     if (!track_is_muon) {
2130 aysen 1.23 double dphi = muJetF->phi() - track->phi();
2131     if (dphi > M_PI) dphi -= 2.*M_PI;
2132     if (dphi < -M_PI) dphi += 2.*M_PI;
2133     double deta = muJetF->eta() - track->eta();
2134 aysen 1.24 double dR = sqrt(pow(dphi, 2) + pow(deta, 2));
2135     if (dR < 0.4 && track->pt() > iso_track_pt_treshold) {
2136 aysen 1.23 double dz = fabs(track->dz(theBeamSpot->position())-muJetF->dz(theBeamSpot->position()));
2137     if (dz < 0.3) m_dimudimu_isoF_3mm += track->pt();
2138     if (dz < 0.2) m_dimudimu_isoF_2mm += track->pt();
2139     if (dz < 0.1) m_dimudimu_isoF_1mm += track->pt();
2140     }
2141     }
2142     }
2143    
2144 pivarski 1.10 if (muJetC->vertexValid() && muJetF->vertexValid()) {
2145     total_energy = muJetC->vertexP4().energy() + muJetF->vertexP4().energy();
2146     total_px = muJetC->vertexMomentum().x() + muJetF->vertexMomentum().x();
2147     total_py = muJetC->vertexMomentum().y() + muJetF->vertexMomentum().y();
2148     total_pz = muJetC->vertexMomentum().z() + muJetF->vertexMomentum().z();
2149    
2150     m_dimudimu_wholemass = sqrt(total_energy*total_energy - total_px*total_px - total_py*total_py - total_pz*total_pz);
2151     m_dimudimu_wholept = sqrt(total_px*total_px + total_py*total_py);
2152    
2153     m_dimudimu_deltaphi = muJetC->vertexMomentum().phi() - muJetF->vertexMomentum().phi();
2154     while (m_dimudimu_deltaphi > M_PI) m_dimudimu_deltaphi -= 2.*M_PI;
2155     while (m_dimudimu_deltaphi < -M_PI) m_dimudimu_deltaphi += 2.*M_PI;
2156    
2157     m_dimudimu_massC = muJetC->vertexMass();
2158     m_dimudimu_ptC = muJetC->vertexMomentum().perp();
2159     m_dimudimu_etaC = muJetC->vertexMomentum().eta();
2160     m_dimudimu_phiC = muJetC->vertexMomentum().phi();
2161     m_dimudimu_drC = muJetC->dRmax(true);
2162     m_dimudimu_vprobC = muJetC->vertexProb();
2163     if (closestPrimaryVertex != primaryVertices->end()) {
2164     m_dimudimu_lxyC = muJetC->lxy(GlobalPoint(closestPrimaryVertex->x(), closestPrimaryVertex->y(), closestPrimaryVertex->z()));
2165     m_dimudimu_lxyzC = muJetC->lxyz(GlobalPoint(closestPrimaryVertex->x(), closestPrimaryVertex->y(), closestPrimaryVertex->z()));
2166     }
2167    
2168     m_dimudimu_massF = muJetF->vertexMass();
2169 pakhotin 1.27 std::cout << "m_dimudimu_massF = muJetF->vertexMass(): " << m_dimudimu_massF << std::endl;
2170    
2171 pivarski 1.10 m_dimudimu_ptF = muJetF->vertexMomentum().perp();
2172     m_dimudimu_etaF = muJetF->vertexMomentum().eta();
2173     m_dimudimu_phiF = muJetF->vertexMomentum().phi();
2174     m_dimudimu_drF = muJetF->dRmax(true);
2175     m_dimudimu_vprobF = muJetF->vertexProb();
2176     if (closestPrimaryVertex != primaryVertices->end()) {
2177     m_dimudimu_lxyF = muJetF->lxy(GlobalPoint(closestPrimaryVertex->x(), closestPrimaryVertex->y(), closestPrimaryVertex->z()));
2178     m_dimudimu_lxyzF = muJetF->lxyz(GlobalPoint(closestPrimaryVertex->x(), closestPrimaryVertex->y(), closestPrimaryVertex->z()));
2179     }
2180     }
2181    
2182 aysen 1.23 m_dimudimu_dz1 = muJet0->dz(theBeamSpot->position());
2183     m_dimudimu_dz2 = muJet1->dz(theBeamSpot->position());
2184     m_dimudimu_deltaz = m_dimudimu_dz1 - m_dimudimu_dz2;
2185    
2186 aysen 1.24 if (m_dimudimu_containstrig > 0 && fabs(m_dimudimu_deltaz) < 0.1) m_dimudimu->Fill();
2187 pivarski 1.14 }
2188     }
2189 pivarski 1.1 }
2190    
2191    
2192     // ------------ method called once each job just before starting event loop ------------
2193     void
2194     FitNtuple::beginJob()
2195     {
2196     }
2197    
2198     // ------------ method called once each job just after ending the event loop ------------
2199     void
2200     FitNtuple::endJob() {
2201     }
2202    
2203     //define this as a plug-in
2204     DEFINE_FWK_MODULE(FitNtuple);