ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MuJetAnalysis/AnalysisTools/FitNtuple/src/FitNtuple.cc
Revision: 1.29
Committed: Fri Feb 1 22:30:38 2013 UTC (12 years, 3 months ago) by pakhotin
Content type: text/plain
Branch: MAIN
Changes since 1.28: +641 -639 lines
Log Message:
cut on size of orphans == 0 is removed from dimuon+dimuon case

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