12 #include "HepMC/GenEvent.h"
13 #include "HepMC/GenVertex.h"
14 #include "HepMC/GenParticle.h"
58 #include <gsl/gsl_math.h>
59 #include <gsl/gsl_eigen.h>
76 : verbose_( iConfig.getUntrackedParameter<bool>(
"verbose",
false ) )
77 , doMatching_( iConfig.getUntrackedParameter<bool>(
"matching",
false ) )
78 , printXBS_( iConfig.getUntrackedParameter<bool>(
"XBS",
false ) )
79 , dumpThisEvent_(
false )
80 , dumpPUcandidates_( iConfig.getUntrackedParameter<bool>(
"dumpPUcandidates",
false ) )
86 , luminosityBlock_( 0 )
92 , zmatch_( iConfig.getUntrackedParameter<double>(
"zmatch", 0.0500 ) )
94 , theTrackFilter( iConfig.getParameter<edm::
ParameterSet>(
"TkFilterParameters" ) )
95 , recoTrackProducer_( iConfig.getUntrackedParameter<std::
string>(
"recoTrackProducer") )
96 , outputFile_( iConfig.getUntrackedParameter<std::
string>(
"outputFile" ) )
102 , recoBeamSpotToken_( consumes<
reco::
BeamSpot>( iConfig.getParameter<edm::
InputTag>(
"beamSpot" ) ) )
103 , edmView_recoTrack_Token_( consumes< edm::
View<
reco::
Track> >( edm::
InputTag( iConfig.getUntrackedParameter<std::
string>(
"recoTrackProducer" ) ) ) )
107 , std::
string(
"MergedTrackTruth" )
112 , std::
string(
"MergedTrackTruth" )
124 cout <<
"PrimaryVertexAnalyzer4PU: zmatch=" <<
zmatch_ << endl;
142 std::map<std::string, TH1*>
h;
145 h[
"nbtksinvtx"] =
new TH1F(
"nbtksinvtx",
"reconstructed tracks in vertex",40,-0.5,39.5);
146 h[
"nbtksinvtxPU"] =
new TH1F(
"nbtksinvtxPU",
"reconstructed tracks in vertex",40,-0.5,39.5);
147 h[
"nbtksinvtxTag"]=
new TH1F(
"nbtksinvtxTag",
"reconstructed tracks in vertex",40,-0.5,39.5);
148 h[
"resx"] =
new TH1F(
"resx",
"residual x",100,-0.04,0.04);
149 h[
"resy"] =
new TH1F(
"resy",
"residual y",100,-0.04,0.04);
150 h[
"resz"] =
new TH1F(
"resz",
"residual z",100,-0.1,0.1);
151 h[
"resz10"] =
new TH1F(
"resz10",
"residual z",100,-1.0,1.);
152 h[
"pullx"] =
new TH1F(
"pullx",
"pull x",100,-25.,25.);
153 h[
"pully"] =
new TH1F(
"pully",
"pull y",100,-25.,25.);
154 h[
"pullz"] =
new TH1F(
"pullz",
"pull z",100,-25.,25.);
155 h[
"vtxchi2"] =
new TH1F(
"vtxchi2",
"chi squared",100,0.,100.);
156 h[
"vtxndf"] =
new TH1F(
"vtxndf",
"degrees of freedom",500,0.,100.);
157 h[
"vtxndfc"] =
new TH1F(
"vtxndfc",
"expected 2nd highest ndof",500,0.,100.);
159 h[
"vtxndfvsntk"] =
new TH2F(
"vtxndfvsntk",
"ndof vs #tracks",20,0.,100, 20, 0., 200.);
160 h[
"vtxndfoverntk"]=
new TH1F(
"vtxndfoverntk",
"ndof / #tracks",40,0.,2.);
161 h[
"vtxndf2overntk"]=
new TH1F(
"vtxndf2overntk",
"(ndof+2) / #tracks",40,0.,2.);
162 h[
"tklinks"] =
new TH1F(
"tklinks",
"Usable track links",2,-0.5,1.5);
163 h[
"nans"] =
new TH1F(
"nans",
"Illegal values for x,y,z,xx,xy,xz,yy,yz,zz",9,0.5,9.5);
166 add(h,
new TH1F(
"szRecVtx",
"size of recvtx collection",20, -0.5, 19.5));
167 add(h,
new TH1F(
"isFake",
"fake vertex",2, -0.5, 1.5));
168 add(h,
new TH1F(
"isFake1",
"fake vertex or ndof<0",2, -0.5, 1.5));
169 add(h,
new TH1F(
"bunchCrossing",
"bunchCrossing",4000, 0., 4000.));
170 add(h,
new TH2F(
"bunchCrossingLogNtk",
"bunchCrossingLogNtk",4000, 0., 4000.,5,0., 5.));
171 add(h,
new TH1F(
"highpurityTrackFraction",
"fraction of high purity tracks",20, 0., 1.));
172 add(h,
new TH2F(
"trkchi2vsndof",
"vertices chi2 vs ndof",50, 0., 100., 50, 0., 200.));
173 add(h,
new TH1F(
"trkchi2overndof",
"vertices chi2 / ndof",50, 0., 5.));
175 add(h,
new TH2F(
"2trkchi2vsndof",
"two-track vertices chi2 vs ndof",40, 0., 10., 20, 0., 20.));
176 add(h,
new TH1F(
"2trkmassSS",
"two-track vertices mass (same sign)",100, 0., 2.));
177 add(h,
new TH1F(
"2trkmassOS",
"two-track vertices mass (opposite sign)",100, 0., 2.));
178 add(h,
new TH1F(
"2trkdphi",
"two-track vertices delta-phi",360, 0, 2*
M_PI));
179 add(h,
new TH1F(
"2trkseta",
"two-track vertices sum-eta",50, -2., 2.));
180 add(h,
new TH1F(
"2trkdphicurl",
"two-track vertices delta-phi (sum eta<0.1)",360, 0, 2*
M_PI));
181 add(h,
new TH1F(
"2trksetacurl",
"two-track vertices sum-eta (delta-phi<0.1)",50, -2., 2.));
182 add(h,
new TH1F(
"2trkdetaOS",
"two-track vertices delta-eta (same sign)",50, -0.5, 0.5));
183 add(h,
new TH1F(
"2trkdetaSS",
"two-track vertices delta-eta (opposite sign)",50, -0.5, 0.5));
185 add(h,
new TH1F(
"2trkmassSSPU",
"two-track vertices mass (same sign)",100, 0., 2.));
186 add(h,
new TH1F(
"2trkmassOSPU",
"two-track vertices mass (opposite sign)",100, 0., 2.));
187 add(h,
new TH1F(
"2trkdphiPU",
"two-track vertices delta-phi",360, 0, 2*
M_PI));
188 add(h,
new TH1F(
"2trksetaPU",
"two-track vertices sum-eta",50, -2., 2.));
189 add(h,
new TH1F(
"2trkdphicurlPU",
"two-track vertices delta-phi (sum eta<0.1)",360, 0, 2*
M_PI));
190 add(h,
new TH1F(
"2trksetacurlPU",
"two-track vertices sum-eta (delta-phi<0.1)",50, -2., 2.));
191 add(h,
new TH1F(
"2trkdetaOSPU",
"two-track vertices delta-eta (same sign)",50, -0.5, 0.5));
192 add(h,
new TH1F(
"2trkdetaSSPU",
"two-track vertices delta-eta (opposite sign)",50, -0.5, 0.5));
194 add(h,
new TH2F(
"2trkchi2vsndof",
"two-track vertices chi2 vs ndof",40, 0., 10., 20, 0., 20.));
195 add(h,
new TH2F(
"3trkchi2vsndof",
"three-track vertices chi2 vs ndof",40, 0., 10., 20, 0., 20.));
196 add(h,
new TH2F(
"4trkchi2vsndof",
"four-track vertices chi2 vs ndof",40, 0., 10., 20, 0., 20.));
197 add(h,
new TH2F(
"5trkchi2vsndof",
"five-track vertices chi2 vs ndof",40, 0., 10., 20, 0., 20.));
199 add(h,
new TH2F(
"fake2trkchi2vsndof",
"fake two-track vertices chi2 vs ndof",40, 0., 10., 20, 0., 20.));
200 add(h,
new TH2F(
"fake3trkchi2vsndof",
"fake three-track vertices chi2 vs ndof",40, 0., 10., 20, 0., 20.));
201 add(h,
new TH2F(
"fake4trkchi2vsndof",
"fake four-track vertices chi2 vs ndof",40, 0., 10., 20, 0., 20.));
202 add(h,
new TH2F(
"fake5trkchi2vsndof",
"fake five-track vertices chi2 vs ndof",40, 0., 10., 20, 0., 20.));
203 h[
"resxr"] =
new TH1F(
"resxr",
"relative residual x",100,-0.04,0.04);
204 h[
"resyr"] =
new TH1F(
"resyr",
"relative residual y",100,-0.04,0.04);
205 h[
"reszr"] =
new TH1F(
"reszr",
"relative residual z",100,-0.1,0.1);
206 h[
"pullxr"] =
new TH1F(
"pullxr",
"relative pull x",100,-25.,25.);
207 h[
"pullyr"] =
new TH1F(
"pullyr",
"relative pull y",100,-25.,25.);
208 h[
"pullzr"] =
new TH1F(
"pullzr",
"relative pull z",100,-25.,25.);
209 h[
"vtxprob"] =
new TH1F(
"vtxprob",
"chisquared probability",100,0.,1.);
210 h[
"eff"] =
new TH1F(
"eff",
"efficiency",2, -0.5, 1.5);
211 h[
"efftag"] =
new TH1F(
"efftag",
"efficiency tagged vertex",2, -0.5, 1.5);
212 h[
"zdistancetag"] =
new TH1F(
"zdistancetag",
"z-distance between tagged and generated",100, -0.1, 0.1);
213 h[
"abszdistancetag"] =
new TH1F(
"abszdistancetag",
"z-distance between tagged and generated",1000, 0., 1.0);
214 h[
"abszdistancetagcum"] =
new TH1F(
"abszdistancetagcum",
"z-distance between tagged and generated",1000, 0., 1.0);
215 h[
"puritytag"] =
new TH1F(
"puritytag",
"purity of primary vertex tags",2, -0.5, 1.5);
216 h[
"effvsptsq"] =
new TProfile(
"effvsptsq",
"efficiency vs ptsq",20, 0., 10000., 0, 1.);
217 h[
"effvsnsimtrk"] =
new TProfile(
"effvsnsimtrk",
"efficiency vs # simtracks",50, 0., 50., 0, 1.);
218 h[
"effvsnrectrk"] =
new TProfile(
"effvsnrectrk",
"efficiency vs # rectracks",50, 0., 50., 0, 1.);
219 h[
"effvsnseltrk"] =
new TProfile(
"effvsnseltrk",
"efficiency vs # selected tracks",50, 0., 50., 0, 1.);
220 h[
"effvsz"] =
new TProfile(
"effvsz",
"efficiency vs z",20, -20., 20., 0, 1.);
221 h[
"effvsz2"] =
new TProfile(
"effvsz2",
"efficiency vs z (2mm)",20, -20., 20., 0, 1.);
222 h[
"effvsr"] =
new TProfile(
"effvsr",
"efficiency vs r",20, 0., 1., 0, 1.);
223 h[
"xresvsntrk"] =
new TProfile(
"xresvsntrk",
"xresolution vs # vertex tracks",40, 0., 200., 0, 0.01);
224 h[
"yresvsntrk"] =
new TProfile(
"yresvsntrk",
"yresolution vs # vertex tracks",40, 0., 200., 0, 0.01);
225 h[
"zresvsntrk"] =
new TProfile(
"zresvsntrk",
"zresolution vs # vertex tracks",40, 0., 200., 0, 0.01);
226 h[
"cpuvsntrk"] =
new TProfile(
"cpuvsntrk",
"cpu time vs # of fitted tracks",40, 0., 200., 0, 200.);
227 h[
"cpucluvsntrk"] =
new TProfile(
"cpucluvsntrk",
"clustering cpu time # of tracks",40, 0., 200., 0, 10.);
228 h[
"cpufit"] =
new TH1F(
"cpufit",
"cpu time for fitting",100, 0., 200.);
229 h[
"cpuclu"] =
new TH1F(
"cpuclu",
"cpu time for clustering",100, 0., 200.);
230 h[
"nbtksinvtx2"] =
new TH1F(
"nbtksinvtx2",
"reconstructed tracks in vertex",40,0.,200.);
231 h[
"nbtksinvtxPU2"] =
new TH1F(
"nbtksinvtxPU2",
"reconstructed tracks in vertex",40,0.,200.);
232 h[
"nbtksinvtxTag2"] =
new TH1F(
"nbtksinvtxTag2",
"reconstructed tracks in vertex",40,0.,200.);
234 h[
"xrec"] =
new TH1F(
"xrec",
"reconstructed x",100,-0.1,0.1);
235 h[
"yrec"] =
new TH1F(
"yrec",
"reconstructed y",100,-0.1,0.1);
236 h[
"zrec"] =
new TH1F(
"zrec",
"reconstructed z",100,-20.,20.);
237 h[
"err1"] =
new TH1F(
"err1",
"error 1",100,0.,0.1);
238 h[
"err2"] =
new TH1F(
"err2",
"error 2",100,0.,0.1);
239 h[
"errx"] =
new TH1F(
"errx",
"error x",100,0.,0.1);
240 h[
"erry"] =
new TH1F(
"erry",
"error y",100,0.,0.1);
241 h[
"errz"] =
new TH1F(
"errz",
"error z",100,0.,2.0);
242 h[
"errz1"] =
new TH1F(
"errz1",
"error z",100,0.,0.2);
244 h[
"zrecNt100"] =
new TH1F(
"zrecNt100",
"reconstructed z for high multiplicity events",80,-40.,40.);
245 add(h,
new TH2F(
"zrecvsnt",
"reconstructed z vs number of tracks",100,-50., 50., 20, 0., 200.));
246 add(h,
new TH2F(
"xyrec",
"reconstructed xy",100, -4., 4., 100, -4., 4.));
247 h[
"xrecBeam"] =
new TH1F(
"xrecBeam",
"reconstructed x - beam x",100,-0.1,0.1);
248 h[
"yrecBeam"] =
new TH1F(
"yrecBeam",
"reconstructed y - beam y",100,-0.1,0.1);
249 h[
"zrecBeam"] =
new TH1F(
"zrecBeam",
"reconstructed z - beam z",100,-20.,20.);
250 h[
"xrecBeamvsz"] =
new TH2F(
"xrecBeamvsz",
"reconstructed x - beam x vs z", 20, -20., 20.,100,-0.1,0.1);
251 h[
"yrecBeamvsz"] =
new TH2F(
"yrecBeamvsz",
"reconstructed y - beam y vs z", 20, -20., 20.,100,-0.1,0.1);
252 h[
"xrecBeamvszprof"] =
new TProfile(
"xrecBeamvszprof",
"reconstructed x - beam x vs z-z0", 20, -20., 20.,-0.1,0.1);
253 h[
"yrecBeamvszprof"] =
new TProfile(
"yrecBeamvszprof",
"reconstructed y - beam y vs z-z0", 20, -20., 20.,-0.1,0.1);
254 add(h,
new TH2F(
"xrecBeamvsdxXBS",
"reconstructed x - beam x vs resolution",10,0., 0.02, 100, -0.1,0.1));
255 add(h,
new TH2F(
"yrecBeamvsdyXBS",
"reconstructed z - beam z vs resolution",10,0., 0.02, 100, -0.1,0.1));
256 add(h,
new TH2F(
"xrecBeamvsdx",
"reconstructed x - beam x vs resolution",10,0., 0.02, 100, -0.1,0.1));
257 add(h,
new TH2F(
"yrecBeamvsdy",
"reconstructed z - beam z vs resolution",10,0., 0.02, 100, -0.1,0.1));
258 add(h,
new TH2F(
"xrecBeamvsdxR2",
"reconstructed x - beam x vs resolution",20,0., 0.04, 100, -0.1,0.1));
259 add(h,
new TH2F(
"yrecBeamvsdyR2",
"reconstructed z - beam z vs resolution",20,0., 0.04, 100, -0.1,0.1));
260 h[
"xrecBeamvsdxprof"] =
new TProfile(
"xrecBeamvsdxprof",
"reconstructed x - beam x vs resolution",10, 0., 0.04,-0.1,0.1 );
261 h[
"yrecBeamvsdyprof"] =
new TProfile(
"yrecBeamvsdyprof",
"reconstructed y - beam y vs resolution",10, 0., 0.04,-0.1,0.1 );
262 add(h,
new TProfile(
"xrecBeam2vsdx2prof",
"reconstructed x - beam x vs resolution",10,0., 0.002, 0., 0.01));
263 add(h,
new TProfile(
"yrecBeam2vsdy2prof",
"reconstructed y - beam y vs resolution",10,0., 0.002, 0., 0.01));
264 add(h,
new TH2F(
"xrecBeamvsdx2",
"reconstructed x - beam x vs resolution",10,0., 0.002, 100, -0.01, 0.01));
265 add(h,
new TH2F(
"yrecBeamvsdy2",
"reconstructed y - beam y vs resolution",10,0., 0.002, 100, -0.01, 0.01));
266 h[
"xrecb"] =
new TH1F(
"xrecb",
"reconstructed x - beam x",100,-0.01,0.01);
267 h[
"yrecb"] =
new TH1F(
"yrecb",
"reconstructed y - beam y",100,-0.01,0.01);
268 h[
"zrecb"] =
new TH1F(
"zrecb",
"reconstructed z - beam z",100,-20.,20.);
269 h[
"xrec1"] =
new TH1F(
"xrec1",
"reconstructed x",100,-4,4);
270 h[
"yrec1"] =
new TH1F(
"yrec1",
"reconstructed y",100,-4,4);
271 h[
"zrec1"] =
new TH1F(
"zrec1",
"reconstructed z",100,-80.,80.);
272 h[
"xrec2"] =
new TH1F(
"xrec2",
"reconstructed x",100,-1,1);
273 h[
"yrec2"] =
new TH1F(
"yrec2",
"reconstructed y",100,-1,1);
274 h[
"zrec2"] =
new TH1F(
"zrec2",
"reconstructed z",100,-40.,40.);
275 h[
"xrec3"] =
new TH1F(
"xrec3",
"reconstructed x",100,-0.1,0.1);
276 h[
"yrec3"] =
new TH1F(
"yrec3",
"reconstructed y",100,-0.1,0.1);
277 h[
"zrec3"] =
new TH1F(
"zrec3",
"reconstructed z",100,-20.,20.);
278 add(h,
new TH1F(
"xrecBeamPull",
"normalized residuals reconstructed x - beam x",100,-20,20));
279 add(h,
new TH1F(
"yrecBeamPull",
"normalized residuals reconstructed y - beam y",100,-20,20));
280 add(h,
new TH1F(
"zdiffrec",
"z-distance between vertices",200,-20., 20.));
281 add(h,
new TH1F(
"zdiffrec2",
"z-distance between ndof>2 vertices",200,-20., 20.));
282 add(h,
new TH1F(
"zdiffrec4",
"z-distance between ndof>4 vertices",200,-20., 20.));
283 add(h,
new TH1F(
"zdiffrec8",
"z-distance between ndof>8 vertices",200,-20., 20.));
284 add(h,
new TH2F(
"zvszrec2",
"z positions of multiple vertices",200,-20., 20., 200,-20., 20.));
285 add(h,
new TH2F(
"pzvspz2",
"prob(z) of multiple vertices",100, 0.,1.,100,0., 1.));
286 add(h,
new TH2F(
"zvszrec4",
"z positions of multiple vertices",100,-20., 20., 100,-20., 20.));
287 add(h,
new TH2F(
"pzvspz4",
"prob(z) of multiple vertices",100, 0.,1.,100,0., 1.));
288 add(h,
new TH2F(
"zdiffvsz",
"z-distance vs z",100,-10.,10.,30,-15.,15.));
289 add(h,
new TH2F(
"zdiffvsz4",
"z-distance vs z (ndof>4)",100,-10.,10.,30,-15.,15.));
290 add(h,
new TProfile(
"eff0vsntrec",
"efficiency vs # reconstructed tracks",50, 0., 50., 0, 1.));
291 add(h,
new TProfile(
"eff0vsntsel",
"efficiency vs # selected tracks",50, 0., 50., 0, 1.));
292 add(h,
new TProfile(
"eff0ndof0vsntsel",
"efficiency (ndof>0) vs # selected tracks",50, 0., 50., 0, 1.));
293 add(h,
new TProfile(
"eff0ndof8vsntsel",
"efficiency (ndof>8) vs # selected tracks",50, 0., 50., 0, 1.));
294 add(h,
new TProfile(
"eff0ndof2vsntsel",
"efficiency (ndof>2) vs # selected tracks",50, 0., 50., 0, 1.));
295 add(h,
new TProfile(
"eff0ndof4vsntsel",
"efficiency (ndof>4) vs # selected tracks",50, 0., 50., 0, 1.));
296 add(h,
new TH1F(
"xbeamPUcand",
"x - beam of PU candidates (ndof>4)",100,-1., 1.));
297 add(h,
new TH1F(
"ybeamPUcand",
"y - beam of PU candidates (ndof>4)",100,-1., 1.));
298 add(h,
new TH1F(
"xbeamPullPUcand",
"x - beam pull of PU candidates (ndof>4)",100,-20., 20.));
299 add(h,
new TH1F(
"ybeamPullPUcand",
"y - beam pull of PU candidates (ndof>4)",100,-20., 20.));
300 add(h,
new TH1F(
"ndofOverNtk",
"ndof / ntk of ndidates (ndof>4)",100,0., 2.));
301 add(h,
new TH1F(
"ndofOverNtkPUcand",
"ndof / ntk of ndidates (ndof>4)",100,0., 2.));
302 add(h,
new TH1F(
"zPUcand",
"z positions of PU candidates (all)",100,-20., 20.));
303 add(h,
new TH1F(
"zPUcand2",
"z positions of PU candidates (ndof>2)",100,-20., 20.));
304 add(h,
new TH1F(
"zPUcand4",
"z positions of PU candidates (ndof>4)",100,-20., 20.));
305 add(h,
new TH1F(
"ndofPUcand",
"ndof of PU candidates (all)",50,0., 100.));
306 add(h,
new TH1F(
"ndofPUcand2",
"ndof of PU candidates (ndof>2)",50,0., 100.));
307 add(h,
new TH1F(
"ndofPUcand4",
"ndof of PU candidates (ndof>4)",50,0., 100.));
308 add(h,
new TH1F(
"ndofnr2",
"second highest ndof",500,0., 100.));
309 add(h,
new TH1F(
"ndofnr2d1cm",
"second highest ndof (dz>1cm)",500,0., 100.));
310 add(h,
new TH1F(
"ndofnr2d2cm",
"second highest ndof (dz>2cm)",500,0., 100.));
312 h[
"nrecvtx"] =
new TH1F(
"nrecvtx",
"# of reconstructed vertices", 50, -0.5, 49.5);
313 h[
"nrecvtx8"] =
new TH1F(
"nrecvtx8",
"# of reconstructed vertices with ndof>8", 50, -0.5, 49.5);
314 h[
"nrecvtx2"] =
new TH1F(
"nrecvtx2",
"# of reconstructed vertices with ndof>2", 50, -0.5, 49.5);
315 h[
"nrecvtx4"] =
new TH1F(
"nrecvtx4",
"# of reconstructed vertices with ndof>4", 50, -0.5, 49.5);
316 h[
"nrectrk"] =
new TH1F(
"nrectrk",
"# of reconstructed tracks", 100, -0.5, 99.5);
317 add(h,
new TH1F(
"nsimtrk",
"# of simulated tracks", 100, -0.5, 99.5));
318 add(h,
new TH1F(
"nsimtrkSignal",
"# of simulated tracks (Signal)", 100, -0.5, 99.5));
319 add(h,
new TH1F(
"nsimtrkPU",
"# of simulated tracks (PU)", 100, -0.5, 99.5));
320 h[
"nsimtrk"]->StatOverflows(kTRUE);
321 h[
"nsimtrkPU"]->StatOverflows(kTRUE);
322 h[
"nsimtrkSignal"]->StatOverflows(kTRUE);
323 h[
"xrectag"] =
new TH1F(
"xrectag",
"reconstructed x, signal vtx",100,-0.05,0.05);
324 h[
"yrectag"] =
new TH1F(
"yrectag",
"reconstructed y, signal vtx",100,-0.05,0.05);
325 h[
"zrectag"] =
new TH1F(
"zrectag",
"reconstructed z, signal vtx",100,-20.,20.);
326 h[
"nrectrk0vtx"] =
new TH1F(
"nrectrk0vtx",
"# rec tracks no vertex ",100,-0.5, 99.5);
327 h[
"nseltrk0vtx"] =
new TH1F(
"nseltrk0vtx",
"# rec tracks no vertex ",100,-0.5, 99.5);
328 h[
"nrecsimtrk"] =
new TH1F(
"nrecsimtrk",
"# rec tracks matched to sim tracks in vertex",100,-0.5, 99.5);
329 h[
"nrecnosimtrk"] =
new TH1F(
"nrecsimtrk",
"# rec tracks not matched to sim tracks in vertex",100,-0.5, 99.5);
330 h[
"trackAssEffvsPt"] =
new TProfile(
"trackAssEffvsPt",
"track association efficiency vs pt",20, 0., 100., 0, 1.);
333 h[
"nseltrk"] =
new TH1F(
"nseltrk",
"# of reconstructed tracks selected for PV", 100, -0.5, 99.5);
334 h[
"nclutrkall"] =
new TH1F(
"nclutrkall",
"# of reconstructed tracks in clusters", 100, -0.5, 99.5);
335 h[
"nclutrkvtx"] =
new TH1F(
"nclutrkvtx",
"# of reconstructed tracks in clusters of reconstructed vertices", 100, -0.5, 99.5);
336 h[
"nclu"] =
new TH1F(
"nclu",
"# of clusters", 100, -0.5, 99.5);
337 h[
"nclu0vtx"] =
new TH1F(
"nclu0vtx",
"# of clusters in events with no PV", 100, -0.5, 99.5);
338 h[
"zlost1"] =
new TH1F(
"zlost1",
"z of lost vertices (bad z)", 100, -20., 20.);
339 h[
"zlost2"] =
new TH1F(
"zlost2",
"z of lost vertices (no matching cluster)", 100, -20., 20.);
340 h[
"zlost3"] =
new TH1F(
"zlost3",
"z of lost vertices (vertex too far from beam)", 100, -20., 20.);
341 h[
"zlost4"] =
new TH1F(
"zlost4",
"z of lost vertices (invalid vertex)", 100, -20., 20.);
342 h[
"selstat"] =
new TH1F(
"selstat",
"selstat", 5, -2.5, 2.5);
345 add(h,
new TH1F(
"fakeVtxZNdofgt05",
"z of fake vertices with ndof>0.5", 100, -20., 20.));
346 add(h,
new TH1F(
"fakeVtxZNdofgt2",
"z of fake vertices with ndof>2", 100, -20., 20.));
347 add(h,
new TH1F(
"fakeVtxZ",
"z of fake vertices", 100, -20., 20.));
348 add(h,
new TH1F(
"fakeVtxNdof",
"ndof of fake vertices", 500,0., 100.));
349 add(h,
new TH1F(
"fakeVtxNtrk",
"number of tracks in fake vertex",20,-0.5, 19.5));
350 add(h,
new TH1F(
"matchedVtxNdof",
"ndof of matched vertices", 500,0., 100.));
353 string types[] = {
"all",
"sel",
"bachelor",
"sellost",
"wgt05",
"wlt05",
"M",
"tagged",
"untagged",
"ndof4",
"PUcand",
"PUfake"};
354 for(
int t=0;
t<12;
t++){
355 add(h,
new TH1F((
"rapidity_"+types[
t]).c_str(),
"rapidity ",100,-3., 3.));
356 h[
"z0_"+types[
t]] =
new TH1F((
"z0_"+types[t]).c_str(),
"z0 ",80,-40., 40.);
357 h[
"phi_"+types[
t]] =
new TH1F((
"phi_"+types[t]).c_str(),
"phi ",80,-3.14159, 3.14159);
358 h[
"eta_"+types[
t]] =
new TH1F((
"eta_"+types[t]).c_str(),
"eta ",80,-4., 4.);
359 h[
"pt_"+types[
t]] =
new TH1F((
"pt_"+types[t]).c_str(),
"pt ",100,0., 20.);
360 h[
"found_"+types[
t]] =
new TH1F((
"found_"+types[t]).c_str(),
"found hits",20, 0., 20.);
361 h[
"lost_"+types[
t]] =
new TH1F((
"lost_"+types[t]).c_str(),
"lost hits",20, 0., 20.);
362 h[
"nchi2_"+types[
t]] =
new TH1F((
"nchi2_"+types[t]).c_str(),
"normalized track chi2",100, 0., 20.);
363 h[
"rstart_"+types[
t]] =
new TH1F((
"rstart_"+types[t]).c_str(),
"start radius",100, 0., 20.);
364 h[
"tfom_"+types[
t]] =
new TH1F((
"tfom_"+types[t]).c_str(),
"track figure of merit",100, 0., 100.);
365 h[
"expectedInner_"+types[
t]] =
new TH1F((
"expectedInner_"+types[t]).c_str(),
"expected inner hits ",10, 0., 10.);
366 h[
"expectedOuter_"+types[
t]] =
new TH1F((
"expectedOuter_"+types[t]).c_str(),
"expected outer hits ",10, 0., 10.);
367 h[
"logtresxy_"+types[
t]] =
new TH1F((
"logtresxy_"+types[t]).c_str(),
"log10(track r-phi resolution/um)",100, 0., 5.);
368 h[
"logtresz_"+types[
t]] =
new TH1F((
"logtresz_"+types[t]).c_str(),
"log10(track z resolution/um)",100, 0., 5.);
369 h[
"tpullxy_"+types[
t]] =
new TH1F((
"tpullxy_"+types[t]).c_str(),
"track r-phi pull",100, -10., 10.);
370 add(h,
new TH2F( (
"lvseta_"+types[t]).c_str(),
"cluster length vs eta",60,-3., 3., 20, 0., 20));
371 add(h,
new TH2F( (
"lvstanlambda_"+types[t]).c_str(),
"cluster length vs tan lambda",60,-6., 6., 20, 0., 20));
372 add(h,
new TH1F( (
"restrkz_"+types[t]).c_str(),
"z-residuals (track vs vertex)", 200, -5., 5.));
373 add(h,
new TH2F( (
"restrkzvsphi_"+types[t]).c_str(),
"z-residuals (track - vertex)", 12,-3.14159,3.14159,100, -5., 5.));
374 add(h,
new TH2F( (
"restrkzvseta_"+types[t]).c_str(),
"z-residuals (track - vertex)", 12,-3.,3.,200, -5., 5.));
375 add(h,
new TH2F( (
"pulltrkzvsphi_"+types[t]).c_str(),
"normalized z-residuals (track - vertex)", 12,-3.14159,3.14159,100, -5., 5.));
376 add(h,
new TH2F( (
"pulltrkzvseta_"+types[t]).c_str(),
"normalized z-residuals (track - vertex)", 12,-3.,3.,100, -5., 5.));
377 add(h,
new TH1F( (
"pulltrkz_"+types[t]).c_str(),
"normalized z-residuals (track vs vertex)", 100, -5., 5.));
378 add(h,
new TH1F( (
"sigmatrkz0_"+types[t]).c_str(),
"z-resolution (excluding beam)", 100, 0., 5.));
379 add(h,
new TH1F( (
"sigmatrkz_"+types[t]).c_str(),
"z-resolution (including beam)", 100,0., 5.));
380 add(h,
new TH1F( (
"nbarrelhits_"+types[t]).c_str(),
"number of pixel barrel hits", 10, 0., 10.));
381 add(h,
new TH1F( (
"nbarrelLayers_"+types[t]).c_str(),
"number of pixel barrel layers", 10, 0., 10.));
382 add(h,
new TH1F( (
"nPxLayers_"+types[t]).c_str(),
"number of pixel layers (barrel+endcap)", 10, 0., 10.));
383 add(h,
new TH1F( (
"nSiLayers_"+types[t]).c_str(),
"number of Tracker layers ", 20, 0., 20.));
384 add(h,
new TH1F( (
"trackAlgo_"+types[t]).c_str(),
"track algorithm ", 30, 0., 30.));
385 add(h,
new TH1F( (
"trackQuality_"+types[t]).c_str(),
"track quality ", 7, -1., 6.));
387 add(h,
new TH1F(
"trackWt",
"track weight in vertex",100,0., 1.));
389 h[
"nrectrk"]->StatOverflows(kTRUE);
390 h[
"nrectrk"]->StatOverflows(kTRUE);
391 h[
"nrectrk0vtx"]->StatOverflows(kTRUE);
392 h[
"nseltrk0vtx"]->StatOverflows(kTRUE);
393 h[
"nrecsimtrk"]->StatOverflows(kTRUE);
394 h[
"nrecnosimtrk"]->StatOverflows(kTRUE);
395 h[
"nseltrk"]->StatOverflows(kTRUE);
396 h[
"nbtksinvtx"]->StatOverflows(kTRUE);
397 h[
"nbtksinvtxPU"]->StatOverflows(kTRUE);
398 h[
"nbtksinvtxTag"]->StatOverflows(kTRUE);
399 h[
"nbtksinvtx2"]->StatOverflows(kTRUE);
400 h[
"nbtksinvtxPU2"]->StatOverflows(kTRUE);
401 h[
"nbtksinvtxTag2"]->StatOverflows(kTRUE);
404 h[
"npu0"] =
new TH1F(
"npu0",
"Number of simulated vertices",40,0.,40.);
405 h[
"npu1"] =
new TH1F(
"npu1",
"Number of simulated vertices with >0 track",40,0.,40.);
406 h[
"npu2"] =
new TH1F(
"npu2",
"Number of simulated vertices with >1 track",40,0.,40.);
407 h[
"nrecv"] =
new TH1F(
"nrecv",
"# of reconstructed vertices", 40, 0, 40);
408 add(h,
new TH2F(
"nrecvsnpu",
"#rec vertices vs number of sim vertices with >0 tracks", 40, 0., 40, 40, 0, 40));
409 add(h,
new TH2F(
"nrecvsnpu2",
"#rec vertices vs number of sim vertices with >1 tracks", 40, 0., 40, 40, 0, 40));
410 add(h,
new TH1F(
"sumpt",
"sumpt of simulated tracks",100,0.,100.));
411 add(h,
new TH1F(
"sumptSignal",
"sumpt of simulated tracks in Signal events",100,0.,200.));
412 add(h,
new TH1F(
"sumptPU",
"sumpt of simulated tracks in PU events",100,0.,200.));
413 add(h,
new TH1F(
"sumpt2rec",
"sumpt2 of reconstructed and matched tracks",100,0.,100.));
414 add(h,
new TH1F(
"sumpt2",
"sumpt2 of simulated tracks",100,0.,100.));
415 add(h,
new TH1F(
"sumpt2Signal",
"sumpt2 of simulated tracks in Signal events",100,0.,200.));
416 add(h,
new TH1F(
"sumpt2PU",
"sumpt2 of simulated tracks in PU events",100,0.,200.));
417 add(h,
new TH1F(
"sumpt2rec",
"sumpt2 of reconstructed and matched tracks",100,0.,100.));
418 add(h,
new TH1F(
"sumpt2recSignal",
"sumpt2 of reconstructed and matched tracks in Signal events",100,0.,200.));
419 add(h,
new TH1F(
"sumpt2recPU",
"sumpt2 of reconstructed and matched tracks in PU events",100,0.,200.));
420 add(h,
new TH1F(
"nRecTrkInSimVtx",
"number of reco tracks matched to sim-vertex", 101, 0., 100));
421 add(h,
new TH1F(
"nRecTrkInSimVtxSignal",
"number of reco tracks matched to signal sim-vertex", 101, 0., 100));
422 add(h,
new TH1F(
"nRecTrkInSimVtxPU",
"number of reco tracks matched to PU-vertex", 101, 0., 100));
423 add(h,
new TH1F(
"nPrimRecTrkInSimVtx",
"number of reco primary tracks matched to sim-vertex", 101, 0., 100));
424 add(h,
new TH1F(
"nPrimRecTrkInSimVtxSignal",
"number of reco primary tracks matched to signal sim-vertex", 101, 0., 100));
425 add(h,
new TH1F(
"nPrimRecTrkInSimVtxPU",
"number of reco primary tracks matched to PU-vertex", 101, 0., 100));
427 add(h,
new TH1F(
"recPurity",
"track purity of reconstructed vertices", 101, 0., 1.01));
428 add(h,
new TH1F(
"recPuritySignal",
"track purity of reconstructed Signal vertices", 101, 0., 1.01));
429 add(h,
new TH1F(
"recPurityPU",
"track purity of reconstructed PU vertices", 101, 0., 1.01));
431 add(h,
new TH1F(
"recmatchPurity",
"track purity of all vertices", 101, 0., 1.01));
432 add(h,
new TH1F(
"recmatchPurityTag",
"track purity of tagged vertices", 101, 0., 1.01));
433 add(h,
new TH1F(
"recmatchPurityTagSignal",
"track purity of tagged Signal vertices", 101, 0., 1.01));
434 add(h,
new TH1F(
"recmatchPurityTagPU",
"track purity of tagged PU vertices", 101, 0., 1.01));
435 add(h,
new TH1F(
"recmatchPuritynoTag",
"track purity of untagged vertices", 101, 0., 1.01));
436 add(h,
new TH1F(
"recmatchPuritynoTagSignal",
"track purity of untagged Signal vertices", 101, 0., 1.01));
437 add(h,
new TH1F(
"recmatchPuritynoTagPU",
"track purity of untagged PU vertices", 101, 0., 1.01));
438 add(h,
new TH1F(
"recmatchvtxs",
"number of sim vertices contributing to recvtx", 10, 0., 10.));
439 add(h,
new TH1F(
"recmatchvtxsTag",
"number of sim vertices contributing to recvtx", 10, 0., 10.));
440 add(h,
new TH1F(
"recmatchvtxsnoTag",
"number of sim vertices contributing to recvtx", 10, 0., 10.));
442 add(h,
new TH1F(
"trkAssignmentEfficiency",
"track to vertex assignment efficiency", 101, 0., 1.01) );
443 add(h,
new TH1F(
"trkAssignmentEfficiencySignal",
"track to signal vertex assignment efficiency", 101, 0., 1.01) );
444 add(h,
new TH1F(
"trkAssignmentEfficiencyPU",
"track to PU vertex assignment efficiency", 101, 0., 1.01) );
445 add(h,
new TH1F(
"primtrkAssignmentEfficiency",
"track to vertex assignment efficiency", 101, 0., 1.01) );
446 add(h,
new TH1F(
"primtrkAssignmentEfficiencySignal",
"track to signal vertex assignment efficiency", 101, 0., 1.01) );
447 add(h,
new TH1F(
"primtrkAssignmentEfficiencyPU",
"track to PU vertex assignment efficiency", 101, 0., 1.01) );
448 add(h,
new TH1F(
"vtxMultiplicity",
"number of rec vertices containg tracks from one true vertex", 10, 0., 10.) );
449 add(h,
new TH1F(
"vtxMultiplicitySignal",
"number of rec vertices containg tracks from the Signal Vertex", 10, 0., 10.) );
450 add(h,
new TH1F(
"vtxMultiplicityPU",
"number of rec vertices containg tracks from a PU Vertex", 10, 0., 10.) );
452 add(h,
new TProfile(
"vtxFindingEfficiencyVsNtrk",
"finding efficiency vs number of associated rec tracks",100, 0., 100., 0., 1.) );
453 add(h,
new TProfile(
"vtxFindingEfficiencyVsNtrkSignal",
"Signal vertex finding efficiency vs number of associated rec tracks",100, 0., 100., 0., 1.) );
454 add(h,
new TProfile(
"vtxFindingEfficiencyVsNtrkPU",
"PU vertex finding efficiency vs number of associated rec tracks",100, 0., 100., 0., 1.) );
456 add(h,
new TH1F(
"TagVtxTrkPurity",
"TagVtxTrkPurity",100,0.,1.01));
457 add(h,
new TH1F(
"TagVtxTrkEfficiency",
"TagVtxTrkEfficiency",100,0.,1.01));
459 add(h,
new TH1F(
"matchVtxFraction",
"fraction of sim vertex tracks found in a recvertex",101,0,1.01));
460 add(h,
new TH1F(
"matchVtxFractionSignal",
"fraction of sim vertex tracks found in a recvertex",101,0,1.01));
461 add(h,
new TH1F(
"matchVtxFractionPU",
"fraction of sim vertex tracks found in a recvertex",101,0,1.01));
462 add(h,
new TH1F(
"matchVtxFractionCum",
"fraction of sim vertex tracks found in a recvertex",101,0,1.01));
463 add(h,
new TH1F(
"matchVtxFractionCumSignal",
"fraction of sim vertexs track found in a recvertex",101,0,1.01));
464 add(h,
new TH1F(
"matchVtxFractionCumPU",
"fraction of sim vertex tracks found in a recvertex",101,0,1.01));
465 add(h,
new TH1F(
"matchVtxEfficiency",
"efficiency for finding matching rec vertex",2,-0.5,1.5));
466 add(h,
new TH1F(
"matchVtxEfficiencySignal",
"efficiency for finding matching rec vertex",2,-0.5,1.5));
467 add(h,
new TH1F(
"matchVtxEfficiencyPU",
"efficiency for finding matching rec vertex",2,-0.5,1.5));
468 add(h,
new TH1F(
"matchVtxEfficiency2",
"efficiency for finding matching rec vertex (nt>1)",2,-0.5,1.5));
469 add(h,
new TH1F(
"matchVtxEfficiency2Signal",
"efficiency for finding matching rec vertex (nt>1)",2,-0.5,1.5));
470 add(h,
new TH1F(
"matchVtxEfficiency2PU",
"efficiency for finding matching rec vertex (nt>1)",2,-0.5,1.5));
471 add(h,
new TH1F(
"matchVtxEfficiency5",
"efficiency for finding matching rec vertex (purity>0.5)",2,-0.5,1.5));
472 add(h,
new TH1F(
"matchVtxEfficiency5Signal",
"efficiency for finding matching rec vertex (purity>0.5)",2,-0.5,1.5));
473 add(h,
new TH1F(
"matchVtxEfficiency5PU",
"efficiency for finding matching rec vertex (purity>0.5)",2,-0.5,1.5));
475 add(h,
new TH1F(
"matchVtxEfficiencyZ",
"efficiency for finding matching rec vertex within 1 mm",2,-0.5,1.5));
476 add(h,
new TH1F(
"matchVtxEfficiencyZSignal",
"efficiency for finding matching rec vertex within 1 mm",2,-0.5,1.5));
477 add(h,
new TH1F(
"matchVtxEfficiencyZPU",
"efficiency for finding matching rec vertex within 1 mm",2,-0.5,1.5));
479 add(h,
new TH1F(
"matchVtxEfficiencyZ1",
"efficiency for finding matching rec vertex within 1 mm (nt>0)",2,-0.5,1.5));
480 add(h,
new TH1F(
"matchVtxEfficiencyZ1Signal",
"efficiency for finding matching rec vertex within 1 mm (nt>0)",2,-0.5,1.5));
481 add(h,
new TH1F(
"matchVtxEfficiencyZ1PU",
"efficiency for finding matching rec vertex within 1 mm (nt>0)",2,-0.5,1.5));
483 add(h,
new TH1F(
"matchVtxEfficiencyZ2",
"efficiency for finding matching rec vertex within 1 mm (nt>1)",2,-0.5,1.5));
484 add(h,
new TH1F(
"matchVtxEfficiencyZ2Signal",
"efficiency for finding matching rec vertex within 1 mm (nt>1)",2,-0.5,1.5));
485 add(h,
new TH1F(
"matchVtxEfficiencyZ2PU",
"efficiency for finding matching rec vertex within 1 mm (nt>1)",2,-0.5,1.5));
487 add(h,
new TH1F(
"matchVtxZ",
"z distance to matched recvtx",100, -0.1, 0.1));
488 add(h,
new TH1F(
"matchVtxZPU",
"z distance to matched recvtx",100, -0.1, 0.1));
489 add(h,
new TH1F(
"matchVtxZSignal",
"z distance to matched recvtx",100, -0.1, 0.1));
491 add(h,
new TH1F(
"matchVtxZCum",
"z distance to matched recvtx",1001,0, 1.01));
492 add(h,
new TH1F(
"matchVtxZCumSignal",
"z distance to matched recvtx",1001,0, 1.01));
493 add(h,
new TH1F(
"matchVtxZCumPU",
"z distance to matched recvtx",1001,0, 1.01));
495 add(h,
new TH1F(
"unmatchedVtx",
"number of unmatched rec vertices (fakes)",10,0.,10.));
496 add(h,
new TH1F(
"unmatchedVtxFrac",
"fraction of unmatched rec vertices (fakes)",1000,0.,1.0));
497 add(h,
new TH1F(
"unmatchedVtxZ",
"z of unmached rec vertices (fakes)",100,-20., 20.));
498 add(h,
new TH1F(
"unmatchedVtxNdof",
"ndof of unmatched rec vertices (fakes)", 500,0., 100.));
499 add(h,
new TH2F(
"correctlyassigned",
"pt and eta of correctly assigned tracks", 60, -3., 3., 100, 0, 10.));
500 add(h,
new TH2F(
"misassigned",
"pt and eta of mis assigned tracks", 60, -3., 3., 100, 0, 10.));
503 add(h,
new TProfile(
"effvszsep",
"efficiency vs true z-separation",500, 0., 10., 0, 1.));
504 add(h,
new TProfile(
"effwodvszsep",
"efficiency w/o double-counting vs true z-separation",500, 0., 10., 0, 1.));
505 add(h,
new TProfile(
"mergedvszsep",
"merge rate vs true z-separation",500, 0., 10., 0, 1.));
506 add(h,
new TProfile(
"splitvszsep",
"split rate vs true z-separation",500, 0., 10., 0, 1.));
507 add(h,
new TProfile(
"tveffvszsep",
"efficiency vs true z-separation",500, 0., 10., 0, 1.));
508 add(h,
new TProfile(
"tveffwodvszsep",
"efficiency w/o double-counting vs true z-separation",500, 0., 10., 0, 1.));
509 add(h,
new TProfile(
"tvmergedvszsep",
"merge rate vs true z-separation",500, 0., 10., 0, 1.));
511 add(h,
new TH1F(
"ptcat",
"pt of correctly assigned tracks", 100, 0, 10.));
512 add(h,
new TH1F(
"etacat",
"eta of correctly assigned tracks", 60, -3., 3.));
513 add(h,
new TH1F(
"phicat",
"phi of correctly assigned tracks", 100, -3.14159, 3.14159));
514 add(h,
new TH1F(
"dzcat",
"dz of correctly assigned tracks", 100, 0., 1.));
516 add(h,
new TH1F(
"ptmis",
"pt of mis-assigned tracks", 100, 0, 10.));
517 add(h,
new TH1F(
"etamis",
"eta of mis-assigned tracks", 60, -3., 3.));
518 add(h,
new TH1F(
"phimis",
"phi of mis-assigned tracks",100, -3.14159, 3.14159));
519 add(h,
new TH1F(
"dzmis",
"dz of mis-assigned tracks", 100, 0., 1.));
522 add(h,
new TH1F(
"Tc",
"Tc computed with Truth matched Reco Tracks",100,0.,20.));
523 add(h,
new TH1F(
"TcSignal",
"Tc of signal vertices computed with Truth matched Reco Tracks",100,0.,20.));
524 add(h,
new TH1F(
"TcPU",
"Tc of PU vertices computed with Truth matched Reco Tracks",100,0.,20.));
526 add(h,
new TH1F(
"logTc",
"log Tc computed with Truth matched Reco Tracks",100,-2.,8.));
527 add(h,
new TH1F(
"logTcSignal",
"log Tc of signal vertices computed with Truth matched Reco Tracks",100,-2.,8.));
528 add(h,
new TH1F(
"logTcPU",
"log Tc of PU vertices computed with Truth matched Reco Tracks",100,-2.,8.));
530 add(h,
new TH1F(
"xTc",
"Tc of merged clusters",100,0.,20.));
531 add(h,
new TH1F(
"xTcSignal",
"Tc of signal vertices merged with PU",100,0.,20.));
532 add(h,
new TH1F(
"xTcPU",
"Tc of merged PU vertices",100,0.,20.));
534 add(h,
new TH1F(
"logxTc",
"log Tc merged vertices",100,-2.,8.));
535 add(h,
new TH1F(
"logxTcSignal",
"log Tc of signal vertices merged with PU",100,-2.,8.));
536 add(h,
new TH1F(
"logxTcPU",
"log Tc of merged PU vertices ",100,-2.,8.));
538 add(h,
new TH1F(
"logChisq",
"Chisq/ntrk computed with Truth matched Reco Tracks",100,-2.,8.));
539 add(h,
new TH1F(
"logChisqSignal",
"Chisq/ntrk of signal vertices computed with Truth matched Reco Tracks",100,-2.,8.));
540 add(h,
new TH1F(
"logChisqPU",
"Chisq/ntrk of PU vertices computed with Truth matched Reco Tracks",100,-2.,8.));
542 add(h,
new TH1F(
"logxChisq",
"Chisq/ntrk of merged clusters",100,-2.,8.));
543 add(h,
new TH1F(
"logxChisqSignal",
"Chisq/ntrk of signal vertices merged with PU",100,-2.,8.));
544 add(h,
new TH1F(
"logxChisqPU",
"Chisq/ntrk of merged PU vertices",100,-2.,8.));
546 add(h,
new TH1F(
"Chisq",
"Chisq/ntrk computed with Truth matched Reco Tracks",100,0.,20.));
547 add(h,
new TH1F(
"ChisqSignal",
"Chisq/ntrk of signal vertices computed with Truth matched Reco Tracks",100,0.,20.));
548 add(h,
new TH1F(
"ChisqPU",
"Chisq/ntrk of PU vertices computed with Truth matched Reco Tracks",100,0.,20.));
550 add(h,
new TH1F(
"xChisq",
"Chisq/ntrk of merged clusters",100,0.,20.));
551 add(h,
new TH1F(
"xChisqSignal",
"Chisq/ntrk of signal vertices merged with PU",100,0.,20.));
552 add(h,
new TH1F(
"xChisqPU",
"Chisq/ntrk of merged PU vertices",100,0.,20.));
554 add(h,
new TH1F(
"dzmax",
"dzmax computed with Truth matched Reco Tracks",100,0.,2.));
555 add(h,
new TH1F(
"dzmaxSignal",
"dzmax of signal vertices computed with Truth matched Reco Tracks",100,0.,2.));
556 add(h,
new TH1F(
"dzmaxPU",
"dzmax of PU vertices computed with Truth matched Reco Tracks",100,0.,2.));
558 add(h,
new TH1F(
"xdzmax",
"dzmax of merged clusters",100,0.,2.));
559 add(h,
new TH1F(
"xdzmaxSignal",
"dzmax of signal vertices merged with PU",100,0.,2.));
560 add(h,
new TH1F(
"xdzmaxPU",
"dzmax of merged PU vertices",100,0.,2.));
562 add(h,
new TH1F(
"dztrim",
"dzmax computed with Truth matched Reco Tracks",100,0.,2.));
563 add(h,
new TH1F(
"dztrimSignal",
"dzmax of signal vertices computed with Truth matched Reco Tracks",100,0.,2.));
564 add(h,
new TH1F(
"dztrimPU",
"dzmax of PU vertices computed with Truth matched Reco Tracks",100,0.,2.));
566 add(h,
new TH1F(
"xdztrim",
"dzmax of merged clusters",100,0.,2.));
567 add(h,
new TH1F(
"xdztrimSignal",
"dzmax of signal vertices merged with PU",100,0.,2.));
568 add(h,
new TH1F(
"xdztrimPU",
"dzmax of merged PU vertices",100,0.,2.));
570 add(h,
new TH1F(
"m4m2",
"m4m2 computed with Truth matched Reco Tracks",100,0.,100.));
571 add(h,
new TH1F(
"m4m2Signal",
"m4m2 of signal vertices computed with Truth matched Reco Tracks",100,0.,100.));
572 add(h,
new TH1F(
"m4m2PU",
"m4m2 of PU vertices computed with Truth matched Reco Tracks",100,0.,100.));
574 add(h,
new TH1F(
"xm4m2",
"m4m2 of merged clusters",100,0.,100.));
575 add(h,
new TH1F(
"xm4m2Signal",
"m4m2 of signal vertices merged with PU",100,0.,100.));
576 add(h,
new TH1F(
"xm4m2PU",
"m4m2 of merged PU vertices",100,0.,100.));
586 std::cout <<
" PrimaryVertexAnalyzer4PU::beginJob conversion from sim units to rec units is " <<
simUnit_ << std::endl;
590 TDirectory *noBS =
rootFile_->mkdir(
"noBS");
594 hist->second->SetDirectory(noBS);
597 TDirectory *withBS =
rootFile_->mkdir(
"BS");
600 for(std::map<std::string,TH1*>::const_iterator
hist=
hBS.begin();
hist!=
hBS.end();
hist++){
601 hist->second->SetDirectory(withBS);
607 for(std::map<std::string,TH1*>::const_iterator
hist=
hDA.begin();
hist!=
hDA.end();
hist++){
608 hist->second->SetDirectory(DA);
612 hsimPV[
"rapidity"] =
new TH1F(
"rapidity",
"rapidity ",100,-10., 10.);
613 hsimPV[
"chRapidity"] =
new TH1F(
"chRapidity",
"charged rapidity ",100,-10., 10.);
614 hsimPV[
"recRapidity"] =
new TH1F(
"recRapidity",
"reconstructed rapidity ",100,-10., 10.);
615 hsimPV[
"pt"] =
new TH1F(
"pt",
"pt ",100,0., 20.);
617 hsimPV[
"xsim"] =
new TH1F(
"xsim",
"simulated x",100,-0.01,0.01);
618 hsimPV[
"ysim"] =
new TH1F(
"ysim",
"simulated y",100,-0.01,0.01);
619 hsimPV[
"zsim"] =
new TH1F(
"zsim",
"simulated z",100,-20.,20.);
621 hsimPV[
"xsim1"] =
new TH1F(
"xsim1",
"simulated x",100,-4.,4.);
622 hsimPV[
"ysim1"] =
new TH1F(
"ysim1",
"simulated y",100,-4.,4.);
623 hsimPV[
"zsim1"] =
new TH1F(
"zsim1",
"simulated z",100,-40.,40.);
625 add(
hsimPV,
new TH1F(
"xsim2PU",
"simulated x (Pile-up)",100,-1.,1.));
626 add(
hsimPV,
new TH1F(
"ysim2PU",
"simulated y (Pile-up)",100,-1.,1.));
627 add(
hsimPV,
new TH1F(
"zsim2PU",
"simulated z (Pile-up)",100,-20.,20.));
628 add(
hsimPV,
new TH1F(
"xsim2Signal",
"simulated x (Signal)",100,-1.,1.));
629 add(
hsimPV,
new TH1F(
"ysim2Signal",
"simulated y (Signal)",100,-1.,1.));
630 add(
hsimPV,
new TH1F(
"zsim2Signal",
"simulated z (Signal)",100,-20.,20.));
632 hsimPV[
"xsim2"] =
new TH1F(
"xsim2",
"simulated x",100,-1,1);
633 hsimPV[
"ysim2"] =
new TH1F(
"ysim2",
"simulated y",100,-1,1);
634 hsimPV[
"zsim2"] =
new TH1F(
"zsim2",
"simulated z",100,-20.,20.);
635 hsimPV[
"xsim3"] =
new TH1F(
"xsim3",
"simulated x",100,-0.1,0.1);
636 hsimPV[
"ysim3"] =
new TH1F(
"ysim3",
"simulated y",100,-0.1,0.1);
637 hsimPV[
"zsim3"] =
new TH1F(
"zsim3",
"simulated z",100,-20.,20.);
638 hsimPV[
"xsimb"] =
new TH1F(
"xsimb",
"simulated x",100,-0.01,0.01);
639 hsimPV[
"ysimb"] =
new TH1F(
"ysimb",
"simulated y",100,-0.01,0.01);
640 hsimPV[
"zsimb"] =
new TH1F(
"zsimb",
"simulated z",100,-20.,20.);
641 hsimPV[
"xsimb1"] =
new TH1F(
"xsimb1",
"simulated x",100,-0.1,0.1);
642 hsimPV[
"ysimb1"] =
new TH1F(
"ysimb1",
"simulated y",100,-0.1,0.1);
643 hsimPV[
"zsimb1"] =
new TH1F(
"zsimb1",
"simulated z",100,-20.,20.);
644 add(
hsimPV,
new TH1F(
"xbeam",
"beamspot x",100,-1.,1.));
645 add(
hsimPV,
new TH1F(
"ybeam",
"beamspot y",100,-1.,1.));
646 add(
hsimPV,
new TH1F(
"zbeam",
"beamspot z",100,-1.,1.));
647 add(
hsimPV,
new TH1F(
"wxbeam",
"beamspot sigma x",100,-1.,1.));
648 add(
hsimPV,
new TH1F(
"wybeam",
"beamspot sigma y",100,-1.,1.));
649 add(
hsimPV,
new TH1F(
"wzbeam",
"beamspot sigma z",100,-1.,1.));
650 hsimPV[
"xsim2"]->StatOverflows(kTRUE);
651 hsimPV[
"ysim2"]->StatOverflows(kTRUE);
652 hsimPV[
"zsim2"]->StatOverflows(kTRUE);
653 hsimPV[
"xsimb"]->StatOverflows(kTRUE);
654 hsimPV[
"ysimb"]->StatOverflows(kTRUE);
655 hsimPV[
"zsimb"]->StatOverflows(kTRUE);
656 hsimPV[
"nsimvtx"] =
new TH1F(
"nsimvtx",
"# of simulated vertices", 50, -0.5, 49.5);
657 hsimPV[
"nbsimtksinvtx"]=
new TH1F(
"nbsimtksinvtx",
"simulated tracks in vertex",100,-0.5,99.5);
658 hsimPV[
"nbsimtksinvtx"]->StatOverflows(kTRUE);
662 std::cout <<
"this is void PrimaryVertexAnalyzer4PU::endJob() " << std::endl;
664 double sumDA=0,sumBS=0,sumnoBS=0;
665 for(
int i=101;
i>0;
i--){
666 sumDA+=
hDA[
"matchVtxFractionSignal"]->GetBinContent(
i)/
hDA[
"matchVtxFractionSignal"]->Integral();
667 hDA[
"matchVtxFractionCumSignal"]->SetBinContent(
i,sumDA);
668 sumBS+=
hBS[
"matchVtxFractionSignal"]->GetBinContent(
i)/
hBS[
"matchVtxFractionSignal"]->Integral();
669 hBS[
"matchVtxFractionCumSignal"]->SetBinContent(
i,sumBS);
670 sumnoBS+=
hnoBS[
"matchVtxFractionSignal"]->GetBinContent(
i)/
hnoBS[
"matchVtxFractionSignal"]->Integral();
671 hnoBS[
"matchVtxFractionCumSignal"]->SetBinContent(
i,sumnoBS);
673 sumDA=0,sumBS=0,sumnoBS=0;
674 for(
int i=1;
i<1001;
i++){
675 sumDA+=
hDA[
"abszdistancetag"]->GetBinContent(
i);
676 hDA[
"abszdistancetagcum"]->SetBinContent(
i,sumDA/
float(
hDA[
"abszdistancetag"]->GetEntries()));
677 sumBS+=
hBS[
"abszdistancetag"]->GetBinContent(
i);
678 hBS[
"abszdistancetagcum"]->SetBinContent(
i,sumBS/
float(
hBS[
"abszdistancetag"]->GetEntries()));
679 sumnoBS+=
hnoBS[
"abszdistancetag"]->GetBinContent(
i);
680 hnoBS[
"abszdistancetagcum"]->SetBinContent(
i,sumnoBS/
float(
hnoBS[
"abszdistancetag"]->GetEntries()));
689 for(
int i=1;
i<501;
i++){
690 if(
hDA[
"vtxndf"]->GetEntries()>0){
691 p=
hDA[
"vtxndf"]->Integral(
i,501)/
hDA[
"vtxndf"]->GetEntries();
hDA[
"vtxndfc"]->SetBinContent(
i,p*
hDA[
"vtxndf"]->GetBinContent(
i));
693 if(
hBS[
"vtxndf"]->GetEntries()>0){
694 p=
hBS[
"vtxndf"]->Integral(
i,501)/
hBS[
"vtxndf"]->GetEntries();
hBS[
"vtxndfc"]->SetBinContent(
i,p*
hBS[
"vtxndf"]->GetBinContent(
i));
696 if(
hnoBS[
"vtxndf"]->GetEntries()>0){
697 p=
hnoBS[
"vtxndf"]->Integral(
i,501)/
hnoBS[
"vtxndf"]->GetEntries();
hnoBS[
"vtxndfc"]->SetBinContent(
i,p*
hnoBS[
"vtxndf"]->GetBinContent(
i));
704 hist->second->Write();
707 std::cout <<
"PrimaryVertexAnalyzer4PU::endJob: done" << std::endl;
717 std::vector<SimPart > tsim;
718 if(simVtcs->begin()==simVtcs->end()){
720 cout <<
" PrimaryVertexAnalyzer4PU::getSimTrkParameters no simvtcs" << endl;
725 cout <<
" PrimaryVertexAnalyzer4PU::getSimTrkParameters simVtcs n=" << simVtcs->size() << endl;
726 cout <<
" PrimaryVertexAnalyzer4PU::getSimTrkParameters 1st position" << setw(8) << setprecision(4) << simVtcs->begin()->position() << endl;
728 double t0=simVtcs->begin()->position().e();
730 for(edm::SimTrackContainer::const_iterator
t=simTrks->begin();
731 t!=simTrks->end(); ++
t){
733 std::cout <<
"simtrk has no vertex" << std::endl;
737 (*simVtcs)[
t->vertIndex()].position().y(),
738 (*simVtcs)[
t->vertIndex()].position().z(),
739 (*simVtcs)[
t->vertIndex()].position().e());
740 int pdgCode=
t->type();
744 std::cout <<
"funny particle skipped , code=" << pdgCode << std::endl;
747 if ((pdgCode==11)||(pdgCode==13)||(pdgCode==15)||(pdgCode==-211)||(pdgCode==-2212)||(pdgCode==-321)||(pdgCode==-3222)){Q=-1;}
748 else if((pdgCode==-11)||(pdgCode==-13)||(pdgCode==-15)||(pdgCode==211)||(pdgCode==2212)||(pdgCode==321)||(pdgCode==3222)){Q=1;}
752 if ( (Q != 0) && (
p.pt()>0.1) && (fabs(
t->momentum().eta())<3.0)
753 && fabs(
v.z()*simUnit<20) && (
sqrt(
v.x()*
v.x()+
v.y()*
v.y())<10.)){
754 double x0=
v.x()*simUnit;
755 double y0=
v.y()*simUnit;
756 double z0=
v.z()*simUnit;
758 double D0=x0*
sin(
p.phi())-y0*
cos(
p.phi())-0.5*kappa*(x0*x0+y0*y0);
759 double q=
sqrt(1.-2.*kappa*D0);
760 double s0=(x0*
cos(
p.phi())+y0*
sin(
p.phi()))/
q;
762 if (fabs(kappa*s0)>0.001){
763 s1=asin(kappa*s0)/
kappa;
765 double ks02=(kappa*s0)*(kappa*s0);
766 s1=s0*(1.+ks02/6.+3./40.*ks02*ks02+5./112.*
pow(ks02,3));
783 double x1=x0-0.033;
double y1=y0-0.;
784 D0=x1*
sin(
p.phi())-y1*
cos(
p.phi())-0.5*kappa*(x1*x1+y1*y1);
785 q=
sqrt(1.-2.*kappa*D0);
787 if (fabs(kappa*s0)>0.001){
788 s1=asin(kappa*s0)/
kappa;
790 double ks02=(kappa*s0)*(kappa*s0);
791 s1=s0*(1.+ks02/6.+3./40.*ks02*ks02+5./112.*
pow(ks02,3));
809 Array2D(
size_t iN,
size_t iM):
810 m_step(iM),m_array(new double[iN*iM]) {}
812 double& operator()(
size_t iN,
size_t iM) {
813 return m_array[iN*m_step+iM];
816 double operator()(
size_t iN,
size_t iM)
const {
817 return m_array[iN*m_step+iM];
821 std::unique_ptr<double[]> m_array;
826 const unsigned int nsim=simtrks.size();
827 const unsigned int nrec=trks.size();
828 std::vector<int> rectosim(nrec);
829 Array2D pij(nrec,nsim);
833 for(reco::TrackCollection::const_iterator
t=trks.begin();
t!=trks.end(); ++
t){
838 for(
unsigned int j=0;
j<nsim;
j++){
842 for(
unsigned int k=0;
k<5;
k++){
843 for(
unsigned int l=0;
l<5;
l++){
847 pij(i,
j)=
exp(-0.5*c);
852 for(
unsigned int k=0;
k<nrec;
k++){
853 int imatch=-1;
int jmatch=-1;
855 for(
unsigned int j=0;
j<nsim;
j++){
856 if ((simtrks[
j].rec)<0){
857 double psum=
exp(-0.5*mu);
858 for(
unsigned int i=0; i<nrec; i++){
859 if (rectosim[i]<0){ psum+=pij(i,
j);}
861 for(
unsigned int i=0; i<nrec; i++){
862 if ((rectosim[i]<0)&&(pij(i,
j)/psum>pmatch)){
863 pmatch=pij(i,
j)/psum;
869 if((jmatch>=0)||(imatch>=0)){
871 rectosim[imatch]=jmatch;
872 simtrks[jmatch].rec=imatch;
874 }
else if (
match(simtrks[jmatch].par, trks.at(imatch).parameters())){
876 rectosim[imatch]=jmatch;
877 simtrks[jmatch].rec=imatch;
884 std::cout <<
"unmatched sim " << std::endl;
885 for(
unsigned int j=0;
j<nsim;
j++){
886 if(simtrks[
j].rec<0){
887 double pt= 1./simtrks[
j].par[0]/
tan(simtrks[
j].par[1]);
889 std::cout << setw(3) <<
j << setw(8) << simtrks[
j].pdg
890 << setw(8) << setprecision(4) <<
" (" << simtrks[
j].xvtx <<
"," << simtrks[
j].yvtx <<
"," << simtrks[
j].zvtx <<
")"
892 <<
" phi=" << simtrks[
j].par[2]
893 <<
" eta= " << -
log(
tan(0.5*(
M_PI/2-simtrks[
j].par[1])))
903 double dqoverp =
a(0)-
b(0);
904 double dlambda =
a(1)-
b(1);
905 double dphi =
a(2)-
b(2);
906 double dsz =
a(4)-
b(4);
907 if (dphi>
M_PI){ dphi-=M_2_PI; }
else if(dphi<-
M_PI){dphi+=M_2_PI;}
908 return ( (fabs(dqoverp)<0.2) && (fabs(dlambda)<0.02) && (fabs(dphi)<0.04) && (fabs(dsz)<1.0) );
917 double ctau=(
pdt_->particle(
abs(p->pdg_id()) ))->lifetime();
918 return ctau >0 && ctau <1
e-6;
922 return ( !p->end_vertex() && p->status()==1 );
929 return part->charge()!=0;
932 return pdt_->particle( -p->pdg_id() )!=0;
937 Fill(h,
"rapidity_"+ttype,t.
eta());
938 Fill(h,
"z0_"+ttype,t.
vz());
941 Fill(h,
"pt_"+ttype,t.
pt());
950 Fill(h,
"logtresxy_"+ttype,
log(d0Error/0.0001)/
log(10.));
951 Fill(h,
"tpullxy_"+ttype,d0/d0Error);
955 Fill(h,
"logtresz_"+ttype,
log(dzError/0.0001)/
log(10.));
962 if((! (v==
NULL)) && (v->
ndof()>10.)) {
984 Fill(h,
"trackAlgo_" + ttype, t.
algo());
987 int longesthit=0, nbarrel=0;
989 if ((**hit).isValid() && (**hit).geographicalId().det() ==
DetId::Tracker ){
996 if (clust->sizeY()-longesthit>0) longesthit=clust->sizeY();
997 if (clust->sizeY()>20.){
998 Fill(h,
"lvseta_"+ttype,t.
eta(), 19.9);
1001 Fill(h,
"lvseta_"+ttype,t.
eta(), float(clust->sizeY()));
1002 Fill(h,
"lvstanlambda_"+ttype,
tan(t.
lambda()),
float(clust->sizeY()));
1008 Fill(h,
"nbarrelhits_"+ttype,
float(nbarrel));
1014 int longesthit=0, nbarrel=0;
1015 cout << Form(
"%5.2f %5.2f : ",t.
pt(),t.
eta());
1017 if ((**hit).isValid() && (**hit).geographicalId().det() ==
DetId::Tracker ){
1024 cout << Form(
"%4d",clust->sizeY());
1025 if (clust->sizeY()-longesthit>0) longesthit=clust->sizeY();
1034 std::cout << std::endl << title << std::endl;
1035 for(reco::VertexCollection::const_iterator
v=recVtxs->begin();
1036 v!=recVtxs->end(); ++
v){
1037 string vtype=
" recvtx ";
1040 }
else if (
v->ndof()==-5){
1042 }
else if(
v->ndof()==-3){
1045 std::cout <<
"vtx "<< std::setw(3) << std::setfill(
' ')<<ivtx++
1047 <<
" #trk " << std::fixed << std::setprecision(4) << std::setw(3) <<
v->tracksSize()
1048 <<
" chi2 " << std::fixed << std::setw(4) << std::setprecision(1) <<
v->chi2()
1049 <<
" ndof " << std::fixed << std::setw(5) << std::setprecision(2) <<
v->ndof()
1050 <<
" x " << std::setw(8) <<std::fixed << std::setprecision(4) <<
v->x()
1051 <<
" dx " << std::setw(8) <<
v->xError()
1052 <<
" y " << std::setw(8) <<
v->y()
1053 <<
" dy " << std::setw(8) <<
v->yError()
1054 <<
" z " << std::setw(8) <<
v->z()
1055 <<
" dz " << std::setw(8) <<
v->zError()
1062 for(SimVertexContainer::const_iterator vsim=simVtxs->begin();
1063 vsim!=simVtxs->end(); ++vsim){
1064 if ( vsim->position().x()*vsim->position().x()+vsim->position().y()*vsim->position().y() < 1.){
1065 std::cout << i++ <<
")" << std::scientific
1066 <<
" evtid=" << vsim->eventId().event() <<
"," << vsim->eventId().bunchCrossing()
1067 <<
" sim x=" << vsim->position().x()*
simUnit_
1068 <<
" sim y=" << vsim->position().y()*
simUnit_
1069 <<
" sim z=" << vsim->position().z()*
simUnit_
1070 <<
" sim t=" << vsim->position().t()
1071 <<
" parent=" << vsim->parentIndex()
1079 std::cout <<
" simTrks type, (momentum), vertIndex, genpartIndex" << std::endl;
1081 for(SimTrackContainer::const_iterator
t=simTrks->begin();
1082 t!=simTrks->end(); ++
t){
1084 <<
t->eventId().event() <<
"," <<
t->eventId().bunchCrossing()
1087 << (*t).genpartIndex();
1094 cout <<
"printRecTrks" << endl;
1096 for(reco::TrackCollection::const_iterator
t=recTrks->begin();
t!=recTrks->end(); ++
t){
1098 cout <<
"Track "<<i <<
" " ; i++;
1114 cout << Form(
"pt=%8.3f phi=%6.3f eta=%6.3f z=%8.4f dz=%6.4f, ipsig=%6.1f",
t->pt(),
t->phi(),
t->eta(),
t->vz(),
t->dzError(),ipsig) << endl;
1117 cout << Form(
" found=%6d lost=%6d chi2/ndof=%10.3f ",
t->found(),
t->lost(),
t->normalizedChi2())<<endl;
1120 cout <<
"subdet layers valid lost" << endl;
1121 cout << Form(
" barrel %2d %2d %2d",
1122 p.pixelBarrelLayersWithMeasurement(),
1123 p.numberOfValidPixelBarrelHits(),
1124 p.numberOfLostPixelBarrelHits(HitPattern::TRACK_HITS))
1127 cout << Form(
" fwd %2d %2d %2d",
1128 p.pixelEndcapLayersWithMeasurement(),
1129 p.numberOfValidPixelEndcapHits(),
1130 p.numberOfLostPixelEndcapHits(HitPattern::TRACK_HITS))
1132 cout << Form(
" pixel %2d %2d %2d",
1133 p.pixelLayersWithMeasurement(),
1134 p.numberOfValidPixelHits(),
1135 p.numberOfLostPixelHits(HitPattern::TRACK_HITS))
1137 cout << Form(
" tracker %2d %2d %2d",
1138 p.trackerLayersWithMeasurement(),
1139 p.numberOfValidTrackerHits(),
1140 p.numberOfLostTrackerHits(HitPattern::TRACK_HITS))
1145 if ((**hit).isValid() && (**hit).geographicalId().det() ==
DetId::Tracker ){
1152 cout << Form(
" barrel cluster size=%2d charge=%6.1f wx=%2d wy=%2d, expected=%3.1f",clust->size(),clust->charge(),clust->sizeX(),clust->sizeY(),1.+2./fabs(
tan(
t->theta()))) << endl;
1158 cout << Form(
" endcap cluster size=%2d charge=%6.1f wx=%2d wy=%2d",clust->size(),clust->charge(),clust->sizeX(),clust->sizeY()) << endl;
1164 cout <<
"hitpattern" << endl;
1165 for(
int i = 0; i < p.numberOfHits(HitPattern::TRACK_HITS); i++){
1166 p.printHitPattern(HitPattern::TRACK_HITS, i,
std::cout);
1169 cout <<
"expected inner " << p.numberOfHits(HitPattern::MISSING_INNER_HITS) << endl;
1170 for(
int i = 0; i < p.numberOfHits(HitPattern::MISSING_INNER_HITS); i++){
1171 p.printHitPattern(HitPattern::MISSING_INNER_HITS, i,
std::cout);
1174 cout <<
"expected outer " << p.numberOfHits(HitPattern::MISSING_OUTER_HITS) << endl;
1175 for(
int i = 0; i < p.numberOfHits(HitPattern::MISSING_OUTER_HITS); i++){
1176 p.printHitPattern(HitPattern::MISSING_OUTER_HITS, i,
std::cout);
1192 std::vector<SimPart>& tsim,
1193 std::vector<SimEvent>& simEvt,
1196 vector<TransientTrack> selTrks;
1197 for(reco::TrackCollection::const_iterator
t=recTrks->begin();
1198 t!=recTrks->end(); ++
t){
1200 if( (!selectedOnly) || (selectedOnly &&
theTrackFilter(tt))){ selTrks.push_back(tt); }
1202 if (selTrks.size()==0)
return;
1203 stable_sort(selTrks.begin(), selTrks.end(), recTrackLessZ);
1208 for(
unsigned int i=0;
i<selTrks.size();
i++){ selRecTrks.push_back(selTrks[
i].track());}
1209 std::vector<int> rectosim=
supf(tsim, selRecTrks);
1212 cout <<
"printPVTrks" << endl;
1213 cout <<
"---- z +/- dz 1bet-m ip +/-dip pt phi eta";
1214 if((tsim.size()>0)||(simEvt.size()>0)) {
cout <<
" type pdg zvtx zdca dca zvtx zdca dsz";}
1219 for(
unsigned int i=0;
i<selTrks.size();
i++){
1221 cout << setw (3)<< isel;
1230 for(reco::VertexCollection::const_iterator
v=recVtxs->begin();
1231 v!=recVtxs->end(); ++
v){
1232 if ( (
v->ndof()<-1) || (
v->chi2()<=0) )
continue;
1233 for(
trackit_t tv=
v->tracks_begin(); tv!=
v->tracks_end(); tv++){
1235 if(selTrks[i].track().vz()==RTv.
vz()) {vmatch=iv;}
1240 double tz=(selTrks[
i].stateAtBeamLine().trackStateAtPCA()).
position().z();
1241 double tantheta=
tan((selTrks[i].stateAtBeamLine().trackStateAtPCA()).momentum().
theta());
1242 double tdz0= selTrks[
i].track().dzError();
1246 cout <<
"["<<setw(2)<<vmatch<<
"]";
1252 if(status&0x1){
cout <<
"i";}
else{
cout <<
".";};
1253 if(status&0x2){
cout <<
"c";}
else{
cout <<
".";};
1254 if(status&0x4){
cout <<
"h";}
else{
cout <<
".";};
1255 if(status&0x8){
cout <<
"q";}
else{
cout <<
".";};
1258 cout << setw (8) << fixed << setprecision(4)<< tz <<
" +/-" << setw (6)<<
sqrt(tdz2);
1262 if(selTrks[i].track().hitPattern().hasValidHitInFirstPixelBarrel()){
cout <<
"+"; }
else {
cout <<
"-"; }
1263 cout << setw(1) << selTrks[
i].track().hitPattern().pixelBarrelLayersWithMeasurement();
1264 cout << setw(1) << selTrks[
i].track().hitPattern().pixelEndcapLayersWithMeasurement();
1265 cout << setw(1) << hex << selTrks[
i].track().hitPattern().trackerLayersWithMeasurement()
1266 - selTrks[
i].track().hitPattern().pixelLayersWithMeasurement() <<
dec;
1267 cout <<
"-" << setw(1) << hex << selTrks[
i].track().hitPattern().numberOfHits(HitPattern::MISSING_OUTER_HITS) <<
dec;
1271 cout << setw (8) << IP.
value() <<
"+/-" << setw (6) << IP.
error();
1272 if(selTrks[i].track().ptError()<1){
1273 cout <<
" " << setw(8) << setprecision(2) << selTrks[
i].track().pt()*selTrks[
i].track().charge();
1275 cout <<
" " << setw(7) << setprecision(1) << selTrks[
i].track().pt()*selTrks[
i].track().charge() <<
"*";
1277 cout <<
" " << setw(5) << setprecision(2) << selTrks[
i].track().phi()
1278 <<
" " << setw(5) << setprecision(2) << selTrks[
i].track().eta() ;
1281 if(simEvt.size()>0){
1286 double vz=parentVertex->
position().z();
1287 cout <<
" " << tpr->eventId().event();
1288 cout <<
" " << setw(5) << tpr->pdgId();
1289 cout <<
" " << setw(8) << setprecision(4) << vz;
1291 cout <<
" not matched";
1295 if(tsim[rectosim[i]].
type==0){
cout <<
" prim " ;}
else{
cout <<
" sec ";}
1296 cout <<
" " << setw(5) << tsim[rectosim[
i]].pdg;
1297 cout <<
" " << setw(8) << setprecision(4) << tsim[rectosim[
i]].zvtx;
1298 cout <<
" " << setw(8) << setprecision(4) << tsim[rectosim[
i]].zdcap;
1299 cout <<
" " << setw(8) << setprecision(4) << tsim[rectosim[
i]].ddcap;
1300 double zvtxpull=(tz-tsim[rectosim[
i]].zvtx)/
sqrt(tdz2);
1301 cout << setw(6) << setprecision(1) << zvtxpull;
1302 double zdcapull=(tz-tsim[rectosim[
i]].zdcap)/tdz0;
1303 cout << setw(6) << setprecision(1) << zdcapull;
1304 double dszpull=(selTrks[
i].track().dsz()-tsim[rectosim[
i]].par[4])/selTrks[i].track().dszError();
1305 cout << setw(6) << setprecision(1) << dszpull;
1314 const std::vector<SimPart > & tsim,
1319 std::cout <<
"dump rec tracks: " << std::endl;
1321 for(reco::TrackCollection::const_iterator
t=recTrks->begin();
1322 t!=recTrks->end(); ++
t){
1324 std::cout << irec++ <<
") " << p << std::endl;
1327 std::cout <<
"match sim tracks: " << std::endl;
1331 for(std::vector<SimPart>::const_iterator
s=tsim.begin();
1332 s!=tsim.end(); ++
s){
1336 for(reco::TrackCollection::const_iterator
t=recTrks->begin();
1337 t!=recTrks->end(); ++
t){
1339 if (
match(
s->par,p)){ imatch=irec; }
1345 std::cout <<
" matched to rec trk" << imatch << std::endl;
1347 std::cout <<
" not matched" << std::endl;
1354 double & Tc,
double & chsq,
double & dzmax,
double & dztrim,
double & m4m2){
1355 if (tracks.size()<2){ Tc=-1; chsq=-1; dzmax=-1; dztrim=-1; m4m2=-1;
return;}
1357 double sumw=0, sumwz=0, sumww=0,sumwwz=0,sumwwzz=0;
1358 double zmin=1e10, zmin1=1e10, zmax1=-1e10,
zmax=-1e10;
1359 double m4=0,m3=0,m2=0,m1=0,m0=0;
1360 for(vector<reco::TransientTrack>::const_iterator it=tracks.begin(); it!=tracks.end(); it++){
1361 double tantheta=
tan(((*it).stateAtBeamLine().trackStateAtPCA()).momentum().theta());
1363 double z=((*it).stateAtBeamLine().trackStateAtPCA()).
position().z();
1364 double dz2=
pow((*it).track().dzError(),2)+
pow(beamspot.BeamWidthX()/tantheta,2);
1377 if(z<zmin1){zmin1=
z;}
if(z<zmin){zmin1=
zmin; zmin=
z;}
1378 if(z>zmax1){zmax1=
z;}
if(z>zmax){zmax1=
zmax; zmax=
z;}
1381 double z=sumwz/sumw;
1382 double a=sumwwzz-2*z*sumwwz+z*z*sumww;
1384 if(tracks.size()>1){
1385 chsq=(m2-m0*z*
z)/(tracks.size()-1);
1387 m4m2=
sqrt((m4-4*m3*z+6*m2*z*z-3*m1*z*z*z+m0*z*z*z*z)/(m2-2*m1*z+z*z*m0));
1407 std::vector<std::pair<TrackingParticleRef, double> > tp =
r2s_[track];
1408 for (std::vector<std::pair<TrackingParticleRef, double> >::const_iterator it = tp.begin();
1409 it != tp.end(); ++it) {
1432 std::vector< edm::RefToBase<reco::Track> >
b;
1455 const View<Track> tC = *(trackCollectionH.product());
1458 vector<SimEvent> simEvt;
1459 map<EncodedEventId, unsigned int> eventIdToEventMap;
1460 map<EncodedEventId, unsigned int>::iterator id;
1462 for(TrackingParticleCollection::const_iterator it=simTracks->begin(); it!=simTracks->end(); it++){
1464 if( fabs(it->parentVertex().get()->position().z())>100.)
continue;
1466 unsigned int event=0;
1467 id=eventIdToEventMap.find(it->eventId());
1468 if (
id==eventIdToEventMap.end()){
1473 event=simEvt.size();
1476 cout <<
"getSimEvents: ";
1477 cout << it->eventId().bunchCrossing() <<
"," << it->eventId().event()
1478 <<
" z="<< it->vz() <<
" "
1480 <<
" z=" << parentVertex->
position().z() << endl;
1482 if (it->eventId()==parentVertex->
eventId()){
1490 e.
x=0; e.
y=0; e.
z=-88.;
1492 simEvt.push_back(e);
1499 simEvt[
event].tp.push_back(&(*it));
1500 if( (
abs(it->eta())<2.5) && (it->charge()!=0) ){
1501 simEvt[
event].sumpt2+=
pow(it->pt(),2);
1502 simEvt[
event].sumpt+=it->pt();
1507 for(TrackingParticleCollection::const_iterator it=simTracks->begin(); it!=simTracks->end(); it++){
1516 if( truthMatchedTrack(track,tpr)){
1518 if( eventIdToEventMap.find(tpr->eventId())==eventIdToEventMap.end() ){
cout <<
"Bug in getSimEvents" << endl;
break; }
1520 z2tp_[track.
get()->
vz()]=tpr;
1522 unsigned int event=eventIdToEventMap[tpr->eventId()];
1523 double ipsig=0,ipdist=0;
1525 double vx=parentVertex->
position().x();
1526 double vy=parentVertex->
position().y();
1527 double vz=parentVertex->
position().z();
1530 double dxy=track->
dxy(vertexBeamSpot_.position());
1536 if (theTrackFilter(t)){
1537 simEvt[
event].tk.push_back(t);
1538 if(ipdist<5){simEvt[
event].tkprim.push_back(t);}
1539 if(ipsig<5){simEvt[
event].tkprimsel.push_back(t);}
1546 cout <<
"SimEvents " << simEvt.size() << endl;
1547 for(
unsigned int i=0;
i<simEvt.size();
i++){
1549 if(simEvt[
i].tkprim.size()>0){
1551 getTc(simEvt[
i].tkprimsel, simEvt[
i].Tc, simEvt[
i].chisq, simEvt[
i].dzmax, simEvt[
i].dztrim, simEvt[
i].m4m2);
1562 cout <<
i <<
" ) nTP=" << simEvt[
i].tp.size()
1563 <<
" z=" << simEvt[
i].z
1564 <<
" recTrks=" << simEvt[
i].tk.size()
1565 <<
" recTrksPrim=" << simEvt[
i].tkprim.size()
1566 <<
" zfit=" << simEvt[
i].zfit
1580 std::vector<PrimaryVertexAnalyzer4PU::simPrimaryVertex> simpv;
1581 const HepMC::GenEvent* evt=evtMC->GetEvent();
1583 for(HepMC::GenEvent::vertex_const_iterator vitr= evt->vertices_begin();
1584 vitr != evt->vertices_end(); ++vitr )
1587 HepMC::FourVector pos = (*vitr)->position();
1588 if (fabs(pos.z())>1000)
continue;
1590 bool hasMotherVertex=
false;
1591 for ( HepMC::GenVertex::particle_iterator
1595 HepMC::GenVertex * mv=(*mother)->production_vertex();
1596 if (mv) {hasMotherVertex=
true;}
1598 if(hasMotherVertex) {
continue;}
1601 const double mm=0.1;
1604 for(std::vector<simPrimaryVertex>::iterator v0=simpv.begin();
1605 v0!=simpv.end(); v0++){
1606 if( (fabs(sv.x-v0->x)<1
e-5) && (fabs(sv.y-v0->y)<1
e-5) && (fabs(sv.z-v0->z)<1
e-5)){
1613 simpv.push_back(sv);
1618 vp->genVertex.push_back((*vitr)->barcode());
1621 for ( HepMC::GenVertex::particle_iterator
1622 daughter = (*vitr)->particles_begin(HepMC::descendants);
1623 daughter != (*vitr)->particles_end(HepMC::descendants);
1626 if (
find(vp->finalstateParticles.begin(), vp->finalstateParticles.end(),(*daughter)->barcode())
1627 == vp->finalstateParticles.end()){
1628 vp->finalstateParticles.push_back((*daughter)->barcode());
1629 HepMC::FourVector
m=(*daughter)->momentum();
1630 vp->ptot.setPx(vp->ptot.px()+m.px());
1631 vp->ptot.setPy(vp->ptot.py()+m.py());
1632 vp->ptot.setPz(vp->ptot.pz()+m.pz());
1633 vp->ptot.setE(vp->ptot.e()+m.e());
1634 vp->ptsq+=(m.perp())*(m.perp());
1636 if ( (m.perp()>0.2) && (fabs(m.pseudoRapidity())<2.5) &&
isCharged( *daughter ) ){
1640 hsimPV[
"rapidity"]->Fill(m.pseudoRapidity());
1641 if( (m.perp()>0.8) &&
isCharged( *daughter ) ){
1642 hsimPV[
"chRapidity"]->Fill(m.pseudoRapidity());
1644 hsimPV[
"pt"]->Fill(m.perp());
1651 cout <<
"------- PrimaryVertexAnalyzer4PU simPVs -------" << endl;
1652 for(std::vector<simPrimaryVertex>::iterator v0=simpv.begin();
1653 v0!=simpv.end(); v0++){
1654 cout <<
"z=" << v0->z
1655 <<
" px=" << v0->ptot.px()
1656 <<
" py=" << v0->ptot.py()
1657 <<
" pz=" << v0->ptot.pz()
1658 <<
" pt2="<< v0->ptsq
1661 cout <<
"-----------------------------------------------" << endl;
1671 double sepL_min = 50.;
1674 for(
unsigned sv_idx=0; sv_idx<simpv.size(); ++sv_idx){
1676 float comp_z = simpv[sv_idx];
1677 double dist_z = fabs(comp_z - in_z);
1679 if ( dist_z==0. )
continue;
1680 if ( dist_z<sepL_min ) sepL_min = dist_z;
1691 double in_z = inEv.
z;
1695 double sepL_min = 50.;
1698 for(
unsigned se_idx=0; se_idx<simEv.size(); ++se_idx){
1703 if ( comp_ev.
event()==lastEvent )
continue;
1704 lastEvent = comp_ev.
event();
1706 float comp_z = compEv.
z;
1710 double dist_z = fabs(comp_z - in_z);
1712 if ( dist_z<sepL_min ) sepL_min = dist_z;
1726 vector<int>* matchs =
new vector<int>();
1728 for(
unsigned vtx_idx=0; vtx_idx<vCH->size(); ++vtx_idx){
1732 double comp_z = comp_vtxref->z();
1733 double comp_z_err = comp_vtxref->zError();
1735 double z_dist = comp_z - in_z;
1736 double z_rel = z_dist / comp_z_err;
1738 if ( fabs(z_rel)<zmatch_ ) {
1739 matchs->push_back(vtx_idx);
1753 std::vector<PrimaryVertexAnalyzer4PU::simPrimaryVertex> simpv;
1755 if(
DEBUG_){
std::cout <<
"getSimPVs TrackingVertexCollection " << std::endl;}
1757 for (TrackingVertexCollection::const_iterator
v = tVC ->
begin();
v != tVC ->
end(); ++
v) {
1760 std::cout << (
v->eventId()).
event() <<
v ->
position() <<
v->g4Vertices().size() <<
" " <<
v->genVertices().size() <<
" t=" <<
v->position().t()*1.e12 <<
" ==0:" <<(
v->position().t()>0) << std::endl;
1767 if ((
unsigned int)
v->eventId().event()<simpv.size())
continue;
1768 if (fabs(
v->position().z())>1000)
continue;
1771 const double mm=1.0;
1777 sv.eventId=(**iTrack).eventId();
1780 for(std::vector<simPrimaryVertex>::iterator v0=simpv.begin();
1781 v0!=simpv.end(); v0++){
1782 if( (sv.eventId==v0->eventId) && (fabs(sv.x-v0->x)<1
e-5) && (fabs(sv.y-v0->y)<1
e-5) && (fabs(sv.z-v0->z)<1
e-5)){
1789 if(
DEBUG_){
std::cout <<
"this is a new vertex " << sv.eventId.event() <<
" " << sv.x <<
" " << sv.y <<
" " << sv.z <<std::endl;}
1790 simpv.push_back(sv);
1793 if(
DEBUG_){
std::cout <<
"this is not a new vertex" << sv.x <<
" " << sv.y <<
" " << sv.z <<std::endl;}
1799 std::cout <<
" Daughter momentum: " << (*(*iTP)).momentum();
1806 cout <<
"------- PrimaryVertexAnalyzer4PU simPVs from TrackingVertices -------" << endl;
1807 for(std::vector<simPrimaryVertex>::iterator v0=simpv.begin();
1808 v0!=simpv.end(); v0++){
1809 cout <<
"z=" << v0->z <<
" event=" << v0->eventId.event() << endl;
1811 cout <<
"-----------------------------------------------" << endl;
1821 std::vector<simPrimaryVertex> simpv;
1822 std::vector<float> pui_z;
1823 std::vector<SimPart> tsim;
1834 <<
"PrimaryVertexAnalyzer4PU::analyze event counter=" <<
eventcounter_
1843 std::cout <<
"Some problem occurred with the particle data table. This may not work !" <<std::endl;
1853 for (
unsigned int puinfo_ite=0;puinfo_ite<(*puinfoH).size();++puinfo_ite){
1854 if ((*puinfoH)[puinfo_ite].getBunchCrossing()==0){
1855 puinfo=(*puinfoH)[puinfo_ite];
1880 int nhighpurity=0, ntot=0;
1881 for(reco::TrackCollection::const_iterator
t=recTrks->begin();
t!=recTrks->end(); ++
t){
1885 if(ntot>10)
hnoBS[
"highpurityTrackFraction"]->Fill(
float(nhighpurity)/
float(ntot));
1887 if(
verbose_){
cout <<
"rejected, " << nhighpurity <<
" highpurity out of " << ntot <<
" total tracks "<< endl<< endl;}
1898 cout <<
" beamspot not found, using dummy " << endl;
1903 if((recVtxs->begin()->
isValid())&&(recVtxs->begin()->ndof()>1)&&(recVtxs->begin()->ndof()>(0.0*recVtxs->begin()->tracksSize()))){
1908 cout << Form(
"XBS %10d %5d %14llu %4d %lu %5.2f %8f %8f %8f %8f %8f %8f",
1910 (
unsigned long)(recVtxs->begin()->tracksSize()), recVtxs->begin()->ndof(),
1911 recVtxs->begin()->x(), recVtxs->begin()->xError(),
1912 recVtxs->begin()->y(), recVtxs->begin()->yError(),
1913 recVtxs->begin()->z(), recVtxs->begin()->zError()
1940 vector<SimEvent> simEvt;
1941 if (gotTP && gotTV ){
1947 simEvt=
getSimEvents(TPCollectionH, TVCollectionH, trackCollectionH);
1949 if (simEvt.size()==0){
1950 cout <<
" !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" << endl;
1951 cout <<
" !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" << endl;
1952 cout <<
" !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" << endl;
1953 cout <<
" !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" << endl;
1954 cout <<
" !!!!!!!!!!!!!!!!!!!!!! got TrackingParticles but no simEvt !!!!!!!!!!!!!!!!!" << endl;
1955 cout <<
" dumping Tracking particles " << endl;
1957 for(TrackingParticleCollection::const_iterator it=simTracks->begin(); it!=simTracks->end(); it++){
1958 cout << *it << endl;
1960 cout <<
" dumping Tracking Vertices " << endl;
1962 for(TrackingVertexCollection::const_iterator iv=tpVtxs->begin(); iv!=tpVtxs->end(); iv++){
1963 cout << *iv << endl;
1966 cout <<
"dumping simTracks" << endl;
1967 for(SimTrackContainer::const_iterator
t=simTrks->begin();
t!=simTrks->end(); ++
t){
1970 cout <<
"dumping simVertexes" << endl;
1971 for(SimVertexContainer::const_iterator vv=simVtxs->begin();
1974 cout << *vv << endl;
1977 cout <<
"no hepMC" << endl;
1979 cout <<
" !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" << endl;
1981 const HepMC::GenEvent* evt=evtMC->GetEvent();
1983 std::cout <<
"process id " <<evt->signal_process_id()<<std::endl;
1984 std::cout <<
"signal process vertex "<< ( evt->signal_process_vertex() ?
1985 evt->signal_process_vertex()->barcode() : 0 ) <<std::endl;
1986 std::cout <<
"number of vertices " << evt->vertices_size() << std::endl;
1989 cout <<
"no event in HepMC" << endl;
1991 cout <<
" !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" << endl;
1999 cout <<
"Found Tracking Vertices " << endl;
2009 cout <<
"Using HepMCProduct " << endl;
2010 std::cout <<
"simtrks " << simTrks->size() << std::endl;
2019 for(reco::VertexCollection::const_iterator
v=recVtxs->begin();
2020 v!=recVtxs->end(); ++
v){
2021 if ((
v->ndof()==-3) && (
v->chi2()==0) ){
2026 hsimPV[
"nsimvtx"]->Fill(simpv.size());
2027 for(std::vector<simPrimaryVertex>::iterator vsim=simpv.begin();
2028 vsim!=simpv.end(); vsim++){
2033 hsimPV[
"nbsimtksinvtx"]->Fill(vsim->nGenTrk);
2071 cout << endl <<
"Event dump" << endl
2078 if (bnoBS) {
printRecVtxs(recVtxs,
"Offline without Beamspot");}
2079 if (bnoBS && (!bDA)){
printPVTrks(recTrks, recVtxs, tsim, simEvt,
false);}
2080 if (bBS)
printRecVtxs(recVtxsBS,
"Offline with Beamspot");
2083 printPVTrks(recTrks, recVtxsDA, tsim, simEvt,
false);
2094 bool lt(
const std::pair<double,unsigned int>&
a,
const std::pair<double,unsigned int>&
b ){
2095 return a.first<b.first;
2103 vector<SimEvent> & simEvt,
2106 if (simEvt.size()==0){
return;}
2111 vector< pair<double,unsigned int> > zrecv;
2112 for(
unsigned int idx=0;
idx<recVtxs->size();
idx++){
2113 if ( (recVtxs->at(
idx).ndof()<0) || (recVtxs->at(
idx).chi2()<=0) )
continue;
2114 zrecv.push_back( make_pair(recVtxs->at(
idx).z(),
idx) );
2116 stable_sort(zrecv.begin(),zrecv.end(),
lt);
2119 vector< pair<double,unsigned int> > zsimv;
2120 for(
unsigned int idx=0;
idx<simEvt.size();
idx++){
2121 zsimv.push_back(make_pair(simEvt[
idx].
z,
idx));
2123 stable_sort(zsimv.begin(), zsimv.end(),
lt);
2125 cout <<
"---------------------------" << endl;
2127 cout <<
"---------------------------" << endl;
2128 cout <<
" z[cm] rec --> ";
2130 for(vector< pair<double,unsigned int> >::iterator itrec=zrecv.begin(); itrec!=zrecv.end(); itrec++){
2131 cout << setw(7) << fixed << itrec->first;
2132 if (itrec->second==0){
cout <<
"*" ;}
else{
cout <<
" " ;}
2136 for(vector< pair<double,unsigned int> >::iterator itrec=zrecv.begin(); itrec!=zrecv.end(); itrec++){
2137 cout << setw(7) << fixed << recVtxs->at(itrec->second).tracksSize();
2138 if (itrec->second==0){
cout <<
"*" ;}
else{
cout <<
" " ;}
2140 cout <<
" rec tracks" << endl;
2142 map<unsigned int, int> truthMatchedVertexTracks;
2143 for(vector< pair<double,unsigned int> >::iterator itrec=zrecv.begin(); itrec!=zrecv.end(); itrec++){
2145 cout << setw(7) << fixed << truthMatchedVertexTracks[itrec->second];
2146 if (itrec->second==0){
cout <<
"*" ;}
else{
cout <<
" " ;}
2148 cout <<
" truth matched " << endl;
2150 cout <<
"sim ------- trk prim ----" << endl;
2152 map<unsigned int, unsigned int> rvmatch;
2153 map<unsigned int, double > nmatch;
2154 map<unsigned int, double > purity;
2155 map<unsigned int, double > wpurity;
2157 for(vector< pair<double,unsigned int> >::iterator itrec=zrecv.begin(); itrec!=zrecv.end(); itrec++){
2158 purity[itrec->second]=0.;
2159 wpurity[itrec->second]=0.;
2162 for(vector< pair<double,unsigned int> >::iterator itsim=zsimv.begin(); itsim!=zsimv.end(); itsim++){
2166 if (itsim->second==0){
2167 cout << setw(8) << fixed << ev->
z <<
")*" << setw(5) << ev->
tk.size() << setw(5) << ev->
tkprim.size() <<
" | ";
2169 cout << setw(8) << fixed << ev->
z <<
") " << setw(5) << ev->
tk.size() << setw(5) << ev->
tkprim.size() <<
" | ";
2172 nmatch[itsim->second]=0;
2173 double matchpurity=0,matchwpurity=0;
2175 for(vector< pair<double,unsigned int> >::iterator itrec=zrecv.begin(); itrec!=zrecv.end(); itrec++){
2180 for(vector<TransientTrack>::iterator te=ev->
tk.begin(); te!=ev->
tk.end(); te++){
2187 cout << setw(7) << int(n)<<
" ";
2189 if (n > nmatch[itsim->second]){
2190 nmatch[itsim->second]=
n;
2191 rvmatch[itsim->second]=itrec->second;
2192 matchpurity=n/truthMatchedVertexTracks[itrec->second];
2193 matchwpurity=wt/truthMatchedVertexTracks[itrec->second];
2196 if(n > purity[itrec->second]){
2197 purity[itrec->second]=
n;
2200 if(wt > wpurity[itrec->second]){
2201 wpurity[itrec->second]=wt;
2207 if (nmatch[itsim->second]>0 ){
2208 if(matchpurity>0.5){
2213 cout <<
" max eff. = " << setw(8) << nmatch[itsim->second]/ev->
tk.size() <<
" p=" << matchpurity <<
" w=" << matchwpurity << endl;
2215 if(ev->
tk.size()==0){
2216 cout <<
" invisible" << endl;
2217 }
else if (ev->
tk.size()==1){
2218 cout <<
"single track " << endl;
2220 cout <<
"lost " << endl;
2224 cout <<
"---------------------------" << endl;
2228 for(vector< pair<double,unsigned int> >::iterator itrec=zrecv.begin(); itrec!=zrecv.end(); itrec++){
2229 cout << setw(7) << fixed << purity[itrec->second]/truthMatchedVertexTracks[itrec->second];
2230 if (itrec->second==0){
cout <<
"*" ;}
else{
cout <<
" " ;}
2234 cout <<
"---------------------------" << endl;
2237 for(vector< pair<double,unsigned int> >::iterator itsim=zsimv.begin(); itsim!=zsimv.end(); itsim++){
2240 for(vector<TransientTrack>::iterator te=ev->
tk.begin(); te!=ev->
tk.end(); te++){
2245 for(vector< pair<double,unsigned int> >::iterator itrec=zrecv.begin(); itrec!=zrecv.end(); itrec++){
2250 if(RTe.
vz()==RTv.
vz()) {ivassign=itrec->second;}
2253 double tantheta=
tan((te->stateAtBeamLine().trackStateAtPCA()).momentum().theta());
2255 double dz2=
pow(RTe.
dzError(),2)+
pow(beamspot.BeamWidthX()/tantheta,2);
2257 if(ivassign==(
int)rvmatch[itsim->second]){
2258 Fill(h,
"correctlyassigned",RTe.
eta(),RTe.
pt());
2259 Fill(h,
"ptcat",RTe.
pt());
2264 Fill(h,
"misassigned",RTe.
eta(),RTe.
pt());
2265 Fill(h,
"ptmis",RTe.
pt());
2269 cout <<
"vertex " << setw(8) << fixed << ev->
z;
2272 cout <<
" track lost ";
2276 cout <<
" track misassigned " << setw(8) << fixed << recVtxs->at(ivassign).z();
2279 cout <<
" track z=" << setw(8) << fixed << RTe.
vz() <<
"+/-" << RTe.
dzError() <<
" pt=" << setw(8) << fixed<< RTe.
pt() <<
" eta=" << setw(8) << fixed << RTe.
eta()<<
" sel=" <<
theTrackFilter(*te);
2284 double zparent=tpr->parentVertex().
get()->position().z();
2285 if(zparent==ev->
z) {
2290 cout <<
" id=" << tpr->pdgId();
2299 cout <<
"---------------------------" << endl;
2307 vector<SimEvent> & simEvt,
2310 if(simEvt.size()==0)
return;
2316 Fill(h,
"npu0",simEvt.size());
2318 for(vector<SimEvent>::iterator
ev=simEvt.begin();
ev!=simEvt.end();
ev++){
2319 Fill(h,
"Tc",
ev->Tc,
ev==simEvt.begin());
2320 Fill(h,
"Chisq",
ev->chisq,
ev==simEvt.begin());
2321 if(
ev->chisq>0)
Fill(h,
"logChisq",
log(
ev->chisq),
ev==simEvt.begin());
2322 Fill(h,
"dzmax",
ev->dzmax,
ev==simEvt.begin());
2323 Fill(h,
"dztrim",
ev->dztrim,
ev==simEvt.begin());
2324 Fill(h,
"m4m2",
ev->m4m2,
ev==simEvt.begin());
2327 for(vector<SimEvent>::iterator ev2=
ev+1; ev2!=simEvt.end(); ev2++){
2328 vector<TransientTrack> xt;
2329 if((
ev->tkprimsel.size()>0)&&(ev2->tkprimsel.size()>0)&&(
ev->tkprimsel.size()+ev2->tkprimsel.size())>1){
2330 xt.insert (xt.end() ,
ev->tkprimsel.begin(),
ev->tkprimsel.end());
2331 xt.insert (xt.end() ,ev2->tkprimsel.begin(),ev2->tkprimsel.end());
2332 double xTc,xChsq,xDzmax,xDztrim,xm4m2;
2333 getTc(xt, xTc, xChsq, xDzmax, xDztrim,xm4m2);
2335 Fill(h,
"xTc",xTc,
ev==simEvt.begin());
2337 Fill(h,
"xChisq", xChsq,
ev==simEvt.begin());
2338 if(xChsq>0){
Fill(h,
"logxChisq",
log(xChsq),
ev==simEvt.begin());};
2339 Fill(h,
"xdzmax", xDzmax,
ev==simEvt.begin());
2340 Fill(h,
"xdztrim", xDztrim,
ev==simEvt.begin());
2341 Fill(h,
"xm4m2", xm4m2,
ev==simEvt.begin());
2350 for(reco::VertexCollection::const_iterator
v=recVtxs->begin();
2351 v!=recVtxs->end(); ++
v){
2352 if ( (
v->isFake()) || (
v->ndof()<0) || (
v->chi2()<=0) )
continue;
2357 for(vector<SimEvent>::iterator
ev=simEvt.begin();
ev!=simEvt.end();
ev++){
2358 ev->ntInRecVz.clear();
2361 for(reco::VertexCollection::const_iterator
v=recVtxs->begin();
2362 v!=recVtxs->end(); ++
v){
2364 for(vector<TransientTrack>::iterator te=
ev->tk.begin(); te!=
ev->tk.end(); te++){
2366 for(
trackit_t tv=
v->tracks_begin(); tv!=
v->tracks_end(); tv++){
2368 if(RTe.
vz()==RTv.
vz()) {n++; wt+=
v->trackWeight(*tv);}
2371 ev->ntInRecVz[
v->z()]=
n;
2372 if (n >
ev->nmatch){
ev->nmatch=
n;
ev->zmatch=
v->z();
ev->zmatch=
v->z(); }
2379 for(reco::VertexCollection::const_iterator
v=recVtxs->begin();
2380 v!=recVtxs->end(); ++
v){
2382 for(vector<SimEvent>::iterator
ev=simEvt.begin();
ev!=simEvt.end();
ev++){
2383 if ((
ev->nmatch>0)&&(
ev->zmatch==
v->z())){
2387 if(!matched && !
v->isFake()) {
2389 cout <<
" fake rec vertex at z=" <<
v->z() << endl;
2391 Fill(h,
"unmatchedVtxZ",
v->z());
2392 Fill(h,
"unmatchedVtxNdof",
v->ndof());
2396 Fill(h,
"unmatchedVtx",nfake);
2397 Fill(h,
"unmatchedVtxFrac",nfake/nrecvtxs);
2401 for(reco::VertexCollection::const_iterator
v=recVtxs->begin();
2402 v!=recVtxs->end(); ++
v){
2404 if ( (
v->ndof()<0) || (
v->chi2()<=0) )
continue;
2407 bool matchFound=
false;
2410 for(vector<SimEvent>::iterator
ev=simEvt.begin();
ev!=simEvt.end();
ev++){
2413 for(vector<TransientTrack>::iterator te=
ev->tk.begin(); te!=
ev->tk.end(); te++){
2416 for(
trackit_t tv=
v->tracks_begin(); tv!=
v->tracks_end(); tv++){
2418 if(RTe.
vz()==RTv.
vz()){ n++;}
2426 evmatch=
ev->eventId;
2435 if (matchFound && (nmatchany>0)){
2439 double purity =nmatch/nmatchany;
2440 Fill(h,
"recmatchPurity",purity);
2441 if(
v==recVtxs->begin()){
2442 Fill(h,
"recmatchPurityTag",purity, (
bool)(evmatch==iSignal));
2444 Fill(h,
"recmatchPuritynoTag",purity,(
bool)(evmatch==iSignal));
2447 Fill(h,
"recmatchvtxs",nmatchvtx);
2448 if(
v==recVtxs->begin()){
2449 Fill(h,
"recmatchvtxsTag",nmatchvtx);
2451 Fill(h,
"recmatchvtxsnoTag",nmatchvtx);
2455 Fill(h,
"nrecv",nrecvtxs);
2461 vector<int> used_indizesV;
2462 int lastEvent = 999;
2464 for(vector<SimEvent>::iterator
ev=simEvt.begin();
ev!=simEvt.end();
ev++){
2466 if(
ev->tk.size()>0) npu1++;
2467 if(
ev->tk.size()>1) npu2++;
2471 bool isSignal=
ev->eventId==iSignal;
2473 Fill(h,
"nRecTrkInSimVtx",(
double)
ev->tk.size(),isSignal);
2474 Fill(h,
"nPrimRecTrkInSimVtx",(
double)
ev->tkprim.size(),isSignal);
2475 Fill(h,
"sumpt2rec",
sqrt(
ev->sumpt2rec),isSignal);
2479 double nRecVWithTrk=0;
2480 double nmatch=0, ntmatch=0, zmatch=-99;
2482 for(reco::VertexCollection::const_iterator
v=recVtxs->begin();
2483 v!=recVtxs->end(); ++
v){
2484 if ( (
v->ndof()<-1) || (
v->chi2()<=0) )
continue;
2487 for(vector<TransientTrack>::iterator te=
ev->tk.begin(); te!=
ev->tk.end(); te++){
2489 for(
trackit_t tv=
v->tracks_begin(); tv!=
v->tracks_end(); tv++){
2491 if(RTe.
vz()==RTv.
vz()) {n++; wt+=
v->trackWeight(*tv);}
2495 if(n>0){ nRecVWithTrk++; }
2497 nmatch=
n; ntmatch=
v->tracksSize(); zmatch=
v->position().z();
2503 if(
ev->tk.size()>0){
Fill(h,
"trkAssignmentEfficiency", nmatch/
ev->tk.size(), isSignal); };
2504 if(
ev->tkprim.size()>0){
Fill(h,
"primtrkAssignmentEfficiency", nmatch/
ev->tkprim.size(), isSignal); };
2508 double ntsim=
ev->tk.size();
2509 double matchpurity=nmatch/ntmatch;
2513 Fill(h,
"matchVtxFraction",nmatch/ntsim,isSignal);
2514 if(nmatch/ntsim>=0.5){
2515 Fill(h,
"matchVtxEfficiency",1.,isSignal);
2516 if(ntsim>1){
Fill(h,
"matchVtxEfficiency2",1.,isSignal);}
2517 if(matchpurity>0.5){
Fill(h,
"matchVtxEfficiency5",1.,isSignal);}
2519 Fill(h,
"matchVtxEfficiency",0.,isSignal);
2520 if(ntsim>1){
Fill(h,
"matchVtxEfficiency2",0.,isSignal);}
2521 Fill(h,
"matchVtxEfficiency5",0.,isSignal);
2523 cout <<
"Signal vertex not matched " << message <<
" event=" <<
eventcounter_ <<
" nmatch=" << nmatch <<
" ntsim=" << ntsim << endl;
2529 Fill(h,
"matchVtxZ",zmatch-
ev->z);
2530 Fill(h,
"matchVtxZ",zmatch-
ev->z,isSignal);
2531 Fill(h,
"matchVtxZCum",fabs(zmatch-
ev->z));
2532 Fill(h,
"matchVtxZCum",fabs(zmatch-
ev->z),isSignal);
2535 Fill(h,
"matchVtxZCum",1.0);
2536 Fill(h,
"matchVtxZCum",1.0,isSignal);
2540 Fill(h,
"matchVtxEfficiencyZ",1.,isSignal);
2542 Fill(h,
"matchVtxEfficiencyZ",0.,isSignal);
2545 if(ntsim>0)
Fill(h,
"matchVtxEfficiencyZ1", fabs(zmatch-
ev->z)<
zmatch_ , isSignal);
2546 if(ntsim>1)
Fill(h,
"matchVtxEfficiencyZ2", fabs(zmatch-
ev->z)<
zmatch_ , isSignal);
2549 Fill(h,
"vtxMultiplicity",nRecVWithTrk,isSignal);
2553 Fill(h,
"vtxFindingEfficiencyVsNtrk",(
double)
ev->tk.size(),1.);
2555 Fill(h,
"vtxFindingEfficiencyVsNtrkSignal",
ev->tk.size(),1.);
2557 Fill(h,
"vtxFindingEfficiencyVsNtrkPU",(
double)
ev->tk.size(),1.);
2561 Fill(h,
"vtxFindingEfficiencyVsNtrk",(
double)
ev->tk.size(),0.);
2563 Fill(h,
"vtxFindingEfficiencyVsNtrkSignal",(
double)
ev->tk.size(),1.);
2565 Fill(h,
"vtxFindingEfficiencyVsNtrkPU",(
double)
ev->tk.size(),1.);
2571 if (
ev->eventId.event()==lastEvent )
continue;
2572 lastEvent =
ev->eventId.event();
2574 if ( ( fabs(
ev->z)>24. ) || (
ev->eventId.bunchCrossing()!=0 ) )
continue;
2577 int best_match = 999;
2579 for (
unsigned rv_idx=0; rv_idx<recVtxs->size(); rv_idx++ ) {
2585 for ( vector<TrackBaseRef>::const_iterator rv_trk_ite=vtx_ref->tracks_begin(); rv_trk_ite!=vtx_ref->tracks_end(); rv_trk_ite++ ) {
2587 vector<pair<TrackingParticleRef, double> > tp;
2588 if ( rsC.
find(*rv_trk_ite)!=rsC.
end() ) tp = rsC[*rv_trk_ite];
2590 for (
unsigned matched_tp_idx=0; matched_tp_idx<tp.size(); matched_tp_idx++ ) {
2595 if ( ( tp_ev.
bunchCrossing()==
ev->eventId.bunchCrossing() ) && ( tp_ev.
event()==
ev->eventId.event() ) ) {
2605 if ( match > max_match ) {
2608 best_match = rv_idx;
2618 bool dsflag =
false;
2620 for (
unsigned i=0;
i<used_indizesV.size();
i++) {
2621 if ( used_indizesV.at(
i)==best_match ) {
2627 if ( best_match!=999 ) eff = 1.;
2628 if ( dsflag ) dsimed = 1.;
2629 if ( ( best_match!=999 ) && ( !dsflag ) ) effwod = 1.;
2631 if ( best_match!=999 ) {
2632 used_indizesV.push_back(best_match);
2635 Fill(h,
"tveffvszsep", sep, eff);
2636 Fill(h,
"tveffwodvszsep", sep, effwod);
2637 Fill(h,
"tvmergedvszsep", sep, dsimed);
2642 Fill(h,
"npu1",npu1);
2643 Fill(h,
"npu2",npu2);
2645 Fill(h,
"nrecvsnpu",npu1,
float(nrecvtxs));
2646 Fill(h,
"nrecvsnpu2",npu2,
float(nrecvtxs));
2653 for(vector<TransientTrack>::iterator te=ev->
tk.begin(); te!=ev->
tk.end(); te++){
2657 if(RTe.
vz()==RTv.
vz()) {n++;}
2661 cout <<
"Number of tracks in reco tagvtx " << v->
tracksSize() << endl;
2662 cout <<
"Number of selected tracks in sim event vtx " << ev->
tk.size() <<
" (prim=" << ev->
tkprim.size() <<
")"<<endl;
2663 cout <<
"Number of tracks in both " << n << endl;
2665 if (ntruthmatched>0){
2666 cout <<
"TrackPurity = "<< n/ntruthmatched <<endl;
2667 Fill(h,
"TagVtxTrkPurity",n/ntruthmatched);
2669 if (ev->
tk.size()>0){
2670 cout <<
"TrackEfficiency = "<< n/ev->
tk.size() <<endl;
2671 Fill(h,
"TagVtxTrkEfficiency",n/ev->
tk.size());
2680 std::vector<simPrimaryVertex> & simpv,
2681 const std::vector<float> & pui_z,
2684 int nrectrks=recTrks->size();
2685 int nrecvtxs=recVtxs->size();
2695 for(reco::VertexCollection::const_iterator
v=recVtxs->begin();
2696 v!=recVtxs->end(); ++
v){
2697 if ( (fabs(
v->ndof()+3.)<0.0001) && (
v->chi2()<=0) ){
2704 }
else if( (fabs(
v->ndof()+2.)<0.0001) && (
v->chi2()==0) ){
2706 clusters.push_back(*
v);
2707 Fill(h,
"cpuvsntrk",(
double)
v->tracksSize(),fabs(
v->y()));
2708 cpufit+=fabs(
v->y());
2709 Fill(h,
"nclutrkall",(
double)
v->tracksSize());
2710 Fill(h,
"selstat",
v->x());
2714 Fill(h,
"cpuclu",cpuclu);
2715 Fill(h,
"cpufit",cpufit);
2716 Fill(h,
"cpucluvsntrk",nrectrks, cpuclu);
2725 for(std::vector<simPrimaryVertex>::iterator vsim=simpv.begin();
2726 vsim!=simpv.end(); vsim++){
2728 nsimtrk+=vsim->nGenTrk;
2733 for(reco::VertexCollection::const_iterator vrec=recVtxs->begin(); vrec!=recVtxs->end(); ++vrec){
2735 if( vrec->isFake() ) {
2737 cout <<
"fake vertex" << endl;
2740 if( vrec->ndof()<0. )
continue;
2744 if( ((vsim->recVtx) && (fabs(vsim->recVtx->position().z()-vsim->z-dsimrecz)>fabs(vrec->z()-vsim->z-dsimrecz)))
2745 || (!vsim->recVtx) )
2747 vsim->recVtx=&(*vrec);
2750 for(
unsigned int iclu=0; iclu<clusters.size(); iclu++){
2751 if( fabs(clusters[iclu].
position().
z()-vrec->position().z()) < 0.001 ){
2753 vsim->nclutrk=clusters[iclu].position().y();
2759 if ((simpv.size()==1) && ( fabs(vsim->recVtx->position().z()-vsim->z-dsimrecz)>
zmatch_ )){
2763 Fill(h,
"fakeVtxZ",vrec->z());
2764 if (vrec->ndof()>=0.5)
Fill(h,
"fakeVtxZNdofgt05",vrec->z());
2765 if (vrec->ndof()>=2.0)
Fill(h,
"fakeVtxZNdofgt2",vrec->z());
2766 Fill(h,
"fakeVtxNdof",vrec->ndof());
2767 Fill(h,
"fakeVtxNtrk",vrec->tracksSize());
2768 if(vrec->tracksSize()==2){
Fill(h,
"fake2trkchi2vsndof",vrec->ndof(),vrec->chi2()); }
2769 if(vrec->tracksSize()==3){
Fill(h,
"fake3trkchi2vsndof",vrec->ndof(),vrec->chi2()); }
2770 if(vrec->tracksSize()==4){
Fill(h,
"fake4trkchi2vsndof",vrec->ndof(),vrec->chi2()); }
2771 if(vrec->tracksSize()==5){
Fill(h,
"fake5trkchi2vsndof",vrec->ndof(),vrec->chi2()); }
2775 Fill(h,
"nsimtrk",
float(nsimtrk));
2776 Fill(h,
"nsimtrk",
float(nsimtrk),vsim==simpv.begin());
2777 Fill(h,
"nrecsimtrk",
float(vsim->nMatchedTracks));
2778 Fill(h,
"nrecnosimtrk",
float(nsimtrk-vsim->nMatchedTracks));
2781 if (vsim->recVtx && ( fabs(vsim->recVtx->z()-vsim->z*
simUnit_)<
zmatch_ )){
2783 if(
verbose_){
std::cout <<
"primary matched " << message <<
" " << setw(8) << setprecision(4) << vsim->x <<
" " << vsim->y <<
" " << vsim->z << std:: endl;}
2784 Fill(h,
"matchedVtxNdof", vsim->recVtx->ndof());
2790 Fill(h,
"pullx", (vsim->recVtx->x()-vsim->x*
simUnit_)/vsim->recVtx->xError() );
2791 Fill(h,
"pully", (vsim->recVtx->y()-vsim->y*
simUnit_)/vsim->recVtx->yError() );
2792 Fill(h,
"pullz", (vsim->recVtx->z()-vsim->z*
simUnit_)/vsim->recVtx->zError() );
2793 Fill(h,
"resxr", vsim->recVtx->x()-vsim->x*
simUnit_-dsimrecx);
2794 Fill(h,
"resyr", vsim->recVtx->y()-vsim->y*
simUnit_-dsimrecy );
2795 Fill(h,
"reszr", vsim->recVtx->z()-vsim->z*
simUnit_-dsimrecz);
2796 Fill(h,
"pullxr", (vsim->recVtx->x()-vsim->x*
simUnit_-dsimrecx)/vsim->recVtx->xError() );
2797 Fill(h,
"pullyr", (vsim->recVtx->y()-vsim->y*
simUnit_-dsimrecy)/vsim->recVtx->yError() );
2798 Fill(h,
"pullzr", (vsim->recVtx->z()-vsim->z*
simUnit_-dsimrecz)/vsim->recVtx->zError() );
2802 if(simpv.size()==1){
2803 if (vsim->recVtx==&(*recVtxs->begin())){
2804 Fill(h,
"efftag", 1.);
2806 Fill(h,
"efftag", 0.);
2812 Fill(h,
"effvsptsq",vsim->ptsq,1.);
2813 Fill(h,
"effvsnsimtrk",vsim->nGenTrk,1.);
2814 Fill(h,
"effvsnrectrk",nrectrks,1.);
2815 Fill(h,
"effvsnseltrk",nseltrks,1.);
2822 bool plapper=
verbose_ && vsim->nGenTrk;
2830 std::cout <<
"nearest recvertex at " << vsim->recVtx->z() <<
" dz=" << vsim->recVtx->z()-vsim->z*
simUnit_ << std::endl;
2833 if (fabs(vsim->recVtx->z()-vsim->z*
simUnit_)<0.2 ){
2837 if (fabs(vsim->recVtx->z()-vsim->z*
simUnit_)<0.5 ){
2842 if(plapper){
std::cout <<
"type 2a no vertex anywhere near" << std::endl;}
2847 if(plapper){
std::cout <<
"type 2b, no vertex at all" << std::endl;}
2853 for(
unsigned int iclu=0; iclu<clusters.size(); iclu++){
2855 selstat=int(clusters[iclu].
position().
x()+0.1);
2856 if(
verbose_){
std::cout <<
"matching cluster found with selstat=" << clusters[iclu].position().x() << std::endl;}
2860 if(plapper){
std::cout <<
"vertex rejected (distance to beam)" << std::endl;}
2862 }
else if(selstat==-1){
2863 if(plapper) {
std::cout <<
"vertex invalid" << std::endl;}
2865 }
else if(selstat==1){
2866 if(plapper){
std::cout <<
"vertex accepted, this cannot be right!!!!!!!!!!" << std::endl;}
2867 }
else if(selstat==-2){
2868 if(plapper){
std::cout <<
"dont know what this means !!!!!!!!!!" << std::endl;}
2869 }
else if(selstat==-3){
2870 if(plapper){
std::cout <<
"no matching cluster found " << std::endl;}
2873 if(plapper){
std::cout <<
"dont know what this means either !!!!!!!!!!" << selstat << std::endl;}
2879 if(simpv.size()==1){
Fill(h,
"efftag", 0.); }
2881 Fill(h,
"effvsptsq",vsim->ptsq,0.);
2882 Fill(h,
"effvsnsimtrk",
float(vsim->nGenTrk),0.);
2883 Fill(h,
"effvsnrectrk",nrectrks,0.);
2884 Fill(h,
"effvsnseltrk",nseltrks,0.);
2895 if (recVtxs->size()>0){
2896 Double_t dz=(*recVtxs->begin()).
z() - (*simpv.begin()).
z*
simUnit_;
2897 Fill(h,
"zdistancetag",dz);
2898 Fill(h,
"abszdistancetag",fabs(dz));
2900 Fill(h,
"puritytag",1.);
2903 Fill(h,
"puritytag",0.);
2922 for(reco::TrackCollection::const_iterator
t=recTrks->begin();
2923 t!=recTrks->end(); ++
t){
2924 if((recVtxs->size()>0) && (recVtxs->begin()->
isValid())){
2933 selTrks.push_back(*
t);
2937 for(reco::VertexCollection::const_iterator
v=recVtxs->begin();
2938 v!=recVtxs->end(); ++
v){
2940 if((
v->isFake()) || (
v->ndof()<-2) )
break;
2941 for(
trackit_t tv=
v->tracks_begin(); tv!=
v->tracks_end(); tv++ ){
2942 if( ((**tv).vz()==
t->vz()&&((**tv).phi()==
t->phi())) ) {
2949 }
else if(foundinvtx>1){
2950 cout <<
"hmmmm " << foundinvtx << endl;
2958 nseltrks=selTrks.size();
2959 }
else if( ! (nseltrks==(
int)selTrks.size()) ){
2960 std::cout <<
"Warning: inconsistent track selection !" << std::endl;
2964 int nrec=0, nrec0=0, nrec8=0, nrec2=0, nrec4=0;
2965 for(reco::VertexCollection::const_iterator
v=recVtxs->begin();
2966 v!=recVtxs->end(); ++
v){
2968 if (! (
v->isFake()) &&
v->ndof()>0 &&
v->chi2()>0 ){
2970 if (
v->ndof()>0) nrec0++;
2971 if (
v->ndof()>8) nrec8++;
2972 if (
v->ndof()>2) nrec2++;
2973 if (
v->ndof()>4) nrec4++;
2975 if(
v==recVtxs->begin()){
2981 Float_t wt=
v->trackWeight(*
t);
2983 Fill(h,
"trackWt",wt);
2996 for(
unsigned int iclu=0; iclu<clusters.size(); iclu++){
2997 if (clusters[iclu].tracksSize()==1){
2998 for(
trackit_t t = clusters[iclu].tracks_begin();
2999 t!=clusters[iclu].tracks_end();
t++){
3009 Fill(h,
"szRecVtx",recVtxs->size());
3010 Fill(h,
"nclu",clusters.size());
3011 Fill(h,
"nseltrk",nseltrks);
3012 Fill(h,
"nrectrk",nrectrks);
3013 Fill(h,
"nrecvtx",nrec);
3014 Fill(h,
"nrecvtx2",nrec2);
3015 Fill(h,
"nrecvtx4",nrec4);
3016 Fill(h,
"nrecvtx8",nrec8);
3019 Fill(h,
"eff0vsntrec",nrectrks,1.);
3020 Fill(h,
"eff0vsntsel",nseltrks,1.);
3022 Fill(h,
"eff0vsntrec",nrectrks,0.);
3023 Fill(h,
"eff0vsntsel",nseltrks,0.);
3025 cout << Form(
"PrimaryVertexAnalyzer4PU: %s may have lost a vertex %10d %14llu %4d / %4d ",message.c_str(),
run_,
event_, nrectrks,nseltrks) << endl;
3029 if(nrec0>0) {
Fill(h,
"eff0ndof0vsntsel",nseltrks,1.);}
else{
Fill(h,
"eff0ndof0vsntsel",nseltrks,0.);}
3030 if(nrec2>0) {
Fill(h,
"eff0ndof2vsntsel",nseltrks,1.);}
else{
Fill(h,
"eff0ndof2vsntsel",nseltrks,0.);}
3031 if(nrec4>0) {
Fill(h,
"eff0ndof4vsntsel",nseltrks,1.);}
else{
Fill(h,
"eff0ndof4vsntsel",nseltrks,0.);}
3032 if(nrec8>0) {
Fill(h,
"eff0ndof8vsntsel",nseltrks,1.);}
else{
Fill(h,
"eff0ndof8vsntsel",nseltrks,0.);}
3035 cout <<
"multivertex event" << endl;
3039 if((nrectrks>10)&&(nseltrks<3)){
3040 cout <<
"small fraction of selected tracks " << endl;
3045 if((nrec==0)||(recVtxs->begin()->isFake())){
3046 Fill(h,
"nrectrk0vtx",nrectrks);
3047 Fill(h,
"nseltrk0vtx",nseltrks);
3048 Fill(h,
"nclu0vtx",clusters.size());
3053 double ndof2=-10,ndof1=-10, zndof1=0, zndof2=0;
3054 for(reco::VertexCollection::const_iterator
v=recVtxs->begin();
3055 v!=recVtxs->end(); ++
v){
3056 if(
v->isFake()){
Fill(h,
"isFake",1.);}
else{
Fill(h,
"isFake",0.);}
3057 if(
v->isFake()||((
v->ndof()<0)&&(
v->ndof()>-3))){
Fill(h,
"isFake1",1.);}
else{
Fill(h,
"isFake1",0.);}
3059 if((
v->isFake())||(
v->ndof()<0))
continue;
3060 if(
v->ndof()>ndof1){ ndof2=ndof1; zndof2=zndof1; ndof1=
v->ndof(); zndof1=
v->position().z();}
3061 else if(
v->ndof()>ndof2){ ndof2=
v->ndof(); zndof2=
v->position().z();}
3065 if(
v->tracksSize()==2){
3069 double dphi=t1->
phi()-t2->
phi();
if (dphi<0) dphi+=2*
M_PI;
3077 Fill(h,
"2trkmassOS",m12);
3080 Fill(h,
"2trkmassSS",m12);
3082 Fill(h,
"2trkdphi",dphi);
3084 if(fabs(dphi-
M_PI)<0.1)
Fill(h,
"2trksetacurl",t1->
eta()+t2->
eta());
3085 if(fabs(t1->
eta()+t2->
eta())<0.1)
Fill(h,
"2trkdphicurl",dphi);
3087 if(
v!=recVtxs->begin()){
3090 Fill(h,
"2trkmassOSPU",m12);
3093 Fill(h,
"2trkmassSSPU",m12);
3095 Fill(h,
"2trkdphiPU",dphi);
3097 if(fabs(dphi-
M_PI)<0.1)
Fill(h,
"2trksetacurlPU",t1->
eta()+t2->
eta());
3098 if(fabs(t1->
eta()+t2->
eta())<0.1)
Fill(h,
"2trkdphicurlPU",dphi);
3103 Fill(h,
"trkchi2vsndof",
v->ndof(),
v->chi2());
3104 if(
v->ndof()>0){
Fill(h,
"trkchi2overndof",
v->chi2()/
v->ndof()); }
3105 if(
v->tracksSize()==2){
Fill(h,
"2trkchi2vsndof",
v->ndof(),
v->chi2()); }
3106 if(
v->tracksSize()==3){
Fill(h,
"3trkchi2vsndof",
v->ndof(),
v->chi2()); }
3107 if(
v->tracksSize()==4){
Fill(h,
"4trkchi2vsndof",
v->ndof(),
v->chi2()); }
3108 if(
v->tracksSize()==5){
Fill(h,
"5trkchi2vsndof",
v->ndof(),
v->chi2()); }
3110 Fill(h,
"nbtksinvtx",
v->tracksSize());
3111 Fill(h,
"nbtksinvtx2",
v->tracksSize());
3112 Fill(h,
"vtxchi2",
v->chi2());
3113 Fill(h,
"vtxndf",
v->ndof());
3115 Fill(h,
"vtxndfvsntk",
v->tracksSize(),
v->ndof());
3116 Fill(h,
"vtxndfoverntk",
v->ndof()/
v->tracksSize());
3117 Fill(h,
"vtxndf2overntk",(
v->ndof()+2)/
v->tracksSize());
3118 Fill(h,
"zrecvsnt",
v->position().z(),float(nrectrks));
3120 Fill(h,
"zrecNt100",
v->position().z());
3124 Fill(h,
"xrec",
v->position().x());
3125 Fill(h,
"yrec",
v->position().y());
3126 Fill(h,
"zrec",
v->position().z());
3127 Fill(h,
"xrec1",
v->position().x());
3128 Fill(h,
"yrec1",
v->position().y());
3129 Fill(h,
"zrec1",
v->position().z());
3130 Fill(h,
"xrec2",
v->position().x());
3131 Fill(h,
"yrec2",
v->position().y());
3132 Fill(h,
"zrec2",
v->position().z());
3133 Fill(h,
"xrec3",
v->position().x());
3134 Fill(h,
"yrec3",
v->position().y());
3135 Fill(h,
"zrec3",
v->position().z());
3161 Fill(h,
"errx",
v->xError());
3162 Fill(h,
"erry",
v->yError());
3163 Fill(h,
"errz",
v->zError());
3164 double vxx=
v->covariance(0,0);
3165 double vyy=
v->covariance(1,1);
3166 double vxy=
v->covariance(1,0);
3167 double dv=0.25*(vxx+vyy)*(vxx+vyy-(vxx*vyy-vxy*vxy));
3169 double l1=0.5*(vxx+vyy)+
sqrt(dv);
3171 double l2=
sqrt(0.5*(vxx+vyy)-
sqrt(dv));
3177 if (
v==recVtxs->begin()){
3178 Fill(h,
"nbtksinvtxTag",
v->tracksSize());
3179 Fill(h,
"nbtksinvtxTag2",
v->tracksSize());
3180 Fill(h,
"xrectag",
v->position().x());
3181 Fill(h,
"yrectag",
v->position().y());
3182 Fill(h,
"zrectag",
v->position().z());
3184 Fill(h,
"nbtksinvtxPU",
v->tracksSize());
3185 Fill(h,
"nbtksinvtxPU2",
v->tracksSize());
3189 Fill(h,
"xresvsntrk",
v->tracksSize(),
v->xError());
3190 Fill(h,
"yresvsntrk",
v->tracksSize(),
v->yError());
3191 Fill(h,
"zresvsntrk",
v->tracksSize(),
v->zError());
3196 for(
unsigned int iclu=0; iclu<clusters.size(); iclu++){
3197 if( fabs(clusters[iclu].
position().
z()-
v->position().z()) < 0.0001 ){
3198 Fill(h,
"nclutrkvtx",clusters[iclu].tracksSize());
3203 reco::VertexCollection::const_iterator v1=
v; v1++;
3204 for(; v1!=recVtxs->end(); ++v1){
3205 if((v1->isFake())||(v1->ndof()<0))
continue;
3206 Fill(h,
"zdiffrec",
v->position().z()-v1->position().z());
3210 Fill(h,
"zPUcand",z0);
Fill(h,
"zPUcand",z1);
3211 Fill(h,
"ndofPUcand",
v->ndof());
Fill(h,
"ndofPUcand",v1->ndof());
3213 Fill(h,
"zdiffvsz",z1-z0,0.5*(z1+z0));
3215 if ((
v->ndof()>2) && (v1->ndof()>2)){
3216 Fill(h,
"zdiffrec2",
v->position().z()-v1->position().z());
3217 Fill(h,
"zPUcand2",z0);
3218 Fill(h,
"zPUcand2",z1);
3219 Fill(h,
"ndofPUcand2",
v->ndof());
3220 Fill(h,
"ndofPUcand2",v1->ndof());
3221 Fill(h,
"zvszrec2",z0, z1);
3222 Fill(h,
"pzvspz2",TMath::Freq(z0/2.16),TMath::Freq(z1/2.16) );
3225 if ((
v->ndof()>4) && (v1->ndof()>4)){
3226 Fill(h,
"zdiffvsz4",z1-z0,0.5*(z1+z0));
3227 Fill(h,
"zdiffrec4",
v->position().z()-v1->position().z());
3228 Fill(h,
"zvszrec4",z0, z1);
3229 Fill(h,
"pzvspz4",TMath::Freq(z0/2.16),TMath::Freq(z1/2.16) );
3230 if(fabs(z0-z1)>1.0){
3235 Fill(h,
"ndofOverNtkPUcand",
v->ndof()/
v->tracksSize());
3236 Fill(h,
"ndofOverNtkPUcand",v1->ndof()/v1->tracksSize());
3241 Fill(h,
"zPUcand4",z0);
3242 Fill(h,
"zPUcand4",z1);
3243 Fill(h,
"ndofPUcand4",
v->ndof());
3244 Fill(h,
"ndofPUcand4",v1->ndof());
3250 if ((
v->ndof()>4) && (v1->ndof()>2) && (v1->ndof()<4)){
3254 if ((
v->ndof()>8) && (v1->ndof()>8)){
3255 Fill(h,
"zdiffrec8",
v->position().z()-v1->position().z());
3257 cout <<
"PU candidate " <<
run_ <<
" " <<
event_ <<
" " << message <<
" zdiff=" <<z0-z1 << endl;
3265 bool problem =
false;
3271 for (
int i = 0;
i != 3;
i++) {
3272 for (
int j =
i;
j != 3;
j++) {
3277 if (
j ==
i &&
v->covariance(
i,
j) < 0) {
3278 Fill(h,
"nans",index*1., 1.);
3286 t!=
v->tracks_end();
t++) {
3288 if ( (**t).charge() < -1 || (**t).charge() > 1 ) {
3289 Fill(h,
"tklinks",0.);
3292 Fill(h,
"tklinks",1.);
3297 Fill(h,
"tklinks",0.);
3306 t!=
v->tracks_end();
t++) {
3307 std::cout <<
"Track " << itk++ << std::endl;
3309 for (
int i = 0;
i != 5;
i++) {
3310 for (
int j = 0;
j != 5;
j++) {
3311 data[i2] = (**t).covariance(
i,
j);
3312 std::cout << std:: scientific << data[i2] <<
" ";
3318 = gsl_matrix_view_array (data, 5, 5);
3320 gsl_vector *eval = gsl_vector_alloc (5);
3321 gsl_matrix *evec = gsl_matrix_alloc (5, 5);
3323 gsl_eigen_symmv_workspace *
w =
3324 gsl_eigen_symmv_alloc (5);
3326 gsl_eigen_symmv (&m.matrix, eval, evec, w);
3328 gsl_eigen_symmv_free (w);
3330 gsl_eigen_symmv_sort (eval, evec,
3331 GSL_EIGEN_SORT_ABS_ASC);
3336 for (i = 0; i < 5; i++) {
3338 = gsl_vector_get (eval, i);
3342 printf (
"eigenvalue = %g\n", eval_i);
3360 Fill(h,
"ndofnr2",ndof2);
3361 if(fabs(zndof1-zndof2)>1)
Fill(h,
"ndofnr2d1cm",ndof2);
3362 if(fabs(zndof1-zndof2)>2)
Fill(h,
"ndofnr2d2cm",ndof2);
3367 if ( pui_z.size()>0 ) {
3369 vector<int> used_indizesV;
3371 for (
unsigned spv_idx=0; spv_idx<pui_z.size(); spv_idx++) {
3373 float sv = pui_z[spv_idx];
3375 if ( fabs(sv)>24. )
continue;
3383 unsigned numMatchs = matchedV->size();
3385 bool dsflag =
false;
3387 for (
unsigned i=0;
i<used_indizesV.size();
i++) {
3388 for (
unsigned j=0;
j<numMatchs;
j++) {
3389 if ( used_indizesV.at(
i)==matchedV->at(
j) ) {
3396 if ( numMatchs>0 ) eff = 1.;
3397 if ( numMatchs>1 ) dreco = 1.;
3398 if ( dsflag ) dsimed = 1.;
3399 if ( ( numMatchs>0 ) && ( !dsflag ) ) effwod = 1.;
3401 for (
unsigned i=0;
i<numMatchs;
i++) {
3402 used_indizesV.push_back(matchedV->at(
i));
3407 Fill(h,
"effvszsep", sep, eff);
3408 Fill(h,
"effwodvszsep", sep, effwod);
3409 Fill(h,
"mergedvszsep", sep, dsimed);
3410 Fill(h,
"splitvszsep", sep, dreco);
3415 std::cout <<
"Strange PileUpSummaryInfo in the event" << std::endl;
math::XYZPoint myBeamSpot
~PrimaryVertexAnalyzer4PU()
virtual char const * what() const
edm::EDGetTokenT< reco::TrackCollection > recoTrackCollectionToken_
double p() const
momentum vector magnitude
TrackFilterForPVFinding theTrackFilter
value_type const * get() const
EventNumber_t event() const
double z0() const
z coordinate
edm::EDGetTokenT< reco::BeamSpot > recoBeamSpotToken_
double d0Error() const
error on d0
edm::EDGetTokenT< edm::SimTrackContainer > edmSimTrackContainerToken_
bool matchVertex(const simPrimaryVertex &vsim, const reco::Vertex &vrec)
std::vector< SimPart > getSimTrkParameters(edm::Handle< edm::SimTrackContainer > &simTrks, edm::Handle< edm::SimVertexContainer > &simVtcs, double simUnit=1.0)
bool isNonnull() const
Checks for non-null.
int event() const
get the contents of the subdetector field (should be protected?)
unsigned short lost() const
Number of lost (=invalid) hits on track.
Measurement1D transverseImpactParameter() const
std::vector< PrimaryVertexAnalyzer4PU::SimEvent > getSimEvents(edm::Handle< TrackingParticleCollection >, edm::Handle< TrackingVertexCollection >, edm::Handle< edm::View< reco::Track > >)
ROOT::Math::LorentzVector< ROOT::Math::PxPyPzE4D< double > > XYZTLorentzVectorD
Lorentz vector with cylindrical internal representation using pseudorapidity.
void fillTrackHistos(std::map< std::string, TH1 * > &h, const std::string &ttype, const reco::Track &t, const reco::Vertex *v=NULL)
std::vector< TrackingParticle > TrackingParticleCollection
trackRef_iterator tracks_end() const
last iterator over tracks
const_iterator end() const
last iterator over the map (read only)
void setBeamSpot(const reco::BeamSpot &beamSpot)
double normalizedChi2() const
chi-squared divided by n.d.o.f. (or chi-squared * 1e6 if n.d.o.f. is zero)
reco::TrackBase::ParameterVector ParameterVector
bool getByToken(EDGetToken token, Handle< PROD > &result) const
std::map< std::string, TH1 * > hsimPV
std::vector< SimVertex >::const_iterator g4v_iterator
edm::Handle< reco::BeamSpot > recoBeamSpotHandle_
std::vector< reco::TransientTrack > tk
double theta() const
polar angle
double dxyError() const
error on dxy
std::vector< int > supf(std::vector< SimPart > &simtrks, const reco::TrackCollection &trks)
Sin< T >::type sin(const T &t)
const_iterator find(const key_type &k) const
find element with specified reference key
edm::EDGetTokenT< reco::VertexCollection > recoVertexCollectionToken_
Global3DPoint GlobalPoint
std::vector< Track > TrackCollection
collection of Tracks
Geom::Theta< T > theta() const
int bunchCrossing() const
edm::LuminosityBlockNumber_t luminosityBlock() const
static bool match(const ParameterVector &a, const ParameterVector &b)
edm::ESHandle< TransientTrackBuilder > theB_
edm::EDGetTokenT< TrackingParticleCollection > trackingParticleCollectionToken_
double phi() const
azimuthal angle of momentum vector
std::vector< Vertex > VertexCollection
collection of Vertex objects
math::Vector< dimension >::type ParameterVector
parameter vector
double px() const
x coordinate of momentum vector
int pixelLayersWithMeasurement() const
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
edm::EDGetTokenT< TrackingVertexCollection > trackingVertexCollectionToken_
edm::EDGetTokenT< edm::HepMCProduct > edmHepMCProductToken_
void analyzeVertexCollection(std::map< std::string, TH1 * > &h, const edm::Handle< reco::VertexCollection > recVtxs, const edm::Handle< reco::TrackCollection > recTrks, std::vector< simPrimaryVertex > &simpv, const std::vector< float > &pui_z, const std::string message="")
void printRecVtxs(const edm::Handle< reco::VertexCollection > recVtxs, std::string title="Reconstructed Vertices")
int trackerLayersWithMeasurement() const
reco::BeamSpot vertexBeamSpot_
const Point & position() const
position
bool alreadyPrinted() const
TrajectoryStateClosestToBeamLine stateAtBeamLine() const
void getData(T &iHolder) const
std::map< std::string, TH1 * > hnoBS
edm::LuminosityBlockNumber_t luminosityBlock_
const math::XYZPoint & innerPosition() const
position of the innermost hit
TrackAlgorithm algo() const
void Fill(std::map< std::string, TH1 * > &h, std::string s, double x)
std::map< std::string, TH1 * > hDA
double getTrueSeparation(float, const std::vector< float > &)
bool isFinalstateParticle(const HepMC::GenParticle *p)
bool isCharged(const HepMC::GenParticle *p)
double eta() const
pseudorapidity of momentum vector
const std::vector< float > & getPU_zpositions() const
bool truthMatchedTrack(edm::RefToBase< reco::Track >, TrackingParticleRef &)
float trackWeight(const TrackBaseRef &r) const
returns the weight with which a Track has contributed to the vertex-fit.
int bunchCrossing() const
get the detector field from this detid
GlobalPoint position() const
std::map< std::string, TH1 * > bookVertexHistograms()
double pt() const
track transverse momentum
void printPVTrks(const edm::Handle< reco::TrackCollection > &recTrks, const edm::Handle< reco::VertexCollection > &recVtxs, std::vector< SimPart > &tsim, std::vector< SimEvent > &simEvt, const bool selectedOnly=true)
Cos< T >::type cos(const T &t)
std::vector< int > matchedRecTrackIndex
virtual CachingVertex< 5 > vertex(const std::vector< reco::TransientTrack > &) const
Tan< T >::type tan(const T &t)
Abs< T >::type abs(const T &t)
double z() const
y coordinate
double lambda() const
Lambda angle.
std::vector< simPrimaryVertex > getSimPVs(const edm::Handle< edm::HepMCProduct > evtMC)
float ChiSquaredProbability(double chiSquared, double nrDOF)
double BeamWidthX() const
beam width X
The Signals That Services Can Subscribe To This is based on ActivityRegistry h
Helper function to determine trigger accepts.
std::vector< int > * vertex_match(float, const edm::Handle< reco::VertexCollection >)
void printSimVtxs(const edm::Handle< edm::SimVertexContainer > simVtxs)
T const * get() const
Returns C++ pointer to the item.
trackingRecHit_iterator recHitsBegin() const
Iterator to first hit on the track.
void printEventSummary(std::map< std::string, TH1 * > &h, const edm::Handle< reco::VertexCollection > recVtxs, const edm::Handle< reco::TrackCollection > recTrks, std::vector< SimEvent > &simEvt, const std::string message)
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger but the state exists so we define the behavior If all triggers are the negative crieriion will lead to accepting the event(this again matches the behavior of"!*"before the partial wildcard feature was incorporated).The per-event"cost"of each negative criterion with multiple relevant triggers is about the same as!*was in the past
HepPDT::ParticleData ParticleData
virtual reco::RecoToSimCollection associateRecoToSim(edm::Handle< edm::View< reco::Track > > &tCH, edm::Handle< TrackingParticleCollection > &tPCH, const edm::Event *event, const edm::EventSetup *setup) const
compare reco to sim the handle of reco::Track and TrackingParticle collections
edm::EDGetTokenT< edm::View< reco::Track > > edmView_recoTrack_Token_
edm::EDGetTokenT< edm::SimVertexContainer > edmSimVertexContainerToken_
FTS const & trackStateAtPCA() const
double pz() const
z coordinate of momentum vector
std::map< std::string, TH1 * > hBS
std::vector< reco::TransientTrack > tkprim
double dzError() const
error on dz
reco::Vertex::trackRef_iterator trackit_t
std::string getReleaseVersion()
double vz() const
z coordinate of the reference point on track
TrackAssociatorBase * associatorByHits_
GlobalPoint position() const
void matchRecTracksToVertex(simPrimaryVertex &pv, const std::vector< SimPart > &tsim, const edm::Handle< reco::TrackCollection > &recTrks)
double significance() const
bool isResonance(const HepMC::GenParticle *p)
T const * product() const
const Track & track() const
const HitPattern & hitPattern() const
Access the hit pattern, indicating in which Tracker layers the track has hits.
void printRecTrks(const edm::Handle< reco::TrackCollection > &recTrks)
void getTc(const std::vector< reco::TransientTrack > &, double &, double &, double &, double &, double &)
XYZPointD XYZPoint
point in space with cartesian internal representation
tuple idx
DEBUGGING if hasattr(process,"trackMonIterativeTracking2012"): print "trackMonIterativeTracking2012 D...
std::vector< TrackingVertex > TrackingVertexCollection
std::vector< SimVertex > SimVertexContainer
reco::RecoToSimCollection r2s_
int pixelBarrelLayersWithMeasurement() const
T const * product() const
double BeamWidthY() const
beam width Y
double S(const TLorentzVector &, const TLorentzVector &)
EncodedEventId eventId() const
Signal source, crossing number.
PrimaryVertexAnalyzer4PU(const edm::ParameterSet &)
const EncodedEventId & eventId() const
Pixel cluster – collection of neighboring pixels above threshold.
void printSimTrks(const edm::Handle< edm::SimTrackContainer > simVtrks)
char data[epos_bytes_allocation]
void add(std::map< std::string, TH1 * > &h, TH1 *hist)
< trclass="colgroup">< tdclass="colgroup"colspan=5 > DT local reconstruction</td ></tr >< tr >< td >< ahref="classDTRecHit1DPair.html"> DTRecHit1DPair</a ></td >< td >< ahref="DataFormats_DTRecHit.html"> edm::RangeMap & lt
static int position[264][3]
unsigned short found() const
Number of valid hits on track.
std::string recoTrackProducer_
void analyzeVertexCollectionTP(std::map< std::string, TH1 * > &h, const edm::Handle< reco::VertexCollection > recVtxs, const edm::Handle< reco::TrackCollection > recTrks, std::vector< SimEvent > &simEvt, reco::RecoToSimCollection rsC, const std::string message="")
edm::EDGetTokenT< reco::VertexCollection > recoVertexCollection_DA_Token_
edm::EDGetTokenT< reco::VertexCollection > recoVertexCollection_BS_Token_
edm::EDGetTokenT< std::vector< PileupSummaryInfo > > vecPileupSummaryInfoToken_
std::vector< TrackBaseRef >::const_iterator trackRef_iterator
The iteratator for the vector<TrackRef>
double y0() const
y coordinate
Monte Carlo truth information used for tracking validation.
int charge() const
track electric charge
const Point & position() const
position
static const G4double kappa
volatile std::atomic< bool > shutdown_flag false
trackRef_iterator tracks_begin() const
first iterator over tracks
edm::EventNumber_t event_
void dumpHitInfo(const reco::Track &t)
double dxy() const
dxy parameter. (This is the transverse impact parameter w.r.t. to (0,0,0) ONLY if refPoint is close t...
virtual void analyze(const edm::Event &, const edm::EventSetup &)
std::vector< SimTrack > SimTrackContainer
std::vector< edm::RefToBase< reco::Track > > getTruthMatchedVertexTracks(const reco::Vertex &)
edm::ESHandle< ParticleDataTable > pdt_
std::map< double, TrackingParticleRef > z2tp_
tuple size
Write out results.
Power< A, B >::type pow(const A &a, const B &b)
size_t tracksSize() const
number of tracks
double py() const
y coordinate of momentum vector
TrackingRecHitCollection::base::const_iterator trackingRecHit_iterator
iterator over a vector of reference to TrackingRecHit in the same collection
math::Error< dimension >::type CovarianceMatrix
5 parameter covariance matrix
int numberOfHits(HitCategory category) const
const LorentzVector & position() const
double x0() const
x coordinate
trackingRecHit_iterator recHitsEnd() const
Iterator to last hit on the track.