CMS 3D CMS Logo

TkConvValidator.cc
Go to the documentation of this file.
1 #include <iostream>
2 //
5 //
7 
8 //
12 //
18 //
22 //
28 //
32 //
35 #include "CLHEP/Units/GlobalPhysicalConstants.h"
37 //
46 
47 //
70 
71 //
79 
81 
82 //
83 //
84 #include "TFile.h"
85 #include "TH1.h"
86 #include "TH2.h"
87 #include "TTree.h"
88 #include "TVector3.h"
89 #include "TProfile.h"
90 //
99 using namespace std;
100 
101 
103  {
104 
105  fName_ = pset.getUntrackedParameter<std::string>("Name");
106  verbosity_ = pset.getUntrackedParameter<int>("Verbosity");
107  parameters_ = pset;
108 
109  photonCollectionProducer_ = pset.getParameter<std::string>("phoProducer");
110  photonCollection_ = pset.getParameter<std::string>("photonCollection");
111  photonCollectionPr_Token_ = consumes<reco::PhotonCollection> (
112  edm::InputTag(photonCollectionProducer_,
113  photonCollection_));
114 
115  conversionCollectionProducer_ = pset.getParameter<std::string>("convProducer");
116  conversionCollection_ = pset.getParameter<std::string>("conversionCollection");
117  conversionCollectionPr_Token_ = consumes<reco::ConversionCollection> (
118  edm::InputTag(conversionCollectionProducer_,
119  conversionCollection_));
120 
121  // conversionTrackProducer_ = pset.getParameter<std::string>("trackProducer");
122  dqmpath_ = pset.getParameter<std::string>("dqmpath");
123  minPhoEtCut_ = pset.getParameter<double>("minPhoEtCut");
124  generalTracksOnly_ = pset.getParameter<bool>("generalTracksOnly");
125  arbitratedMerged_ = pset.getParameter<bool>("arbitratedMerged");
126  arbitratedEcalSeeded_ = pset.getParameter<bool>("arbitratedEcalSeeded");
127  ecalalgotracks_ = pset.getParameter<bool>("ecalalgotracks");
128  highPurity_ = pset.getParameter<bool>("highPurity");
129  minProb_ = pset.getParameter<double>("minProb");
130  maxHitsBeforeVtx_ = pset.getParameter<uint>("maxHitsBeforeVtx");
131  minLxy_ = pset.getParameter<double>("minLxy");
132  isRunCentrally_= pset.getParameter<bool>("isRunCentrally");
133 
134  offline_pvToken_ = consumes<reco::VertexCollection>(
135  pset.getUntrackedParameter<edm::InputTag> ("offlinePV",
136  edm::InputTag("offlinePrimaryVertices")));
137  beamspotToken_ = consumes<reco::BeamSpot>(
138  pset.getUntrackedParameter<edm::InputTag> ("beamspot",
139  edm::InputTag("offlineBeamSpot")));
140  g4_simTk_Token_ = consumes<edm::SimTrackContainer>(pset.getParameter<edm::InputTag>("simTracks"));
141  g4_simVtx_Token_ = consumes<edm::SimVertexContainer>(pset.getParameter<edm::InputTag>("simTracks"));
142 
143  tpSelForEff_Token_ = consumes<TrackingParticleRefVector> (
144  edm::InputTag("tpSelecForEfficiency"));
145  tpSelForFake_Token_ = consumes<TrackingParticleRefVector> (
146  edm::InputTag("tpSelecForFakeRate"));
147  //hepMC_Token_ = consumes<edm::HepMCProduct>(edm::InputTag("generatorSmeared"));
148  //genjets_Token_ = consumes<reco::GenJetCollection>(
149  // edm::InputTag("ak4GenJets"));
150 
151  trackAssociator_Token_ = consumes<reco::TrackToTrackingParticleAssociator>(edm::InputTag("trackAssociatorByHitsForConversionValidation"));
152  }
153 
154 
155 
157 
158 
159 
160 
162 
163  nEvt_=0;
164  nEntry_=0;
165  nRecConv_=0;
166  nRecConvAss_=0;
167  nRecConvAssWithEcal_=0;
168 
169  nInvalidPCA_=0;
170 
171  dbe_ = nullptr;
173 
174 
175  double etMin = parameters_.getParameter<double>("etMin");
176  double etMax = parameters_.getParameter<double>("etMax");
177  int etBin = parameters_.getParameter<int>("etBin");
178 
179 
180  double resMin = parameters_.getParameter<double>("resMin");
181  double resMax = parameters_.getParameter<double>("resMax");
182  int resBin = parameters_.getParameter<int>("resBin");
183 
184  double etaMin = parameters_.getParameter<double>("etaMin");
185  double etaMax = parameters_.getParameter<double>("etaMax");
186  int etaBin = parameters_.getParameter<int>("etaBin");
187  int etaBin2 = parameters_.getParameter<int>("etaBin2");
188 
189 
190  double phiMin = parameters_.getParameter<double>("phiMin");
191  double phiMax = parameters_.getParameter<double>("phiMax");
192  int phiBin = parameters_.getParameter<int>("phiBin");
193 
194 
195  double rMin = parameters_.getParameter<double>("rMin");
196  double rMax = parameters_.getParameter<double>("rMax");
197  int rBin = parameters_.getParameter<int>("rBin");
198 
199  double zMin = parameters_.getParameter<double>("zMin");
200  double zMax = parameters_.getParameter<double>("zMax");
201  int zBin = parameters_.getParameter<int>("zBin");
202 
203  double dPhiTracksMin = parameters_.getParameter<double>("dPhiTracksMin");
204  double dPhiTracksMax = parameters_.getParameter<double>("dPhiTracksMax");
205  int dPhiTracksBin = parameters_.getParameter<int>("dPhiTracksBin");
206 
207  double eoverpMin = parameters_.getParameter<double>("eoverpMin");
208  double eoverpMax = parameters_.getParameter<double>("eoverpMax");
209  int eoverpBin = parameters_.getParameter<int>("eoverpBin");
210 
211 
212  // double dEtaTracksMin = parameters_.getParameter<double>("dEtaTracksMin"); // unused
213  // double dEtaTracksMax = parameters_.getParameter<double>("dEtaTracksMax"); // unused
214  // int dEtaTracksBin = parameters_.getParameter<int>("dEtaTracksBin"); // unused
215 
216  double dCotTracksMin = parameters_.getParameter<double>("dCotTracksMin");
217  double dCotTracksMax = parameters_.getParameter<double>("dCotTracksMax");
218  int dCotTracksBin = parameters_.getParameter<int>("dCotTracksBin");
219 
220 
221  double chi2Min = parameters_.getParameter<double>("chi2Min");
222  double chi2Max = parameters_.getParameter<double>("chi2Max");
223 
224 
225  double rMinForXray = parameters_.getParameter<double>("rMinForXray");
226  double rMaxForXray = parameters_.getParameter<double>("rMaxForXray");
227  int rBinForXray = parameters_.getParameter<int>("rBinForXray");
228  double zMinForXray = parameters_.getParameter<double>("zMinForXray");
229  double zMaxForXray = parameters_.getParameter<double>("zMaxForXray");
230  int zBinForXray = parameters_.getParameter<int>("zBinForXray");
231  int zBin2ForXray = parameters_.getParameter<int>("zBin2ForXray");
232 
233  minPhoPtForEffic = parameters_.getParameter<double>("minPhoPtForEffic");
234  maxPhoEtaForEffic = parameters_.getParameter<double>("maxPhoEtaForEffic");
235  maxPhoZForEffic = parameters_.getParameter<double>("maxPhoZForEffic");
236  maxPhoRForEffic = parameters_.getParameter<double>("maxPhoRForEffic");
237  minPhoPtForPurity = parameters_.getParameter<double>("minPhoPtForPurity");
238  maxPhoEtaForPurity = parameters_.getParameter<double>("maxPhoEtaForPurity");
239  maxPhoZForPurity = parameters_.getParameter<double>("maxPhoZForPurity");
240  maxPhoRForPurity = parameters_.getParameter<double>("maxPhoRForPurity");
241 
242 
243  if (dbe_) {
244 
246  // SC from reco photons
247 
248  //TString simfolder = TString(
249  std::string simpath = dqmpath_ + "SimulationInfo";
250  iBooker.setCurrentFolder(simpath);
251  //
252  // simulation information about conversions
254  std::string histname = "nOfSimConversions";
255  h_nSimConv_[0] = iBooker.book1D(histname,"# of Sim conversions per event ",20,-0.5,19.5);
257  histname = "h_AllSimConvEta";
258  h_AllSimConv_[0] = iBooker.book1D(histname," All conversions: simulated #eta",etaBin2,etaMin,etaMax);
259  histname = "h_AllSimConvPhi";
260  h_AllSimConv_[1] = iBooker.book1D(histname," All conversions: simulated #phi",phiBin,phiMin,phiMax);
261  histname = "h_AllSimConvR";
262  h_AllSimConv_[2] = iBooker.book1D(histname," All conversions: simulated R",rBin,rMin,rMax);
263  histname = "h_AllSimConvZ";
264  h_AllSimConv_[3] = iBooker.book1D(histname," All conversions: simulated Z",zBin,zMin,zMax);
265  histname = "h_AllSimConvEt";
266  h_AllSimConv_[4] = iBooker.book1D(histname," All conversions: simulated Et",etBin,etMin,etMax);
267  //
268  histname = "nOfVisSimConversions";
269  h_nSimConv_[1] = iBooker.book1D(histname,"# of Sim conversions per event ",20,-0.5,19.5);
270  histname = "h_VisSimConvEta";
271  h_VisSimConv_[0] = iBooker.book1D(histname," All vis conversions: simulated #eta",etaBin2,etaMin, etaMax);
272  histname = "h_VisSimConvPhi";
273  h_VisSimConv_[1] = iBooker.book1D(histname," All vis conversions: simulated #phi",phiBin,phiMin, phiMax);
274  histname = "h_VisSimConvR";
275  h_VisSimConv_[2] = iBooker.book1D(histname," All vis conversions: simulated R",rBin,rMin,rMax);
276  histname = "h_VisSimConvZ";
277  h_VisSimConv_[3] = iBooker.book1D(histname," All vis conversions: simulated Z",zBin,zMin, zMax);
278  histname = "h_VisSimConvEt";
279  h_VisSimConv_[4] = iBooker.book1D(histname," All vis conversions: simulated Et",etBin,etMin, etMax);
280 
281  //
282  histname = "h_SimConvTwoMTracksEta";
283  h_SimConvTwoMTracks_[0] = iBooker.book1D(histname," All vis conversions with 2 reco-matching tracks: simulated #eta",etaBin2,etaMin, etaMax);
284  histname = "h_SimConvTwoMTracksPhi";
285  h_SimConvTwoMTracks_[1] = iBooker.book1D(histname," All vis conversions with 2 reco-matching tracks: simulated #phi",phiBin,phiMin, phiMax);
286  histname = "h_SimConvTwoMTracksR";
287  h_SimConvTwoMTracks_[2] = iBooker.book1D(histname," All vis conversions with 2 reco-matching tracks: simulated R",rBin,rMin, rMax);
288  histname = "h_SimConvTwoMTracksZ";
289  h_SimConvTwoMTracks_[3] = iBooker.book1D(histname," All vis conversions with 2 reco-matching tracks: simulated Z",zBin,zMin, zMax);
290  histname = "h_SimConvTwoMTracksEt";
291  h_SimConvTwoMTracks_[4] = iBooker.book1D(histname," All vis conversions with 2 reco-matching tracks: simulated Et",etBin,etMin, etMax);
292  //
293  histname = "h_SimConvTwoTracksEta";
294  h_SimConvTwoTracks_[0] = iBooker.book1D(histname," All vis conversions with 2 reco tracks: simulated #eta",etaBin2,etaMin, etaMax);
295  histname = "h_SimConvTwoTracksPhi";
296  h_SimConvTwoTracks_[1] = iBooker.book1D(histname," All vis conversions with 2 reco tracks: simulated #phi",phiBin,phiMin, phiMax);
297  histname = "h_SimConvTwoTracksR";
298  h_SimConvTwoTracks_[2] = iBooker.book1D(histname," All vis conversions with 2 reco tracks: simulated R",rBin,rMin, rMax);
299  histname = "h_SimConvTwoTracksZ";
300  h_SimConvTwoTracks_[3] = iBooker.book1D(histname," All vis conversions with 2 reco tracks: simulated Z",zBin,zMin, zMax);
301  histname = "h_SimConvTwoTracksEt";
302  h_SimConvTwoTracks_[4] = iBooker.book1D(histname," All vis conversions with 2 reco tracks: simulated Et",etBin,etMin, etMax);
303  //
304  histname = "h_SimConvTwoMTracksEtaAndVtxPGT0";
305  h_SimConvTwoMTracksAndVtxPGT0_[0] = iBooker.book1D(histname," All vis conversions with 2 reco-matching tracks + vertex: simulated #eta",etaBin2,etaMin, etaMax);
306  histname = "h_SimConvTwoMTracksPhiAndVtxPGT0";
307  h_SimConvTwoMTracksAndVtxPGT0_[1] = iBooker.book1D(histname," All vis conversions with 2 reco-matching tracks + vertex: simulated #phi",phiBin,phiMin, phiMax);
308  histname = "h_SimConvTwoMTracksRAndVtxPGT0";
309  h_SimConvTwoMTracksAndVtxPGT0_[2] = iBooker.book1D(histname," All vis conversions with 2 reco-matching tracks + vertex: simulated R",rBin,rMin, rMax);
310  histname = "h_SimConvTwoMTracksZAndVtxPGT0";
311  h_SimConvTwoMTracksAndVtxPGT0_[3] = iBooker.book1D(histname," All vis conversions with 2 reco-matching tracks + vertex: simulated Z",zBin,zMin, zMax);
312  histname = "h_SimConvTwoMTracksEtAndVtxPGT0";
313  h_SimConvTwoMTracksAndVtxPGT0_[4] = iBooker.book1D(histname," All vis conversions with 2 reco-matching tracks + vertex: simulated Et",etBin,etMin, etMax);
314 
315  //
316  histname = "h_SimConvTwoMTracksEtaAndVtxPGT0005";
317  h_SimConvTwoMTracksAndVtxPGT0005_[0] = iBooker.book1D(histname," All vis conversions with 2 reco-matching tracks + vertex: simulated #eta",etaBin2,etaMin, etaMax);
318  histname = "h_SimConvTwoMTracksPhiAndVtxPGT0005";
319  h_SimConvTwoMTracksAndVtxPGT0005_[1] = iBooker.book1D(histname," All vis conversions with 2 reco-matching tracks + vertex: simulated #phi",phiBin,phiMin, phiMax);
320  histname = "h_SimConvTwoMTracksRAndVtxPGT0005";
321  h_SimConvTwoMTracksAndVtxPGT0005_[2] = iBooker.book1D(histname," All vis conversions with 2 reco-matching tracks + vertex: simulated R",rBin,rMin, rMax);
322  histname = "h_SimConvTwoMTracksZAndVtxPGT0005";
323  h_SimConvTwoMTracksAndVtxPGT0005_[3] = iBooker.book1D(histname," All vis conversions with 2 reco-matching tracks + vertex: simulated Z",zBin,zMin, zMax);
324  histname = "h_SimConvTwoMTracksEtAndVtxPGT0005";
325  h_SimConvTwoMTracksAndVtxPGT0005_[4] = iBooker.book1D(histname," All vis conversions with 2 reco-matching tracks + vertex: simulated Et",etBin,etMin, etMax);
326 
327  histname = "h_SimRecConvTwoMTracksEta";
328  h_SimRecConvTwoMTracks_[0] = iBooker.book1D(histname," All vis conversions with 2 reco-matching tracks: simulated #eta",etaBin2,etaMin, etaMax);
329  histname = "h_SimRecConvTwoMTracksPhi";
330  h_SimRecConvTwoMTracks_[1] = iBooker.book1D(histname," All vis conversions with 2 reco-matching tracks: simulated #phi",phiBin,phiMin, phiMax);
331  histname = "h_SimRecConvTwoMTracksR";
332  h_SimRecConvTwoMTracks_[2] = iBooker.book1D(histname," All vis conversions with 2 reco-matching tracks: simulated R",rBin,rMin, rMax);
333  histname = "h_SimRecConvTwoMTracksZ";
334  h_SimRecConvTwoMTracks_[3] = iBooker.book1D(histname," All vis conversions with 2 reco-matching tracks: simulated Z",zBin,zMin, zMax);
335  histname = "h_SimRecConvTwoMTracksEt";
336  h_SimRecConvTwoMTracks_[4] = iBooker.book1D(histname," All vis conversions with 2 reco-matching tracks: simulated Et",etBin,etMin, etMax);
337  //
338 
339 
340  h_SimConvEtaPix_[0] = iBooker.book1D("simConvEtaPix"," sim converted Photon Eta: Pix ",etaBin,etaMin, etaMax) ;
341  h_simTkPt_ = iBooker.book1D("simTkPt","Sim conversion tracks pt ",etBin*3,0.,etMax);
342  h_simTkEta_ = iBooker.book1D("simTkEta","Sim conversion tracks eta ",etaBin,etaMin,etaMax);
343 
344  h_simConvVtxRvsZ_[0] = iBooker.book2D("simConvVtxRvsZAll"," Photon Sim conversion vtx position",zBinForXray, zMinForXray, zMaxForXray, rBinForXray, rMinForXray, rMaxForXray);
345  h_simConvVtxRvsZ_[1] = iBooker.book2D("simConvVtxRvsZBarrel"," Photon Sim conversion vtx position",zBinForXray, zMinForXray, zMaxForXray, rBinForXray, rMinForXray, rMaxForXray);
346  h_simConvVtxRvsZ_[2] = iBooker.book2D("simConvVtxRvsZEndcap"," Photon Sim conversion vtx position",zBin2ForXray, zMinForXray, zMaxForXray, rBinForXray, rMinForXray, rMaxForXray);
347  h_simConvVtxRvsZ_[3] = iBooker.book2D("simConvVtxRvsZBarrel2"," Photon Sim conversion vtx position when reco R<4cm",zBinForXray, zMinForXray, zMaxForXray, rBinForXray, rMinForXray, rMaxForXray);
348  h_simConvVtxYvsX_ = iBooker.book2D("simConvVtxYvsXTrkBarrel"," Photon Sim conversion vtx position, (x,y) eta<1 ",100, -80., 80., 100, -80., 80.);
349 
350  std::string convpath = dqmpath_ + "ConversionInfo";
351  iBooker.setCurrentFolder(convpath);
352 
353  histname="nConv";
354  h_nConv_[0][0] = iBooker.book1D(histname+"All","Number Of Conversions per isolated candidates per events: All Ecal ",10,-0.5, 9.5);
355  h_nConv_[0][1] = iBooker.book1D(histname+"Barrel","Number Of Conversions per isolated candidates per events: Ecal Barrel ",10,-0.5, 9.5);
356  h_nConv_[0][2] = iBooker.book1D(histname+"Endcap","Number Of Conversions per isolated candidates per events: Ecal Endcap ",10,-0.5, 9.5);
357  h_nConv_[1][0] = iBooker.book1D(histname+"All_Ass","Number Of associated Conversions per isolated candidates per events: All Ecal ",10,-0.5, 9.5);
358 
359  h_convEta_[0][0] = iBooker.book1D("convEta"," converted Photon Eta ",etaBin,etaMin, etaMax) ;
360  h_convEtaMatchSC_[0][0] = iBooker.book1D("convEtaMatchSC"," converted Photon Eta when SC is matched ",etaBin,etaMin, etaMax) ;
361  h_convEta2_[0][0] = iBooker.book1D("convEta2"," converted Photon Eta ",etaBin2,etaMin, etaMax) ;
362  h_convPhi_[0][0] = iBooker.book1D("convPhi"," converted Photon Phi ",phiBin,phiMin,phiMax) ;
363  h_convR_[0][0] = iBooker.book1D("convR"," converted photon R",rBin,rMin, rMax);
364  h_convZ_[0][0] = iBooker.book1D("convZ"," converted photon Z",zBin,zMin, zMax);
365  h_convPt_[0][0] = iBooker.book1D("convPt"," conversions Transverse Energy: all eta ", etBin,etMin, etMax);
366 
367  h_convEta_[1][0] = iBooker.book1D("convEtaAss2"," Matched converted Photon Eta ",etaBin2,etaMin, etaMax) ;
368  h_convEta_[1][1] = iBooker.book1D("convEtaAss"," Matched converted Photon Eta ",etaBin,etaMin, etaMax) ;
369  h_convEtaMatchSC_[1][0] = iBooker.book1D("convEtaMatchSCAss"," converted Photon Eta when SC is matched ",etaBin,etaMin, etaMax) ;
370  h_convPhi_[1][0] = iBooker.book1D("convPhiAss"," Matched converted Photon Phi ",phiBin,phiMin,phiMax) ;
371  h_convR_[1][0] = iBooker.book1D("convRAss"," Matched converted photon R",rBin,rMin, rMax);
372  h_convZ_[1][0] = iBooker.book1D("convZAss"," Matched converted photon Z",zBin,zMin, zMax);
373  h_convPt_[1][0] = iBooker.book1D("convPtAss","Matched conversions Transverse Energy: all eta ", etBin,etMin, etMax);
374 
375  h_convEta_[2][0] = iBooker.book1D("convEtaFake2"," Fake converted Photon Eta ",etaBin2,etaMin, etaMax) ;
376  h_convEta_[2][1] = iBooker.book1D("convEtaFake"," Fake converted Photon Eta ",etaBin,etaMin, etaMax) ;
377  h_convEtaMatchSC_[2][0] = iBooker.book1D("convEtaMatchSCFake"," converted Photon Eta when SC is matched ",etaBin,etaMin, etaMax) ;
378  h_convPhi_[2][0] = iBooker.book1D("convPhiFake"," Fake converted Photon Phi ",phiBin,phiMin,phiMax) ;
379  h_convR_[2][0] = iBooker.book1D("convRFake"," Fake converted photon R",rBin,rMin, rMax);
380  h_convZ_[2][0] = iBooker.book1D("convZFake"," Fake converted photon Z",zBin,zMin, zMax);
381  h_convPt_[2][0] = iBooker.book1D("convPtFake","Fake conversions Transverse Energy: all eta ", etBin,etMin, etMax);
382 
383  h_convRplot_ = iBooker.book1D("convRplot"," converted photon R",600, 0.,120.);
384  h_convZplot_ = iBooker.book1D("convZplot"," converted photon Z",320,-160.,160.);
385 
386  histname = "convSCdPhi";
387  h_convSCdPhi_[0][0] = iBooker.book1D(histname+"All","dPhi between SC and conversion",100, -0.1,0.1);
388  h_convSCdPhi_[0][1] = iBooker.book1D(histname+"Barrel"," dPhi between SC and conversion: Barrel",100, -0.1,0.1);
389  h_convSCdPhi_[0][2] = iBooker.book1D(histname+"Endcap"," dPhi between SC and conversion: Endcap",100, -0.1,0.1);
390  h_convSCdPhi_[1][0] = iBooker.book1D(histname+"All_Ass","dPhi between SC and conversion",100, -0.1,0.1);
391  h_convSCdPhi_[1][1] = iBooker.book1D(histname+"Barrel_Ass"," dPhi between SC and conversion: Barrel",100, -0.1,0.1);
392  h_convSCdPhi_[1][2] = iBooker.book1D(histname+"Endcap_Ass"," dPhi between SC and conversion: Endcap",100, -0.1,0.1);
393  h_convSCdPhi_[2][0] = iBooker.book1D(histname+"All_Fakes","dPhi between SC and conversion",100, -0.1,0.1);
394  h_convSCdPhi_[2][1] = iBooker.book1D(histname+"Barrel_Fakes"," dPhi between SC and conversion: Barrel",100, -0.1,0.1);
395  h_convSCdPhi_[2][2] = iBooker.book1D(histname+"Endcap_Fakes"," dPhi between SC and conversion: Endcap",100, -0.1,0.1);
396  histname = "convSCdEta";
397  h_convSCdEta_[0][0] = iBooker.book1D(histname+"All"," dEta between SC and conversion",100, -0.1,0.1);
398  h_convSCdEta_[0][1] = iBooker.book1D(histname+"Barrel"," dEta between SC and conversion: Barrel",100, -0.1,0.1);
399  h_convSCdEta_[0][2] = iBooker.book1D(histname+"Endcap"," dEta between SC and conversion: Endcap",100, -0.1,0.1);
400  h_convSCdEta_[1][0] = iBooker.book1D(histname+"All_Ass"," dEta between SC and conversion",100, -0.1,0.1);
401  h_convSCdEta_[1][1] = iBooker.book1D(histname+"Barrel_Ass"," dEta between SC and conversion: Barrel",100, -0.1,0.1);
402  h_convSCdEta_[1][2] = iBooker.book1D(histname+"Endcap_Ass"," dEta between SC and conversion: Endcap",100, -0.1,0.1);
403  h_convSCdEta_[2][0] = iBooker.book1D(histname+"All_Fakes"," dEta between SC and conversion",100, -0.1,0.1);
404  h_convSCdEta_[2][1] = iBooker.book1D(histname+"Barrel_Fakes"," dEta between SC and conversion: Barrel",100, -0.1,0.1);
405  h_convSCdEta_[2][2] = iBooker.book1D(histname+"Endcap_Fakes"," dEta between SC and conversion: Endcap",100, -0.1,0.1);
406 
407  histname = "convPtRes";
408  h_convPtRes_[0] = iBooker.book1D(histname+"All"," Conversion Pt rec/true : All ecal ", resBin,resMin, resMax);
409  h_convPtRes_[1] = iBooker.book1D(histname+"Barrel"," Conversion Pt rec/true : Barrel ",resBin,resMin, resMax);
410  h_convPtRes_[2] = iBooker.book1D(histname+"Endcap"," Conversion Pt rec/true : Endcap ",resBin,resMin, resMax);
411 
412 
413  histname="hInvMass";
414  h_invMass_[0][0]= iBooker.book1D(histname+"All_AllTracks"," Photons:Tracks from conversion: Pair invariant mass: all Ecal ",100, 0., 1.5);
415  h_invMass_[0][1]= iBooker.book1D(histname+"Barrel_AllTracks"," Photons:Tracks from conversion: Pair invariant mass: Barrel Ecal ",100, 0., 1.5);
416  h_invMass_[0][2]= iBooker.book1D(histname+"Endcap_AllTracks"," Photons:Tracks from conversion: Pair invariant mass: Endcap Ecal ",100, 0., 1.5);
417  //
418  h_invMass_[1][0]= iBooker.book1D(histname+"All_AssTracks"," Photons:Tracks from conversion: Pair invariant mass: all Ecal ",100, 0., 1.5);
419  h_invMass_[1][1]= iBooker.book1D(histname+"Barrel_AssTracks"," Photons:Tracks from conversion: Pair invariant mass: Barrel Ecal ",100, 0., 1.5);
420  h_invMass_[1][2]= iBooker.book1D(histname+"Endcap_AssTracks"," Photons:Tracks from conversion: Pair invariant mass: Endcap Ecal ",100, 0., 1.5);
421  //
422  h_invMass_[2][0]= iBooker.book1D(histname+"All_FakeTracks"," Photons:Tracks from conversion: Pair invariant mass: all Ecal ",100, 0., 1.5);
423  h_invMass_[2][1]= iBooker.book1D(histname+"Barrel_FakeTracks"," Photons:Tracks from conversion: Pair invariant mass: Barrel Ecal ",100, 0., 1.5);
424  h_invMass_[2][2]= iBooker.book1D(histname+"Endcap_FaleTracks"," Photons:Tracks from conversion: Pair invariant mass: Endcap Ecal ",100, 0., 1.5);
425 
426 
427 
428  histname="hDPhiTracksAtVtx";
429  h_DPhiTracksAtVtx_[0][0] =iBooker.book1D(histname+"All", " Photons:Tracks from conversions: #delta#phi Tracks at vertex: all Ecal",dPhiTracksBin,dPhiTracksMin,dPhiTracksMax);
430  h_DPhiTracksAtVtx_[0][1] =iBooker.book1D(histname+"Barrel", " Photons:Tracks from conversions: #delta#phi Tracks at vertex: Barrel Ecal",dPhiTracksBin,dPhiTracksMin,dPhiTracksMax);
431  h_DPhiTracksAtVtx_[0][2] =iBooker.book1D(histname+"Endcap", " Photons:Tracks from conversions: #delta#phi Tracks at vertex: Endcap Ecal",dPhiTracksBin,dPhiTracksMin,dPhiTracksMax);
432  h_DPhiTracksAtVtx_[1][0] =iBooker.book1D(histname+"All_Ass", " Photons:Tracks from conversions: #delta#phi Tracks at vertex: all Ecal",dPhiTracksBin,dPhiTracksMin,dPhiTracksMax);
433  h_DPhiTracksAtVtx_[1][1] =iBooker.book1D(histname+"Barrel_Ass", " Photons:Tracks from conversions: #delta#phi Tracks at vertex: Barrel Ecal",dPhiTracksBin,dPhiTracksMin,dPhiTracksMax);
434  h_DPhiTracksAtVtx_[1][2] =iBooker.book1D(histname+"Endcap_Ass", " Photons:Tracks from conversions: #delta#phi Tracks at vertex: Endcap Ecal",dPhiTracksBin,dPhiTracksMin,dPhiTracksMax);
435  h_DPhiTracksAtVtx_[2][0] =iBooker.book1D(histname+"All_Fakes", " Photons:Tracks from conversions: #delta#phi Tracks at vertex: all Ecal",dPhiTracksBin,dPhiTracksMin,dPhiTracksMax);
436  h_DPhiTracksAtVtx_[2][1] =iBooker.book1D(histname+"Barrel_Fakes", " Photons:Tracks from conversions: #delta#phi Tracks at vertex: Barrel Ecal",dPhiTracksBin,dPhiTracksMin,dPhiTracksMax);
437  h_DPhiTracksAtVtx_[2][2] =iBooker.book1D(histname+"Endcap_Fakes", " Photons:Tracks from conversions: #delta#phi Tracks at vertex: Endcap Ecal",dPhiTracksBin,dPhiTracksMin,dPhiTracksMax);
438 
439 
440 
441  histname="hDPhiTracksAtVtxVsEta";
442  h2_DPhiTracksAtVtxVsEta_ = iBooker.book2D(histname+"All"," Photons:Tracks from conversions: #delta#phi Tracks at vertex vs #eta",etaBin2,etaMin, etaMax,100, -0.5, 0.5);
443  histname="pDPhiTracksAtVtxVsEta";
444  p_DPhiTracksAtVtxVsEta_ = iBooker.bookProfile(histname+"All"," Photons:Tracks from conversions: #delta#phi Tracks at vertex vs #eta ",etaBin2,etaMin, etaMax, 100, -0.5, 0.5,"");
445 
446  histname="hDPhiTracksAtVtxVsR";
447  h2_DPhiTracksAtVtxVsR_ = iBooker.book2D(histname+"All"," Photons:Tracks from conversions: #delta#phi Tracks at vertex vs R",rBin,rMin, rMax,100, -0.5, 0.5);
448  histname="pDPhiTracksAtVtxVsR";
449  p_DPhiTracksAtVtxVsR_ = iBooker.bookProfile(histname+"All"," Photons:Tracks from conversions: #delta#phi Tracks at vertex vs R ",rBin,rMin, rMax,100, -0.5, 0.5,"");
450 
451 
452  histname="hDCotTracks";
453  h_DCotTracks_[0][0]= iBooker.book1D(histname+"All"," Photons:Tracks from conversions #delta cotg(#Theta) Tracks: all Ecal ",dCotTracksBin,dCotTracksMin,dCotTracksMax);
454  h_DCotTracks_[0][1]= iBooker.book1D(histname+"Barrel"," Photons:Tracks from conversions #delta cotg(#Theta) Tracks: Barrel Ecal ",dCotTracksBin,dCotTracksMin,dCotTracksMax);
455  h_DCotTracks_[0][2]= iBooker.book1D(histname+"Endcap"," Photons:Tracks from conversions #delta cotg(#Theta) Tracks: Endcap Ecal ",dCotTracksBin,dCotTracksMin,dCotTracksMax);
456  h_DCotTracks_[1][0]= iBooker.book1D(histname+"All_Ass"," Photons:Tracks from conversions #delta cotg(#Theta) Tracks: all Ecal ",dCotTracksBin,dCotTracksMin,dCotTracksMax);
457  h_DCotTracks_[1][1]= iBooker.book1D(histname+"Barrel_Ass"," Photons:Tracks from conversions #delta cotg(#Theta) Tracks: Barrel Ecal ",dCotTracksBin,dCotTracksMin,dCotTracksMax);
458  h_DCotTracks_[1][2]= iBooker.book1D(histname+"Endcap_Ass"," Photons:Tracks from conversions #delta cotg(#Theta) Tracks: Endcap Ecal ",dCotTracksBin,dCotTracksMin,dCotTracksMax);
459  h_DCotTracks_[2][0]= iBooker.book1D(histname+"All_Fakes"," Photons:Tracks from conversions #delta cotg(#Theta) Tracks: all Ecal ",dCotTracksBin,dCotTracksMin,dCotTracksMax);
460  h_DCotTracks_[2][1]= iBooker.book1D(histname+"Barrel_Fakes"," Photons:Tracks from conversions #delta cotg(#Theta) Tracks: Barrel Ecal ",dCotTracksBin,dCotTracksMin,dCotTracksMax);
461  h_DCotTracks_[2][2]= iBooker.book1D(histname+"Endcap_Fakes"," Photons:Tracks from conversions #delta cotg(#Theta) Tracks: Endcap Ecal ",dCotTracksBin,dCotTracksMin,dCotTracksMax);
462 
463 
464  histname="hDCotTracksVsEta";
465  h2_DCotTracksVsEta_ = iBooker.book2D(histname+"All"," Photons:Tracks from conversions: #delta cotg(#Theta) Tracks vs #eta",etaBin2,etaMin, etaMax,100, -0.2, 0.2);
466  histname="pDCotTracksVsEta";
467  p_DCotTracksVsEta_ = iBooker.bookProfile(histname+"All"," Photons:Tracks from conversions: #delta cotg(#Theta) Tracks vs #eta ",etaBin2,etaMin, etaMax, 100, -0.2, 0.2,"");
468 
469  histname="hDCotTracksVsR";
470  h2_DCotTracksVsR_ = iBooker.book2D(histname+"All"," Photons:Tracks from conversions: #delta cotg(#Theta) Tracks at vertex vs R",rBin,rMin, rMax,100, -0.2, 0.2);
471  histname="pDCotTracksVsR";
472  p_DCotTracksVsR_ = iBooker.bookProfile(histname+"All"," Photons:Tracks from conversions: #delta cotg(#Theta) Tracks at vertex vs R ",rBin,rMin, rMax,100, -0.2, 0.2,"");
473 
474 
475  histname="hDistMinAppTracks";
476  h_distMinAppTracks_[0][0]= iBooker.book1D(histname+"All"," Photons:Tracks from conversions Min Approach Dist Tracks: all Ecal ",120, -0.5, 1.0);
477  h_distMinAppTracks_[0][1]= iBooker.book1D(histname+"Barrel"," Photons:Tracks from conversions Min Approach Dist Tracks: Barrel Ecal ",120, -0.5, 1.0);
478  h_distMinAppTracks_[0][2]= iBooker.book1D(histname+"Endcap"," Photons:Tracks from conversions Min Approach Dist Tracks: Endcap Ecal ",120, -0.5, 1.0);
479  h_distMinAppTracks_[1][0]= iBooker.book1D(histname+"All_Ass"," Photons:Tracks from conversions Min Approach Dist Tracks: all Ecal ",120, -0.5, 1.0);
480  h_distMinAppTracks_[1][1]= iBooker.book1D(histname+"Barrel_Ass"," Photons:Tracks from conversions Min Approach Dist Tracks: Barrel Ecal ",120, -0.5, 1.0);
481  h_distMinAppTracks_[1][2]= iBooker.book1D(histname+"Endcap_Ass"," Photons:Tracks from conversions Min Approach Dist Tracks: Endcap Ecal ",120, -0.5, 1.0);
482  h_distMinAppTracks_[2][0]= iBooker.book1D(histname+"All_Fakes"," Photons:Tracks from conversions Min Approach Dist Tracks: all Ecal ",120, -0.5, 1.0);
483  h_distMinAppTracks_[2][1]= iBooker.book1D(histname+"Barrel_Fakes"," Photons:Tracks from conversions Min Approach Dist Tracks: Barrel Ecal ",120, -0.5, 1.0);
484  h_distMinAppTracks_[2][2]= iBooker.book1D(histname+"Endcap_Fakes"," Photons:Tracks from conversions Min Approach Dist Tracks: Endcap Ecal ",120, -0.5, 1.0);
485 
486 
487  h_convVtxRvsZ_[0] = iBooker.book2D("convVtxRvsZAll"," Photon Reco conversion vtx position",zBinForXray, zMinForXray, zMaxForXray, rBinForXray, rMinForXray, rMaxForXray);
488  h_convVtxRvsZ_[1] = iBooker.book2D("convVtxRvsZBarrel"," Photon Reco conversion vtx position",zBinForXray, zMinForXray, zMaxForXray, rBinForXray, rMinForXray, rMaxForXray);
489  h_convVtxRvsZ_[2] = iBooker.book2D("convVtxRvsZEndcap"," Photon Reco conversion vtx position",zBin2ForXray, zMinForXray, zMaxForXray, rBinForXray, rMinForXray, rMaxForXray);
490  h_convVtxYvsX_ = iBooker.book2D("convVtxYvsXTrkBarrel"," Photon Reco conversion vtx position, (x,y) eta<1 ", 1000, -60., 60., 1000, -60., 60.);
492  h_convVtxRvsZ_zoom_[0] = iBooker.book2D("convVtxRvsZBarrelZoom1"," Photon Reco conversion vtx position",zBinForXray, zMinForXray, zMaxForXray, rBinForXray, -10., 40.);
493  h_convVtxRvsZ_zoom_[1] = iBooker.book2D("convVtxRvsZBarrelZoom2"," Photon Reco conversion vtx position",zBinForXray, zMinForXray, zMaxForXray, rBinForXray, -10., 20.);
494  h_convVtxYvsX_zoom_[0] = iBooker.book2D("convVtxYvsXTrkBarrelZoom1"," Photon Reco conversion vtx position, (x,y) eta<1 ",100, -40., 40., 100, -40., 40.);
495  h_convVtxYvsX_zoom_[1] = iBooker.book2D("convVtxYvsXTrkBarrelZoom2"," Photon Reco conversion vtx position, (x,y) eta<1 ",100, -20., 20., 100, -20., 20.);
496 
497  h_convVtxdR_ = iBooker.book1D("convVtxdR"," Photon Reco conversion vtx dR",100, -10.,10.);
498  h_convVtxdX_ = iBooker.book1D("convVtxdX"," Photon Reco conversion vtx dX",100, -10.,10.);
499  h_convVtxdY_ = iBooker.book1D("convVtxdY"," Photon Reco conversion vtx dY",100, -10.,10.);
500  h_convVtxdZ_ = iBooker.book1D("convVtxdZ"," Photon Reco conversion vtx dZ",100, -20.,20.);
501 
502  h_convVtxdPhi_ = iBooker.book1D("convVtxdPhi"," Photon Reco conversion vtx dPhi",100, -0.01,0.01);
503  h_convVtxdEta_ = iBooker.book1D("convVtxdEta"," Photon Reco conversion vtx dEta",100, -0.5,0.5);
504 
505  h_convVtxdR_barrel_ = iBooker.book1D("convVtxdR_barrel"," Photon Reco conversion vtx dR, |eta|<=1.2",100, -10.,10.);
506  h_convVtxdX_barrel_ = iBooker.book1D("convVtxdX_barrel"," Photon Reco conversion vtx dX, |eta|<=1.2",100, -10.,10.);
507  h_convVtxdY_barrel_ = iBooker.book1D("convVtxdY_barrel"," Photon Reco conversion vtx dY, |eta|<=1.2 ",100, -10.,10.);
508  h_convVtxdZ_barrel_ = iBooker.book1D("convVtxdZ_barrel"," Photon Reco conversion vtx dZ, |eta|<=1.2,",100, -20.,20.);
509 
510  h_convVtxdR_endcap_ = iBooker.book1D("convVtxdR_endcap"," Photon Reco conversion vtx dR, |eta|>1.2 ",100, -10.,10.);
511  h_convVtxdX_endcap_ = iBooker.book1D("convVtxdX_endcap"," Photon Reco conversion vtx dX, |eta|>1.2",100, -10.,10.);
512  h_convVtxdY_endcap_ = iBooker.book1D("convVtxdY_endcap"," Photon Reco conversion vtx dY, |eta|>1.2",100, -10.,10.);
513  h_convVtxdZ_endcap_ = iBooker.book1D("convVtxdZ_endcap"," Photon Reco conversion vtx dZ, |eta|>1.2",100, -20.,20.);
514 
515 
516 
517  h2_convVtxdRVsR_ = iBooker.book2D("h2ConvVtxdRVsR"," Conversion vtx dR vsR" ,rBin,rMin, rMax,100, -20.,20.);
518  h2_convVtxdRVsEta_ = iBooker.book2D("h2ConvVtxdRVsEta","Conversion vtx dR vs Eta" ,etaBin2,etaMin, etaMax,100, -20.,20.);
519 
520  p_convVtxdRVsR_ = iBooker.bookProfile("pConvVtxdRVsR"," Conversion vtx dR vsR" ,rBin,rMin, rMax ,100, -20.,20., "");
521  p_convVtxdRVsEta_ = iBooker.bookProfile("pConvVtxdRVsEta","Conversion vtx dR vs Eta" ,etaBin2,etaMin, etaMax, 100, -20.,20., "");
522  p_convVtxdXVsX_ = iBooker.bookProfile("pConvVtxdXVsX","Conversion vtx dX vs X" ,120,-60, 60 ,100, -20.,20., "");
523  p_convVtxdYVsY_ = iBooker.bookProfile("pConvVtxdYVsY","Conversion vtx dY vs Y" ,120,-60, 60 ,100, -20.,20., "");
524  p_convVtxdZVsZ_ = iBooker.bookProfile("pConvVtxdZVsZ","Conversion vtx dZ vs Z" ,zBin,zMin,zMax ,100, -20.,20., "");
525 
526  p_convVtxdZVsR_ = iBooker.bookProfile("pConvVtxdZVsR","Conversion vtx dZ vs R" ,rBin,rMin,rMax ,100, -20.,20., "");
527  p2_convVtxdRVsRZ_ = iBooker.bookProfile2D("p2ConvVtxdRVsRZ","Conversion vtx dR vs RZ" ,zBin,zMin, zMax,rBin,rMin,rMax,100, 0.,20.,"s");
528  p2_convVtxdZVsRZ_ = iBooker.bookProfile2D("p2ConvVtxdZVsRZ","Conversion vtx dZ vs RZ" ,zBin,zMin, zMax,rBin,rMin,rMax,100, 0.,20.,"s");
529 
530 
531  histname="EoverPtracks";
532  h_EoverPTracks_[0][0] = iBooker.book1D(histname+"All"," photons conversion E/p: all Ecal ", eoverpBin, eoverpMin, eoverpMax );
533  h_EoverPTracks_[0][1] = iBooker.book1D(histname+"Barrel"," photons conversion E/p: Barrel Ecal", eoverpBin, eoverpMin, eoverpMax);
534  h_EoverPTracks_[0][2] = iBooker.book1D(histname+"Endcap"," photons conversion E/p: Endcap Ecal ", eoverpBin, eoverpMin, eoverpMax);
535  h_EoverPTracks_[1][0] = iBooker.book1D(histname+"All_Ass"," photons conversion E/p: all Ecal ", eoverpBin, eoverpMin, eoverpMax);
536  h_EoverPTracks_[1][1] = iBooker.book1D(histname+"Barrel_Ass"," photons conversion E/p: Barrel Ecal", eoverpBin, eoverpMin, eoverpMax);
537  h_EoverPTracks_[1][2] = iBooker.book1D(histname+"Endcap_Ass"," photons conversion E/p: Endcap Ecal ", eoverpBin, eoverpMin, eoverpMax);
538  h_EoverPTracks_[2][0] = iBooker.book1D(histname+"All_Fakes"," photons conversion E/p: all Ecal ", eoverpBin, eoverpMin, eoverpMax);
539  h_EoverPTracks_[2][1] = iBooker.book1D(histname+"Barrel_Fakes"," photons conversion E/p: Barrel Ecal", eoverpBin, eoverpMin, eoverpMax);
540  h_EoverPTracks_[2][2] = iBooker.book1D(histname+"Endcap_Fakes"," photons conversion E/p: Endcap Ecal ", eoverpBin, eoverpMin, eoverpMax);
541 
542 
543  h2_convVtxRrecVsTrue_ = iBooker.book2D("h2ConvVtxRrecVsTrue","Photon Reco conversion vtx R rec vs true" ,rBin,rMin, rMax,rBin,rMin, rMax);
544 
545  histname="vtxChi2Prob";
546  h_vtxChi2Prob_[0][0] = iBooker.book1D(histname+"All","vertex #chi^{2} all", 100, 0., 1.);
547  h_vtxChi2Prob_[0][1] = iBooker.book1D(histname+"Barrel","vertex #chi^{2} barrel", 100, 0., 1.);
548  h_vtxChi2Prob_[0][2] = iBooker.book1D(histname+"Endcap","vertex #chi^{2} endcap", 100, 0., 1.);
549  h_vtxChi2Prob_[1][0] = iBooker.book1D(histname+"All_Ass","vertex #chi^{2} all", 100, 0., 1.);
550  h_vtxChi2Prob_[1][1] = iBooker.book1D(histname+"Barrel_Ass","vertex #chi^{2} barrel", 100, 0., 1.);
551  h_vtxChi2Prob_[1][2] = iBooker.book1D(histname+"Endcap_Ass","vertex #chi^{2} endcap", 100, 0., 1.);
552  h_vtxChi2Prob_[2][0] = iBooker.book1D(histname+"All_Fakes","vertex #chi^{2} all", 100, 0., 1.);
553  h_vtxChi2Prob_[2][1] = iBooker.book1D(histname+"Barrel_Fakes","vertex #chi^{2} barrel", 100, 0., 1.);
554  h_vtxChi2Prob_[2][2] = iBooker.book1D(histname+"Endcap_Fakes","vertex #chi^{2} endcap", 100, 0., 1.);
555 
556 
557  h_zPVFromTracks_[1] = iBooker.book1D("zPVFromTracks"," Photons: PV z from conversion tracks",100, -25., 25.);
558  h_dzPVFromTracks_[1] = iBooker.book1D("dzPVFromTracks"," Photons: PV Z_rec - Z_true from conversion tracks",100, -5., 5.);
559  h2_dzPVVsR_ = iBooker.book2D("h2dzPVVsR","Photon Reco conversions: dz(PV) vs R" ,rBin,rMin, rMax,100, -3.,3.);
560  p_dzPVVsR_ = iBooker.bookProfile("pdzPVVsR","Photon Reco conversions: dz(PV) vs R" ,rBin,rMin, rMax, 100, -3.,3.,"");
561 
562 
563  histname="lxybs";
564  h_lxybs_[0][0] = iBooker.book1D(histname+"All","vertex #chi^{2} all", 200, -100., 100.);
565  h_lxybs_[0][1] = iBooker.book1D(histname+"Barrel","vertex #chi^{2} barrel", 200, -100., 100.);
566  h_lxybs_[0][2] = iBooker.book1D(histname+"Endcap","vertex #chi^{2} endcap", 200, -100., 100.);
567  h_lxybs_[1][0] = iBooker.book1D(histname+"All_Ass","vertex #chi^{2} all", 200, -100., 100.);
568  h_lxybs_[1][1] = iBooker.book1D(histname+"Barrel_Ass","vertex #chi^{2} barrel", 200, -100., 100.);
569  h_lxybs_[1][2] = iBooker.book1D(histname+"Endcap_Ass","vertex #chi^{2} endcap", 200, -100., 100.);
570  h_lxybs_[2][0] = iBooker.book1D(histname+"All_Fakes","vertex #chi^{2} all", 200, -100., 100.);
571  h_lxybs_[2][1] = iBooker.book1D(histname+"Barrel_Fakes","vertex #chi^{2} barrel", 200, -100., 100.);
572  h_lxybs_[2][2] = iBooker.book1D(histname+"Endcap_Fakes","vertex #chi^{2} endcap", 200, -100., 100.);
573 
574  histname="maxNHitsBeforeVtx";
575  h_maxNHitsBeforeVtx_[0][0] = iBooker.book1D(histname+"All","vertex #chi^{2} all", 16, -0.5, 15.5);
576  h_maxNHitsBeforeVtx_[0][1] = iBooker.book1D(histname+"Barrel","vertex #chi^{2} barrel", 16, -0.5, 15.5);
577  h_maxNHitsBeforeVtx_[0][2] = iBooker.book1D(histname+"Endcap","vertex #chi^{2} endcap", 16, -0.5, 15.5);
578  h_maxNHitsBeforeVtx_[1][0] = iBooker.book1D(histname+"All_Ass","vertex #chi^{2} all", 16, -0.5, 15.5);
579  h_maxNHitsBeforeVtx_[1][1] = iBooker.book1D(histname+"Barrel_Ass","vertex #chi^{2} barrel", 16, -0.5, 15.5);
580  h_maxNHitsBeforeVtx_[1][2] = iBooker.book1D(histname+"Endcap_Ass","vertex #chi^{2} endcap", 16, -0.5, 15.5);
581  h_maxNHitsBeforeVtx_[2][0] = iBooker.book1D(histname+"All_Fakes","vertex #chi^{2} all", 16, -0.5, 15.5);
582  h_maxNHitsBeforeVtx_[2][1] = iBooker.book1D(histname+"Barrel_Fakes","vertex #chi^{2} barrel", 16, -0.5, 15.5);
583  h_maxNHitsBeforeVtx_[2][2] = iBooker.book1D(histname+"Endcap_Fakes","vertex #chi^{2} endcap", 16, -0.5, 15.5);
584 
585  histname="leadNHitsBeforeVtx";
586  h_leadNHitsBeforeVtx_[0][0] = iBooker.book1D(histname+"All","vertex #chi^{2} all", 16, -0.5, 15.5);
587  h_leadNHitsBeforeVtx_[0][1] = iBooker.book1D(histname+"Barrel","vertex #chi^{2} barrel", 16, -0.5, 15.5);
588  h_leadNHitsBeforeVtx_[0][2] = iBooker.book1D(histname+"Endcap","vertex #chi^{2} endcap", 16, -0.5, 15.5);
589  h_leadNHitsBeforeVtx_[1][0] = iBooker.book1D(histname+"All_Ass","vertex #chi^{2} all", 16, -0.5, 15.5);
590  h_leadNHitsBeforeVtx_[1][1] = iBooker.book1D(histname+"Barrel_Ass","vertex #chi^{2} barrel", 16, -0.5, 15.5);
591  h_leadNHitsBeforeVtx_[1][2] = iBooker.book1D(histname+"Endcap_Ass","vertex #chi^{2} endcap", 16, -0.5, 15.5);
592  h_leadNHitsBeforeVtx_[2][0] = iBooker.book1D(histname+"All_Fakes","vertex #chi^{2} all", 16, -0.5, 15.5);
593  h_leadNHitsBeforeVtx_[2][1] = iBooker.book1D(histname+"Barrel_Fakes","vertex #chi^{2} barrel", 16, -0.5, 15.5);
594  h_leadNHitsBeforeVtx_[2][2] = iBooker.book1D(histname+"Endcap_Fakes","vertex #chi^{2} endcap", 16, -0.5, 15.5);
595 
596  histname="trailNHitsBeforeVtx";
597  h_trailNHitsBeforeVtx_[0][0] = iBooker.book1D(histname+"All","vertex #chi^{2} all", 16, -0.5, 15.5);
598  h_trailNHitsBeforeVtx_[0][1] = iBooker.book1D(histname+"Barrel","vertex #chi^{2} barrel", 16, -0.5, 15.5);
599  h_trailNHitsBeforeVtx_[0][2] = iBooker.book1D(histname+"Endcap","vertex #chi^{2} endcap", 16, -0.5, 15.5);
600  h_trailNHitsBeforeVtx_[1][0] = iBooker.book1D(histname+"All_Ass","vertex #chi^{2} all", 16, -0.5, 15.5);
601  h_trailNHitsBeforeVtx_[1][1] = iBooker.book1D(histname+"Barrel_Ass","vertex #chi^{2} barrel", 16, -0.5, 15.5);
602  h_trailNHitsBeforeVtx_[1][2] = iBooker.book1D(histname+"Endcap_Ass","vertex #chi^{2} endcap", 16, -0.5, 15.5);
603  h_trailNHitsBeforeVtx_[2][0] = iBooker.book1D(histname+"All_Fakes","vertex #chi^{2} all", 16, -0.5, 15.5);
604  h_trailNHitsBeforeVtx_[2][1] = iBooker.book1D(histname+"Barrel_Fakes","vertex #chi^{2} barrel", 16, -0.5, 15.5);
605  h_trailNHitsBeforeVtx_[2][2] = iBooker.book1D(histname+"Endcap_Fakes","vertex #chi^{2} endcap", 16, -0.5, 15.5);
606 
607  histname="sumNHitsBeforeVtx";
608  h_sumNHitsBeforeVtx_[0][0] = iBooker.book1D(histname+"All","vertex #chi^{2} all", 16, -0.5, 15.5);
609  h_sumNHitsBeforeVtx_[0][1] = iBooker.book1D(histname+"Barrel","vertex #chi^{2} barrel", 16, -0.5, 15.5);
610  h_sumNHitsBeforeVtx_[0][2] = iBooker.book1D(histname+"Endcap","vertex #chi^{2} endcap", 16, -0.5, 15.5);
611  h_sumNHitsBeforeVtx_[1][0] = iBooker.book1D(histname+"All_Ass","vertex #chi^{2} all", 16, -0.5, 15.5);
612  h_sumNHitsBeforeVtx_[1][1] = iBooker.book1D(histname+"Barrel_Ass","vertex #chi^{2} barrel", 16, -0.5, 15.5);
613  h_sumNHitsBeforeVtx_[1][2] = iBooker.book1D(histname+"Endcap_Ass","vertex #chi^{2} endcap", 16, -0.5, 15.5);
614  h_sumNHitsBeforeVtx_[2][0] = iBooker.book1D(histname+"All_Fakes","vertex #chi^{2} all", 16, -0.5, 15.5);
615  h_sumNHitsBeforeVtx_[2][1] = iBooker.book1D(histname+"Barrel_Fakes","vertex #chi^{2} barrel", 16, -0.5, 15.5);
616  h_sumNHitsBeforeVtx_[2][2] = iBooker.book1D(histname+"Endcap_Fakes","vertex #chi^{2} endcap", 16, -0.5, 15.5);
617 
618  histname="maxDlClosestHitToVtx";
619  h_maxDlClosestHitToVtx_[0][0] = iBooker.book1D(histname+"All","vertex #chi^{2} all", 100, -10., 10.);
620  h_maxDlClosestHitToVtx_[0][1] = iBooker.book1D(histname+"Barrel","vertex #chi^{2} barrel", 100, -10., 10.);
621  h_maxDlClosestHitToVtx_[0][2] = iBooker.book1D(histname+"Endcap","vertex #chi^{2} endcap", 100, -10., 10.);
622  h_maxDlClosestHitToVtx_[1][0] = iBooker.book1D(histname+"All_Ass","vertex #chi^{2} all", 100, -10., 10.);
623  h_maxDlClosestHitToVtx_[1][1] = iBooker.book1D(histname+"Barrel_Ass","vertex #chi^{2} barrel", 100, -10., 10.);
624  h_maxDlClosestHitToVtx_[1][2] = iBooker.book1D(histname+"Endcap_Ass","vertex #chi^{2} endcap", 100, -10., 10.);
625  h_maxDlClosestHitToVtx_[2][0] = iBooker.book1D(histname+"All_Fakes","vertex #chi^{2} all", 100, -10., 10.);
626  h_maxDlClosestHitToVtx_[2][1] = iBooker.book1D(histname+"Barrel_Fakes","vertex #chi^{2} barrel", 100, -10., 10.);
627  h_maxDlClosestHitToVtx_[2][2] = iBooker.book1D(histname+"Endcap_Fakes","vertex #chi^{2} endcap", 100, -10., 10.);
628 
629  histname="maxDlClosestHitToVtxSig";
630  h_maxDlClosestHitToVtxSig_[0][0] = iBooker.book1D(histname+"All","vertex #chi^{2} all", 100, -8., 8.);
631  h_maxDlClosestHitToVtxSig_[0][1] = iBooker.book1D(histname+"Barrel","vertex #chi^{2} barrel", 100, -8., 8.);
632  h_maxDlClosestHitToVtxSig_[0][2] = iBooker.book1D(histname+"Endcap","vertex #chi^{2} endcap", 100, -8., 8.);
633  h_maxDlClosestHitToVtxSig_[1][0] = iBooker.book1D(histname+"All_Ass","vertex #chi^{2} all", 100, -8., 8.);
634  h_maxDlClosestHitToVtxSig_[1][1] = iBooker.book1D(histname+"Barrel_Ass","vertex #chi^{2} barrel", 100, -8., 8.);
635  h_maxDlClosestHitToVtxSig_[1][2] = iBooker.book1D(histname+"Endcap_Ass","vertex #chi^{2} endcap", 100, -8., 8.);
636  h_maxDlClosestHitToVtxSig_[2][0] = iBooker.book1D(histname+"All_Fakes","vertex #chi^{2} all", 100, -8., 8.);
637  h_maxDlClosestHitToVtxSig_[2][1] = iBooker.book1D(histname+"Barrel_Fakes","vertex #chi^{2} barrel", 100, -8., 8.);
638  h_maxDlClosestHitToVtxSig_[2][2] = iBooker.book1D(histname+"Endcap_Fakes","vertex #chi^{2} endcap", 100, -8., 8.);
639 
640  histname="deltaExpectedHitsInner";
641  h_deltaExpectedHitsInner_[0][0] = iBooker.book1D(histname+"All","vertex #chi^{2} all", 31, -15.5, 15.5);
642  h_deltaExpectedHitsInner_[0][1] = iBooker.book1D(histname+"Barrel","vertex #chi^{2} barrel", 31, -15.5, 15.5);
643  h_deltaExpectedHitsInner_[0][2] = iBooker.book1D(histname+"Endcap","vertex #chi^{2} endcap", 31, -15.5, 15.5);
644  h_deltaExpectedHitsInner_[1][0] = iBooker.book1D(histname+"All_Ass","vertex #chi^{2} all", 31, -15.5, 15.5);
645  h_deltaExpectedHitsInner_[1][1] = iBooker.book1D(histname+"Barrel_Ass","vertex #chi^{2} barrel", 31, -15.5, 15.5);
646  h_deltaExpectedHitsInner_[1][2] = iBooker.book1D(histname+"Endcap_Ass","vertex #chi^{2} endcap", 31, -15.5, 15.5);
647  h_deltaExpectedHitsInner_[2][0] = iBooker.book1D(histname+"All_Fakes","vertex #chi^{2} all", 31, -15.5, 15.5);
648  h_deltaExpectedHitsInner_[2][1] = iBooker.book1D(histname+"Barrel_Fakes","vertex #chi^{2} barrel", 31, -15.5, 15.5);
649  h_deltaExpectedHitsInner_[2][2] = iBooker.book1D(histname+"Endcap_Fakes","vertex #chi^{2} endcap", 31, -15.5, 15.5);
650 
651  histname="leadExpectedHitsInner";
652  h_leadExpectedHitsInner_[0][0] = iBooker.book1D(histname+"All","vertex #chi^{2} all", 16, -0.5, 15.5);
653  h_leadExpectedHitsInner_[0][1] = iBooker.book1D(histname+"Barrel","vertex #chi^{2} barrel", 16, -0.5, 15.5);
654  h_leadExpectedHitsInner_[0][2] = iBooker.book1D(histname+"Endcap","vertex #chi^{2} endcap", 16, -0.5, 15.5);
655  h_leadExpectedHitsInner_[1][0] = iBooker.book1D(histname+"All_Ass","vertex #chi^{2} all", 16, -0.5, 15.5);
656  h_leadExpectedHitsInner_[1][1] = iBooker.book1D(histname+"Barrel_Ass","vertex #chi^{2} barrel", 16, -0.5, 15.5);
657  h_leadExpectedHitsInner_[1][2] = iBooker.book1D(histname+"Endcap_Ass","vertex #chi^{2} endcap", 16, -0.5, 15.5);
658  h_leadExpectedHitsInner_[2][0] = iBooker.book1D(histname+"All_Fakes","vertex #chi^{2} all", 16, -0.5, 15.5);
659  h_leadExpectedHitsInner_[2][1] = iBooker.book1D(histname+"Barrel_Fakes","vertex #chi^{2} barrel", 16, -0.5, 15.5);
660  h_leadExpectedHitsInner_[2][2] = iBooker.book1D(histname+"Endcap_Fakes","vertex #chi^{2} endcap", 16, -0.5, 15.5);
661 
662  histname="nSharedHits";
663  h_nSharedHits_[0][0] = iBooker.book1D(histname+"All","vertex #chi^{2} all", 16, -0.5, 15.5);
664  h_nSharedHits_[0][1] = iBooker.book1D(histname+"Barrel","vertex #chi^{2} barrel", 16, -0.5, 15.5);
665  h_nSharedHits_[0][2] = iBooker.book1D(histname+"Endcap","vertex #chi^{2} endcap", 16, -0.5, 15.5);
666  h_nSharedHits_[1][0] = iBooker.book1D(histname+"All_Ass","vertex #chi^{2} all", 16, -0.5, 15.5);
667  h_nSharedHits_[1][1] = iBooker.book1D(histname+"Barrel_Ass","vertex #chi^{2} barrel", 16, -0.5, 15.5);
668  h_nSharedHits_[1][2] = iBooker.book1D(histname+"Endcap_Ass","vertex #chi^{2} endcap", 16, -0.5, 15.5);
669  h_nSharedHits_[2][0] = iBooker.book1D(histname+"All_Fakes","vertex #chi^{2} all", 16, -0.5, 15.5);
670  h_nSharedHits_[2][1] = iBooker.book1D(histname+"Barrel_Fakes","vertex #chi^{2} barrel", 16, -0.5, 15.5);
671  h_nSharedHits_[2][2] = iBooker.book1D(histname+"Endcap_Fakes","vertex #chi^{2} endcap", 16, -0.5, 15.5);
672 
674  histname="nHits";
675  nHits_[0] = iBooker.book2D(histname+"AllTracks","Photons:Tracks from conversions: # of hits all tracks",etaBin,etaMin, etaMax,30,0., 30.);
676  nHits_[1] = iBooker.book2D(histname+"AllTracks_Ass","Photons:Tracks from conversions: # of hits all tracks ass",etaBin,etaMin, etaMax,30,0., 30.);
677  nHits_[2] = iBooker.book2D(histname+"AllTracks_Fakes","Photons:Tracks from conversions: # of hits all tracks fakes",etaBin,etaMin, etaMax,30,0., 30.);
678 
679 
680  histname="nHitsVsEta";
681  nHitsVsEta_[0] = iBooker.book2D(histname+"AllTracks","Photons:Tracks from conversions: # of hits vs #eta all tracks",etaBin,etaMin, etaMax,30,0., 30.);
682  nHitsVsEta_[1] = iBooker.book2D(histname+"AllTracks_Ass","Photons:Tracks from conversions: # of hits vs #eta all tracks",etaBin,etaMin, etaMax,30,0., 30.);
683  nHitsVsEta_[2] = iBooker.book2D(histname+"AllTracks_Fakes","Photons:Tracks from conversions: # of hits vs #eta all tracks",etaBin,etaMin, etaMax,30,0., 30.);
684  histname="h_nHitsVsEta";
685  p_nHitsVsEta_[0] = iBooker.bookProfile(histname+"AllTracks","Photons:Tracks from conversions: # of hits vs #eta all tracks",etaBin,etaMin, etaMax, 30,-0.5, 29.5,"");
686  p_nHitsVsEta_[1] = iBooker.bookProfile(histname+"AllTracks_Ass","Photons:Tracks from conversions: # of hits vs #eta all tracks",etaBin,etaMin, etaMax, 30,-0.5, 29.5,"");
687  p_nHitsVsEta_[2] = iBooker.bookProfile(histname+"AllTracks_Fakes","Photons:Tracks from conversions: # of hits vs #eta all tracks",etaBin,etaMin, etaMax, 30,-0.5, 29.5,"");
688 
689 
690  histname="nHitsVsR";
691  nHitsVsR_[0] = iBooker.book2D(histname+"AllTracks","Photons:Tracks from conversions: # of hits vs radius all tracks" ,rBin,rMin, rMax,30,0., 30.);
692  nHitsVsR_[1] = iBooker.book2D(histname+"AllTracks_Ass","Photons:Tracks from conversions: # of hits vs radius all tracks" ,rBin,rMin, rMax,30,0., 30.);
693  nHitsVsR_[2] = iBooker.book2D(histname+"AllTracks_Fakes","Photons:Tracks from conversions: # of hits vs radius all tracks" ,rBin,rMin, rMax,30,0., 30.);
694 
695  histname="h_nHitsVsR";
696  p_nHitsVsR_[0] = iBooker.bookProfile(histname+"AllTracks","Photons:Tracks from conversions: # of hits vs radius all tracks",rBin,rMin, rMax, 30,-0.5, 29.5,"");
697  p_nHitsVsR_[1] = iBooker.bookProfile(histname+"AllTracks_Ass","Photons:Tracks from conversions: # of hits vs radius all tracks",rBin,rMin, rMax, 30,-0.5, 29.5,"");
698  p_nHitsVsR_[2] = iBooker.bookProfile(histname+"AllTracks_Fakes","Photons:Tracks from conversions: # of hits vs radius all tracks",rBin,rMin, rMax, 30,-0.5, 29.5,"");
699 
700  histname="tkChi2";
701  h_tkChi2_[0] = iBooker.book1D(histname+"AllTracks","Photons:Tracks from conversions: #chi^{2} of all tracks", 100, chi2Min, chi2Max);
702  h_tkChi2_[1] = iBooker.book1D(histname+"AllTracks_Ass","Photons:Tracks from conversions: #chi^{2} of all tracks", 100, chi2Min, chi2Max);
703  h_tkChi2_[2] = iBooker.book1D(histname+"AllTracks_Fakes","Photons:Tracks from conversions: #chi^{2} of all tracks", 100, chi2Min, chi2Max);
704 
705  histname="tkChi2Large";
706  h_tkChi2Large_[0] = iBooker.book1D(histname+"AllTracks","Photons:Tracks from conversions: #chi^{2} of all tracks", 1000, 0., 5000.0);
707  h_tkChi2Large_[1] = iBooker.book1D(histname+"AllTracks_Ass","Photons:Tracks from conversions: #chi^{2} of all tracks", 1000, 0., 5000.0);
708  h_tkChi2Large_[2] = iBooker.book1D(histname+"AllTracks_Fakes","Photons:Tracks from conversions: #chi^{2} of all tracks", 1000, 0., 5000.0);
709 
710 
711  histname="h2Chi2VsEta";
712  h2_Chi2VsEta_[0]=iBooker.book2D(histname+"All"," Reco Track #chi^{2} vs #eta: All ",etaBin2,etaMin, etaMax,100, chi2Min, chi2Max);
713  h2_Chi2VsEta_[1]=iBooker.book2D(histname+"All_Ass"," Reco Track #chi^{2} vs #eta: All ",etaBin2,etaMin, etaMax,100, chi2Min, chi2Max);
714  h2_Chi2VsEta_[2]=iBooker.book2D(histname+"All_Fakes"," Reco Track #chi^{2} vs #eta: All ",etaBin2,etaMin, etaMax,100, chi2Min, chi2Max);
715  histname="pChi2VsEta";
716  p_Chi2VsEta_[0]=iBooker.bookProfile(histname+"All"," Reco Track #chi^{2} vs #eta : All ",etaBin2,etaMin, etaMax, 100, chi2Min, chi2Max,"");
717  p_Chi2VsEta_[1]=iBooker.bookProfile(histname+"All_Ass"," Reco Track #chi^{2} vs #eta : All ",etaBin2,etaMin, etaMax, 100, chi2Min, chi2Max,"");
718  p_Chi2VsEta_[2]=iBooker.bookProfile(histname+"All_Fakes"," Reco Track #chi^{2} vs #eta : All ",etaBin2,etaMin, etaMax, 100, chi2Min, chi2Max,"");
719 
720  histname="h2Chi2VsR";
721  h2_Chi2VsR_[0]=iBooker.book2D(histname+"All"," Reco Track #chi^{2} vs R: All ",rBin,rMin, rMax,100,chi2Min, chi2Max);
722  h2_Chi2VsR_[1]=iBooker.book2D(histname+"All_Ass"," Reco Track #chi^{2} vs R: All ",rBin,rMin, rMax,100,chi2Min, chi2Max);
723  h2_Chi2VsR_[2]=iBooker.book2D(histname+"All_Fakes"," Reco Track #chi^{2} vs R: All ",rBin,rMin, rMax,100,chi2Min, chi2Max);
724  histname="pChi2VsR";
725  p_Chi2VsR_[0]=iBooker.bookProfile(histname+"All"," Reco Track #chi^{2} vas R : All ",rBin,rMin,rMax, 100,chi2Min, chi2Max,"");
726  p_Chi2VsR_[1]=iBooker.bookProfile(histname+"All_Ass"," Reco Track #chi^{2} vas R : All ",rBin,rMin,rMax, 100,chi2Min, chi2Max,"");
727  p_Chi2VsR_[2]=iBooker.bookProfile(histname+"All_Fakes"," Reco Track #chi^{2} vas R : All ",rBin,rMin,rMax, 100,chi2Min, chi2Max,"");
728 
729  histname="hTkD0";
730  h_TkD0_[0]=iBooker.book1D(histname+"All"," Reco Track D0*q: All ",200,-0.1,60);
731  h_TkD0_[1]=iBooker.book1D(histname+"All_Ass"," Reco Track D0*q: Barrel ",200,-0.1,60);
732  h_TkD0_[2]=iBooker.book1D(histname+"All_Fakes"," Reco Track D0*q: Endcap ",200,-0.1,60);
733 
734 
735 
736  histname="hTkPtPull";
737  h_TkPtPull_[0]=iBooker.book1D(histname+"All"," Reco Track Pt pull: All ",100, -20., 10.);
738  histname="hTkPtPull";
739  h_TkPtPull_[1]=iBooker.book1D(histname+"Barrel"," Reco Track Pt pull: Barrel ",100, -20., 10.);
740  histname="hTkPtPull";
741  h_TkPtPull_[2]=iBooker.book1D(histname+"Endcap"," Reco Track Pt pull: Endcap ",100, -20., 10.);
742 
743  histname="h2TkPtPullEta";
744  h2_TkPtPull_[0]=iBooker.book2D(histname+"All"," Reco Track Pt pull: All ",etaBin2,etaMin, etaMax,100, -20., 10.);
745  histname="pTkPtPullEta";
746  p_TkPtPull_[0]=iBooker.bookProfile(histname+"All"," Reco Track Pt pull: All ",etaBin2,etaMin, etaMax, 100, -20., 10., " ");
747 
748 
749  histname="PtRecVsPtSim";
750  h2_PtRecVsPtSim_[0]=iBooker.book2D(histname+"All", "Pt Rec vs Pt sim: All ", etBin,etMin,etMax,etBin,etMin, etMax);
751  h2_PtRecVsPtSim_[1]=iBooker.book2D(histname+"Barrel", "Pt Rec vs Pt sim: Barrel ", etBin,etMin,etMax,etBin,etMin, etMax);
752  h2_PtRecVsPtSim_[2]=iBooker.book2D(histname+"Endcap", "Pt Rec vs Pt sim: Endcap ", etBin,etMin,etMax,etBin,etMin, etMax);
753 
754  histname="photonPtRecVsPtSim";
755  h2_photonPtRecVsPtSim_=iBooker.book2D(histname+"All", "Pt Rec vs Pt sim: All ", etBin,etMin,etMax,etBin,etMin, etMax);
756 
757  histname="nHitsBeforeVtx";
758  h_nHitsBeforeVtx_[0]=iBooker.book1D(histname+"All", "Pt Rec vs Pt sim: All ", 16, -0.5, 15.5);
759  h_nHitsBeforeVtx_[1]=iBooker.book1D(histname+"Barrel", "Pt Rec vs Pt sim: Barrel ", 16, -0.5, 15.5);
760  h_nHitsBeforeVtx_[2]=iBooker.book1D(histname+"Endcap", "Pt Rec vs Pt sim: Endcap ", 16, -0.5, 15.5);
761 
762  histname="dlClosestHitToVtx";
763  h_dlClosestHitToVtx_[0]=iBooker.book1D(histname+"All", "Pt Rec vs Pt sim: All ", 100, -10., 10.);
764  h_dlClosestHitToVtx_[1]=iBooker.book1D(histname+"Barrel", "Pt Rec vs Pt sim: Barrel ", 100, -10., 10.);
765  h_dlClosestHitToVtx_[2]=iBooker.book1D(histname+"Endcap", "Pt Rec vs Pt sim: Endcap ", 100, -10., 10.);
766 
767  histname="dlClosestHitToVtxSig";
768  h_dlClosestHitToVtxSig_[0]=iBooker.book1D(histname+"All", "Pt Rec vs Pt sim: All ", 100, -8., 8.);
769  h_dlClosestHitToVtxSig_[1]=iBooker.book1D(histname+"Barrel", "Pt Rec vs Pt sim: Barrel ", 100, -8., 8.);
770  h_dlClosestHitToVtxSig_[2]=iBooker.book1D(histname+"Endcap", "Pt Rec vs Pt sim: Endcap ", 100, -8., 8.);
771 
772  h_match_= iBooker.book1D("h_match"," ", 3, -0.5,2.5);
773 
774 
775  } // if DQM
776 
777 
778 
779 }
780 
781 
782 
783  void TkConvValidator::dqmBeginRun (edm::Run const & r, edm::EventSetup const & theEventSetup) {
784 
785  //get magnetic field
786  edm::LogInfo("ConvertedPhotonProducer") << " get magnetic field" << "\n";
787  theEventSetup.get<IdealMagneticFieldRecord>().get(theMF_);
788 
789  thePhotonMCTruthFinder_ = new PhotonMCTruthFinder();
790 
791 }
792 
793 void TkConvValidator::endRun (edm::Run const& r, edm::EventSetup const & theEventSetup) {
794 
795  delete thePhotonMCTruthFinder_;
796 
797 }
798 
799 
800 
802  thePhotonMCTruthFinder_->clear();
803  using namespace edm;
804  // const float etaPhiDistance=0.01;
805  // Fiducial region
806  // const float TRK_BARL =0.9;
807  const float BARL = 1.4442; // DAQ TDR p.290
808  // const float END_LO = 1.566; // unused
809  const float END_HI = 2.5;
810  // Electron mass
811  // const Float_t mElec= 0.000511; // unused
812 
814  e.getByToken(trackAssociator_Token_,theTrackAssociator);
815 
816 
817  nEvt_++;
818  LogInfo("TkConvValidator") << "TkConvValidator Analyzing event number: " << e.id() << " Global Counter " << nEvt_ <<"\n";
819  // std::cout << "TkConvValidator Analyzing event number: " << e.id() << " Global Counter " << nEvt_ <<"\n";
820 
821 
822  // get the geometry from the event setup:
823  esup.get<CaloGeometryRecord>().get(theCaloGeom_);
824 
825 
826  // Transform Track into TransientTrack (needed by the Vertex fitter)
828  esup.get<TransientTrackRecord>().get("TransientTrackBuilder",theTTB);
829 
830 
833  e.getByToken(conversionCollectionPr_Token_, convHandle);
834  const reco::ConversionCollection convCollection = *(convHandle.product());
835  if (!convHandle.isValid()) {
836  edm::LogError("ConversionsProducer") << "Error! Can't get the collection "<< std::endl;
837  return;
838  }
839 
841  Handle<reco::PhotonCollection> photonHandle;
842  e.getByToken(photonCollectionPr_Token_, photonHandle);
843  const reco::PhotonCollection photonCollection = *(photonHandle.product());
844  if (!photonHandle.isValid()) {
845  edm::LogError("PhotonProducer") << "Error! Can't get the Photon collection "<< std::endl;
846  return;
847  }
848 
849 
850  // offline Primary vertex
853  e.getByToken(offline_pvToken_, vertexHandle);
854  if (!vertexHandle.isValid()) {
855  edm::LogError("TrackerOnlyConversionProducer") << "Error! Can't get the product primary Vertex Collection "<< "\n";
856  } else {
857  vertexCollection = *(vertexHandle.product());
858  }
859  reco::Vertex the_pvtx;
860  bool valid_pvtx = false;
861  if (!vertexCollection.empty()){
862  the_pvtx = *(vertexCollection.begin());
863  //asking for one good vertex
864  if (the_pvtx.isValid() && fabs(the_pvtx.position().z())<=15 && the_pvtx.position().Rho()<=2){
865  valid_pvtx = true;
866  }
867  }
868 
870  e.getByToken(beamspotToken_, bsHandle);
871  if (!bsHandle.isValid()) {
872  edm::LogError("TrackerOnlyConversionProducer")
873  << "Error! Can't get the product primary Vertex Collection "<< "\n";
874  return;
875  }
876  const reco::BeamSpot &thebs = *bsHandle.product();
877 
878  //get tracker geometry for hits positions
880  esup.get<TrackerDigiGeometryRecord>().get(tracker);
881  const TrackerGeometry* trackerGeom = tracker.product();
882 
883 
884 
886  //get simtrack info
887  //std::vector<SimTrack> theSimTracks;
888  //std::vector<SimVertex> theSimVertices;
889 
892  e.getByToken(g4_simTk_Token_, SimTk);
893  e.getByToken(g4_simVtx_Token_, SimVtx);
894 
895  bool useTP = parameters_.getParameter<bool>("useTP");
898  edm::Handle<TrackingParticleRefVector> TPHandleForFakeRate;
899  if (useTP) {
900  e.getByToken(tpSelForEff_Token_, TPHandleForEff);
901  e.getByToken(tpSelForFake_Token_, TPHandleForFakeRate);
902  }
903 
904  const TrackingParticleRefVector &tpForEfficiency= useTP? *(TPHandleForEff.product()) : dummy;
905  const TrackingParticleRefVector &tpForFakeRate= useTP? *(TPHandleForFakeRate.product()):dummy;
906 
907  const std::vector<SimTrack> &theSimTracks= *SimTk;
908  const std::vector<SimVertex> &theSimVertices= *SimVtx;
909 
910  //theSimTracks.insert(theSimTracks.end(),SimTk->begin(),SimTk->end());
911  //theSimVertices.insert(theSimVertices.end(),SimVtx->begin(),SimVtx->end());
912  std::vector<PhotonMCTruth> mcPhotons=thePhotonMCTruthFinder_->find (theSimTracks, theSimVertices);
913 
914  //edm::Handle<edm::HepMCProduct> hepMC;
915  //e.getByToken(hepMC_Token_, hepMC);
916  // const HepMC::GenEvent *myGenEvent = hepMC->GetEvent(); // unused
917 
918 
919  // get generated jets
920  //edm::Handle<reco::GenJetCollection> GenJetsHandle;
921  //e.getByToken(genjets_Token_, GenJetsHandle);
922  //const reco::GenJetCollection &genJetCollection = *(GenJetsHandle.product());
923 
924  ConversionHitChecker hitChecker;
925 
926  // ################ SIM to RECO ######################### //
927  std::map<const reco::Track*,TrackingParticleRef> myAss;
928  std::map<const reco::Track*,TrackingParticleRef>::const_iterator itAss;
929 
930  for ( std::vector<PhotonMCTruth>::const_iterator mcPho=mcPhotons.begin(); mcPho !=mcPhotons.end(); mcPho++) {
931 
932  mcConvPt_= (*mcPho).fourMomentum().et();
933  float mcPhi= (*mcPho).fourMomentum().phi();
934  mcPhi_= phiNormalization(mcPhi);
935  mcEta_= (*mcPho).fourMomentum().pseudoRapidity();
936  mcEta_ = etaTransformation(mcEta_, (*mcPho).primaryVertex().z() );
937  mcConvR_= (*mcPho).vertex().perp();
938  mcConvX_= (*mcPho).vertex().x();
939  mcConvY_= (*mcPho).vertex().y();
940  mcConvZ_= (*mcPho).vertex().z();
941  mcConvEta_= (*mcPho).vertex().eta();
942  mcConvPhi_= (*mcPho).vertex().phi();
943 
944  if ( fabs(mcEta_) > END_HI ) continue;
945 
946  if (mcConvPt_<minPhoPtForEffic) continue;
947  if (fabs(mcEta_)>maxPhoEtaForEffic) continue;
948  if (fabs(mcConvZ_)>maxPhoZForEffic) continue;
949  if (mcConvR_>maxPhoRForEffic) continue;
951 
952  bool goodSimConversion=false;
953  bool visibleConversion=false;
954  bool visibleConversionsWithTwoSimTracks=false;
955  if ( (*mcPho).isAConversion() == 1 ) {
956  nSimConv_[0]++;
957  h_AllSimConv_[0]->Fill( mcEta_ ) ;
958  h_AllSimConv_[1]->Fill( mcPhi_ );
959  h_AllSimConv_[2]->Fill( mcConvR_ );
960  h_AllSimConv_[3]->Fill( mcConvZ_ );
961  h_AllSimConv_[4]->Fill( (*mcPho).fourMomentum().et());
962 
963  if ( mcConvR_ <15) h_SimConvEtaPix_[0]->Fill( mcEta_ ) ;
964 
965  if ( ( fabs(mcEta_) <= BARL && mcConvR_ <85 ) ||
966  ( fabs(mcEta_) > BARL && fabs(mcEta_) <=END_HI && fabs( (*mcPho).vertex().z() ) < 210 ) ) visibleConversion=true;
967 
968  theConvTP_.clear();
969  // std::cout << " TkConvValidator TrackingParticles TrackingParticleCollection size "<< trackingParticles.size() << "\n";
970  //duplicated TP collections for two associations
971  for(const TrackingParticleRef tp: tpForEfficiency) {
972  if ( fabs( tp->vx() - (*mcPho).vertex().x() ) < 0.0001 &&
973  fabs( tp->vy() - (*mcPho).vertex().y() ) < 0.0001 &&
974  fabs( tp->vz() - (*mcPho).vertex().z() ) < 0.0001) {
975  theConvTP_.push_back( tp );
976  }
977  }
978  //std::cout << " TkConvValidator theConvTP_ size " << theConvTP_.size() << std::endl;
979 
980  if ( theConvTP_.size() == 2 ) visibleConversionsWithTwoSimTracks=true;
981  goodSimConversion=false;
982 
983  if ( visibleConversion && visibleConversionsWithTwoSimTracks ) goodSimConversion=true;
984  if ( goodSimConversion ) {
985  nSimConv_[1]++;
986  h_VisSimConv_[0]->Fill( mcEta_ ) ;
987  h_VisSimConv_[1]->Fill( mcPhi_ );
988  h_VisSimConv_[2]->Fill( mcConvR_ );
989  h_VisSimConv_[3]->Fill( mcConvZ_ );
990  h_VisSimConv_[4]->Fill( (*mcPho).fourMomentum().et());
991 
992  }
993 
994  for ( edm::RefVector<TrackingParticleCollection>::iterator iTrk=theConvTP_.begin(); iTrk!=theConvTP_.end(); ++iTrk) {
995  h_simTkPt_ -> Fill ( (*iTrk)->pt() );
996  h_simTkEta_ -> Fill ( (*iTrk)->eta() );
997  }
998 
999 
1000  }
1001 
1002  if ( ! (visibleConversion && visibleConversionsWithTwoSimTracks ) ) continue;
1003 
1004  h_simConvVtxRvsZ_[0] ->Fill ( fabs (mcConvZ_), mcConvR_ ) ;
1005  if ( fabs(mcEta_) <=1.) {
1006  h_simConvVtxRvsZ_[1] ->Fill ( fabs (mcConvZ_), mcConvR_ ) ;
1007  h_simConvVtxYvsX_ ->Fill ( mcConvX_, mcConvY_ ) ;
1008  }
1009  else
1010  h_simConvVtxRvsZ_[2] ->Fill ( fabs (mcConvZ_), mcConvR_ ) ;
1011 
1012  //std::cout << " TkConvValidator theConvTP_ size " << theConvTP_.size() << std::endl;
1013  for ( edm::RefVector<TrackingParticleCollection>::iterator iTP= theConvTP_.begin(); iTP!=theConvTP_.end(); iTP++)
1014  {
1015  // std::cout << " SIM to RECO TP vertex " << (*iTP)->vx() << " " << (*iTP)->vy() << " " << (*iTP)->vz() << " pt " << (*iTP)->pt() << std::endl;
1016  }
1017 
1018  bool recomatch = false;
1019  float chi2Prob = 0.;
1021  // cout << " size of conversions " << convHandle->size() << endl;
1022  for (reco::ConversionCollection::const_iterator conv = convHandle->begin();conv!=convHandle->end();++conv) {
1023 
1024  const reco::Conversion aConv = (*conv);
1025  if ( arbitratedMerged_ && !aConv.quality(reco::Conversion::arbitratedMerged) ) continue;
1026  if ( generalTracksOnly_ && !aConv.quality(reco::Conversion::generalTracksOnly) ) continue;
1027  if ( arbitratedEcalSeeded_ && !aConv.quality(reco::Conversion::arbitratedEcalSeeded) ) continue;
1028 
1029 
1030  if ( highPurity_ && !aConv.quality(reco::Conversion::highPurity) ) continue;
1031 
1032  //problematic?
1033  const std::vector<edm::RefToBase<reco::Track> >& tracks = aConv.tracks();
1034 
1035 
1036  const reco::Vertex& vtx = aConv.conversionVertex();
1037  //requires two tracks and a valid vertex
1038  if (tracks.size() !=2 || !(vtx.isValid())) continue;
1039 
1040 
1041  if (ChiSquaredProbability( aConv.conversionVertex().chi2(), aConv.conversionVertex().ndof() ) <= minProb_) continue;
1042  if (aConv.nHitsBeforeVtx().size()>1 && max(aConv.nHitsBeforeVtx().at(0),aConv.nHitsBeforeVtx().at(1)) > maxHitsBeforeVtx_ ) continue;
1043 
1044 
1045  //compute transverse decay length with respect to beamspot
1046  math::XYZVectorF themom = aConv.refittedPairMomentum();
1047  double dbsx = aConv.conversionVertex().x() - thebs.x0();
1048  double dbsy = aConv.conversionVertex().y() - thebs.y0();
1049  double lxy = (themom.x()*dbsx + themom.y()*dbsy)/themom.rho();
1050 
1051  if (lxy<minLxy_) continue;
1052 
1053  // bool phoIsInBarrel=false; // unused
1054  // bool phoIsInEndcap=false; // unused
1055  RefToBase<reco::Track> tfrb1 = aConv.tracks().front();
1056  RefToBase<reco::Track> tfrb2 = aConv.tracks().back();
1057 
1058  if ( ecalalgotracks_ && ( !(tfrb1->algo()==reco::TrackBase::outInEcalSeededConv || tfrb1->algo()==reco::TrackBase::inOutEcalSeededConv) || !(tfrb2->algo()==reco::TrackBase::outInEcalSeededConv || tfrb2->algo()==reco::TrackBase::inOutEcalSeededConv) ) ) continue;
1059 
1060 
1061  //reco::TrackRef tk1 = aConv.tracks().front();
1062  //reco::TrackRef tk2 = aConv.tracks().back();
1063  //std::cout << "SIM to RECO conversion track pt " << tk1->pt() << " " << tk2->pt() << endl;
1064  //
1065  //Use two RefToBaseVector and do two association actions to avoid that if two tracks from different collection
1067  tc1.push_back(tfrb1);
1068  tc2.push_back(tfrb2);
1069  bool isAssociated = false;
1070  reco::SimToRecoCollection q1 = theTrackAssociator->associateSimToReco(tc1,theConvTP_);
1071  reco::SimToRecoCollection q2 = theTrackAssociator->associateSimToReco(tc2,theConvTP_);
1072  //try {
1073  std::vector<std::pair<RefToBase<reco::Track>, double> > trackV1, trackV2;
1074 
1075  int tp_1 = 0, tp_2 = 1;//the index of associated tp in theConvTP_ for two tracks
1076  if (q1.find(theConvTP_[0])!=q1.end()){
1077  trackV1 = (std::vector<std::pair<RefToBase<reco::Track>, double> >) q1[theConvTP_[0]];
1078  } else if (q1.find(theConvTP_[1])!=q1.end()){
1079  trackV1 = (std::vector<std::pair<RefToBase<reco::Track>, double> >) q1[theConvTP_[1]];
1080  tp_1 = 1;
1081  }
1082  if (q2.find(theConvTP_[1])!=q2.end()){
1083  trackV2 = (std::vector<std::pair<RefToBase<reco::Track>, double> >) q2[theConvTP_[1]];
1084  } else if (q2.find(theConvTP_[0])!=q2.end()){
1085  trackV2 = (std::vector<std::pair<RefToBase<reco::Track>, double> >) q2[theConvTP_[0]];
1086  tp_2 = 0;
1087  }
1088  if (!(!trackV1.empty()&&!trackV2.empty()))
1089  continue;
1090  if (tp_1 == tp_2) continue;
1091 
1092  edm::RefToBase<reco::Track> tr1 = trackV1.front().first;
1093  edm::RefToBase<reco::Track> tr2 = trackV2.front().first;
1094  //std::cout << "associated tp1 " <<theConvTP_[0]->pt() << " to track with pT=" << tr1->pt() << " " << (tr1.get())->pt() << endl;
1095  //std::cout << "associated tp2 " <<theConvTP_[1]->pt() << " to track with pT=" << tr2->pt() << " " << (tr2.get())->pt() << endl;
1096  myAss.insert( std::make_pair (tr1.get(),theConvTP_[tp_1] ) );
1097  myAss.insert( std::make_pair (tr2.get(),theConvTP_[tp_2]) );
1098 
1099  //} catch (Exception event) {
1100  //cout << "continue: " << event.what() << endl;
1101  // continue;
1102  //}
1103 
1104 
1105  isAssociated = true;
1106  recomatch = true;
1107  chi2Prob = ChiSquaredProbability( aConv.conversionVertex().chi2(), aConv.conversionVertex().ndof() );
1108 
1109  if (isAssociated) {
1110  h_SimRecConvTwoMTracks_[0]->Fill( mcEta_ ) ;
1111  h_SimRecConvTwoMTracks_[1]->Fill( mcPhi_ );
1112  h_SimRecConvTwoMTracks_[2]->Fill( mcConvR_ );
1113  h_SimRecConvTwoMTracks_[3]->Fill( mcConvZ_ );
1114  h_SimRecConvTwoMTracks_[4]->Fill( (*mcPho).fourMomentum().et());
1115  }
1116 
1117  // break;
1118  } // loop over reco conversions
1119  if (recomatch) {
1121  h_SimConvTwoMTracks_[0]->Fill( mcEta_ ) ;
1122  h_SimConvTwoMTracks_[1]->Fill( mcPhi_ );
1123  h_SimConvTwoMTracks_[2]->Fill( mcConvR_ );
1124  h_SimConvTwoMTracks_[3]->Fill( mcConvZ_ );
1125  h_SimConvTwoMTracks_[4]->Fill( (*mcPho).fourMomentum().et());
1126 
1127 
1128  if ( chi2Prob > 0) {
1129  h_SimConvTwoMTracksAndVtxPGT0_[0]->Fill( mcEta_ ) ;
1130  h_SimConvTwoMTracksAndVtxPGT0_[1]->Fill( mcPhi_ );
1131  h_SimConvTwoMTracksAndVtxPGT0_[2]->Fill( mcConvR_ );
1132  h_SimConvTwoMTracksAndVtxPGT0_[3]->Fill( mcConvZ_ );
1133  h_SimConvTwoMTracksAndVtxPGT0_[4]->Fill( (*mcPho).fourMomentum().et());
1134  }
1135  if ( chi2Prob > 0.0005) {
1136  h_SimConvTwoMTracksAndVtxPGT0005_[0]->Fill( mcEta_ ) ;
1137  h_SimConvTwoMTracksAndVtxPGT0005_[1]->Fill( mcPhi_ );
1138  h_SimConvTwoMTracksAndVtxPGT0005_[2]->Fill( mcConvR_ );
1139  h_SimConvTwoMTracksAndVtxPGT0005_[3]->Fill( mcConvZ_ );
1140  h_SimConvTwoMTracksAndVtxPGT0005_[4]->Fill( (*mcPho).fourMomentum().et());
1141 
1142  }
1143  }
1144 
1145  } //End loop over simulated conversions
1146 
1147 
1148  // ########################### RECO to SIM ############################## //
1149 
1150  for (reco::ConversionCollection::const_iterator conv = convHandle->begin();conv!=convHandle->end();++conv) {
1151  const reco::Conversion aConv = (*conv);
1152  if ( arbitratedMerged_ && !aConv.quality(reco::Conversion::arbitratedMerged) ) continue;
1153  if ( generalTracksOnly_ && !aConv.quality(reco::Conversion::generalTracksOnly) ) continue;
1154  if ( arbitratedEcalSeeded_ && !aConv.quality(reco::Conversion::arbitratedEcalSeeded) ) continue;
1155 
1156 
1157  if ( highPurity_ && !aConv.quality(reco::Conversion::highPurity) ) continue;
1158 
1159  //problematic?
1160  std::vector<edm::RefToBase<reco::Track> > tracks = aConv.tracks();
1161 
1162  const reco::Vertex& vtx = aConv.conversionVertex();
1163  //requires two tracks and a valid vertex
1164  if (tracks.size() !=2 || !(vtx.isValid())) continue;
1165  //if (tracks.size() !=2) continue;
1166 
1167 
1168  if (ChiSquaredProbability( aConv.conversionVertex().chi2(), aConv.conversionVertex().ndof() ) <= minProb_) continue;
1169  if (aConv.nHitsBeforeVtx().size()>1 && max(aConv.nHitsBeforeVtx().at(0),aConv.nHitsBeforeVtx().at(1)) > maxHitsBeforeVtx_ ) continue;
1170 
1171  //compute transverse decay length with respect to beamspot
1172  math::XYZVectorF themom = aConv.refittedPairMomentum();
1173  double dbsx = aConv.conversionVertex().x() - thebs.x0();
1174  double dbsy = aConv.conversionVertex().y() - thebs.y0();
1175  double lxy = (themom.x()*dbsx + themom.y()*dbsy)/themom.rho();
1176 
1177  if (lxy<minLxy_) continue;
1178 
1179  bool phoIsInBarrel=false;
1180  bool phoIsInEndcap=false;
1181  RefToBase<reco::Track> tk1 = aConv.tracks().front();
1182  RefToBase<reco::Track> tk2 = aConv.tracks().back();
1184  tc1.push_back(tk1);
1185  tc2.push_back(tk2);
1186 
1188 
1189 
1190  //std::cout << " RECO to SIM conversion track pt " << tk1->pt() << " " << tk2->pt() << endl;
1191  const reco::Track refTk1 = aConv.conversionVertex().refittedTracks().front();
1192  const reco::Track refTk2 = aConv.conversionVertex().refittedTracks().back();
1193 
1194  //TODO replace it with phi at vertex
1195  float dPhiTracksAtVtx = aConv.dPhiTracksAtVtx();
1196  // override with the phi calculated at the vertex
1197  math::XYZVector p1AtVtx= recalculateMomentumAtFittedVertex ( (*theMF_), *trackerGeom, tk1, aConv.conversionVertex() );
1198  math::XYZVector p2AtVtx= recalculateMomentumAtFittedVertex ( (*theMF_), *trackerGeom, tk2, aConv.conversionVertex() );
1199  if ( sqrt(p1AtVtx.perp2()) > sqrt(p2AtVtx.perp2()) )
1200  dPhiTracksAtVtx = p1AtVtx.phi() - p2AtVtx.phi();
1201  else
1202  dPhiTracksAtVtx = p2AtVtx.phi() - p1AtVtx.phi();
1203 
1204 
1205  math::XYZVectorF refittedMom = aConv.refittedPairMomentum();
1206 
1207 
1208  if (fabs(refittedMom.eta())< 1.479 ) {
1209  phoIsInBarrel=true;
1210  } else {
1211  phoIsInEndcap=true;
1212  }
1213 
1214  nRecConv_++;
1215 
1216  // check matching with reco photon
1217  double Mindeltaeta = 999999;
1218  double Mindeltaphi = 999999;
1219  bool matchConvSC=false;
1220  reco::PhotonCollection::const_iterator iMatchingSC;
1221  for( reco::PhotonCollection::const_iterator iPho = photonCollection.begin(); iPho != photonCollection.end(); iPho++) {
1222  reco::Photon aPho = reco::Photon(*iPho);
1223  const double deltaphi= reco::deltaPhi( aConv.refittedPairMomentum().phi(), aPho.superCluster()->position().phi());
1224  double ConvEta = etaTransformation(aConv.refittedPairMomentum().eta(),aConv.zOfPrimaryVertexFromTracks());
1225  double deltaeta = abs( aPho.superCluster()->position().eta() -ConvEta);
1226  if (abs(deltaeta)<abs(Mindeltaeta) && abs(deltaphi)<abs(Mindeltaphi)) {
1227  Mindeltaphi=abs(deltaphi);
1228  Mindeltaeta=abs(deltaeta);
1229  iMatchingSC = iPho ;
1230  }
1231  }
1232  if (abs(Mindeltaeta)<0.1 && abs(Mindeltaphi)<0.1) {
1233  matchConvSC=true;
1234  }
1235 
1236 
1238  int match =0;
1239  float invM=aConv.pairInvariantMass();
1240  float chi2Prob = ChiSquaredProbability( aConv.conversionVertex().chi2(), aConv.conversionVertex().ndof() );
1241  uint maxNHitsBeforeVtx = aConv.nHitsBeforeVtx().size()>1 ? max(aConv.nHitsBeforeVtx().at(0),aConv.nHitsBeforeVtx().at(1)) : 0;
1242  uint sumNHitsBeforeVtx = aConv.nHitsBeforeVtx().size()>1 ? aConv.nHitsBeforeVtx().at(0) + aConv.nHitsBeforeVtx().at(1) : 0;
1243  float maxDlClosestHitToVtx = aConv.dlClosestHitToVtx().size()>1 ? max(aConv.dlClosestHitToVtx().at(0).value(),aConv.dlClosestHitToVtx().at(1).value()) : 0;
1244  float maxDlClosestHitToVtxSig = aConv.dlClosestHitToVtx().size()>1 ? max(aConv.dlClosestHitToVtx().at(0).value()/aConv.dlClosestHitToVtx().at(0).error(),aConv.dlClosestHitToVtx().at(1).value()/aConv.dlClosestHitToVtx().at(1).error()) : 0;
1245 
1246  int ilead = 0, itrail = 1;
1247  if (tk2->pt() > tk1->pt()) {
1248  ilead = 1;
1249  itrail = 0;
1250  }
1251  RefToBase<reco::Track> tklead = aConv.tracks().at(ilead);
1252  RefToBase<reco::Track> tktrail = aConv.tracks().at(itrail);
1253 
1254  int deltaExpectedHitsInner = tklead->hitPattern().numberOfLostHits(reco::HitPattern::MISSING_INNER_HITS)
1256  int leadExpectedHitsInner = tklead->hitPattern().numberOfLostHits(reco::HitPattern::MISSING_INNER_HITS);
1257  uint leadNHitsBeforeVtx = aConv.nHitsBeforeVtx().size()>1 ? aConv.nHitsBeforeVtx().at(ilead) : 0;
1258  uint trailNHitsBeforeVtx = aConv.nHitsBeforeVtx().size()>1 ? aConv.nHitsBeforeVtx().at(itrail) : 0;
1259 
1260 
1261  h_convEta_[match][0]->Fill( refittedMom.eta() );
1262  h_convEta2_[match][0]->Fill( refittedMom.eta() );
1263 
1264  h_convPhi_[match][0]->Fill( refittedMom.phi() );
1265  h_convR_[match][0]->Fill( sqrt(aConv.conversionVertex().position().perp2()) );
1266  h_convRplot_->Fill( sqrt(aConv.conversionVertex().position().perp2()) );
1267  h_convZ_[match][0]->Fill( aConv.conversionVertex().position().z() );
1268  h_convZplot_->Fill( aConv.conversionVertex().position().z() );
1269  h_convPt_[match][0]->Fill( sqrt(refittedMom.perp2()) );
1270  h_invMass_[match][0] ->Fill( invM);
1271  h_vtxChi2Prob_[match][0] ->Fill (chi2Prob);
1272  h_lxybs_[match][0] ->Fill (lxy);
1273  h_maxNHitsBeforeVtx_[match][0] ->Fill (maxNHitsBeforeVtx);
1274  h_leadNHitsBeforeVtx_[match][0] ->Fill (leadNHitsBeforeVtx);
1275  h_trailNHitsBeforeVtx_[match][0] ->Fill (trailNHitsBeforeVtx);
1276  h_sumNHitsBeforeVtx_[match][0] ->Fill (sumNHitsBeforeVtx);
1277  h_deltaExpectedHitsInner_[match][0] ->Fill (deltaExpectedHitsInner);
1278  h_leadExpectedHitsInner_[match][0] ->Fill (leadExpectedHitsInner);
1279  h_maxDlClosestHitToVtx_[match][0] ->Fill (maxDlClosestHitToVtx);
1280  h_maxDlClosestHitToVtxSig_[match][0] ->Fill (maxDlClosestHitToVtxSig);
1281  h_nSharedHits_[match][0] ->Fill (aConv.nSharedHits());
1282 
1283 
1284  if ( matchConvSC ) {
1285  h_convEtaMatchSC_[match][0]->Fill( refittedMom.eta() );
1286  h_EoverPTracks_[match][0] ->Fill (iMatchingSC->superCluster()->energy()/sqrt(refittedMom.mag2()));
1287  h_convSCdPhi_[match][0]->Fill( iMatchingSC->superCluster()->position().phi() - refittedMom.phi() );
1288  double ConvEta = etaTransformation(aConv.refittedPairMomentum().eta(),aConv.zOfPrimaryVertexFromTracks());
1289  h_convSCdEta_[match][0]->Fill( iMatchingSC->superCluster()->position().eta() - ConvEta );
1290  }
1291 
1292  h_distMinAppTracks_[match][0] ->Fill (aConv.distOfMinimumApproach());
1293  h_DPhiTracksAtVtx_[match][0]->Fill( dPhiTracksAtVtx);
1294  h2_DPhiTracksAtVtxVsEta_->Fill( mcEta_, dPhiTracksAtVtx);
1295  h2_DPhiTracksAtVtxVsR_->Fill( mcConvR_, dPhiTracksAtVtx);
1296  p_DPhiTracksAtVtxVsEta_->Fill( mcEta_, dPhiTracksAtVtx);
1297  p_DPhiTracksAtVtxVsR_->Fill( mcConvR_, dPhiTracksAtVtx);
1298 
1299  h_DCotTracks_[match][0] ->Fill ( aConv.pairCotThetaSeparation() );
1300  h2_DCotTracksVsEta_->Fill( mcEta_, aConv.pairCotThetaSeparation() );
1301  h2_DCotTracksVsR_->Fill( mcConvR_, aConv.pairCotThetaSeparation() );
1302  p_DCotTracksVsEta_->Fill( mcEta_, aConv.pairCotThetaSeparation() );
1303  p_DCotTracksVsR_->Fill( mcConvR_, aConv.pairCotThetaSeparation() );
1304 
1305  if ( phoIsInBarrel ) {
1306  h_invMass_[match][1] ->Fill(invM);
1307  h_vtxChi2Prob_[match][1] ->Fill (chi2Prob);
1308  h_distMinAppTracks_[match][1] ->Fill (aConv.distOfMinimumApproach());
1309  h_DPhiTracksAtVtx_[match][1]->Fill( dPhiTracksAtVtx);
1310  h_DCotTracks_[match][1] ->Fill ( aConv.pairCotThetaSeparation() );
1311  h_lxybs_[match][1] ->Fill (lxy);
1312  h_maxNHitsBeforeVtx_[match][1] ->Fill (maxNHitsBeforeVtx);
1313  h_leadNHitsBeforeVtx_[match][1] ->Fill (leadNHitsBeforeVtx);
1314  h_trailNHitsBeforeVtx_[match][1] ->Fill (trailNHitsBeforeVtx);
1315  h_sumNHitsBeforeVtx_[match][1] ->Fill (sumNHitsBeforeVtx);
1316  h_deltaExpectedHitsInner_[match][1] ->Fill (deltaExpectedHitsInner);
1317  h_leadExpectedHitsInner_[match][1] ->Fill (leadExpectedHitsInner);
1318  h_maxDlClosestHitToVtx_[match][1] ->Fill (maxDlClosestHitToVtx);
1319  h_maxDlClosestHitToVtxSig_[match][1] ->Fill (maxDlClosestHitToVtxSig);
1320  h_nSharedHits_[match][1] ->Fill (aConv.nSharedHits());
1321 
1322  /*
1323  if ( aConv.caloCluster().size() ) {
1324  h_convSCdPhi_[match][1]->Fill( aConv.caloCluster()[0]->phi() - refittedMom.phi() );
1325  double ConvEta = etaTransformation(aConv.refittedPairMomentum().eta(),aConv.zOfPrimaryVertexFromTracks());
1326  h_convSCdEta_[match][1]->Fill( aConv.caloCluster()[0]->eta() - ConvEta );
1327  }
1328  */
1329 
1330  if ( matchConvSC ) {
1331  h_EoverPTracks_[match][1] -> Fill(iMatchingSC->superCluster()->energy()/sqrt(refittedMom.mag2()));
1332  h_convSCdPhi_[match][1]->Fill( iMatchingSC->superCluster()->position().phi() - refittedMom.phi() );
1333  double ConvEta = etaTransformation(aConv.refittedPairMomentum().eta(),aConv.zOfPrimaryVertexFromTracks());
1334  h_convSCdEta_[match][1]->Fill( iMatchingSC->superCluster()->position().eta() - ConvEta );
1335  }
1336  }
1337 
1338 
1339  if ( phoIsInEndcap ) {
1340  h_invMass_[match][2] ->Fill(invM);
1341  h_vtxChi2Prob_[match][2] ->Fill (chi2Prob);
1342  h_distMinAppTracks_[match][2] ->Fill (aConv.distOfMinimumApproach());
1343  h_DPhiTracksAtVtx_[match][2]->Fill( dPhiTracksAtVtx);
1344  h_DCotTracks_[match][2] ->Fill ( aConv.pairCotThetaSeparation() );
1345  h_lxybs_[match][2] ->Fill (lxy);
1346  h_maxNHitsBeforeVtx_[match][2] ->Fill (maxNHitsBeforeVtx);
1347  h_leadNHitsBeforeVtx_[match][2] ->Fill (leadNHitsBeforeVtx);
1348  h_trailNHitsBeforeVtx_[match][2] ->Fill (trailNHitsBeforeVtx);
1349  h_sumNHitsBeforeVtx_[match][2] ->Fill (sumNHitsBeforeVtx);
1350  h_deltaExpectedHitsInner_[match][2] ->Fill (deltaExpectedHitsInner);
1351  h_leadExpectedHitsInner_[match][2] ->Fill (leadExpectedHitsInner);
1352  h_maxDlClosestHitToVtx_[match][2] ->Fill (maxDlClosestHitToVtx);
1353  h_maxDlClosestHitToVtxSig_[match][2] ->Fill (maxDlClosestHitToVtxSig);
1354  h_nSharedHits_[match][2] ->Fill (aConv.nSharedHits());
1355  if ( matchConvSC ) {
1356  h_EoverPTracks_[match][2] ->Fill (iMatchingSC->superCluster()->energy()/sqrt(refittedMom.mag2()));
1357  h_convSCdPhi_[match][2]->Fill( iMatchingSC->superCluster()->position().phi() - refittedMom.phi() );
1358  double ConvEta = etaTransformation(aConv.refittedPairMomentum().eta(),aConv.zOfPrimaryVertexFromTracks());
1359  h_convSCdEta_[match][2]->Fill( iMatchingSC->superCluster()->position().eta() - ConvEta );
1360 
1361  }
1362  }
1363 
1364  h_convVtxRvsZ_[0] ->Fill ( fabs (aConv.conversionVertex().position().z() ), sqrt(aConv.conversionVertex().position().perp2()) ) ;
1365  h_convVtxYvsX_ ->Fill ( aConv.conversionVertex().position().x(), aConv.conversionVertex().position().y() );
1366  h_convVtxYvsX_zoom_[0] ->Fill ( aConv.conversionVertex().position().x(), aConv.conversionVertex().position().y() );
1367  h_convVtxYvsX_zoom_[1] ->Fill ( aConv.conversionVertex().position().x(), aConv.conversionVertex().position().y() );
1368 
1369 
1370  // quantities per track: all conversions
1371  for (unsigned int i=0; i<tracks.size(); i++) {
1372  double d0;
1373  if (valid_pvtx){
1374  d0 = - tracks[i]->dxy(the_pvtx.position());
1375  } else {
1376  d0 = tracks[i]->d0();
1377  }
1378  h_TkD0_[match]->Fill ( d0* tracks[i]->charge() );
1379  h_nHitsBeforeVtx_[match]->Fill ( aConv.nHitsBeforeVtx().size()>1 ? aConv.nHitsBeforeVtx().at(i) : 0 );
1380  h_dlClosestHitToVtx_[match]->Fill ( aConv.dlClosestHitToVtx().size()>1 ? aConv.dlClosestHitToVtx().at(i).value() : 0 );
1381  h_dlClosestHitToVtxSig_[match]->Fill ( aConv.dlClosestHitToVtx().size()>1 ? aConv.dlClosestHitToVtx().at(i).value()/aConv.dlClosestHitToVtx().at(i).error() : 0 );
1382 
1383  nHitsVsEta_[match] ->Fill (mcEta_, float(tracks[i]->numberOfValidHits()) );
1384  nHitsVsR_[match] ->Fill (mcConvR_, float(tracks[i]->numberOfValidHits()) );
1385  p_nHitsVsEta_[match] ->Fill (mcEta_, float(tracks[i]->numberOfValidHits()) -0.0001);
1386  p_nHitsVsR_[match] ->Fill (mcConvR_, float(tracks[i]->numberOfValidHits()) -0.0001);
1387  h_tkChi2_[match] ->Fill (tracks[i]->normalizedChi2() );
1388  h_tkChi2Large_[match] ->Fill (tracks[i]->normalizedChi2() );
1389  h2_Chi2VsEta_[match] ->Fill( mcEta_, tracks[i]->normalizedChi2() );
1390  h2_Chi2VsR_[match] ->Fill( mcConvR_, tracks[i]->normalizedChi2() );
1391  p_Chi2VsEta_[match] ->Fill( mcEta_, tracks[i]->normalizedChi2() );
1392  p_Chi2VsR_[match] ->Fill( mcConvR_, tracks[i]->normalizedChi2() );
1393 
1394  }
1395 
1396  bool associated = false;
1397  float mcConvPt_= -99999999;
1398  // float mcPhi= 0; // unused
1399  float simPV_Z=0;
1400  for ( std::vector<PhotonMCTruth>::const_iterator mcPho=mcPhotons.begin(); mcPho !=mcPhotons.end(); mcPho++) {
1401  mcConvPt_= (*mcPho).fourMomentum().et();
1402  float mcPhi= (*mcPho).fourMomentum().phi();
1403  simPV_Z = (*mcPho).primaryVertex().z();
1404  mcPhi_= phiNormalization(mcPhi);
1405  mcEta_= (*mcPho).fourMomentum().pseudoRapidity();
1406  mcEta_ = etaTransformation(mcEta_, (*mcPho).primaryVertex().z() );
1407  mcConvR_= (*mcPho).vertex().perp();
1408  mcConvX_= (*mcPho).vertex().x();
1409  mcConvY_= (*mcPho).vertex().y();
1410  mcConvZ_= (*mcPho).vertex().z();
1411  mcConvEta_= (*mcPho).vertex().eta();
1412  mcConvPhi_= (*mcPho).vertex().phi();
1413  if ( fabs(mcEta_) > END_HI ) continue;
1414  if (mcConvPt_<minPhoPtForPurity) continue;
1415  if (fabs(mcEta_)>maxPhoEtaForPurity) continue;
1416  if (fabs(mcConvZ_)>maxPhoZForPurity) continue;
1417  if (mcConvR_>maxPhoRForEffic) continue;
1418 
1419  if ( (*mcPho).isAConversion() != 1 ) continue;
1420  if (!( ( fabs(mcEta_) <= BARL && mcConvR_ <85 ) ||
1421  ( fabs(mcEta_) > BARL && fabs(mcEta_) <=END_HI && fabs( (*mcPho).vertex().z() ) < 210 ) ) )
1422  continue;
1423 
1424 
1425  theConvTP_.clear();
1426  for(const TrackingParticleRef tp: tpForFakeRate) {
1427  if ( fabs( tp->vx() - (*mcPho).vertex().x() ) < 0.0001 &&
1428  fabs( tp->vy() - (*mcPho).vertex().y() ) < 0.0001 &&
1429  fabs( tp->vz() - (*mcPho).vertex().z() ) < 0.0001) {
1430  theConvTP_.push_back( tp );
1431  }
1432  }
1433 
1434  if ( theConvTP_.size() < 2 ) continue;
1435 
1436  //associated = false;
1437  reco::RecoToSimCollection const& p1 = theTrackAssociator->associateRecoToSim(tc1,theConvTP_);
1438  reco::RecoToSimCollection const& p2 = theTrackAssociator->associateRecoToSim(tc2,theConvTP_);
1439 
1440  auto itP1 = p1.find(tk1);
1441  auto itP2 = p2.find(tk2);
1442  bool good = (itP1 != p1.end()) and (not itP1->val.empty()) and (itP2 != p2.end()) and (not itP2->val.empty());
1443  if(not good) {
1444  itP1 = p1.find(tk2);
1445  itP2 = p2.find(tk1);
1446  good = (itP1 != p1.end()) and (not itP1->val.empty()) and (itP2 != p2.end()) and (not itP2->val.empty());
1447  }
1448 
1449  if(good) {
1450  std::vector<std::pair<TrackingParticleRef, double> >const& tp1 = itP1->val;
1451  std::vector<std::pair<TrackingParticleRef, double> >const& tp2 = itP2->val;
1452  TrackingParticleRef tpr1 = tp1.front().first;
1453  TrackingParticleRef tpr2 = tp2.front().first;
1454  if (abs(tpr1->pdgId())==11&&abs(tpr2->pdgId())==11&& tpr1->pdgId()*tpr2->pdgId()<0) {
1455  if ( (tpr1->parentVertex()->sourceTracks_end()-tpr1->parentVertex()->sourceTracks_begin()==1) &&
1456  (tpr2->parentVertex()->sourceTracks_end()-tpr2->parentVertex()->sourceTracks_begin()==1)) {
1457  if (tpr1->parentVertex().key()==tpr2->parentVertex().key() && ((*tpr1->parentVertex()->sourceTracks_begin())->pdgId()==22)) {
1458  mcConvR_ = sqrt(tpr1->parentVertex()->position().Perp2());
1459  mcConvZ_ = tpr1->parentVertex()->position().z();
1460  mcConvX_ = tpr1->parentVertex()->position().x();
1461  mcConvY_ = tpr1->parentVertex()->position().y();
1462  mcConvEta_ = tpr1->parentVertex()->position().eta();
1463  mcConvPhi_ = tpr1->parentVertex()->position().phi();
1464  mcConvPt_ = sqrt((*tpr1->parentVertex()->sourceTracks_begin())->momentum().Perp2());
1465  //std::cout << " Reco to Sim mcconvpt " << mcConvPt_ << std::endl;
1466  //cout << "associated track1 to " << tpr1->pdgId() << " with p=" << tpr1->p4() << " with pT=" << tpr1->pt() << endl;
1467  //cout << "associated track2 to " << tpr2->pdgId() << " with p=" << tpr2->p4() << " with pT=" << tpr2->pt() << endl;
1468  associated = true;
1469  break;
1470  }
1471  }
1472  }
1473  }
1474 
1475  }// end loop on sim photons
1476 
1477 
1478  if (false) {
1479  theConvTP_.clear();
1480  theConvTP_ = tpForFakeRate;
1481  reco::RecoToSimCollection p1incl = theTrackAssociator->associateRecoToSim(tc1,theConvTP_);
1482  reco::RecoToSimCollection p2incl = theTrackAssociator->associateRecoToSim(tc2,theConvTP_);
1483 
1484 
1485  for ( std::vector<PhotonMCTruth>::const_iterator mcPho=mcPhotons.begin(); mcPho !=mcPhotons.end(); mcPho++) {
1486  mcConvPt_= (*mcPho).fourMomentum().et();
1487  float mcPhi= (*mcPho).fourMomentum().phi();
1488  simPV_Z = (*mcPho).primaryVertex().z();
1489  mcPhi_= phiNormalization(mcPhi);
1490  mcEta_= (*mcPho).fourMomentum().pseudoRapidity();
1491  mcEta_ = etaTransformation(mcEta_, (*mcPho).primaryVertex().z() );
1492  mcConvR_= (*mcPho).vertex().perp();
1493  mcConvX_= (*mcPho).vertex().x();
1494  mcConvY_= (*mcPho).vertex().y();
1495  mcConvZ_= (*mcPho).vertex().z();
1496  mcConvEta_= (*mcPho).vertex().eta();
1497  mcConvPhi_= (*mcPho).vertex().phi();
1498  if ( fabs(mcEta_) > END_HI ) continue;
1499  if (mcConvPt_<minPhoPtForPurity) continue;
1500  if (fabs(mcEta_)>maxPhoEtaForPurity) continue;
1501  if (fabs(mcConvZ_)>maxPhoZForPurity) continue;
1502  if (mcConvR_>maxPhoRForEffic) continue;
1503 
1504  if ( (*mcPho).isAConversion() != 1 ) continue;
1505  if (!( ( fabs(mcEta_) <= BARL && mcConvR_ <85 ) ||
1506  ( fabs(mcEta_) > BARL && fabs(mcEta_) <=END_HI && fabs( (*mcPho).vertex().z() ) < 210 ) ) )
1507  continue;
1508 
1509 
1510  theConvTP_.clear();
1511  for(TrackingParticleRef tp: tpForFakeRate) {
1512  if ( fabs( tp->vx() - (*mcPho).vertex().x() ) < 0.0001 &&
1513  fabs( tp->vy() - (*mcPho).vertex().y() ) < 0.0001 &&
1514  fabs( tp->vz() - (*mcPho).vertex().z() ) < 0.0001) {
1515  theConvTP_.push_back( tp );
1516 
1517 
1518  }
1519  }
1520 
1521  if ( theConvTP_.size() < 2 ) continue;
1522 
1523  //associated = false;
1524  reco::RecoToSimCollection p1 = theTrackAssociator->associateRecoToSim(tc1,theConvTP_);
1525  reco::RecoToSimCollection p2 = theTrackAssociator->associateRecoToSim(tc2,theConvTP_);
1526 
1527 
1528 
1529 
1530 
1531  if ( (!p1incl.empty() && !p2incl.empty()) && (!p1.empty() || !p2.empty()) ) { // associated = true;
1532  try{
1533  std::vector<std::pair<TrackingParticleRef, double> > tp1 = p1incl[tk1];
1534  std::vector<std::pair<TrackingParticleRef, double> > tp2 = p2incl[tk2];
1535  if (!(!tp1.empty()&&!tp2.empty())){
1536  tp1 = p1[tk2];
1537  tp2 = p2[tk1];
1538  }
1539  if (!tp1.empty()&&!tp2.empty()) {
1540  TrackingParticleRef tpr1 = tp1.front().first;
1541  TrackingParticleRef tpr2 = tp2.front().first;
1542  if (abs(tpr1->pdgId())==11&&abs(tpr2->pdgId())==11 && tpr1->pdgId()*tpr2->pdgId()<0) {
1543  if ( ((tpr1->parentVertex()->sourceTracks_end()-tpr1->parentVertex()->sourceTracks_begin()>=1) && (*tpr1->parentVertex()->sourceTracks_begin())->pdgId()==22) &&
1544  ((tpr2->parentVertex()->sourceTracks_end()-tpr2->parentVertex()->sourceTracks_begin()>=1) && (*tpr2->parentVertex()->sourceTracks_begin())->pdgId()==22) ) {
1545 
1546  // if ( fabs(tpr1->vx() - tpr2->vx()) < 0.1 && fabs(tpr1->vy() - tpr2->vy()) < 0.1 && fabs(tpr1->vz() - tpr2->vz()) < 0.1) {
1547  //if (((*tpr1->parentVertex()->sourceTracks_begin())->pdgId()==22) || ((*tpr2->parentVertex()->sourceTracks_begin())->pdgId()==22)) {
1548 // mcConvR_ = sqrt(tpr1->parentVertex()->position().Perp2());
1549 // mcConvZ_ = tpr1->parentVertex()->position().z();
1550 // mcConvX_ = tpr1->parentVertex()->position().x();
1551 // mcConvY_ = tpr1->parentVertex()->position().y();
1552 // mcConvEta_ = tpr1->parentVertex()->position().eta();
1553 // mcConvPhi_ = tpr1->parentVertex()->position().phi();
1554 // mcConvPt_ = sqrt((*tpr1->parentVertex()->sourceTracks_begin())->momentum().Perp2());
1555  //std::cout << " Reco to Sim mcconvpt " << mcConvPt_ << std::endl;
1556  //cout << "associated track1 to " << tpr1->pdgId() << " with p=" << tpr1->p4() << " with pT=" << tpr1->pt() << endl;
1557  //cout << "associated track2 to " << tpr2->pdgId() << " with p=" << tpr2->p4() << " with pT=" << tpr2->pt() << endl;
1558  associated = true;
1559  break;
1560  //}
1561  //}
1562  }
1563  }
1564  }
1565  } catch (Exception event) {
1566  //cout << "do not continue: " << event.what() << endl;
1567  //continue;
1568  }
1569 
1570  }
1571 
1572  }
1573  }
1574 
1575  if ( associated ) match=1;
1576  else
1577  match=2;
1578 
1579  h_match_->Fill(float(match));
1581  if ( match == 1) nRecConvAss_++;
1582  h_convEta_[match][0]->Fill( refittedMom.eta() );
1583  h_convEta_[match][1]->Fill( refittedMom.eta() );
1584  if (matchConvSC) h_convEtaMatchSC_[match][0]->Fill( refittedMom.eta() );
1585  h_convPhi_[match][0]->Fill( refittedMom.phi() );
1586  h_convR_[match][0]->Fill( sqrt(aConv.conversionVertex().position().perp2()) );
1587  h_convZ_[match][0]->Fill( aConv.conversionVertex().position().z() );
1588  h_convPt_[match][0]->Fill( sqrt(refittedMom.perp2()) );
1589  h_invMass_[match][0] ->Fill( invM);
1590  h_vtxChi2Prob_[match][0] ->Fill (chi2Prob);
1591  h_DPhiTracksAtVtx_[match][0]->Fill( dPhiTracksAtVtx);
1592  h_DCotTracks_[match][0] ->Fill ( aConv.pairCotThetaSeparation() );
1593  h_distMinAppTracks_[match][0] ->Fill (aConv.distOfMinimumApproach());
1594  h_lxybs_[match][0] ->Fill (lxy);
1595  h_maxNHitsBeforeVtx_[match][0] ->Fill (maxNHitsBeforeVtx);
1596  h_leadNHitsBeforeVtx_[match][0] ->Fill (leadNHitsBeforeVtx);
1597  h_trailNHitsBeforeVtx_[match][0] ->Fill (trailNHitsBeforeVtx);
1598  h_sumNHitsBeforeVtx_[match][0] ->Fill (sumNHitsBeforeVtx);
1599  h_deltaExpectedHitsInner_[match][0] ->Fill (deltaExpectedHitsInner);
1600  h_leadExpectedHitsInner_[match][0] ->Fill (leadExpectedHitsInner);
1601  h_maxDlClosestHitToVtx_[match][0] ->Fill (maxDlClosestHitToVtx);
1602  h_maxDlClosestHitToVtxSig_[match][0] ->Fill (maxDlClosestHitToVtxSig);
1603  h_nSharedHits_[match][0] ->Fill (aConv.nSharedHits());
1604  if ( matchConvSC ) {
1605  //h_EoverPTracks_[match][0] ->Fill (aConv.EoverPrefittedTracks());
1606  h_EoverPTracks_[match][0] ->Fill (iMatchingSC->superCluster()->energy()/sqrt(refittedMom.mag2()));
1607  h_convSCdPhi_[match][0]->Fill( iMatchingSC->superCluster()->position().phi() - refittedMom.phi() );
1608  double ConvEta = etaTransformation(aConv.refittedPairMomentum().eta(),aConv.zOfPrimaryVertexFromTracks());
1609  h_convSCdEta_[match][0]->Fill( iMatchingSC->superCluster()->position().eta() - ConvEta );
1610 
1611  }
1612  if ( match==1) {
1613  h2_photonPtRecVsPtSim_->Fill ( mcConvPt_, sqrt(refittedMom.perp2()) );
1614  h_convPtRes_[0]->Fill ( sqrt(refittedMom.perp2())/mcConvPt_);
1615  }
1616 
1617  if ( phoIsInBarrel ) {
1618  h_invMass_[match][1] ->Fill(invM);
1619  h_vtxChi2Prob_[match][1] ->Fill (chi2Prob);
1620  h_DPhiTracksAtVtx_[match][1]->Fill( dPhiTracksAtVtx);
1621  h_DCotTracks_[match][1] ->Fill ( aConv.pairCotThetaSeparation() );
1622  h_distMinAppTracks_[match][1] ->Fill (aConv.distOfMinimumApproach());
1623  h_lxybs_[match][1] ->Fill (lxy);
1624  h_maxNHitsBeforeVtx_[match][1] ->Fill (maxNHitsBeforeVtx);
1625  h_leadNHitsBeforeVtx_[match][1] ->Fill (leadNHitsBeforeVtx);
1626  h_trailNHitsBeforeVtx_[match][1] ->Fill (trailNHitsBeforeVtx);
1627  h_sumNHitsBeforeVtx_[match][1] ->Fill (sumNHitsBeforeVtx);
1628  h_deltaExpectedHitsInner_[match][1] ->Fill (deltaExpectedHitsInner);
1629  h_leadExpectedHitsInner_[match][1] ->Fill (leadExpectedHitsInner);
1630  h_maxDlClosestHitToVtx_[match][1] ->Fill (maxDlClosestHitToVtx);
1631  h_maxDlClosestHitToVtxSig_[match][1] ->Fill (maxDlClosestHitToVtxSig);
1632  h_nSharedHits_[match][1] ->Fill (aConv.nSharedHits());
1633  if ( matchConvSC ) {
1634  // h_EoverPTracks_[match][1] ->Fill (aConv.EoverPrefittedTracks());
1635  h_EoverPTracks_[match][1] ->Fill (iMatchingSC->superCluster()->energy()/sqrt(refittedMom.mag2()));
1636  h_convSCdPhi_[match][1]->Fill( iMatchingSC->superCluster()->position().phi() - refittedMom.phi() );
1637  double ConvEta = etaTransformation(aConv.refittedPairMomentum().eta(),aConv.zOfPrimaryVertexFromTracks());
1638  h_convSCdEta_[match][1]->Fill( iMatchingSC->superCluster()->position().eta() - ConvEta );
1639 
1640  }
1641  if ( match==1) h_convPtRes_[1]->Fill ( sqrt(refittedMom.perp2())/mcConvPt_);
1642  }
1643 
1644 
1645  if ( phoIsInEndcap ) {
1646  h_invMass_[match][2] ->Fill(invM);
1647  h_vtxChi2Prob_[match][2] ->Fill (chi2Prob);
1648  h_DPhiTracksAtVtx_[match][2]->Fill( dPhiTracksAtVtx);
1649  h_DCotTracks_[match][2] ->Fill ( aConv.pairCotThetaSeparation() );
1650  h_distMinAppTracks_[match][2] ->Fill (aConv.distOfMinimumApproach());
1651  h_lxybs_[match][2] ->Fill (lxy);
1652  h_maxNHitsBeforeVtx_[match][2] ->Fill (maxNHitsBeforeVtx);
1653  h_leadNHitsBeforeVtx_[match][2] ->Fill (leadNHitsBeforeVtx);
1654  h_trailNHitsBeforeVtx_[match][2] ->Fill (trailNHitsBeforeVtx);
1655  h_sumNHitsBeforeVtx_[match][2] ->Fill (sumNHitsBeforeVtx);
1656  h_deltaExpectedHitsInner_[match][2] ->Fill (deltaExpectedHitsInner);
1657  h_leadExpectedHitsInner_[match][2] ->Fill (leadExpectedHitsInner);
1658  h_maxDlClosestHitToVtx_[match][2] ->Fill (maxDlClosestHitToVtx);
1659  h_maxDlClosestHitToVtxSig_[match][2] ->Fill (maxDlClosestHitToVtxSig);
1660  h_nSharedHits_[match][2] ->Fill (aConv.nSharedHits());
1661  if ( matchConvSC ) {
1662  // h_EoverPTracks_[match][2] ->Fill (aConv.EoverPrefittedTracks());
1663  h_EoverPTracks_[match][2] ->Fill (iMatchingSC->superCluster()->energy()/sqrt(refittedMom.mag2()));
1664  h_convSCdPhi_[match][2]->Fill( iMatchingSC->superCluster()->position().phi() - refittedMom.phi() );
1665  double ConvEta = etaTransformation(aConv.refittedPairMomentum().eta(),aConv.zOfPrimaryVertexFromTracks());
1666  h_convSCdEta_[match][2]->Fill( iMatchingSC->superCluster()->position().eta() - ConvEta );
1667  }
1668  if ( match==1) h_convPtRes_[2]->Fill ( sqrt(refittedMom.perp2())/mcConvPt_);
1669  }
1670 
1671 
1672  if ( match == 1 ) {
1673  h_convVtxdX_ ->Fill ( aConv.conversionVertex().position().x() - mcConvX_);
1674  h_convVtxdY_ ->Fill ( aConv.conversionVertex().position().y() - mcConvY_);
1675  h_convVtxdZ_ ->Fill ( aConv.conversionVertex().position().z() - mcConvZ_);
1676  h_convVtxdR_ ->Fill ( sqrt(aConv.conversionVertex().position().perp2()) - mcConvR_);
1677  h_convVtxdPhi_ ->Fill ( aConv.conversionVertex().position().phi() - mcConvPhi_);
1678  h_convVtxdEta_ ->Fill ( aConv.conversionVertex().position().eta() - mcConvEta_);
1679  h2_convVtxdRVsR_ ->Fill (mcConvR_, sqrt(aConv.conversionVertex().position().perp2()) - mcConvR_ );
1680  h2_convVtxdRVsEta_ ->Fill (mcEta_, sqrt(aConv.conversionVertex().position().perp2()) - mcConvR_ );
1681  p_convVtxdRVsR_ ->Fill (mcConvR_, sqrt(aConv.conversionVertex().position().perp2()) - mcConvR_ );
1682  p_convVtxdRVsEta_ ->Fill (mcEta_, sqrt(aConv.conversionVertex().position().perp2()) - mcConvR_ );
1683  p_convVtxdXVsX_ ->Fill (mcConvX_, aConv.conversionVertex().position().x() - mcConvX_ );
1684  p_convVtxdYVsY_ ->Fill (mcConvY_, aConv.conversionVertex().position().y() - mcConvY_ );
1685  p_convVtxdZVsZ_ ->Fill (mcConvZ_, aConv.conversionVertex().position().z() - mcConvZ_ );
1686  p_convVtxdZVsR_ ->Fill (mcConvR_, aConv.conversionVertex().position().z() - mcConvZ_ );
1687 
1688  float dR=sqrt(aConv.conversionVertex().position().perp2()) - mcConvR_;
1689  float dZ=aConv.conversionVertex().position().z() - mcConvZ_;
1690  p2_convVtxdRVsRZ_ ->Fill (mcConvZ_,mcConvR_, dR );
1691  p2_convVtxdZVsRZ_ ->Fill (mcConvZ_,mcConvR_, dZ );
1692 
1693 
1694 
1695 
1696  h2_convVtxRrecVsTrue_ -> Fill (mcConvR_, sqrt(aConv.conversionVertex().position().perp2()) );
1697 
1698 
1699  h_zPVFromTracks_[match]->Fill ( aConv.zOfPrimaryVertexFromTracks() );
1700  h_dzPVFromTracks_[match]->Fill ( aConv.zOfPrimaryVertexFromTracks() - simPV_Z );
1701  h2_dzPVVsR_ ->Fill(mcConvR_, aConv.zOfPrimaryVertexFromTracks() - simPV_Z );
1702  p_dzPVVsR_ ->Fill(mcConvR_, aConv.zOfPrimaryVertexFromTracks() - simPV_Z );
1703 
1704  if ( phoIsInBarrel ) {
1705  h_convVtxdX_barrel_ ->Fill ( aConv.conversionVertex().position().x() - mcConvX_);
1706  h_convVtxdY_barrel_ ->Fill ( aConv.conversionVertex().position().y() - mcConvY_);
1707  h_convVtxdZ_barrel_ ->Fill ( aConv.conversionVertex().position().z() - mcConvZ_);
1708  h_convVtxdR_barrel_ ->Fill ( sqrt(aConv.conversionVertex().position().perp2()) - mcConvR_);
1709 
1710  }
1711  if ( phoIsInEndcap ) {
1712  h_convVtxdX_endcap_ ->Fill ( aConv.conversionVertex().position().x() - mcConvX_);
1713  h_convVtxdY_endcap_ ->Fill ( aConv.conversionVertex().position().y() - mcConvY_);
1714  h_convVtxdZ_endcap_ ->Fill ( aConv.conversionVertex().position().z() - mcConvZ_);
1715  h_convVtxdR_endcap_ ->Fill ( sqrt(aConv.conversionVertex().position().perp2()) - mcConvR_);
1716 
1717  }
1718 
1719 
1720  }
1721 
1723  for (unsigned int i=0; i<tracks.size(); i++) {
1724  //std::cout << " Loop over tracks pt " << tracks[i]->pt() << std::endl;
1725  RefToBase<reco::Track> tfrb(aConv.tracks()[i] );
1726  itAss= myAss.find( tfrb.get() );
1727 
1728  nHitsVsEta_[match] ->Fill (mcEta_, float(tracks[i]->numberOfValidHits()) );
1729  nHitsVsR_[match] ->Fill (mcConvR_, float(tracks[i]->numberOfValidHits()) );
1730  p_nHitsVsEta_[match] ->Fill (mcEta_, float(tracks[i]->numberOfValidHits()) -0.0001);
1731  p_nHitsVsR_[match] ->Fill (mcConvR_, float(tracks[i]->numberOfValidHits()) -0.0001);
1732  h_tkChi2_[match] ->Fill (tracks[i]->normalizedChi2() );
1733  h_tkChi2Large_[match] ->Fill (tracks[i]->normalizedChi2() );
1734  h2_Chi2VsEta_[match] ->Fill( mcEta_, tracks[i]->normalizedChi2() );
1735  h2_Chi2VsR_[match] ->Fill( mcConvR_, tracks[i]->normalizedChi2() );
1736  p_Chi2VsEta_[match] ->Fill( mcEta_, tracks[i]->normalizedChi2() );
1737  p_Chi2VsR_[match] ->Fill( mcConvR_, tracks[i]->normalizedChi2() );
1738  double d0;
1739  if (valid_pvtx){
1740  d0 = - tracks[i]->dxy(the_pvtx.position());
1741  } else {
1742  d0 = tracks[i]->d0();
1743  }
1744  h_TkD0_[match]->Fill (d0* tracks[i]->charge() );
1745  h_nHitsBeforeVtx_[match]->Fill ( aConv.nHitsBeforeVtx().size()>1 ? aConv.nHitsBeforeVtx().at(i) : 0 );
1746  h_dlClosestHitToVtx_[match]->Fill ( aConv.dlClosestHitToVtx().size()>1 ? aConv.dlClosestHitToVtx().at(i).value() : 0 );
1747  h_dlClosestHitToVtxSig_[match]->Fill ( aConv.dlClosestHitToVtx().size()>1 ? aConv.dlClosestHitToVtx().at(i).value()/aConv.dlClosestHitToVtx().at(i).error() : 0 );
1748 
1749 
1750  if ( itAss == myAss.end() ) continue;
1751  reco::Track refTrack= aConv.conversionVertex().refittedTracks()[i];
1752 
1753  float simPt = sqrt( ((*itAss).second)->momentum().perp2() );
1754  float recPt = refTrack.pt();
1755  float ptres= recPt - simPt ;
1756  //float pterror = aConv.tracks()[i]->ptError();
1757  float pterror = aConv.conversionVertex().refittedTracks()[i].ptError();
1758  h2_PtRecVsPtSim_[0]->Fill ( simPt, recPt);
1759  h_TkPtPull_[0] ->Fill(ptres/pterror);
1760  h2_TkPtPull_[0] ->Fill(mcEta_, ptres/pterror);
1761 
1762  if ( phoIsInBarrel ) {
1763  h_TkPtPull_[1] ->Fill(ptres/pterror);
1764  h2_PtRecVsPtSim_[1]->Fill ( simPt, recPt);
1765  }
1766  if ( phoIsInEndcap ) {
1767  h_TkPtPull_[2] ->Fill(ptres/pterror);
1768  h2_PtRecVsPtSim_[2]->Fill ( simPt, recPt);
1769  }
1770  } // end loop over track
1771 
1772 
1773 
1774  } // loop over reco conversions
1775 
1776 
1777  h_nConv_[0][0]->Fill (float(nRecConv_));
1778  h_nConv_[1][0]->Fill (float(nRecConvAss_));
1779 
1780 
1781 
1782 }
1783 
1784 
1785 
1786 
1787 
1789 
1790 
1791  std::string outputFileName = parameters_.getParameter<std::string>("OutputFileName");
1792  if ( ! isRunCentrally_ ) {
1793  dbe_->save(outputFileName);
1794  }
1795 
1796  edm::LogInfo("TkConvValidator") << "Analyzed " << nEvt_ << "\n";
1797  // std::cout << "::endJob Analyzed " << nEvt_ << " events " << " with total " << nPho_ << " Photons " << "\n";
1798  // std::cout << "TkConvValidator::endJob Analyzed " << nEvt_ << " events " << "\n";
1799 
1800  return ;
1801 }
1802 
1803 
1805 
1808  auto scp = new SimpleCylinderBounds( sqrt(vtx.position().perp2())-0.001f,
1809  sqrt(vtx.position().perp2())+0.001f,
1810  -fabs(vtx.position().z()),
1811  fabs(vtx.position().z())
1812  );
1814 
1815  ReferenceCountingPointer<Disk> theDisk_(new Disk( Surface::PositionType( 0, 0, vtx.position().z()), rot,
1816  new SimpleDiskBounds( 0, sqrt(vtx.position().perp2()), -0.001, 0.001) )
1817  );
1818 
1819 
1820  const TrajectoryStateOnSurface myTSOS = trajectoryStateTransform::innerStateOnSurface(*tk, trackerGeom, &mf);
1821  PropagatorWithMaterial propag( anyDirection, 0.000511, &mf );
1822  TrajectoryStateOnSurface stateAtVtx;
1823  stateAtVtx = propag.propagate(myTSOS, *theBarrel_);
1824  if (!stateAtVtx.isValid() ) {
1825  stateAtVtx = propag.propagate(myTSOS, *theDisk_);
1826  }
1827  if (stateAtVtx.isValid()){
1828  return math::XYZVector ( double(stateAtVtx.globalMomentum().x()), double(stateAtVtx.globalMomentum().y()), double(stateAtVtx.globalMomentum().z()));
1829  } else {
1830  return math::XYZVector(0.,0.,0.);
1831  }
1832 
1833 
1834 
1835 }
1836 
1837 
1839 {
1840  //---Definitions
1841  const float PI = 3.1415927;
1842  const float TWOPI = 2.0*PI;
1843 
1844 
1845  if(phi > PI) {phi = phi - TWOPI;}
1846  if(phi < -PI) {phi = phi + TWOPI;}
1847 
1848  // cout << " Float_t PHInormalization out " << PHI << endl;
1849  return phi;
1850 
1851 }
1852 
1853 
1854 float TkConvValidator::etaTransformation( float EtaParticle , float Zvertex) {
1855 
1856  //---Definitions
1857  const float PI = 3.1415927;
1858 
1859  //---Definitions for ECAL
1860  const float R_ECAL = 136.5;
1861  const float Z_Endcap = 328.0;
1862  const float etaBarrelEndcap = 1.479;
1863 
1864  //---ETA correction
1865 
1866  float Theta = 0.0 ;
1867  float ZEcal = R_ECAL*sinh(EtaParticle)+Zvertex;
1868 
1869  if(ZEcal != 0.0) Theta = atan(R_ECAL/ZEcal);
1870  if(Theta<0.0) Theta = Theta+PI ;
1871  float ETA = - log(tan(0.5*Theta));
1872 
1873  if( fabs(ETA) > etaBarrelEndcap )
1874  {
1875  float Zend = Z_Endcap ;
1876  if(EtaParticle<0.0 ) Zend = -Zend ;
1877  float Zlen = Zend - Zvertex ;
1878  float RR = Zlen/sinh(EtaParticle);
1879  Theta = atan(RR/Zend);
1880  if(Theta<0.0) Theta = Theta+PI ;
1881  ETA = - log(tan(0.5*Theta));
1882  }
1883  //---Return the result
1884  return ETA;
1885  //---end
1886 }
1887 
1888 
const reco::Vertex & conversionVertex() const
returns the reco conversion vertex
Definition: Conversion.h:97
constexpr double deltaPhi(double phi1, double phi2)
Definition: deltaPhi.h:22
value_type const * get() const
Definition: RefToBase.h:234
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
const_iterator end() const
last iterator over the map (read only)
MonitorElement * bookProfile(Args &&...args)
Definition: DQMStore.h:160
static HepMC::IO_HEPEVT conv
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:579
bool quality(ConversionQuality q) const
Definition: Conversion.h:181
double y() const
y coordinate
Definition: Vertex.h:113
math::XYZVector recalculateMomentumAtFittedVertex(const MagneticField &mf, const TrackerGeometry &trackerGeom, const edm::RefToBase< reco::Track > &tk, const reco::Vertex &vtx)
bool isValid() const
Tells whether the vertex is valid.
Definition: Vertex.h:68
bool empty() const
return true if empty
const std::vector< Measurement1DFloat > & dlClosestHitToVtx() const
Vector of signed decay length with uncertainty from nearest hit on track to the conversion vtx positi...
Definition: Conversion.h:163
const_iterator find(const key_type &k) const
find element with specified reference key
T y() const
Definition: PV3DBase.h:63
double zOfPrimaryVertexFromTracks(const math::XYZPoint &myBeamSpot=math::XYZPoint()) const
Definition: Conversion.h:145
double distOfMinimumApproach() const
Definition: Conversion.h:125
double pairCotThetaSeparation() const
Delta cot(Theta) where Theta is the angle in the (y,z) plane between the two tracks. Original tracks are used.
Definition: Conversion.cc:209
std::vector< Vertex > VertexCollection
collection of Vertex objects
Definition: VertexFwd.h:9
void endJob() override
key_type key() const
Accessor for product key.
Definition: Ref.h:265
reco::SuperClusterRef superCluster() const override
Ref to SuperCluster.
const std::vector< Track > & refittedTracks() const
Returns the container of refitted tracks.
Definition: Vertex.h:164
double pairInvariantMass() const
if nTracks=2 returns the pair invariant mass. Original tracks are used here
Definition: Conversion.cc:190
const Point & position() const
position
Definition: Vertex.h:109
math::XYZVectorF refittedPairMomentum() const
Conversion tracks momentum from the tracks refitted with vertex constraint.
Definition: Conversion.cc:248
double q2[4]
Definition: TauolaWrapper.h:88
std::vector< Conversion > ConversionCollection
collectin of Conversion objects
Definition: ConversionFwd.h:9
return((rh^lh)&mask)
TrackAlgorithm algo() const
Definition: TrackBase.h:497
Definition: BoundDisk.h:19
void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
void endRun(edm::Run const &r, edm::EventSetup const &es) override
#define ETA
float etaTransformation(float a, float b)
float phiNormalization(float &a)
MonitorElement * bookProfile2D(Args &&...args)
Definition: DQMStore.h:166
void Fill(HcalDetId &id, double val, std::vector< TH2F > &depth)
T sqrt(T t)
Definition: SSEVec.h:18
double pt() const
track transverse momentum
Definition: TrackBase.h:621
T z() const
Definition: PV3DBase.h:64
~TkConvValidator() override
TkConvValidator(const edm::ParameterSet &)
MonitorElement * book1D(Args &&...args)
Definition: DQMStore.h:118
Tan< T >::type tan(const T &t)
Definition: Tan.h:22
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
double chi2() const
chi-squares
Definition: Vertex.h:98
#define TWOPI
Definition: DQMSourcePi0.cc:37
double f[11][100]
float ChiSquaredProbability(double chiSquared, double nrDOF)
ROOT::Math::DisplacementVector3D< ROOT::Math::Cartesian3D< float > > XYZVectorF
spatial vector with cartesian internal representation
Definition: Vector3D.h:17
bool isValid() const
Definition: HandleBase.h:74
double p2[4]
Definition: TauolaWrapper.h:90
#define PI
Definition: QcdUeDQM.h:36
DQMStore * dbe_
double ndof() const
Definition: Vertex.h:105
double x() const
x coordinate
Definition: Vertex.h:111
uint8_t nSharedHits() const
number of shared hits btw the two track
Definition: Conversion.h:165
void setCurrentFolder(const std::string &fullpath)
Definition: DQMStore.cc:274
T const * product() const
Definition: Handle.h:81
MonitorElement * book2D(Args &&...args)
Definition: DQMStore.h:136
const HitPattern & hitPattern() const
Access the hit pattern, indicating in which Tracker layers the track has hits.
Definition: TrackBase.h:446
reco::RecoToSimCollection associateRecoToSim(const edm::Handle< edm::View< reco::Track > > &tCH, const edm::Handle< TrackingParticleCollection > &tPCH) const
compare reco to sim the handle of reco::Track and TrackingParticle collections
double q1[4]
Definition: TauolaWrapper.h:87
XYZVectorD XYZVector
spatial vector with cartesian internal representation
Definition: Vector3D.h:30
std::vector< Photon > PhotonCollection
collectin of Photon objects
Definition: PhotonFwd.h:9
def uint(string)
TrajectoryStateOnSurface propagate(STA const &state, SUR const &surface) const
Definition: Propagator.h:53
static const float etaBarrelEndcap
int numberOfLostHits(HitCategory category) const
Definition: HitPattern.h:903
static const float Z_Endcap
edm::EventID id() const
Definition: EventBase.h:60
HLT enums.
double p1[4]
Definition: TauolaWrapper.h:89
GlobalVector globalMomentum() const
static float computeRadius(Bounds const &bounds)
Definition: Cylinder.h:30
T get() const
Definition: EventSetup.h:63
void push_back(const RefToBase< T > &)
const std::vector< uint8_t > & nHitsBeforeVtx() const
Vector of the number of hits before the vertex along each track trajector.
Definition: Conversion.h:161
double y0() const
y coordinate
Definition: BeamSpot.h:66
static const float R_ECAL
void analyze(const edm::Event &, const edm::EventSetup &) override
double recPt
std::pair< typename Association::data_type::first_type, double > match(Reference key, Association association, bool bestMatchByMaxValue)
Generic matching function.
Definition: Utils.h:10
reco::SimToRecoCollection associateSimToReco(const edm::Handle< edm::View< reco::Track > > &tCH, const edm::Handle< TrackingParticleCollection > &tPCH) const
compare reco to sim the handle of reco::Track and TrackingParticle collections
T x() const
Definition: PV3DBase.h:62
T const * product() const
Definition: ESHandle.h:86
double dPhiTracksAtVtx() const
Definition: Conversion.cc:313
std::vector< edm::RefToBase< reco::Track > > const & tracks() const
vector of track to base references
Definition: Conversion.cc:176
Definition: event.py:1
Definition: Run.h:44
TrajectoryStateOnSurface innerStateOnSurface(const reco::Track &tk, const TrackingGeometry &geom, const MagneticField *field, bool withErr=true)
double x0() const
x coordinate
Definition: BeamSpot.h:64
void dqmBeginRun(edm::Run const &r, edm::EventSetup const &theEventSetup) override