12 #include "HepMC/GenEvent.h"
13 #include "HepMC/GenVertex.h"
14 #include "HepMC/GenParticle.h"
57 #include <gsl/gsl_math.h>
58 #include <gsl/gsl_eigen.h>
75 : verbose_( iConfig.getUntrackedParameter<bool>(
"verbose",
false ) )
76 , doMatching_( iConfig.getUntrackedParameter<bool>(
"matching",
false ) )
77 , printXBS_( iConfig.getUntrackedParameter<bool>(
"XBS",
false ) )
78 , dumpThisEvent_(
false )
79 , dumpPUcandidates_( iConfig.getUntrackedParameter<bool>(
"dumpPUcandidates",
false ) )
85 , luminosityBlock_( 0 )
91 , zmatch_( iConfig.getUntrackedParameter<double>(
"zmatch", 0.0500 ) )
93 , theTrackFilter( iConfig.getParameter<edm::
ParameterSet>(
"TkFilterParameters" ) )
94 , recoTrackProducer_( iConfig.getUntrackedParameter<std::
string>(
"recoTrackProducer") )
95 , outputFile_( iConfig.getUntrackedParameter<std::
string>(
"outputFile" ) )
101 , recoBeamSpotToken_( consumes<
reco::
BeamSpot>( iConfig.getParameter<edm::
InputTag>(
"beamSpot" ) ) )
102 , edmView_recoTrack_Token_( consumes< edm::
View<
reco::
Track> >( edm::
InputTag( iConfig.getUntrackedParameter<std::
string>(
"recoTrackProducer" ) ) ) )
106 , std::
string(
"MergedTrackTruth" )
111 , std::
string(
"MergedTrackTruth" )
125 cout <<
"PrimaryVertexAnalyzer4PU: zmatch=" <<
zmatch_ << endl;
143 std::map<std::string, TH1*>
h;
146 h[
"nbtksinvtx"] =
new TH1F(
"nbtksinvtx",
"reconstructed tracks in vertex",40,-0.5,39.5);
147 h[
"nbtksinvtxPU"] =
new TH1F(
"nbtksinvtxPU",
"reconstructed tracks in vertex",40,-0.5,39.5);
148 h[
"nbtksinvtxTag"]=
new TH1F(
"nbtksinvtxTag",
"reconstructed tracks in vertex",40,-0.5,39.5);
149 h[
"resx"] =
new TH1F(
"resx",
"residual x",100,-0.04,0.04);
150 h[
"resy"] =
new TH1F(
"resy",
"residual y",100,-0.04,0.04);
151 h[
"resz"] =
new TH1F(
"resz",
"residual z",100,-0.1,0.1);
152 h[
"resz10"] =
new TH1F(
"resz10",
"residual z",100,-1.0,1.);
153 h[
"pullx"] =
new TH1F(
"pullx",
"pull x",100,-25.,25.);
154 h[
"pully"] =
new TH1F(
"pully",
"pull y",100,-25.,25.);
155 h[
"pullz"] =
new TH1F(
"pullz",
"pull z",100,-25.,25.);
156 h[
"vtxchi2"] =
new TH1F(
"vtxchi2",
"chi squared",100,0.,100.);
157 h[
"vtxndf"] =
new TH1F(
"vtxndf",
"degrees of freedom",500,0.,100.);
158 h[
"vtxndfc"] =
new TH1F(
"vtxndfc",
"expected 2nd highest ndof",500,0.,100.);
160 h[
"vtxndfvsntk"] =
new TH2F(
"vtxndfvsntk",
"ndof vs #tracks",20,0.,100, 20, 0., 200.);
161 h[
"vtxndfoverntk"]=
new TH1F(
"vtxndfoverntk",
"ndof / #tracks",40,0.,2.);
162 h[
"vtxndf2overntk"]=
new TH1F(
"vtxndf2overntk",
"(ndof+2) / #tracks",40,0.,2.);
163 h[
"tklinks"] =
new TH1F(
"tklinks",
"Usable track links",2,-0.5,1.5);
164 h[
"nans"] =
new TH1F(
"nans",
"Illegal values for x,y,z,xx,xy,xz,yy,yz,zz",9,0.5,9.5);
167 add(h,
new TH1F(
"szRecVtx",
"size of recvtx collection",20, -0.5, 19.5));
168 add(h,
new TH1F(
"isFake",
"fake vertex",2, -0.5, 1.5));
169 add(h,
new TH1F(
"isFake1",
"fake vertex or ndof<0",2, -0.5, 1.5));
170 add(h,
new TH1F(
"bunchCrossing",
"bunchCrossing",4000, 0., 4000.));
171 add(h,
new TH2F(
"bunchCrossingLogNtk",
"bunchCrossingLogNtk",4000, 0., 4000.,5,0., 5.));
172 add(h,
new TH1F(
"highpurityTrackFraction",
"fraction of high purity tracks",20, 0., 1.));
173 add(h,
new TH2F(
"trkchi2vsndof",
"vertices chi2 vs ndof",50, 0., 100., 50, 0., 200.));
174 add(h,
new TH1F(
"trkchi2overndof",
"vertices chi2 / ndof",50, 0., 5.));
176 add(h,
new TH2F(
"2trkchi2vsndof",
"two-track vertices chi2 vs ndof",40, 0., 10., 20, 0., 20.));
177 add(h,
new TH1F(
"2trkmassSS",
"two-track vertices mass (same sign)",100, 0., 2.));
178 add(h,
new TH1F(
"2trkmassOS",
"two-track vertices mass (opposite sign)",100, 0., 2.));
179 add(h,
new TH1F(
"2trkdphi",
"two-track vertices delta-phi",360, 0, 2*
M_PI));
180 add(h,
new TH1F(
"2trkseta",
"two-track vertices sum-eta",50, -2., 2.));
181 add(h,
new TH1F(
"2trkdphicurl",
"two-track vertices delta-phi (sum eta<0.1)",360, 0, 2*
M_PI));
182 add(h,
new TH1F(
"2trksetacurl",
"two-track vertices sum-eta (delta-phi<0.1)",50, -2., 2.));
183 add(h,
new TH1F(
"2trkdetaOS",
"two-track vertices delta-eta (same sign)",50, -0.5, 0.5));
184 add(h,
new TH1F(
"2trkdetaSS",
"two-track vertices delta-eta (opposite sign)",50, -0.5, 0.5));
186 add(h,
new TH1F(
"2trkmassSSPU",
"two-track vertices mass (same sign)",100, 0., 2.));
187 add(h,
new TH1F(
"2trkmassOSPU",
"two-track vertices mass (opposite sign)",100, 0., 2.));
188 add(h,
new TH1F(
"2trkdphiPU",
"two-track vertices delta-phi",360, 0, 2*
M_PI));
189 add(h,
new TH1F(
"2trksetaPU",
"two-track vertices sum-eta",50, -2., 2.));
190 add(h,
new TH1F(
"2trkdphicurlPU",
"two-track vertices delta-phi (sum eta<0.1)",360, 0, 2*
M_PI));
191 add(h,
new TH1F(
"2trksetacurlPU",
"two-track vertices sum-eta (delta-phi<0.1)",50, -2., 2.));
192 add(h,
new TH1F(
"2trkdetaOSPU",
"two-track vertices delta-eta (same sign)",50, -0.5, 0.5));
193 add(h,
new TH1F(
"2trkdetaSSPU",
"two-track vertices delta-eta (opposite sign)",50, -0.5, 0.5));
195 add(h,
new TH2F(
"2trkchi2vsndof",
"two-track vertices chi2 vs ndof",40, 0., 10., 20, 0., 20.));
196 add(h,
new TH2F(
"3trkchi2vsndof",
"three-track vertices chi2 vs ndof",40, 0., 10., 20, 0., 20.));
197 add(h,
new TH2F(
"4trkchi2vsndof",
"four-track vertices chi2 vs ndof",40, 0., 10., 20, 0., 20.));
198 add(h,
new TH2F(
"5trkchi2vsndof",
"five-track vertices chi2 vs ndof",40, 0., 10., 20, 0., 20.));
200 add(h,
new TH2F(
"fake2trkchi2vsndof",
"fake two-track vertices chi2 vs ndof",40, 0., 10., 20, 0., 20.));
201 add(h,
new TH2F(
"fake3trkchi2vsndof",
"fake three-track vertices chi2 vs ndof",40, 0., 10., 20, 0., 20.));
202 add(h,
new TH2F(
"fake4trkchi2vsndof",
"fake four-track vertices chi2 vs ndof",40, 0., 10., 20, 0., 20.));
203 add(h,
new TH2F(
"fake5trkchi2vsndof",
"fake five-track vertices chi2 vs ndof",40, 0., 10., 20, 0., 20.));
204 h[
"resxr"] =
new TH1F(
"resxr",
"relative residual x",100,-0.04,0.04);
205 h[
"resyr"] =
new TH1F(
"resyr",
"relative residual y",100,-0.04,0.04);
206 h[
"reszr"] =
new TH1F(
"reszr",
"relative residual z",100,-0.1,0.1);
207 h[
"pullxr"] =
new TH1F(
"pullxr",
"relative pull x",100,-25.,25.);
208 h[
"pullyr"] =
new TH1F(
"pullyr",
"relative pull y",100,-25.,25.);
209 h[
"pullzr"] =
new TH1F(
"pullzr",
"relative pull z",100,-25.,25.);
210 h[
"vtxprob"] =
new TH1F(
"vtxprob",
"chisquared probability",100,0.,1.);
211 h[
"eff"] =
new TH1F(
"eff",
"efficiency",2, -0.5, 1.5);
212 h[
"efftag"] =
new TH1F(
"efftag",
"efficiency tagged vertex",2, -0.5, 1.5);
213 h[
"zdistancetag"] =
new TH1F(
"zdistancetag",
"z-distance between tagged and generated",100, -0.1, 0.1);
214 h[
"abszdistancetag"] =
new TH1F(
"abszdistancetag",
"z-distance between tagged and generated",1000, 0., 1.0);
215 h[
"abszdistancetagcum"] =
new TH1F(
"abszdistancetagcum",
"z-distance between tagged and generated",1000, 0., 1.0);
216 h[
"puritytag"] =
new TH1F(
"puritytag",
"purity of primary vertex tags",2, -0.5, 1.5);
217 h[
"effvsptsq"] =
new TProfile(
"effvsptsq",
"efficiency vs ptsq",20, 0., 10000., 0, 1.);
218 h[
"effvsnsimtrk"] =
new TProfile(
"effvsnsimtrk",
"efficiency vs # simtracks",50, 0., 50., 0, 1.);
219 h[
"effvsnrectrk"] =
new TProfile(
"effvsnrectrk",
"efficiency vs # rectracks",50, 0., 50., 0, 1.);
220 h[
"effvsnseltrk"] =
new TProfile(
"effvsnseltrk",
"efficiency vs # selected tracks",50, 0., 50., 0, 1.);
221 h[
"effvsz"] =
new TProfile(
"effvsz",
"efficiency vs z",20, -20., 20., 0, 1.);
222 h[
"effvsz2"] =
new TProfile(
"effvsz2",
"efficiency vs z (2mm)",20, -20., 20., 0, 1.);
223 h[
"effvsr"] =
new TProfile(
"effvsr",
"efficiency vs r",20, 0., 1., 0, 1.);
224 h[
"xresvsntrk"] =
new TProfile(
"xresvsntrk",
"xresolution vs # vertex tracks",40, 0., 200., 0, 0.01);
225 h[
"yresvsntrk"] =
new TProfile(
"yresvsntrk",
"yresolution vs # vertex tracks",40, 0., 200., 0, 0.01);
226 h[
"zresvsntrk"] =
new TProfile(
"zresvsntrk",
"zresolution vs # vertex tracks",40, 0., 200., 0, 0.01);
227 h[
"cpuvsntrk"] =
new TProfile(
"cpuvsntrk",
"cpu time vs # of fitted tracks",40, 0., 200., 0, 200.);
228 h[
"cpucluvsntrk"] =
new TProfile(
"cpucluvsntrk",
"clustering cpu time # of tracks",40, 0., 200., 0, 10.);
229 h[
"cpufit"] =
new TH1F(
"cpufit",
"cpu time for fitting",100, 0., 200.);
230 h[
"cpuclu"] =
new TH1F(
"cpuclu",
"cpu time for clustering",100, 0., 200.);
231 h[
"nbtksinvtx2"] =
new TH1F(
"nbtksinvtx2",
"reconstructed tracks in vertex",40,0.,200.);
232 h[
"nbtksinvtxPU2"] =
new TH1F(
"nbtksinvtxPU2",
"reconstructed tracks in vertex",40,0.,200.);
233 h[
"nbtksinvtxTag2"] =
new TH1F(
"nbtksinvtxTag2",
"reconstructed tracks in vertex",40,0.,200.);
235 h[
"xrec"] =
new TH1F(
"xrec",
"reconstructed x",100,-0.1,0.1);
236 h[
"yrec"] =
new TH1F(
"yrec",
"reconstructed y",100,-0.1,0.1);
237 h[
"zrec"] =
new TH1F(
"zrec",
"reconstructed z",100,-20.,20.);
238 h[
"err1"] =
new TH1F(
"err1",
"error 1",100,0.,0.1);
239 h[
"err2"] =
new TH1F(
"err2",
"error 2",100,0.,0.1);
240 h[
"errx"] =
new TH1F(
"errx",
"error x",100,0.,0.1);
241 h[
"erry"] =
new TH1F(
"erry",
"error y",100,0.,0.1);
242 h[
"errz"] =
new TH1F(
"errz",
"error z",100,0.,2.0);
243 h[
"errz1"] =
new TH1F(
"errz1",
"error z",100,0.,0.2);
245 h[
"zrecNt100"] =
new TH1F(
"zrecNt100",
"reconstructed z for high multiplicity events",80,-40.,40.);
246 add(h,
new TH2F(
"zrecvsnt",
"reconstructed z vs number of tracks",100,-50., 50., 20, 0., 200.));
247 add(h,
new TH2F(
"xyrec",
"reconstructed xy",100, -4., 4., 100, -4., 4.));
248 h[
"xrecBeam"] =
new TH1F(
"xrecBeam",
"reconstructed x - beam x",100,-0.1,0.1);
249 h[
"yrecBeam"] =
new TH1F(
"yrecBeam",
"reconstructed y - beam y",100,-0.1,0.1);
250 h[
"zrecBeam"] =
new TH1F(
"zrecBeam",
"reconstructed z - beam z",100,-20.,20.);
251 h[
"xrecBeamvsz"] =
new TH2F(
"xrecBeamvsz",
"reconstructed x - beam x vs z", 20, -20., 20.,100,-0.1,0.1);
252 h[
"yrecBeamvsz"] =
new TH2F(
"yrecBeamvsz",
"reconstructed y - beam y vs z", 20, -20., 20.,100,-0.1,0.1);
253 h[
"xrecBeamvszprof"] =
new TProfile(
"xrecBeamvszprof",
"reconstructed x - beam x vs z-z0", 20, -20., 20.,-0.1,0.1);
254 h[
"yrecBeamvszprof"] =
new TProfile(
"yrecBeamvszprof",
"reconstructed y - beam y vs z-z0", 20, -20., 20.,-0.1,0.1);
255 add(h,
new TH2F(
"xrecBeamvsdxXBS",
"reconstructed x - beam x vs resolution",10,0., 0.02, 100, -0.1,0.1));
256 add(h,
new TH2F(
"yrecBeamvsdyXBS",
"reconstructed z - beam z vs resolution",10,0., 0.02, 100, -0.1,0.1));
257 add(h,
new TH2F(
"xrecBeamvsdx",
"reconstructed x - beam x vs resolution",10,0., 0.02, 100, -0.1,0.1));
258 add(h,
new TH2F(
"yrecBeamvsdy",
"reconstructed z - beam z vs resolution",10,0., 0.02, 100, -0.1,0.1));
259 add(h,
new TH2F(
"xrecBeamvsdxR2",
"reconstructed x - beam x vs resolution",20,0., 0.04, 100, -0.1,0.1));
260 add(h,
new TH2F(
"yrecBeamvsdyR2",
"reconstructed z - beam z vs resolution",20,0., 0.04, 100, -0.1,0.1));
261 h[
"xrecBeamvsdxprof"] =
new TProfile(
"xrecBeamvsdxprof",
"reconstructed x - beam x vs resolution",10, 0., 0.04,-0.1,0.1 );
262 h[
"yrecBeamvsdyprof"] =
new TProfile(
"yrecBeamvsdyprof",
"reconstructed y - beam y vs resolution",10, 0., 0.04,-0.1,0.1 );
263 add(h,
new TProfile(
"xrecBeam2vsdx2prof",
"reconstructed x - beam x vs resolution",10,0., 0.002, 0., 0.01));
264 add(h,
new TProfile(
"yrecBeam2vsdy2prof",
"reconstructed y - beam y vs resolution",10,0., 0.002, 0., 0.01));
265 add(h,
new TH2F(
"xrecBeamvsdx2",
"reconstructed x - beam x vs resolution",10,0., 0.002, 100, -0.01, 0.01));
266 add(h,
new TH2F(
"yrecBeamvsdy2",
"reconstructed y - beam y vs resolution",10,0., 0.002, 100, -0.01, 0.01));
267 h[
"xrecb"] =
new TH1F(
"xrecb",
"reconstructed x - beam x",100,-0.01,0.01);
268 h[
"yrecb"] =
new TH1F(
"yrecb",
"reconstructed y - beam y",100,-0.01,0.01);
269 h[
"zrecb"] =
new TH1F(
"zrecb",
"reconstructed z - beam z",100,-20.,20.);
270 h[
"xrec1"] =
new TH1F(
"xrec1",
"reconstructed x",100,-4,4);
271 h[
"yrec1"] =
new TH1F(
"yrec1",
"reconstructed y",100,-4,4);
272 h[
"zrec1"] =
new TH1F(
"zrec1",
"reconstructed z",100,-80.,80.);
273 h[
"xrec2"] =
new TH1F(
"xrec2",
"reconstructed x",100,-1,1);
274 h[
"yrec2"] =
new TH1F(
"yrec2",
"reconstructed y",100,-1,1);
275 h[
"zrec2"] =
new TH1F(
"zrec2",
"reconstructed z",100,-40.,40.);
276 h[
"xrec3"] =
new TH1F(
"xrec3",
"reconstructed x",100,-0.1,0.1);
277 h[
"yrec3"] =
new TH1F(
"yrec3",
"reconstructed y",100,-0.1,0.1);
278 h[
"zrec3"] =
new TH1F(
"zrec3",
"reconstructed z",100,-20.,20.);
279 add(h,
new TH1F(
"xrecBeamPull",
"normalized residuals reconstructed x - beam x",100,-20,20));
280 add(h,
new TH1F(
"yrecBeamPull",
"normalized residuals reconstructed y - beam y",100,-20,20));
281 add(h,
new TH1F(
"zdiffrec",
"z-distance between vertices",200,-20., 20.));
282 add(h,
new TH1F(
"zdiffrec2",
"z-distance between ndof>2 vertices",200,-20., 20.));
283 add(h,
new TH1F(
"zdiffrec4",
"z-distance between ndof>4 vertices",200,-20., 20.));
284 add(h,
new TH1F(
"zdiffrec8",
"z-distance between ndof>8 vertices",200,-20., 20.));
285 add(h,
new TH2F(
"zvszrec2",
"z positions of multiple vertices",200,-20., 20., 200,-20., 20.));
286 add(h,
new TH2F(
"pzvspz2",
"prob(z) of multiple vertices",100, 0.,1.,100,0., 1.));
287 add(h,
new TH2F(
"zvszrec4",
"z positions of multiple vertices",100,-20., 20., 100,-20., 20.));
288 add(h,
new TH2F(
"pzvspz4",
"prob(z) of multiple vertices",100, 0.,1.,100,0., 1.));
289 add(h,
new TH2F(
"zdiffvsz",
"z-distance vs z",100,-10.,10.,30,-15.,15.));
290 add(h,
new TH2F(
"zdiffvsz4",
"z-distance vs z (ndof>4)",100,-10.,10.,30,-15.,15.));
291 add(h,
new TProfile(
"eff0vsntrec",
"efficiency vs # reconstructed tracks",50, 0., 50., 0, 1.));
292 add(h,
new TProfile(
"eff0vsntsel",
"efficiency vs # selected tracks",50, 0., 50., 0, 1.));
293 add(h,
new TProfile(
"eff0ndof0vsntsel",
"efficiency (ndof>0) vs # selected tracks",50, 0., 50., 0, 1.));
294 add(h,
new TProfile(
"eff0ndof8vsntsel",
"efficiency (ndof>8) vs # selected tracks",50, 0., 50., 0, 1.));
295 add(h,
new TProfile(
"eff0ndof2vsntsel",
"efficiency (ndof>2) vs # selected tracks",50, 0., 50., 0, 1.));
296 add(h,
new TProfile(
"eff0ndof4vsntsel",
"efficiency (ndof>4) vs # selected tracks",50, 0., 50., 0, 1.));
297 add(h,
new TH1F(
"xbeamPUcand",
"x - beam of PU candidates (ndof>4)",100,-1., 1.));
298 add(h,
new TH1F(
"ybeamPUcand",
"y - beam of PU candidates (ndof>4)",100,-1., 1.));
299 add(h,
new TH1F(
"xbeamPullPUcand",
"x - beam pull of PU candidates (ndof>4)",100,-20., 20.));
300 add(h,
new TH1F(
"ybeamPullPUcand",
"y - beam pull of PU candidates (ndof>4)",100,-20., 20.));
301 add(h,
new TH1F(
"ndofOverNtk",
"ndof / ntk of ndidates (ndof>4)",100,0., 2.));
302 add(h,
new TH1F(
"ndofOverNtkPUcand",
"ndof / ntk of ndidates (ndof>4)",100,0., 2.));
303 add(h,
new TH1F(
"zPUcand",
"z positions of PU candidates (all)",100,-20., 20.));
304 add(h,
new TH1F(
"zPUcand2",
"z positions of PU candidates (ndof>2)",100,-20., 20.));
305 add(h,
new TH1F(
"zPUcand4",
"z positions of PU candidates (ndof>4)",100,-20., 20.));
306 add(h,
new TH1F(
"ndofPUcand",
"ndof of PU candidates (all)",50,0., 100.));
307 add(h,
new TH1F(
"ndofPUcand2",
"ndof of PU candidates (ndof>2)",50,0., 100.));
308 add(h,
new TH1F(
"ndofPUcand4",
"ndof of PU candidates (ndof>4)",50,0., 100.));
309 add(h,
new TH1F(
"ndofnr2",
"second highest ndof",500,0., 100.));
310 add(h,
new TH1F(
"ndofnr2d1cm",
"second highest ndof (dz>1cm)",500,0., 100.));
311 add(h,
new TH1F(
"ndofnr2d2cm",
"second highest ndof (dz>2cm)",500,0., 100.));
313 h[
"nrecvtx"] =
new TH1F(
"nrecvtx",
"# of reconstructed vertices", 50, -0.5, 49.5);
314 h[
"nrecvtx8"] =
new TH1F(
"nrecvtx8",
"# of reconstructed vertices with ndof>8", 50, -0.5, 49.5);
315 h[
"nrecvtx2"] =
new TH1F(
"nrecvtx2",
"# of reconstructed vertices with ndof>2", 50, -0.5, 49.5);
316 h[
"nrecvtx4"] =
new TH1F(
"nrecvtx4",
"# of reconstructed vertices with ndof>4", 50, -0.5, 49.5);
317 h[
"nrectrk"] =
new TH1F(
"nrectrk",
"# of reconstructed tracks", 100, -0.5, 99.5);
318 add(h,
new TH1F(
"nsimtrk",
"# of simulated tracks", 100, -0.5, 99.5));
319 add(h,
new TH1F(
"nsimtrkSignal",
"# of simulated tracks (Signal)", 100, -0.5, 99.5));
320 add(h,
new TH1F(
"nsimtrkPU",
"# of simulated tracks (PU)", 100, -0.5, 99.5));
321 h[
"nsimtrk"]->StatOverflows(kTRUE);
322 h[
"nsimtrkPU"]->StatOverflows(kTRUE);
323 h[
"nsimtrkSignal"]->StatOverflows(kTRUE);
324 h[
"xrectag"] =
new TH1F(
"xrectag",
"reconstructed x, signal vtx",100,-0.05,0.05);
325 h[
"yrectag"] =
new TH1F(
"yrectag",
"reconstructed y, signal vtx",100,-0.05,0.05);
326 h[
"zrectag"] =
new TH1F(
"zrectag",
"reconstructed z, signal vtx",100,-20.,20.);
327 h[
"nrectrk0vtx"] =
new TH1F(
"nrectrk0vtx",
"# rec tracks no vertex ",100,-0.5, 99.5);
328 h[
"nseltrk0vtx"] =
new TH1F(
"nseltrk0vtx",
"# rec tracks no vertex ",100,-0.5, 99.5);
329 h[
"nrecsimtrk"] =
new TH1F(
"nrecsimtrk",
"# rec tracks matched to sim tracks in vertex",100,-0.5, 99.5);
330 h[
"nrecnosimtrk"] =
new TH1F(
"nrecsimtrk",
"# rec tracks not matched to sim tracks in vertex",100,-0.5, 99.5);
331 h[
"trackAssEffvsPt"] =
new TProfile(
"trackAssEffvsPt",
"track association efficiency vs pt",20, 0., 100., 0, 1.);
334 h[
"nseltrk"] =
new TH1F(
"nseltrk",
"# of reconstructed tracks selected for PV", 100, -0.5, 99.5);
335 h[
"nclutrkall"] =
new TH1F(
"nclutrkall",
"# of reconstructed tracks in clusters", 100, -0.5, 99.5);
336 h[
"nclutrkvtx"] =
new TH1F(
"nclutrkvtx",
"# of reconstructed tracks in clusters of reconstructed vertices", 100, -0.5, 99.5);
337 h[
"nclu"] =
new TH1F(
"nclu",
"# of clusters", 100, -0.5, 99.5);
338 h[
"nclu0vtx"] =
new TH1F(
"nclu0vtx",
"# of clusters in events with no PV", 100, -0.5, 99.5);
339 h[
"zlost1"] =
new TH1F(
"zlost1",
"z of lost vertices (bad z)", 100, -20., 20.);
340 h[
"zlost2"] =
new TH1F(
"zlost2",
"z of lost vertices (no matching cluster)", 100, -20., 20.);
341 h[
"zlost3"] =
new TH1F(
"zlost3",
"z of lost vertices (vertex too far from beam)", 100, -20., 20.);
342 h[
"zlost4"] =
new TH1F(
"zlost4",
"z of lost vertices (invalid vertex)", 100, -20., 20.);
343 h[
"selstat"] =
new TH1F(
"selstat",
"selstat", 5, -2.5, 2.5);
346 add(h,
new TH1F(
"fakeVtxZNdofgt05",
"z of fake vertices with ndof>0.5", 100, -20., 20.));
347 add(h,
new TH1F(
"fakeVtxZNdofgt2",
"z of fake vertices with ndof>2", 100, -20., 20.));
348 add(h,
new TH1F(
"fakeVtxZ",
"z of fake vertices", 100, -20., 20.));
349 add(h,
new TH1F(
"fakeVtxNdof",
"ndof of fake vertices", 500,0., 100.));
350 add(h,
new TH1F(
"fakeVtxNtrk",
"number of tracks in fake vertex",20,-0.5, 19.5));
351 add(h,
new TH1F(
"matchedVtxNdof",
"ndof of matched vertices", 500,0., 100.));
354 string types[] = {
"all",
"sel",
"bachelor",
"sellost",
"wgt05",
"wlt05",
"M",
"tagged",
"untagged",
"ndof4",
"PUcand",
"PUfake"};
355 for(
int t=0;
t<12;
t++){
356 add(h,
new TH1F((
"rapidity_"+types[
t]).c_str(),
"rapidity ",100,-3., 3.));
357 h[
"z0_"+types[
t]] =
new TH1F((
"z0_"+types[t]).c_str(),
"z0 ",80,-40., 40.);
358 h[
"phi_"+types[
t]] =
new TH1F((
"phi_"+types[t]).c_str(),
"phi ",80,-3.14159, 3.14159);
359 h[
"eta_"+types[
t]] =
new TH1F((
"eta_"+types[t]).c_str(),
"eta ",80,-4., 4.);
360 h[
"pt_"+types[
t]] =
new TH1F((
"pt_"+types[t]).c_str(),
"pt ",100,0., 20.);
361 h[
"found_"+types[
t]] =
new TH1F((
"found_"+types[t]).c_str(),
"found hits",20, 0., 20.);
362 h[
"lost_"+types[
t]] =
new TH1F((
"lost_"+types[t]).c_str(),
"lost hits",20, 0., 20.);
363 h[
"nchi2_"+types[
t]] =
new TH1F((
"nchi2_"+types[t]).c_str(),
"normalized track chi2",100, 0., 20.);
364 h[
"rstart_"+types[
t]] =
new TH1F((
"rstart_"+types[t]).c_str(),
"start radius",100, 0., 20.);
365 h[
"tfom_"+types[
t]] =
new TH1F((
"tfom_"+types[t]).c_str(),
"track figure of merit",100, 0., 100.);
366 h[
"expectedInner_"+types[
t]] =
new TH1F((
"expectedInner_"+types[t]).c_str(),
"expected inner hits ",10, 0., 10.);
367 h[
"expectedOuter_"+types[
t]] =
new TH1F((
"expectedOuter_"+types[t]).c_str(),
"expected outer hits ",10, 0., 10.);
368 h[
"logtresxy_"+types[
t]] =
new TH1F((
"logtresxy_"+types[t]).c_str(),
"log10(track r-phi resolution/um)",100, 0., 5.);
369 h[
"logtresz_"+types[
t]] =
new TH1F((
"logtresz_"+types[t]).c_str(),
"log10(track z resolution/um)",100, 0., 5.);
370 h[
"tpullxy_"+types[
t]] =
new TH1F((
"tpullxy_"+types[t]).c_str(),
"track r-phi pull",100, -10., 10.);
371 add(h,
new TH2F( (
"lvseta_"+types[t]).c_str(),
"cluster length vs eta",60,-3., 3., 20, 0., 20));
372 add(h,
new TH2F( (
"lvstanlambda_"+types[t]).c_str(),
"cluster length vs tan lambda",60,-6., 6., 20, 0., 20));
373 add(h,
new TH1F( (
"restrkz_"+types[t]).c_str(),
"z-residuals (track vs vertex)", 200, -5., 5.));
374 add(h,
new TH2F( (
"restrkzvsphi_"+types[t]).c_str(),
"z-residuals (track - vertex)", 12,-3.14159,3.14159,100, -5., 5.));
375 add(h,
new TH2F( (
"restrkzvseta_"+types[t]).c_str(),
"z-residuals (track - vertex)", 12,-3.,3.,200, -5., 5.));
376 add(h,
new TH2F( (
"pulltrkzvsphi_"+types[t]).c_str(),
"normalized z-residuals (track - vertex)", 12,-3.14159,3.14159,100, -5., 5.));
377 add(h,
new TH2F( (
"pulltrkzvseta_"+types[t]).c_str(),
"normalized z-residuals (track - vertex)", 12,-3.,3.,100, -5., 5.));
378 add(h,
new TH1F( (
"pulltrkz_"+types[t]).c_str(),
"normalized z-residuals (track vs vertex)", 100, -5., 5.));
379 add(h,
new TH1F( (
"sigmatrkz0_"+types[t]).c_str(),
"z-resolution (excluding beam)", 100, 0., 5.));
380 add(h,
new TH1F( (
"sigmatrkz_"+types[t]).c_str(),
"z-resolution (including beam)", 100,0., 5.));
381 add(h,
new TH1F( (
"nbarrelhits_"+types[t]).c_str(),
"number of pixel barrel hits", 10, 0., 10.));
382 add(h,
new TH1F( (
"nbarrelLayers_"+types[t]).c_str(),
"number of pixel barrel layers", 10, 0., 10.));
383 add(h,
new TH1F( (
"nPxLayers_"+types[t]).c_str(),
"number of pixel layers (barrel+endcap)", 10, 0., 10.));
384 add(h,
new TH1F( (
"nSiLayers_"+types[t]).c_str(),
"number of Tracker layers ", 20, 0., 20.));
385 add(h,
new TH1F( (
"trackAlgo_"+types[t]).c_str(),
"track algorithm ", 30, 0., 30.));
386 add(h,
new TH1F( (
"trackQuality_"+types[t]).c_str(),
"track quality ", 7, -1., 6.));
388 add(h,
new TH1F(
"trackWt",
"track weight in vertex",100,0., 1.));
390 h[
"nrectrk"]->StatOverflows(kTRUE);
391 h[
"nrectrk"]->StatOverflows(kTRUE);
392 h[
"nrectrk0vtx"]->StatOverflows(kTRUE);
393 h[
"nseltrk0vtx"]->StatOverflows(kTRUE);
394 h[
"nrecsimtrk"]->StatOverflows(kTRUE);
395 h[
"nrecnosimtrk"]->StatOverflows(kTRUE);
396 h[
"nseltrk"]->StatOverflows(kTRUE);
397 h[
"nbtksinvtx"]->StatOverflows(kTRUE);
398 h[
"nbtksinvtxPU"]->StatOverflows(kTRUE);
399 h[
"nbtksinvtxTag"]->StatOverflows(kTRUE);
400 h[
"nbtksinvtx2"]->StatOverflows(kTRUE);
401 h[
"nbtksinvtxPU2"]->StatOverflows(kTRUE);
402 h[
"nbtksinvtxTag2"]->StatOverflows(kTRUE);
405 h[
"npu0"] =
new TH1F(
"npu0",
"Number of simulated vertices",40,0.,40.);
406 h[
"npu1"] =
new TH1F(
"npu1",
"Number of simulated vertices with >0 track",40,0.,40.);
407 h[
"npu2"] =
new TH1F(
"npu2",
"Number of simulated vertices with >1 track",40,0.,40.);
408 h[
"nrecv"] =
new TH1F(
"nrecv",
"# of reconstructed vertices", 40, 0, 40);
409 add(h,
new TH2F(
"nrecvsnpu",
"#rec vertices vs number of sim vertices with >0 tracks", 40, 0., 40, 40, 0, 40));
410 add(h,
new TH2F(
"nrecvsnpu2",
"#rec vertices vs number of sim vertices with >1 tracks", 40, 0., 40, 40, 0, 40));
411 add(h,
new TH1F(
"sumpt",
"sumpt of simulated tracks",100,0.,100.));
412 add(h,
new TH1F(
"sumptSignal",
"sumpt of simulated tracks in Signal events",100,0.,200.));
413 add(h,
new TH1F(
"sumptPU",
"sumpt of simulated tracks in PU events",100,0.,200.));
414 add(h,
new TH1F(
"sumpt2rec",
"sumpt2 of reconstructed and matched tracks",100,0.,100.));
415 add(h,
new TH1F(
"sumpt2",
"sumpt2 of simulated tracks",100,0.,100.));
416 add(h,
new TH1F(
"sumpt2Signal",
"sumpt2 of simulated tracks in Signal events",100,0.,200.));
417 add(h,
new TH1F(
"sumpt2PU",
"sumpt2 of simulated tracks in PU events",100,0.,200.));
418 add(h,
new TH1F(
"sumpt2rec",
"sumpt2 of reconstructed and matched tracks",100,0.,100.));
419 add(h,
new TH1F(
"sumpt2recSignal",
"sumpt2 of reconstructed and matched tracks in Signal events",100,0.,200.));
420 add(h,
new TH1F(
"sumpt2recPU",
"sumpt2 of reconstructed and matched tracks in PU events",100,0.,200.));
421 add(h,
new TH1F(
"nRecTrkInSimVtx",
"number of reco tracks matched to sim-vertex", 101, 0., 100));
422 add(h,
new TH1F(
"nRecTrkInSimVtxSignal",
"number of reco tracks matched to signal sim-vertex", 101, 0., 100));
423 add(h,
new TH1F(
"nRecTrkInSimVtxPU",
"number of reco tracks matched to PU-vertex", 101, 0., 100));
424 add(h,
new TH1F(
"nPrimRecTrkInSimVtx",
"number of reco primary tracks matched to sim-vertex", 101, 0., 100));
425 add(h,
new TH1F(
"nPrimRecTrkInSimVtxSignal",
"number of reco primary tracks matched to signal sim-vertex", 101, 0., 100));
426 add(h,
new TH1F(
"nPrimRecTrkInSimVtxPU",
"number of reco primary tracks matched to PU-vertex", 101, 0., 100));
428 add(h,
new TH1F(
"recPurity",
"track purity of reconstructed vertices", 101, 0., 1.01));
429 add(h,
new TH1F(
"recPuritySignal",
"track purity of reconstructed Signal vertices", 101, 0., 1.01));
430 add(h,
new TH1F(
"recPurityPU",
"track purity of reconstructed PU vertices", 101, 0., 1.01));
432 add(h,
new TH1F(
"recmatchPurity",
"track purity of all vertices", 101, 0., 1.01));
433 add(h,
new TH1F(
"recmatchPurityTag",
"track purity of tagged vertices", 101, 0., 1.01));
434 add(h,
new TH1F(
"recmatchPurityTagSignal",
"track purity of tagged Signal vertices", 101, 0., 1.01));
435 add(h,
new TH1F(
"recmatchPurityTagPU",
"track purity of tagged PU vertices", 101, 0., 1.01));
436 add(h,
new TH1F(
"recmatchPuritynoTag",
"track purity of untagged vertices", 101, 0., 1.01));
437 add(h,
new TH1F(
"recmatchPuritynoTagSignal",
"track purity of untagged Signal vertices", 101, 0., 1.01));
438 add(h,
new TH1F(
"recmatchPuritynoTagPU",
"track purity of untagged PU vertices", 101, 0., 1.01));
439 add(h,
new TH1F(
"recmatchvtxs",
"number of sim vertices contributing to recvtx", 10, 0., 10.));
440 add(h,
new TH1F(
"recmatchvtxsTag",
"number of sim vertices contributing to recvtx", 10, 0., 10.));
441 add(h,
new TH1F(
"recmatchvtxsnoTag",
"number of sim vertices contributing to recvtx", 10, 0., 10.));
443 add(h,
new TH1F(
"trkAssignmentEfficiency",
"track to vertex assignment efficiency", 101, 0., 1.01) );
444 add(h,
new TH1F(
"trkAssignmentEfficiencySignal",
"track to signal vertex assignment efficiency", 101, 0., 1.01) );
445 add(h,
new TH1F(
"trkAssignmentEfficiencyPU",
"track to PU vertex assignment efficiency", 101, 0., 1.01) );
446 add(h,
new TH1F(
"primtrkAssignmentEfficiency",
"track to vertex assignment efficiency", 101, 0., 1.01) );
447 add(h,
new TH1F(
"primtrkAssignmentEfficiencySignal",
"track to signal vertex assignment efficiency", 101, 0., 1.01) );
448 add(h,
new TH1F(
"primtrkAssignmentEfficiencyPU",
"track to PU vertex assignment efficiency", 101, 0., 1.01) );
449 add(h,
new TH1F(
"vtxMultiplicity",
"number of rec vertices containg tracks from one true vertex", 10, 0., 10.) );
450 add(h,
new TH1F(
"vtxMultiplicitySignal",
"number of rec vertices containg tracks from the Signal Vertex", 10, 0., 10.) );
451 add(h,
new TH1F(
"vtxMultiplicityPU",
"number of rec vertices containg tracks from a PU Vertex", 10, 0., 10.) );
453 add(h,
new TProfile(
"vtxFindingEfficiencyVsNtrk",
"finding efficiency vs number of associated rec tracks",100, 0., 100., 0., 1.) );
454 add(h,
new TProfile(
"vtxFindingEfficiencyVsNtrkSignal",
"Signal vertex finding efficiency vs number of associated rec tracks",100, 0., 100., 0., 1.) );
455 add(h,
new TProfile(
"vtxFindingEfficiencyVsNtrkPU",
"PU vertex finding efficiency vs number of associated rec tracks",100, 0., 100., 0., 1.) );
457 add(h,
new TH1F(
"TagVtxTrkPurity",
"TagVtxTrkPurity",100,0.,1.01));
458 add(h,
new TH1F(
"TagVtxTrkEfficiency",
"TagVtxTrkEfficiency",100,0.,1.01));
460 add(h,
new TH1F(
"matchVtxFraction",
"fraction of sim vertex tracks found in a recvertex",101,0,1.01));
461 add(h,
new TH1F(
"matchVtxFractionSignal",
"fraction of sim vertex tracks found in a recvertex",101,0,1.01));
462 add(h,
new TH1F(
"matchVtxFractionPU",
"fraction of sim vertex tracks found in a recvertex",101,0,1.01));
463 add(h,
new TH1F(
"matchVtxFractionCum",
"fraction of sim vertex tracks found in a recvertex",101,0,1.01));
464 add(h,
new TH1F(
"matchVtxFractionCumSignal",
"fraction of sim vertexs track found in a recvertex",101,0,1.01));
465 add(h,
new TH1F(
"matchVtxFractionCumPU",
"fraction of sim vertex tracks found in a recvertex",101,0,1.01));
466 add(h,
new TH1F(
"matchVtxEfficiency",
"efficiency for finding matching rec vertex",2,-0.5,1.5));
467 add(h,
new TH1F(
"matchVtxEfficiencySignal",
"efficiency for finding matching rec vertex",2,-0.5,1.5));
468 add(h,
new TH1F(
"matchVtxEfficiencyPU",
"efficiency for finding matching rec vertex",2,-0.5,1.5));
469 add(h,
new TH1F(
"matchVtxEfficiency2",
"efficiency for finding matching rec vertex (nt>1)",2,-0.5,1.5));
470 add(h,
new TH1F(
"matchVtxEfficiency2Signal",
"efficiency for finding matching rec vertex (nt>1)",2,-0.5,1.5));
471 add(h,
new TH1F(
"matchVtxEfficiency2PU",
"efficiency for finding matching rec vertex (nt>1)",2,-0.5,1.5));
472 add(h,
new TH1F(
"matchVtxEfficiency5",
"efficiency for finding matching rec vertex (purity>0.5)",2,-0.5,1.5));
473 add(h,
new TH1F(
"matchVtxEfficiency5Signal",
"efficiency for finding matching rec vertex (purity>0.5)",2,-0.5,1.5));
474 add(h,
new TH1F(
"matchVtxEfficiency5PU",
"efficiency for finding matching rec vertex (purity>0.5)",2,-0.5,1.5));
476 add(h,
new TH1F(
"matchVtxEfficiencyZ",
"efficiency for finding matching rec vertex within 1 mm",2,-0.5,1.5));
477 add(h,
new TH1F(
"matchVtxEfficiencyZSignal",
"efficiency for finding matching rec vertex within 1 mm",2,-0.5,1.5));
478 add(h,
new TH1F(
"matchVtxEfficiencyZPU",
"efficiency for finding matching rec vertex within 1 mm",2,-0.5,1.5));
480 add(h,
new TH1F(
"matchVtxEfficiencyZ1",
"efficiency for finding matching rec vertex within 1 mm (nt>0)",2,-0.5,1.5));
481 add(h,
new TH1F(
"matchVtxEfficiencyZ1Signal",
"efficiency for finding matching rec vertex within 1 mm (nt>0)",2,-0.5,1.5));
482 add(h,
new TH1F(
"matchVtxEfficiencyZ1PU",
"efficiency for finding matching rec vertex within 1 mm (nt>0)",2,-0.5,1.5));
484 add(h,
new TH1F(
"matchVtxEfficiencyZ2",
"efficiency for finding matching rec vertex within 1 mm (nt>1)",2,-0.5,1.5));
485 add(h,
new TH1F(
"matchVtxEfficiencyZ2Signal",
"efficiency for finding matching rec vertex within 1 mm (nt>1)",2,-0.5,1.5));
486 add(h,
new TH1F(
"matchVtxEfficiencyZ2PU",
"efficiency for finding matching rec vertex within 1 mm (nt>1)",2,-0.5,1.5));
488 add(h,
new TH1F(
"matchVtxZ",
"z distance to matched recvtx",100, -0.1, 0.1));
489 add(h,
new TH1F(
"matchVtxZPU",
"z distance to matched recvtx",100, -0.1, 0.1));
490 add(h,
new TH1F(
"matchVtxZSignal",
"z distance to matched recvtx",100, -0.1, 0.1));
492 add(h,
new TH1F(
"matchVtxZCum",
"z distance to matched recvtx",1001,0, 1.01));
493 add(h,
new TH1F(
"matchVtxZCumSignal",
"z distance to matched recvtx",1001,0, 1.01));
494 add(h,
new TH1F(
"matchVtxZCumPU",
"z distance to matched recvtx",1001,0, 1.01));
496 add(h,
new TH1F(
"unmatchedVtx",
"number of unmatched rec vertices (fakes)",10,0.,10.));
497 add(h,
new TH1F(
"unmatchedVtxFrac",
"fraction of unmatched rec vertices (fakes)",1000,0.,1.0));
498 add(h,
new TH1F(
"unmatchedVtxZ",
"z of unmached rec vertices (fakes)",100,-20., 20.));
499 add(h,
new TH1F(
"unmatchedVtxNdof",
"ndof of unmatched rec vertices (fakes)", 500,0., 100.));
500 add(h,
new TH2F(
"correctlyassigned",
"pt and eta of correctly assigned tracks", 60, -3., 3., 100, 0, 10.));
501 add(h,
new TH2F(
"misassigned",
"pt and eta of mis assigned tracks", 60, -3., 3., 100, 0, 10.));
504 add(h,
new TProfile(
"effvszsep",
"efficiency vs true z-separation",500, 0., 10., 0, 1.));
505 add(h,
new TProfile(
"effwodvszsep",
"efficiency w/o double-counting vs true z-separation",500, 0., 10., 0, 1.));
506 add(h,
new TProfile(
"mergedvszsep",
"merge rate vs true z-separation",500, 0., 10., 0, 1.));
507 add(h,
new TProfile(
"splitvszsep",
"split rate vs true z-separation",500, 0., 10., 0, 1.));
508 add(h,
new TProfile(
"tveffvszsep",
"efficiency vs true z-separation",500, 0., 10., 0, 1.));
509 add(h,
new TProfile(
"tveffwodvszsep",
"efficiency w/o double-counting vs true z-separation",500, 0., 10., 0, 1.));
510 add(h,
new TProfile(
"tvmergedvszsep",
"merge rate vs true z-separation",500, 0., 10., 0, 1.));
512 add(h,
new TH1F(
"ptcat",
"pt of correctly assigned tracks", 100, 0, 10.));
513 add(h,
new TH1F(
"etacat",
"eta of correctly assigned tracks", 60, -3., 3.));
514 add(h,
new TH1F(
"phicat",
"phi of correctly assigned tracks", 100, -3.14159, 3.14159));
515 add(h,
new TH1F(
"dzcat",
"dz of correctly assigned tracks", 100, 0., 1.));
517 add(h,
new TH1F(
"ptmis",
"pt of mis-assigned tracks", 100, 0, 10.));
518 add(h,
new TH1F(
"etamis",
"eta of mis-assigned tracks", 60, -3., 3.));
519 add(h,
new TH1F(
"phimis",
"phi of mis-assigned tracks",100, -3.14159, 3.14159));
520 add(h,
new TH1F(
"dzmis",
"dz of mis-assigned tracks", 100, 0., 1.));
523 add(h,
new TH1F(
"Tc",
"Tc computed with Truth matched Reco Tracks",100,0.,20.));
524 add(h,
new TH1F(
"TcSignal",
"Tc of signal vertices computed with Truth matched Reco Tracks",100,0.,20.));
525 add(h,
new TH1F(
"TcPU",
"Tc of PU vertices computed with Truth matched Reco Tracks",100,0.,20.));
527 add(h,
new TH1F(
"logTc",
"log Tc computed with Truth matched Reco Tracks",100,-2.,8.));
528 add(h,
new TH1F(
"logTcSignal",
"log Tc of signal vertices computed with Truth matched Reco Tracks",100,-2.,8.));
529 add(h,
new TH1F(
"logTcPU",
"log Tc of PU vertices computed with Truth matched Reco Tracks",100,-2.,8.));
531 add(h,
new TH1F(
"xTc",
"Tc of merged clusters",100,0.,20.));
532 add(h,
new TH1F(
"xTcSignal",
"Tc of signal vertices merged with PU",100,0.,20.));
533 add(h,
new TH1F(
"xTcPU",
"Tc of merged PU vertices",100,0.,20.));
535 add(h,
new TH1F(
"logxTc",
"log Tc merged vertices",100,-2.,8.));
536 add(h,
new TH1F(
"logxTcSignal",
"log Tc of signal vertices merged with PU",100,-2.,8.));
537 add(h,
new TH1F(
"logxTcPU",
"log Tc of merged PU vertices ",100,-2.,8.));
539 add(h,
new TH1F(
"logChisq",
"Chisq/ntrk computed with Truth matched Reco Tracks",100,-2.,8.));
540 add(h,
new TH1F(
"logChisqSignal",
"Chisq/ntrk of signal vertices computed with Truth matched Reco Tracks",100,-2.,8.));
541 add(h,
new TH1F(
"logChisqPU",
"Chisq/ntrk of PU vertices computed with Truth matched Reco Tracks",100,-2.,8.));
543 add(h,
new TH1F(
"logxChisq",
"Chisq/ntrk of merged clusters",100,-2.,8.));
544 add(h,
new TH1F(
"logxChisqSignal",
"Chisq/ntrk of signal vertices merged with PU",100,-2.,8.));
545 add(h,
new TH1F(
"logxChisqPU",
"Chisq/ntrk of merged PU vertices",100,-2.,8.));
547 add(h,
new TH1F(
"Chisq",
"Chisq/ntrk computed with Truth matched Reco Tracks",100,0.,20.));
548 add(h,
new TH1F(
"ChisqSignal",
"Chisq/ntrk of signal vertices computed with Truth matched Reco Tracks",100,0.,20.));
549 add(h,
new TH1F(
"ChisqPU",
"Chisq/ntrk of PU vertices computed with Truth matched Reco Tracks",100,0.,20.));
551 add(h,
new TH1F(
"xChisq",
"Chisq/ntrk of merged clusters",100,0.,20.));
552 add(h,
new TH1F(
"xChisqSignal",
"Chisq/ntrk of signal vertices merged with PU",100,0.,20.));
553 add(h,
new TH1F(
"xChisqPU",
"Chisq/ntrk of merged PU vertices",100,0.,20.));
555 add(h,
new TH1F(
"dzmax",
"dzmax computed with Truth matched Reco Tracks",100,0.,2.));
556 add(h,
new TH1F(
"dzmaxSignal",
"dzmax of signal vertices computed with Truth matched Reco Tracks",100,0.,2.));
557 add(h,
new TH1F(
"dzmaxPU",
"dzmax of PU vertices computed with Truth matched Reco Tracks",100,0.,2.));
559 add(h,
new TH1F(
"xdzmax",
"dzmax of merged clusters",100,0.,2.));
560 add(h,
new TH1F(
"xdzmaxSignal",
"dzmax of signal vertices merged with PU",100,0.,2.));
561 add(h,
new TH1F(
"xdzmaxPU",
"dzmax of merged PU vertices",100,0.,2.));
563 add(h,
new TH1F(
"dztrim",
"dzmax computed with Truth matched Reco Tracks",100,0.,2.));
564 add(h,
new TH1F(
"dztrimSignal",
"dzmax of signal vertices computed with Truth matched Reco Tracks",100,0.,2.));
565 add(h,
new TH1F(
"dztrimPU",
"dzmax of PU vertices computed with Truth matched Reco Tracks",100,0.,2.));
567 add(h,
new TH1F(
"xdztrim",
"dzmax of merged clusters",100,0.,2.));
568 add(h,
new TH1F(
"xdztrimSignal",
"dzmax of signal vertices merged with PU",100,0.,2.));
569 add(h,
new TH1F(
"xdztrimPU",
"dzmax of merged PU vertices",100,0.,2.));
571 add(h,
new TH1F(
"m4m2",
"m4m2 computed with Truth matched Reco Tracks",100,0.,100.));
572 add(h,
new TH1F(
"m4m2Signal",
"m4m2 of signal vertices computed with Truth matched Reco Tracks",100,0.,100.));
573 add(h,
new TH1F(
"m4m2PU",
"m4m2 of PU vertices computed with Truth matched Reco Tracks",100,0.,100.));
575 add(h,
new TH1F(
"xm4m2",
"m4m2 of merged clusters",100,0.,100.));
576 add(h,
new TH1F(
"xm4m2Signal",
"m4m2 of signal vertices merged with PU",100,0.,100.));
577 add(h,
new TH1F(
"xm4m2PU",
"m4m2 of merged PU vertices",100,0.,100.));
587 std::cout <<
" PrimaryVertexAnalyzer4PU::beginJob conversion from sim units to rec units is " <<
simUnit_ << std::endl;
591 TDirectory *noBS =
rootFile_->mkdir(
"noBS");
595 hist->second->SetDirectory(noBS);
598 TDirectory *withBS =
rootFile_->mkdir(
"BS");
601 for(std::map<std::string,TH1*>::const_iterator
hist=
hBS.begin();
hist!=
hBS.end();
hist++){
602 hist->second->SetDirectory(withBS);
608 for(std::map<std::string,TH1*>::const_iterator
hist=
hDA.begin();
hist!=
hDA.end();
hist++){
609 hist->second->SetDirectory(DA);
613 hsimPV[
"rapidity"] =
new TH1F(
"rapidity",
"rapidity ",100,-10., 10.);
614 hsimPV[
"chRapidity"] =
new TH1F(
"chRapidity",
"charged rapidity ",100,-10., 10.);
615 hsimPV[
"recRapidity"] =
new TH1F(
"recRapidity",
"reconstructed rapidity ",100,-10., 10.);
616 hsimPV[
"pt"] =
new TH1F(
"pt",
"pt ",100,0., 20.);
618 hsimPV[
"xsim"] =
new TH1F(
"xsim",
"simulated x",100,-0.01,0.01);
619 hsimPV[
"ysim"] =
new TH1F(
"ysim",
"simulated y",100,-0.01,0.01);
620 hsimPV[
"zsim"] =
new TH1F(
"zsim",
"simulated z",100,-20.,20.);
622 hsimPV[
"xsim1"] =
new TH1F(
"xsim1",
"simulated x",100,-4.,4.);
623 hsimPV[
"ysim1"] =
new TH1F(
"ysim1",
"simulated y",100,-4.,4.);
624 hsimPV[
"zsim1"] =
new TH1F(
"zsim1",
"simulated z",100,-40.,40.);
626 add(
hsimPV,
new TH1F(
"xsim2PU",
"simulated x (Pile-up)",100,-1.,1.));
627 add(
hsimPV,
new TH1F(
"ysim2PU",
"simulated y (Pile-up)",100,-1.,1.));
628 add(
hsimPV,
new TH1F(
"zsim2PU",
"simulated z (Pile-up)",100,-20.,20.));
629 add(
hsimPV,
new TH1F(
"xsim2Signal",
"simulated x (Signal)",100,-1.,1.));
630 add(
hsimPV,
new TH1F(
"ysim2Signal",
"simulated y (Signal)",100,-1.,1.));
631 add(
hsimPV,
new TH1F(
"zsim2Signal",
"simulated z (Signal)",100,-20.,20.));
633 hsimPV[
"xsim2"] =
new TH1F(
"xsim2",
"simulated x",100,-1,1);
634 hsimPV[
"ysim2"] =
new TH1F(
"ysim2",
"simulated y",100,-1,1);
635 hsimPV[
"zsim2"] =
new TH1F(
"zsim2",
"simulated z",100,-20.,20.);
636 hsimPV[
"xsim3"] =
new TH1F(
"xsim3",
"simulated x",100,-0.1,0.1);
637 hsimPV[
"ysim3"] =
new TH1F(
"ysim3",
"simulated y",100,-0.1,0.1);
638 hsimPV[
"zsim3"] =
new TH1F(
"zsim3",
"simulated z",100,-20.,20.);
639 hsimPV[
"xsimb"] =
new TH1F(
"xsimb",
"simulated x",100,-0.01,0.01);
640 hsimPV[
"ysimb"] =
new TH1F(
"ysimb",
"simulated y",100,-0.01,0.01);
641 hsimPV[
"zsimb"] =
new TH1F(
"zsimb",
"simulated z",100,-20.,20.);
642 hsimPV[
"xsimb1"] =
new TH1F(
"xsimb1",
"simulated x",100,-0.1,0.1);
643 hsimPV[
"ysimb1"] =
new TH1F(
"ysimb1",
"simulated y",100,-0.1,0.1);
644 hsimPV[
"zsimb1"] =
new TH1F(
"zsimb1",
"simulated z",100,-20.,20.);
645 add(
hsimPV,
new TH1F(
"xbeam",
"beamspot x",100,-1.,1.));
646 add(
hsimPV,
new TH1F(
"ybeam",
"beamspot y",100,-1.,1.));
647 add(
hsimPV,
new TH1F(
"zbeam",
"beamspot z",100,-1.,1.));
648 add(
hsimPV,
new TH1F(
"wxbeam",
"beamspot sigma x",100,-1.,1.));
649 add(
hsimPV,
new TH1F(
"wybeam",
"beamspot sigma y",100,-1.,1.));
650 add(
hsimPV,
new TH1F(
"wzbeam",
"beamspot sigma z",100,-1.,1.));
651 hsimPV[
"xsim2"]->StatOverflows(kTRUE);
652 hsimPV[
"ysim2"]->StatOverflows(kTRUE);
653 hsimPV[
"zsim2"]->StatOverflows(kTRUE);
654 hsimPV[
"xsimb"]->StatOverflows(kTRUE);
655 hsimPV[
"ysimb"]->StatOverflows(kTRUE);
656 hsimPV[
"zsimb"]->StatOverflows(kTRUE);
657 hsimPV[
"nsimvtx"] =
new TH1F(
"nsimvtx",
"# of simulated vertices", 50, -0.5, 49.5);
658 hsimPV[
"nbsimtksinvtx"]=
new TH1F(
"nbsimtksinvtx",
"simulated tracks in vertex",100,-0.5,99.5);
659 hsimPV[
"nbsimtksinvtx"]->StatOverflows(kTRUE);
663 std::cout <<
"this is void PrimaryVertexAnalyzer4PU::endJob() " << std::endl;
665 double sumDA=0,sumBS=0,sumnoBS=0;
666 for(
int i=101;
i>0;
i--){
667 sumDA+=
hDA[
"matchVtxFractionSignal"]->GetBinContent(
i)/
hDA[
"matchVtxFractionSignal"]->Integral();
668 hDA[
"matchVtxFractionCumSignal"]->SetBinContent(
i,sumDA);
669 sumBS+=
hBS[
"matchVtxFractionSignal"]->GetBinContent(
i)/
hBS[
"matchVtxFractionSignal"]->Integral();
670 hBS[
"matchVtxFractionCumSignal"]->SetBinContent(
i,sumBS);
671 sumnoBS+=
hnoBS[
"matchVtxFractionSignal"]->GetBinContent(
i)/
hnoBS[
"matchVtxFractionSignal"]->Integral();
672 hnoBS[
"matchVtxFractionCumSignal"]->SetBinContent(
i,sumnoBS);
674 sumDA=0,sumBS=0,sumnoBS=0;
675 for(
int i=1;
i<1001;
i++){
676 sumDA+=
hDA[
"abszdistancetag"]->GetBinContent(
i);
677 hDA[
"abszdistancetagcum"]->SetBinContent(
i,sumDA/
float(
hDA[
"abszdistancetag"]->GetEntries()));
678 sumBS+=
hBS[
"abszdistancetag"]->GetBinContent(
i);
679 hBS[
"abszdistancetagcum"]->SetBinContent(
i,sumBS/
float(
hBS[
"abszdistancetag"]->GetEntries()));
680 sumnoBS+=
hnoBS[
"abszdistancetag"]->GetBinContent(
i);
681 hnoBS[
"abszdistancetagcum"]->SetBinContent(
i,sumnoBS/
float(
hnoBS[
"abszdistancetag"]->GetEntries()));
690 for(
int i=1;
i<501;
i++){
691 if(
hDA[
"vtxndf"]->GetEntries()>0){
692 p=
hDA[
"vtxndf"]->Integral(
i,501)/
hDA[
"vtxndf"]->GetEntries();
hDA[
"vtxndfc"]->SetBinContent(
i,p*
hDA[
"vtxndf"]->GetBinContent(
i));
694 if(
hBS[
"vtxndf"]->GetEntries()>0){
695 p=
hBS[
"vtxndf"]->Integral(
i,501)/
hBS[
"vtxndf"]->GetEntries();
hBS[
"vtxndfc"]->SetBinContent(
i,p*
hBS[
"vtxndf"]->GetBinContent(
i));
697 if(
hnoBS[
"vtxndf"]->GetEntries()>0){
698 p=
hnoBS[
"vtxndf"]->Integral(
i,501)/
hnoBS[
"vtxndf"]->GetEntries();
hnoBS[
"vtxndfc"]->SetBinContent(
i,p*
hnoBS[
"vtxndf"]->GetBinContent(
i));
705 hist->second->Write();
708 std::cout <<
"PrimaryVertexAnalyzer4PU::endJob: done" << std::endl;
718 std::vector<SimPart > tsim;
719 if(simVtcs->begin()==simVtcs->end()){
721 cout <<
" PrimaryVertexAnalyzer4PU::getSimTrkParameters no simvtcs" << endl;
726 cout <<
" PrimaryVertexAnalyzer4PU::getSimTrkParameters simVtcs n=" << simVtcs->size() << endl;
727 cout <<
" PrimaryVertexAnalyzer4PU::getSimTrkParameters 1st position" << setw(8) << setprecision(4) << simVtcs->begin()->position() << endl;
729 double t0=simVtcs->begin()->position().e();
731 for(edm::SimTrackContainer::const_iterator
t=simTrks->begin();
732 t!=simTrks->end(); ++
t){
734 std::cout <<
"simtrk has no vertex" << std::endl;
738 (*simVtcs)[
t->vertIndex()].position().y(),
739 (*simVtcs)[
t->vertIndex()].position().z(),
740 (*simVtcs)[
t->vertIndex()].position().e());
741 int pdgCode=
t->type();
745 std::cout <<
"funny particle skipped , code=" << pdgCode << std::endl;
748 if ((pdgCode==11)||(pdgCode==13)||(pdgCode==15)||(pdgCode==-211)||(pdgCode==-2212)||(pdgCode==-321)||(pdgCode==-3222)){Q=-1;}
749 else if((pdgCode==-11)||(pdgCode==-13)||(pdgCode==-15)||(pdgCode==211)||(pdgCode==2212)||(pdgCode==321)||(pdgCode==3222)){Q=1;}
753 if ( (Q != 0) && (
p.pt()>0.1) && (fabs(
t->momentum().eta())<3.0)
754 && fabs(
v.z()*simUnit<20) && (
sqrt(
v.x()*
v.x()+
v.y()*
v.y())<10.)){
755 double x0=
v.x()*simUnit;
756 double y0=
v.y()*simUnit;
757 double z0=
v.z()*simUnit;
759 double D0=x0*
sin(
p.phi())-y0*
cos(
p.phi())-0.5*kappa*(x0*x0+y0*y0);
760 double q=
sqrt(1.-2.*kappa*D0);
761 double s0=(x0*
cos(
p.phi())+y0*
sin(
p.phi()))/
q;
763 if (fabs(kappa*s0)>0.001){
764 s1=asin(kappa*s0)/
kappa;
766 double ks02=(kappa*s0)*(kappa*s0);
767 s1=s0*(1.+ks02/6.+3./40.*ks02*ks02+5./112.*
pow(ks02,3));
784 double x1=x0-0.033;
double y1=y0-0.;
785 D0=x1*
sin(
p.phi())-y1*
cos(
p.phi())-0.5*kappa*(x1*x1+y1*y1);
786 q=
sqrt(1.-2.*kappa*D0);
788 if (fabs(kappa*s0)>0.001){
789 s1=asin(kappa*s0)/
kappa;
791 double ks02=(kappa*s0)*(kappa*s0);
792 s1=s0*(1.+ks02/6.+3./40.*ks02*ks02+5./112.*
pow(ks02,3));
810 Array2D(
size_t iN,
size_t iM):
811 m_step(iM),m_array(new double[iN*iM]) {}
813 double& operator()(
size_t iN,
size_t iM) {
814 return m_array[iN*m_step+iM];
817 double operator()(
size_t iN,
size_t iM)
const {
818 return m_array[iN*m_step+iM];
822 std::unique_ptr<double[]> m_array;
827 const unsigned int nsim=simtrks.size();
828 const unsigned int nrec=trks.size();
829 std::vector<int> rectosim(nrec);
830 Array2D pij(nrec,nsim);
834 for(reco::TrackCollection::const_iterator
t=trks.begin();
t!=trks.end(); ++
t){
839 for(
unsigned int j=0;
j<nsim;
j++){
843 for(
unsigned int k=0;
k<5;
k++){
844 for(
unsigned int l=0;
l<5;
l++){
848 pij(i,
j)=
exp(-0.5*c);
853 for(
unsigned int k=0;
k<nrec;
k++){
854 int imatch=-1;
int jmatch=-1;
856 for(
unsigned int j=0;
j<nsim;
j++){
857 if ((simtrks[
j].rec)<0){
858 double psum=
exp(-0.5*mu);
859 for(
unsigned int i=0; i<nrec; i++){
860 if (rectosim[i]<0){ psum+=pij(i,
j);}
862 for(
unsigned int i=0; i<nrec; i++){
863 if ((rectosim[i]<0)&&(pij(i,
j)/psum>pmatch)){
864 pmatch=pij(i,
j)/psum;
870 if((jmatch>=0)||(imatch>=0)){
872 rectosim[imatch]=jmatch;
873 simtrks[jmatch].rec=imatch;
875 }
else if (
match(simtrks[jmatch].par, trks.at(imatch).parameters())){
877 rectosim[imatch]=jmatch;
878 simtrks[jmatch].rec=imatch;
885 std::cout <<
"unmatched sim " << std::endl;
886 for(
unsigned int j=0;
j<nsim;
j++){
887 if(simtrks[
j].rec<0){
888 double pt= 1./simtrks[
j].par[0]/
tan(simtrks[
j].par[1]);
890 std::cout << setw(3) <<
j << setw(8) << simtrks[
j].pdg
891 << setw(8) << setprecision(4) <<
" (" << simtrks[
j].xvtx <<
"," << simtrks[
j].yvtx <<
"," << simtrks[
j].zvtx <<
")"
893 <<
" phi=" << simtrks[
j].par[2]
894 <<
" eta= " << -
log(
tan(0.5*(
M_PI/2-simtrks[
j].par[1])))
904 double dqoverp =
a(0)-
b(0);
905 double dlambda =
a(1)-
b(1);
906 double dphi =
a(2)-
b(2);
907 double dsz =
a(4)-
b(4);
908 if (dphi>
M_PI){ dphi-=M_2_PI; }
else if(dphi<-
M_PI){dphi+=M_2_PI;}
909 return ( (fabs(dqoverp)<0.2) && (fabs(dlambda)<0.02) && (fabs(dphi)<0.04) && (fabs(dsz)<1.0) );
918 double ctau=(
pdt_->particle(
abs(p->pdg_id()) ))->lifetime();
919 return ctau >0 && ctau <1
e-6;
923 return ( !p->end_vertex() && p->status()==1 );
930 return part->charge()!=0;
933 return pdt_->particle( -p->pdg_id() )!=0;
938 Fill(h,
"rapidity_"+ttype,t.
eta());
939 Fill(h,
"z0_"+ttype,t.
vz());
942 Fill(h,
"pt_"+ttype,t.
pt());
951 Fill(h,
"logtresxy_"+ttype,
log(d0Error/0.0001)/
log(10.));
952 Fill(h,
"tpullxy_"+ttype,d0/d0Error);
956 Fill(h,
"logtresz_"+ttype,
log(dzError/0.0001)/
log(10.));
963 if((! (v==
NULL)) && (v->
ndof()>10.)) {
985 Fill(h,
"trackAlgo_" + ttype, t.
algo());
988 int longesthit=0, nbarrel=0;
990 if ((**hit).isValid() && (**hit).geographicalId().det() ==
DetId::Tracker ){
997 if (clust->sizeY()-longesthit>0) longesthit=clust->sizeY();
998 if (clust->sizeY()>20.){
999 Fill(h,
"lvseta_"+ttype,t.
eta(), 19.9);
1002 Fill(h,
"lvseta_"+ttype,t.
eta(), float(clust->sizeY()));
1003 Fill(h,
"lvstanlambda_"+ttype,
tan(t.
lambda()),
float(clust->sizeY()));
1009 Fill(h,
"nbarrelhits_"+ttype,
float(nbarrel));
1015 int longesthit=0, nbarrel=0;
1016 cout << Form(
"%5.2f %5.2f : ",t.
pt(),t.
eta());
1018 if ((**hit).isValid() && (**hit).geographicalId().det() ==
DetId::Tracker ){
1025 cout << Form(
"%4d",clust->sizeY());
1026 if (clust->sizeY()-longesthit>0) longesthit=clust->sizeY();
1035 std::cout << std::endl << title << std::endl;
1036 for(reco::VertexCollection::const_iterator
v=recVtxs->begin();
1037 v!=recVtxs->end(); ++
v){
1038 string vtype=
" recvtx ";
1041 }
else if (
v->ndof()==-5){
1043 }
else if(
v->ndof()==-3){
1046 std::cout <<
"vtx "<< std::setw(3) << std::setfill(
' ')<<ivtx++
1048 <<
" #trk " << std::fixed << std::setprecision(4) << std::setw(3) <<
v->tracksSize()
1049 <<
" chi2 " << std::fixed << std::setw(4) << std::setprecision(1) <<
v->chi2()
1050 <<
" ndof " << std::fixed << std::setw(5) << std::setprecision(2) <<
v->ndof()
1051 <<
" x " << std::setw(8) <<std::fixed << std::setprecision(4) <<
v->x()
1052 <<
" dx " << std::setw(8) <<
v->xError()
1053 <<
" y " << std::setw(8) <<
v->y()
1054 <<
" dy " << std::setw(8) <<
v->yError()
1055 <<
" z " << std::setw(8) <<
v->z()
1056 <<
" dz " << std::setw(8) <<
v->zError()
1063 for(SimVertexContainer::const_iterator vsim=simVtxs->begin();
1064 vsim!=simVtxs->end(); ++vsim){
1065 if ( vsim->position().x()*vsim->position().x()+vsim->position().y()*vsim->position().y() < 1.){
1066 std::cout << i++ <<
")" << std::scientific
1067 <<
" evtid=" << vsim->eventId().event() <<
"," << vsim->eventId().bunchCrossing()
1068 <<
" sim x=" << vsim->position().x()*
simUnit_
1069 <<
" sim y=" << vsim->position().y()*
simUnit_
1070 <<
" sim z=" << vsim->position().z()*
simUnit_
1071 <<
" sim t=" << vsim->position().t()
1072 <<
" parent=" << vsim->parentIndex()
1080 std::cout <<
" simTrks type, (momentum), vertIndex, genpartIndex" << std::endl;
1082 for(SimTrackContainer::const_iterator
t=simTrks->begin();
1083 t!=simTrks->end(); ++
t){
1085 <<
t->eventId().event() <<
"," <<
t->eventId().bunchCrossing()
1088 << (*t).genpartIndex();
1095 cout <<
"printRecTrks" << endl;
1097 for(reco::TrackCollection::const_iterator
t=recTrks->begin();
t!=recTrks->end(); ++
t){
1099 cout <<
"Track "<<i <<
" " ; i++;
1115 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;
1118 cout << Form(
" found=%6d lost=%6d chi2/ndof=%10.3f ",
t->found(),
t->lost(),
t->normalizedChi2())<<endl;
1121 cout <<
"subdet layers valid lost" << endl;
1122 cout << Form(
" barrel %2d %2d %2d",
1123 p.pixelBarrelLayersWithMeasurement(),
1124 p.numberOfValidPixelBarrelHits(),
1125 p.numberOfLostPixelBarrelHits(HitPattern::TRACK_HITS))
1128 cout << Form(
" fwd %2d %2d %2d",
1129 p.pixelEndcapLayersWithMeasurement(),
1130 p.numberOfValidPixelEndcapHits(),
1131 p.numberOfLostPixelEndcapHits(HitPattern::TRACK_HITS))
1133 cout << Form(
" pixel %2d %2d %2d",
1134 p.pixelLayersWithMeasurement(),
1135 p.numberOfValidPixelHits(),
1136 p.numberOfLostPixelHits(HitPattern::TRACK_HITS))
1138 cout << Form(
" tracker %2d %2d %2d",
1139 p.trackerLayersWithMeasurement(),
1140 p.numberOfValidTrackerHits(),
1141 p.numberOfLostTrackerHits(HitPattern::TRACK_HITS))
1146 if ((**hit).isValid() && (**hit).geographicalId().det() ==
DetId::Tracker ){
1153 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;
1159 cout << Form(
" endcap cluster size=%2d charge=%6.1f wx=%2d wy=%2d",clust->size(),clust->charge(),clust->sizeX(),clust->sizeY()) << endl;
1165 cout <<
"hitpattern" << endl;
1166 for(
int i = 0; i < p.numberOfHits(HitPattern::TRACK_HITS); i++){
1167 p.printHitPattern(HitPattern::TRACK_HITS, i,
std::cout);
1170 cout <<
"expected inner " << p.numberOfHits(HitPattern::MISSING_INNER_HITS) << endl;
1171 for(
int i = 0; i < p.numberOfHits(HitPattern::MISSING_INNER_HITS); i++){
1172 p.printHitPattern(HitPattern::MISSING_INNER_HITS, i,
std::cout);
1175 cout <<
"expected outer " << p.numberOfHits(HitPattern::MISSING_OUTER_HITS) << endl;
1176 for(
int i = 0; i < p.numberOfHits(HitPattern::MISSING_OUTER_HITS); i++){
1177 p.printHitPattern(HitPattern::MISSING_OUTER_HITS, i,
std::cout);
1193 std::vector<SimPart>& tsim,
1194 std::vector<SimEvent>& simEvt,
1197 vector<TransientTrack> selTrks;
1198 for(reco::TrackCollection::const_iterator
t=recTrks->begin();
1199 t!=recTrks->end(); ++
t){
1201 if( (!selectedOnly) || (selectedOnly &&
theTrackFilter(tt))){ selTrks.push_back(tt); }
1203 if (selTrks.size()==0)
return;
1204 stable_sort(selTrks.begin(), selTrks.end(), recTrackLessZ);
1209 for(
unsigned int i=0;
i<selTrks.size();
i++){ selRecTrks.push_back(selTrks[
i].track());}
1210 std::vector<int> rectosim=
supf(tsim, selRecTrks);
1213 cout <<
"printPVTrks" << endl;
1214 cout <<
"---- z +/- dz 1bet-m ip +/-dip pt phi eta";
1215 if((tsim.size()>0)||(simEvt.size()>0)) {
cout <<
" type pdg zvtx zdca dca zvtx zdca dsz";}
1220 for(
unsigned int i=0;
i<selTrks.size();
i++){
1222 cout << setw (3)<< isel;
1231 for(reco::VertexCollection::const_iterator
v=recVtxs->begin();
1232 v!=recVtxs->end(); ++
v){
1233 if ( (
v->ndof()<-1) || (
v->chi2()<=0) )
continue;
1234 for(
trackit_t tv=
v->tracks_begin(); tv!=
v->tracks_end(); tv++){
1236 if(selTrks[i].track().vz()==RTv.
vz()) {vmatch=iv;}
1241 double tz=(selTrks[
i].stateAtBeamLine().trackStateAtPCA()).
position().z();
1242 double tantheta=
tan((selTrks[i].stateAtBeamLine().trackStateAtPCA()).momentum().
theta());
1243 double tdz0= selTrks[
i].track().dzError();
1247 cout <<
"["<<setw(2)<<vmatch<<
"]";
1253 if(status&0x1){
cout <<
"i";}
else{
cout <<
".";};
1254 if(status&0x2){
cout <<
"c";}
else{
cout <<
".";};
1255 if(status&0x4){
cout <<
"h";}
else{
cout <<
".";};
1256 if(status&0x8){
cout <<
"q";}
else{
cout <<
".";};
1259 cout << setw (8) << fixed << setprecision(4)<< tz <<
" +/-" << setw (6)<<
sqrt(tdz2);
1263 if(selTrks[i].track().hitPattern().hasValidHitInFirstPixelBarrel()){
cout <<
"+"; }
else {
cout <<
"-"; }
1264 cout << setw(1) << selTrks[
i].track().hitPattern().pixelBarrelLayersWithMeasurement();
1265 cout << setw(1) << selTrks[
i].track().hitPattern().pixelEndcapLayersWithMeasurement();
1266 cout << setw(1) << hex << selTrks[
i].track().hitPattern().trackerLayersWithMeasurement()
1267 - selTrks[
i].track().hitPattern().pixelLayersWithMeasurement() <<
dec;
1268 cout <<
"-" << setw(1) << hex << selTrks[
i].track().hitPattern().numberOfHits(HitPattern::MISSING_OUTER_HITS) <<
dec;
1272 cout << setw (8) << IP.
value() <<
"+/-" << setw (6) << IP.
error();
1273 if(selTrks[i].track().ptError()<1){
1274 cout <<
" " << setw(8) << setprecision(2) << selTrks[
i].track().pt()*selTrks[
i].track().charge();
1276 cout <<
" " << setw(7) << setprecision(1) << selTrks[
i].track().pt()*selTrks[
i].track().charge() <<
"*";
1278 cout <<
" " << setw(5) << setprecision(2) << selTrks[
i].track().phi()
1279 <<
" " << setw(5) << setprecision(2) << selTrks[
i].track().eta() ;
1282 if(simEvt.size()>0){
1287 double vz=parentVertex->
position().z();
1288 cout <<
" " << tpr->eventId().event();
1289 cout <<
" " << setw(5) << tpr->pdgId();
1290 cout <<
" " << setw(8) << setprecision(4) << vz;
1292 cout <<
" not matched";
1296 if(tsim[rectosim[i]].
type==0){
cout <<
" prim " ;}
else{
cout <<
" sec ";}
1297 cout <<
" " << setw(5) << tsim[rectosim[
i]].pdg;
1298 cout <<
" " << setw(8) << setprecision(4) << tsim[rectosim[
i]].zvtx;
1299 cout <<
" " << setw(8) << setprecision(4) << tsim[rectosim[
i]].zdcap;
1300 cout <<
" " << setw(8) << setprecision(4) << tsim[rectosim[
i]].ddcap;
1301 double zvtxpull=(tz-tsim[rectosim[
i]].zvtx)/
sqrt(tdz2);
1302 cout << setw(6) << setprecision(1) << zvtxpull;
1303 double zdcapull=(tz-tsim[rectosim[
i]].zdcap)/tdz0;
1304 cout << setw(6) << setprecision(1) << zdcapull;
1305 double dszpull=(selTrks[
i].track().dsz()-tsim[rectosim[
i]].par[4])/selTrks[i].track().dszError();
1306 cout << setw(6) << setprecision(1) << dszpull;
1315 const std::vector<SimPart > & tsim,
1320 std::cout <<
"dump rec tracks: " << std::endl;
1322 for(reco::TrackCollection::const_iterator
t=recTrks->begin();
1323 t!=recTrks->end(); ++
t){
1325 std::cout << irec++ <<
") " << p << std::endl;
1328 std::cout <<
"match sim tracks: " << std::endl;
1332 for(std::vector<SimPart>::const_iterator
s=tsim.begin();
1333 s!=tsim.end(); ++
s){
1337 for(reco::TrackCollection::const_iterator
t=recTrks->begin();
1338 t!=recTrks->end(); ++
t){
1340 if (
match(
s->par,p)){ imatch=irec; }
1346 std::cout <<
" matched to rec trk" << imatch << std::endl;
1348 std::cout <<
" not matched" << std::endl;
1355 double & Tc,
double & chsq,
double & dzmax,
double & dztrim,
double & m4m2){
1356 if (tracks.size()<2){ Tc=-1; chsq=-1; dzmax=-1; dztrim=-1; m4m2=-1;
return;}
1358 double sumw=0, sumwz=0, sumww=0,sumwwz=0,sumwwzz=0;
1359 double zmin=1e10, zmin1=1e10, zmax1=-1e10,
zmax=-1e10;
1360 double m4=0,m3=0,m2=0,m1=0,m0=0;
1361 for(vector<reco::TransientTrack>::const_iterator it=tracks.begin(); it!=tracks.end(); it++){
1362 double tantheta=
tan(((*it).stateAtBeamLine().trackStateAtPCA()).momentum().theta());
1364 double z=((*it).stateAtBeamLine().trackStateAtPCA()).
position().z();
1365 double dz2=
pow((*it).track().dzError(),2)+
pow(beamspot.BeamWidthX()/tantheta,2);
1378 if(z<zmin1){zmin1=
z;}
if(z<zmin){zmin1=
zmin; zmin=
z;}
1379 if(z>zmax1){zmax1=
z;}
if(z>zmax){zmax1=
zmax; zmax=
z;}
1382 double z=sumwz/sumw;
1383 double a=sumwwzz-2*z*sumwwz+z*z*sumww;
1385 if(tracks.size()>1){
1386 chsq=(m2-m0*z*
z)/(tracks.size()-1);
1388 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));
1408 std::vector<std::pair<TrackingParticleRef, double> > tp =
r2s_[track];
1409 for (std::vector<std::pair<TrackingParticleRef, double> >::const_iterator it = tp.begin();
1410 it != tp.end(); ++it) {
1433 std::vector< edm::RefToBase<reco::Track> >
b;
1456 const View<Track> tC = *(trackCollectionH.product());
1459 vector<SimEvent> simEvt;
1460 map<EncodedEventId, unsigned int> eventIdToEventMap;
1461 map<EncodedEventId, unsigned int>::iterator id;
1463 for(TrackingParticleCollection::const_iterator it=simTracks->begin(); it!=simTracks->end(); it++){
1465 if( fabs(it->parentVertex().get()->position().z())>100.)
continue;
1467 unsigned int event=0;
1468 id=eventIdToEventMap.find(it->eventId());
1469 if (
id==eventIdToEventMap.end()){
1474 event=simEvt.size();
1477 cout <<
"getSimEvents: ";
1478 cout << it->eventId().bunchCrossing() <<
"," << it->eventId().event()
1479 <<
" z="<< it->vz() <<
" "
1481 <<
" z=" << parentVertex->
position().z() << endl;
1483 if (it->eventId()==parentVertex->
eventId()){
1491 e.
x=0; e.
y=0; e.
z=-88.;
1493 simEvt.push_back(e);
1500 simEvt[
event].tp.push_back(&(*it));
1501 if( (
abs(it->eta())<2.5) && (it->charge()!=0) ){
1502 simEvt[
event].sumpt2+=
pow(it->pt(),2);
1503 simEvt[
event].sumpt+=it->pt();
1508 for(TrackingParticleCollection::const_iterator it=simTracks->begin(); it!=simTracks->end(); it++){
1517 if( truthMatchedTrack(track,tpr)){
1519 if( eventIdToEventMap.find(tpr->eventId())==eventIdToEventMap.end() ){
cout <<
"Bug in getSimEvents" << endl;
break; }
1521 z2tp_[track.
get()->
vz()]=tpr;
1523 unsigned int event=eventIdToEventMap[tpr->eventId()];
1524 double ipsig=0,ipdist=0;
1526 double vx=parentVertex->
position().x();
1527 double vy=parentVertex->
position().y();
1528 double vz=parentVertex->
position().z();
1531 double dxy=track->
dxy(vertexBeamSpot_.position());
1537 if (theTrackFilter(t)){
1538 simEvt[
event].tk.push_back(t);
1539 if(ipdist<5){simEvt[
event].tkprim.push_back(t);}
1540 if(ipsig<5){simEvt[
event].tkprimsel.push_back(t);}
1547 cout <<
"SimEvents " << simEvt.size() << endl;
1548 for(
unsigned int i=0;
i<simEvt.size();
i++){
1550 if(simEvt[
i].tkprim.size()>0){
1552 getTc(simEvt[
i].tkprimsel, simEvt[
i].Tc, simEvt[
i].chisq, simEvt[
i].dzmax, simEvt[
i].dztrim, simEvt[
i].m4m2);
1563 cout <<
i <<
" ) nTP=" << simEvt[
i].tp.size()
1564 <<
" z=" << simEvt[
i].z
1565 <<
" recTrks=" << simEvt[
i].tk.size()
1566 <<
" recTrksPrim=" << simEvt[
i].tkprim.size()
1567 <<
" zfit=" << simEvt[
i].zfit
1581 std::vector<PrimaryVertexAnalyzer4PU::simPrimaryVertex> simpv;
1582 const HepMC::GenEvent* evt=evtMC->GetEvent();
1584 for(HepMC::GenEvent::vertex_const_iterator vitr= evt->vertices_begin();
1585 vitr != evt->vertices_end(); ++vitr )
1588 HepMC::FourVector pos = (*vitr)->position();
1589 if (fabs(pos.z())>1000)
continue;
1591 bool hasMotherVertex=
false;
1592 for ( HepMC::GenVertex::particle_iterator
1596 HepMC::GenVertex * mv=(*mother)->production_vertex();
1597 if (mv) {hasMotherVertex=
true;}
1599 if(hasMotherVertex) {
continue;}
1602 const double mm=0.1;
1605 for(std::vector<simPrimaryVertex>::iterator v0=simpv.begin();
1606 v0!=simpv.end(); v0++){
1607 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)){
1614 simpv.push_back(sv);
1619 vp->genVertex.push_back((*vitr)->barcode());
1622 for ( HepMC::GenVertex::particle_iterator
1623 daughter = (*vitr)->particles_begin(HepMC::descendants);
1624 daughter != (*vitr)->particles_end(HepMC::descendants);
1627 if (
find(vp->finalstateParticles.begin(), vp->finalstateParticles.end(),(*daughter)->barcode())
1628 == vp->finalstateParticles.end()){
1629 vp->finalstateParticles.push_back((*daughter)->barcode());
1630 HepMC::FourVector
m=(*daughter)->momentum();
1631 vp->ptot.setPx(vp->ptot.px()+m.px());
1632 vp->ptot.setPy(vp->ptot.py()+m.py());
1633 vp->ptot.setPz(vp->ptot.pz()+m.pz());
1634 vp->ptot.setE(vp->ptot.e()+m.e());
1635 vp->ptsq+=(m.perp())*(m.perp());
1637 if ( (m.perp()>0.2) && (fabs(m.pseudoRapidity())<2.5) &&
isCharged( *
daughter ) ){
1641 hsimPV[
"rapidity"]->Fill(m.pseudoRapidity());
1643 hsimPV[
"chRapidity"]->Fill(m.pseudoRapidity());
1645 hsimPV[
"pt"]->Fill(m.perp());
1652 cout <<
"------- PrimaryVertexAnalyzer4PU simPVs -------" << endl;
1653 for(std::vector<simPrimaryVertex>::iterator v0=simpv.begin();
1654 v0!=simpv.end(); v0++){
1655 cout <<
"z=" << v0->z
1656 <<
" px=" << v0->ptot.px()
1657 <<
" py=" << v0->ptot.py()
1658 <<
" pz=" << v0->ptot.pz()
1659 <<
" pt2="<< v0->ptsq
1662 cout <<
"-----------------------------------------------" << endl;
1672 double sepL_min = 50.;
1675 for(
unsigned sv_idx=0; sv_idx<simpv.size(); ++sv_idx){
1677 float comp_z = simpv[sv_idx];
1678 double dist_z = fabs(comp_z - in_z);
1680 if ( dist_z==0. )
continue;
1681 if ( dist_z<sepL_min ) sepL_min = dist_z;
1692 double in_z = inEv.
z;
1696 double sepL_min = 50.;
1699 for(
unsigned se_idx=0; se_idx<simEv.size(); ++se_idx){
1704 if ( comp_ev.
event()==lastEvent )
continue;
1705 lastEvent = comp_ev.
event();
1707 float comp_z = compEv.
z;
1711 double dist_z = fabs(comp_z - in_z);
1713 if ( dist_z<sepL_min ) sepL_min = dist_z;
1727 vector<int>* matchs =
new vector<int>();
1729 for(
unsigned vtx_idx=0; vtx_idx<vCH->size(); ++vtx_idx){
1733 double comp_z = comp_vtxref->z();
1734 double comp_z_err = comp_vtxref->zError();
1736 double z_dist = comp_z - in_z;
1737 double z_rel = z_dist / comp_z_err;
1739 if ( fabs(z_rel)<zmatch_ ) {
1740 matchs->push_back(vtx_idx);
1754 std::vector<PrimaryVertexAnalyzer4PU::simPrimaryVertex> simpv;
1756 if(
DEBUG_){
std::cout <<
"getSimPVs TrackingVertexCollection " << std::endl;}
1758 for (TrackingVertexCollection::const_iterator
v = tVC ->
begin();
v != tVC ->
end(); ++
v) {
1761 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;
1768 if ((
unsigned int)
v->eventId().event()<simpv.size())
continue;
1769 if (fabs(
v->position().z())>1000)
continue;
1772 const double mm=1.0;
1778 sv.eventId=(**iTrack).eventId();
1781 for(std::vector<simPrimaryVertex>::iterator v0=simpv.begin();
1782 v0!=simpv.end(); v0++){
1783 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)){
1790 if(
DEBUG_){
std::cout <<
"this is a new vertex " << sv.eventId.event() <<
" " << sv.x <<
" " << sv.y <<
" " << sv.z <<std::endl;}
1791 simpv.push_back(sv);
1794 if(
DEBUG_){
std::cout <<
"this is not a new vertex" << sv.x <<
" " << sv.y <<
" " << sv.z <<std::endl;}
1800 std::cout <<
" Daughter momentum: " << (*(*iTP)).momentum();
1807 cout <<
"------- PrimaryVertexAnalyzer4PU simPVs from TrackingVertices -------" << endl;
1808 for(std::vector<simPrimaryVertex>::iterator v0=simpv.begin();
1809 v0!=simpv.end(); v0++){
1810 cout <<
"z=" << v0->z <<
" event=" << v0->eventId.event() << endl;
1812 cout <<
"-----------------------------------------------" << endl;
1822 std::vector<simPrimaryVertex> simpv;
1823 std::vector<float> pui_z;
1824 std::vector<SimPart> tsim;
1835 <<
"PrimaryVertexAnalyzer4PU::analyze event counter=" <<
eventcounter_
1844 std::cout <<
"Some problem occurred with the particle data table. This may not work !" <<std::endl;
1854 for (
unsigned int puinfo_ite=0;puinfo_ite<(*puinfoH).size();++puinfo_ite){
1855 if ((*puinfoH)[puinfo_ite].getBunchCrossing()==0){
1856 puinfo=(*puinfoH)[puinfo_ite];
1881 int nhighpurity=0, ntot=0;
1882 for(reco::TrackCollection::const_iterator
t=recTrks->begin();
t!=recTrks->end(); ++
t){
1886 if(ntot>10)
hnoBS[
"highpurityTrackFraction"]->Fill(
float(nhighpurity)/
float(ntot));
1888 if(
verbose_){
cout <<
"rejected, " << nhighpurity <<
" highpurity out of " << ntot <<
" total tracks "<< endl<< endl;}
1899 cout <<
" beamspot not found, using dummy " << endl;
1904 if((recVtxs->begin()->
isValid())&&(recVtxs->begin()->ndof()>1)&&(recVtxs->begin()->ndof()>(0.0*recVtxs->begin()->tracksSize()))){
1909 cout << Form(
"XBS %10d %5d %14llu %4d %lu %5.2f %8f %8f %8f %8f %8f %8f",
1911 (
unsigned long)(recVtxs->begin()->tracksSize()), recVtxs->begin()->ndof(),
1912 recVtxs->begin()->x(), recVtxs->begin()->xError(),
1913 recVtxs->begin()->y(), recVtxs->begin()->yError(),
1914 recVtxs->begin()->z(), recVtxs->begin()->zError()
1941 vector<SimEvent> simEvt;
1942 if (gotTP && gotTV ){
1948 simEvt=
getSimEvents(TPCollectionH, TVCollectionH, trackCollectionH);
1950 if (simEvt.size()==0){
1951 cout <<
" !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" << endl;
1952 cout <<
" !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" << endl;
1953 cout <<
" !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" << endl;
1954 cout <<
" !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" << endl;
1955 cout <<
" !!!!!!!!!!!!!!!!!!!!!! got TrackingParticles but no simEvt !!!!!!!!!!!!!!!!!" << endl;
1956 cout <<
" dumping Tracking particles " << endl;
1958 for(TrackingParticleCollection::const_iterator it=simTracks->begin(); it!=simTracks->end(); it++){
1959 cout << *it << endl;
1961 cout <<
" dumping Tracking Vertices " << endl;
1963 for(TrackingVertexCollection::const_iterator iv=tpVtxs->begin(); iv!=tpVtxs->end(); iv++){
1964 cout << *iv << endl;
1967 cout <<
"dumping simTracks" << endl;
1968 for(SimTrackContainer::const_iterator
t=simTrks->begin();
t!=simTrks->end(); ++
t){
1971 cout <<
"dumping simVertexes" << endl;
1972 for(SimVertexContainer::const_iterator vv=simVtxs->begin();
1975 cout << *vv << endl;
1978 cout <<
"no hepMC" << endl;
1980 cout <<
" !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" << endl;
1982 const HepMC::GenEvent* evt=evtMC->GetEvent();
1984 std::cout <<
"process id " <<evt->signal_process_id()<<std::endl;
1985 std::cout <<
"signal process vertex "<< ( evt->signal_process_vertex() ?
1986 evt->signal_process_vertex()->barcode() : 0 ) <<std::endl;
1987 std::cout <<
"number of vertices " << evt->vertices_size() << std::endl;
1990 cout <<
"no event in HepMC" << endl;
1992 cout <<
" !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" << endl;
2000 cout <<
"Found Tracking Vertices " << endl;
2010 cout <<
"Using HepMCProduct " << endl;
2011 std::cout <<
"simtrks " << simTrks->size() << std::endl;
2020 for(reco::VertexCollection::const_iterator
v=recVtxs->begin();
2021 v!=recVtxs->end(); ++
v){
2022 if ((
v->ndof()==-3) && (
v->chi2()==0) ){
2027 hsimPV[
"nsimvtx"]->Fill(simpv.size());
2028 for(std::vector<simPrimaryVertex>::iterator vsim=simpv.begin();
2029 vsim!=simpv.end(); vsim++){
2034 hsimPV[
"nbsimtksinvtx"]->Fill(vsim->nGenTrk);
2072 cout << endl <<
"Event dump" << endl
2079 if (bnoBS) {
printRecVtxs(recVtxs,
"Offline without Beamspot");}
2080 if (bnoBS && (!bDA)){
printPVTrks(recTrks, recVtxs, tsim, simEvt,
false);}
2081 if (bBS)
printRecVtxs(recVtxsBS,
"Offline with Beamspot");
2084 printPVTrks(recTrks, recVtxsDA, tsim, simEvt,
false);
2095 bool lt(
const std::pair<double,unsigned int>&
a,
const std::pair<double,unsigned int>&
b ){
2096 return a.first<b.first;
2104 vector<SimEvent> & simEvt,
2107 if (simEvt.size()==0){
return;}
2112 vector< pair<double,unsigned int> > zrecv;
2113 for(
unsigned int idx=0;
idx<recVtxs->size();
idx++){
2114 if ( (recVtxs->at(
idx).ndof()<0) || (recVtxs->at(
idx).chi2()<=0) )
continue;
2115 zrecv.push_back( make_pair(recVtxs->at(
idx).z(),
idx) );
2117 stable_sort(zrecv.begin(),zrecv.end(),
lt);
2120 vector< pair<double,unsigned int> > zsimv;
2121 for(
unsigned int idx=0;
idx<simEvt.size();
idx++){
2122 zsimv.push_back(make_pair(simEvt[
idx].
z,
idx));
2124 stable_sort(zsimv.begin(), zsimv.end(),
lt);
2126 cout <<
"---------------------------" << endl;
2128 cout <<
"---------------------------" << endl;
2129 cout <<
" z[cm] rec --> ";
2131 for(vector< pair<double,unsigned int> >::iterator itrec=zrecv.begin(); itrec!=zrecv.end(); itrec++){
2132 cout << setw(7) << fixed << itrec->first;
2133 if (itrec->second==0){
cout <<
"*" ;}
else{
cout <<
" " ;}
2137 for(vector< pair<double,unsigned int> >::iterator itrec=zrecv.begin(); itrec!=zrecv.end(); itrec++){
2138 cout << setw(7) << fixed << recVtxs->at(itrec->second).tracksSize();
2139 if (itrec->second==0){
cout <<
"*" ;}
else{
cout <<
" " ;}
2141 cout <<
" rec tracks" << endl;
2143 map<unsigned int, int> truthMatchedVertexTracks;
2144 for(vector< pair<double,unsigned int> >::iterator itrec=zrecv.begin(); itrec!=zrecv.end(); itrec++){
2146 cout << setw(7) << fixed << truthMatchedVertexTracks[itrec->second];
2147 if (itrec->second==0){
cout <<
"*" ;}
else{
cout <<
" " ;}
2149 cout <<
" truth matched " << endl;
2151 cout <<
"sim ------- trk prim ----" << endl;
2153 map<unsigned int, unsigned int> rvmatch;
2154 map<unsigned int, double > nmatch;
2155 map<unsigned int, double > purity;
2156 map<unsigned int, double > wpurity;
2158 for(vector< pair<double,unsigned int> >::iterator itrec=zrecv.begin(); itrec!=zrecv.end(); itrec++){
2159 purity[itrec->second]=0.;
2160 wpurity[itrec->second]=0.;
2163 for(vector< pair<double,unsigned int> >::iterator itsim=zsimv.begin(); itsim!=zsimv.end(); itsim++){
2167 if (itsim->second==0){
2168 cout << setw(8) << fixed << ev->
z <<
")*" << setw(5) << ev->
tk.size() << setw(5) << ev->
tkprim.size() <<
" | ";
2170 cout << setw(8) << fixed << ev->
z <<
") " << setw(5) << ev->
tk.size() << setw(5) << ev->
tkprim.size() <<
" | ";
2173 nmatch[itsim->second]=0;
2174 double matchpurity=0,matchwpurity=0;
2176 for(vector< pair<double,unsigned int> >::iterator itrec=zrecv.begin(); itrec!=zrecv.end(); itrec++){
2181 for(vector<TransientTrack>::iterator te=ev->
tk.begin(); te!=ev->
tk.end(); te++){
2188 cout << setw(7) << int(n)<<
" ";
2190 if (n > nmatch[itsim->second]){
2191 nmatch[itsim->second]=
n;
2192 rvmatch[itsim->second]=itrec->second;
2193 matchpurity=n/truthMatchedVertexTracks[itrec->second];
2194 matchwpurity=wt/truthMatchedVertexTracks[itrec->second];
2197 if(n > purity[itrec->second]){
2198 purity[itrec->second]=
n;
2201 if(wt > wpurity[itrec->second]){
2202 wpurity[itrec->second]=wt;
2208 if (nmatch[itsim->second]>0 ){
2209 if(matchpurity>0.5){
2214 cout <<
" max eff. = " << setw(8) << nmatch[itsim->second]/ev->
tk.size() <<
" p=" << matchpurity <<
" w=" << matchwpurity << endl;
2216 if(ev->
tk.size()==0){
2217 cout <<
" invisible" << endl;
2218 }
else if (ev->
tk.size()==1){
2219 cout <<
"single track " << endl;
2221 cout <<
"lost " << endl;
2225 cout <<
"---------------------------" << endl;
2229 for(vector< pair<double,unsigned int> >::iterator itrec=zrecv.begin(); itrec!=zrecv.end(); itrec++){
2230 cout << setw(7) << fixed << purity[itrec->second]/truthMatchedVertexTracks[itrec->second];
2231 if (itrec->second==0){
cout <<
"*" ;}
else{
cout <<
" " ;}
2235 cout <<
"---------------------------" << endl;
2238 for(vector< pair<double,unsigned int> >::iterator itsim=zsimv.begin(); itsim!=zsimv.end(); itsim++){
2241 for(vector<TransientTrack>::iterator te=ev->
tk.begin(); te!=ev->
tk.end(); te++){
2246 for(vector< pair<double,unsigned int> >::iterator itrec=zrecv.begin(); itrec!=zrecv.end(); itrec++){
2251 if(RTe.
vz()==RTv.
vz()) {ivassign=itrec->second;}
2254 double tantheta=
tan((te->stateAtBeamLine().trackStateAtPCA()).momentum().theta());
2256 double dz2=
pow(RTe.
dzError(),2)+
pow(beamspot.BeamWidthX()/tantheta,2);
2258 if(ivassign==(
int)rvmatch[itsim->second]){
2259 Fill(h,
"correctlyassigned",RTe.
eta(),RTe.
pt());
2260 Fill(h,
"ptcat",RTe.
pt());
2265 Fill(h,
"misassigned",RTe.
eta(),RTe.
pt());
2266 Fill(h,
"ptmis",RTe.
pt());
2270 cout <<
"vertex " << setw(8) << fixed << ev->
z;
2273 cout <<
" track lost ";
2277 cout <<
" track misassigned " << setw(8) << fixed << recVtxs->at(ivassign).z();
2280 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);
2285 double zparent=tpr->parentVertex().
get()->position().z();
2286 if(zparent==ev->
z) {
2291 cout <<
" id=" << tpr->pdgId();
2300 cout <<
"---------------------------" << endl;
2308 vector<SimEvent> & simEvt,
2311 if(simEvt.size()==0)
return;
2317 Fill(h,
"npu0",simEvt.size());
2319 for(vector<SimEvent>::iterator
ev=simEvt.begin();
ev!=simEvt.end();
ev++){
2320 Fill(h,
"Tc",
ev->Tc,
ev==simEvt.begin());
2321 Fill(h,
"Chisq",
ev->chisq,
ev==simEvt.begin());
2322 if(
ev->chisq>0)
Fill(h,
"logChisq",
log(
ev->chisq),
ev==simEvt.begin());
2323 Fill(h,
"dzmax",
ev->dzmax,
ev==simEvt.begin());
2324 Fill(h,
"dztrim",
ev->dztrim,
ev==simEvt.begin());
2325 Fill(h,
"m4m2",
ev->m4m2,
ev==simEvt.begin());
2328 for(vector<SimEvent>::iterator ev2=
ev+1; ev2!=simEvt.end(); ev2++){
2329 vector<TransientTrack> xt;
2330 if((
ev->tkprimsel.size()>0)&&(ev2->tkprimsel.size()>0)&&(
ev->tkprimsel.size()+ev2->tkprimsel.size())>1){
2331 xt.insert (xt.end() ,
ev->tkprimsel.begin(),
ev->tkprimsel.end());
2332 xt.insert (xt.end() ,ev2->tkprimsel.begin(),ev2->tkprimsel.end());
2333 double xTc,xChsq,xDzmax,xDztrim,xm4m2;
2334 getTc(xt, xTc, xChsq, xDzmax, xDztrim,xm4m2);
2336 Fill(h,
"xTc",xTc,
ev==simEvt.begin());
2338 Fill(h,
"xChisq", xChsq,
ev==simEvt.begin());
2339 if(xChsq>0){
Fill(h,
"logxChisq",
log(xChsq),
ev==simEvt.begin());};
2340 Fill(h,
"xdzmax", xDzmax,
ev==simEvt.begin());
2341 Fill(h,
"xdztrim", xDztrim,
ev==simEvt.begin());
2342 Fill(h,
"xm4m2", xm4m2,
ev==simEvt.begin());
2351 for(reco::VertexCollection::const_iterator
v=recVtxs->begin();
2352 v!=recVtxs->end(); ++
v){
2353 if ( (
v->isFake()) || (
v->ndof()<0) || (
v->chi2()<=0) )
continue;
2358 for(vector<SimEvent>::iterator
ev=simEvt.begin();
ev!=simEvt.end();
ev++){
2359 ev->ntInRecVz.clear();
2362 for(reco::VertexCollection::const_iterator
v=recVtxs->begin();
2363 v!=recVtxs->end(); ++
v){
2365 for(vector<TransientTrack>::iterator te=
ev->tk.begin(); te!=
ev->tk.end(); te++){
2367 for(
trackit_t tv=
v->tracks_begin(); tv!=
v->tracks_end(); tv++){
2369 if(RTe.
vz()==RTv.
vz()) {n++; wt+=
v->trackWeight(*tv);}
2372 ev->ntInRecVz[
v->z()]=
n;
2373 if (n >
ev->nmatch){
ev->nmatch=
n;
ev->zmatch=
v->z();
ev->zmatch=
v->z(); }
2380 for(reco::VertexCollection::const_iterator
v=recVtxs->begin();
2381 v!=recVtxs->end(); ++
v){
2383 for(vector<SimEvent>::iterator
ev=simEvt.begin();
ev!=simEvt.end();
ev++){
2384 if ((
ev->nmatch>0)&&(
ev->zmatch==
v->z())){
2388 if(!matched && !
v->isFake()) {
2390 cout <<
" fake rec vertex at z=" <<
v->z() << endl;
2392 Fill(h,
"unmatchedVtxZ",
v->z());
2393 Fill(h,
"unmatchedVtxNdof",
v->ndof());
2397 Fill(h,
"unmatchedVtx",nfake);
2398 Fill(h,
"unmatchedVtxFrac",nfake/nrecvtxs);
2402 for(reco::VertexCollection::const_iterator
v=recVtxs->begin();
2403 v!=recVtxs->end(); ++
v){
2405 if ( (
v->ndof()<0) || (
v->chi2()<=0) )
continue;
2408 bool matchFound=
false;
2411 for(vector<SimEvent>::iterator
ev=simEvt.begin();
ev!=simEvt.end();
ev++){
2414 for(vector<TransientTrack>::iterator te=
ev->tk.begin(); te!=
ev->tk.end(); te++){
2417 for(
trackit_t tv=
v->tracks_begin(); tv!=
v->tracks_end(); tv++){
2419 if(RTe.
vz()==RTv.
vz()){ n++;}
2427 evmatch=
ev->eventId;
2436 if (matchFound && (nmatchany>0)){
2440 double purity =nmatch/nmatchany;
2441 Fill(h,
"recmatchPurity",purity);
2442 if(
v==recVtxs->begin()){
2443 Fill(h,
"recmatchPurityTag",purity, (
bool)(evmatch==iSignal));
2445 Fill(h,
"recmatchPuritynoTag",purity,(
bool)(evmatch==iSignal));
2448 Fill(h,
"recmatchvtxs",nmatchvtx);
2449 if(
v==recVtxs->begin()){
2450 Fill(h,
"recmatchvtxsTag",nmatchvtx);
2452 Fill(h,
"recmatchvtxsnoTag",nmatchvtx);
2456 Fill(h,
"nrecv",nrecvtxs);
2462 vector<int> used_indizesV;
2463 int lastEvent = 999;
2465 for(vector<SimEvent>::iterator
ev=simEvt.begin();
ev!=simEvt.end();
ev++){
2467 if(
ev->tk.size()>0) npu1++;
2468 if(
ev->tk.size()>1) npu2++;
2472 bool isSignal=
ev->eventId==iSignal;
2474 Fill(h,
"nRecTrkInSimVtx",(
double)
ev->tk.size(),isSignal);
2475 Fill(h,
"nPrimRecTrkInSimVtx",(
double)
ev->tkprim.size(),isSignal);
2476 Fill(h,
"sumpt2rec",
sqrt(
ev->sumpt2rec),isSignal);
2480 double nRecVWithTrk=0;
2481 double nmatch=0, ntmatch=0, zmatch=-99;
2483 for(reco::VertexCollection::const_iterator
v=recVtxs->begin();
2484 v!=recVtxs->end(); ++
v){
2485 if ( (
v->ndof()<-1) || (
v->chi2()<=0) )
continue;
2488 for(vector<TransientTrack>::iterator te=
ev->tk.begin(); te!=
ev->tk.end(); te++){
2490 for(
trackit_t tv=
v->tracks_begin(); tv!=
v->tracks_end(); tv++){
2492 if(RTe.
vz()==RTv.
vz()) {n++; wt+=
v->trackWeight(*tv);}
2496 if(n>0){ nRecVWithTrk++; }
2498 nmatch=
n; ntmatch=
v->tracksSize(); zmatch=
v->position().z();
2504 if(
ev->tk.size()>0){
Fill(h,
"trkAssignmentEfficiency", nmatch/
ev->tk.size(), isSignal); };
2505 if(
ev->tkprim.size()>0){
Fill(h,
"primtrkAssignmentEfficiency", nmatch/
ev->tkprim.size(), isSignal); };
2509 double ntsim=
ev->tk.size();
2510 double matchpurity=nmatch/ntmatch;
2514 Fill(h,
"matchVtxFraction",nmatch/ntsim,isSignal);
2515 if(nmatch/ntsim>=0.5){
2516 Fill(h,
"matchVtxEfficiency",1.,isSignal);
2517 if(ntsim>1){
Fill(h,
"matchVtxEfficiency2",1.,isSignal);}
2518 if(matchpurity>0.5){
Fill(h,
"matchVtxEfficiency5",1.,isSignal);}
2520 Fill(h,
"matchVtxEfficiency",0.,isSignal);
2521 if(ntsim>1){
Fill(h,
"matchVtxEfficiency2",0.,isSignal);}
2522 Fill(h,
"matchVtxEfficiency5",0.,isSignal);
2524 cout <<
"Signal vertex not matched " << message <<
" event=" <<
eventcounter_ <<
" nmatch=" << nmatch <<
" ntsim=" << ntsim << endl;
2530 Fill(h,
"matchVtxZ",zmatch-
ev->z);
2531 Fill(h,
"matchVtxZ",zmatch-
ev->z,isSignal);
2532 Fill(h,
"matchVtxZCum",fabs(zmatch-
ev->z));
2533 Fill(h,
"matchVtxZCum",fabs(zmatch-
ev->z),isSignal);
2536 Fill(h,
"matchVtxZCum",1.0);
2537 Fill(h,
"matchVtxZCum",1.0,isSignal);
2541 Fill(h,
"matchVtxEfficiencyZ",1.,isSignal);
2543 Fill(h,
"matchVtxEfficiencyZ",0.,isSignal);
2546 if(ntsim>0)
Fill(h,
"matchVtxEfficiencyZ1", fabs(zmatch-
ev->z)<
zmatch_ , isSignal);
2547 if(ntsim>1)
Fill(h,
"matchVtxEfficiencyZ2", fabs(zmatch-
ev->z)<
zmatch_ , isSignal);
2550 Fill(h,
"vtxMultiplicity",nRecVWithTrk,isSignal);
2554 Fill(h,
"vtxFindingEfficiencyVsNtrk",(
double)
ev->tk.size(),1.);
2556 Fill(h,
"vtxFindingEfficiencyVsNtrkSignal",
ev->tk.size(),1.);
2558 Fill(h,
"vtxFindingEfficiencyVsNtrkPU",(
double)
ev->tk.size(),1.);
2562 Fill(h,
"vtxFindingEfficiencyVsNtrk",(
double)
ev->tk.size(),0.);
2564 Fill(h,
"vtxFindingEfficiencyVsNtrkSignal",(
double)
ev->tk.size(),1.);
2566 Fill(h,
"vtxFindingEfficiencyVsNtrkPU",(
double)
ev->tk.size(),1.);
2572 if (
ev->eventId.event()==lastEvent )
continue;
2573 lastEvent =
ev->eventId.event();
2575 if ( ( fabs(
ev->z)>24. ) || (
ev->eventId.bunchCrossing()!=0 ) )
continue;
2578 int best_match = 999;
2580 for (
unsigned rv_idx=0; rv_idx<recVtxs->size(); rv_idx++ ) {
2586 for ( vector<TrackBaseRef>::const_iterator rv_trk_ite=vtx_ref->tracks_begin(); rv_trk_ite!=vtx_ref->tracks_end(); rv_trk_ite++ ) {
2588 vector<pair<TrackingParticleRef, double> > tp;
2589 if ( rsC.
find(*rv_trk_ite)!=rsC.
end() ) tp = rsC[*rv_trk_ite];
2591 for (
unsigned matched_tp_idx=0; matched_tp_idx<tp.size(); matched_tp_idx++ ) {
2596 if ( ( tp_ev.
bunchCrossing()==
ev->eventId.bunchCrossing() ) && ( tp_ev.
event()==
ev->eventId.event() ) ) {
2606 if ( match > max_match ) {
2609 best_match = rv_idx;
2619 bool dsflag =
false;
2621 for (
unsigned i=0;
i<used_indizesV.size();
i++) {
2622 if ( used_indizesV.at(
i)==best_match ) {
2628 if ( best_match!=999 ) eff = 1.;
2629 if ( dsflag ) dsimed = 1.;
2630 if ( ( best_match!=999 ) && ( !dsflag ) ) effwod = 1.;
2632 if ( best_match!=999 ) {
2633 used_indizesV.push_back(best_match);
2636 Fill(h,
"tveffvszsep", sep, eff);
2637 Fill(h,
"tveffwodvszsep", sep, effwod);
2638 Fill(h,
"tvmergedvszsep", sep, dsimed);
2643 Fill(h,
"npu1",npu1);
2644 Fill(h,
"npu2",npu2);
2646 Fill(h,
"nrecvsnpu",npu1,
float(nrecvtxs));
2647 Fill(h,
"nrecvsnpu2",npu2,
float(nrecvtxs));
2654 for(vector<TransientTrack>::iterator te=ev->
tk.begin(); te!=ev->
tk.end(); te++){
2658 if(RTe.
vz()==RTv.
vz()) {n++;}
2662 cout <<
"Number of tracks in reco tagvtx " << v->
tracksSize() << endl;
2663 cout <<
"Number of selected tracks in sim event vtx " << ev->
tk.size() <<
" (prim=" << ev->
tkprim.size() <<
")"<<endl;
2664 cout <<
"Number of tracks in both " << n << endl;
2666 if (ntruthmatched>0){
2667 cout <<
"TrackPurity = "<< n/ntruthmatched <<endl;
2668 Fill(h,
"TagVtxTrkPurity",n/ntruthmatched);
2670 if (ev->
tk.size()>0){
2671 cout <<
"TrackEfficiency = "<< n/ev->
tk.size() <<endl;
2672 Fill(h,
"TagVtxTrkEfficiency",n/ev->
tk.size());
2681 std::vector<simPrimaryVertex> & simpv,
2682 const std::vector<float> & pui_z,
2685 int nrectrks=recTrks->size();
2686 int nrecvtxs=recVtxs->size();
2696 for(reco::VertexCollection::const_iterator
v=recVtxs->begin();
2697 v!=recVtxs->end(); ++
v){
2698 if ( (fabs(
v->ndof()+3.)<0.0001) && (
v->chi2()<=0) ){
2705 }
else if( (fabs(
v->ndof()+2.)<0.0001) && (
v->chi2()==0) ){
2707 clusters.push_back(*
v);
2708 Fill(h,
"cpuvsntrk",(
double)
v->tracksSize(),fabs(
v->y()));
2709 cpufit+=fabs(
v->y());
2710 Fill(h,
"nclutrkall",(
double)
v->tracksSize());
2711 Fill(h,
"selstat",
v->x());
2715 Fill(h,
"cpuclu",cpuclu);
2716 Fill(h,
"cpufit",cpufit);
2717 Fill(h,
"cpucluvsntrk",nrectrks, cpuclu);
2726 for(std::vector<simPrimaryVertex>::iterator vsim=simpv.begin();
2727 vsim!=simpv.end(); vsim++){
2729 nsimtrk+=vsim->nGenTrk;
2734 for(reco::VertexCollection::const_iterator vrec=recVtxs->begin(); vrec!=recVtxs->end(); ++vrec){
2736 if( vrec->isFake() ) {
2738 cout <<
"fake vertex" << endl;
2741 if( vrec->ndof()<0. )
continue;
2745 if( ((vsim->recVtx) && (fabs(vsim->recVtx->position().z()-vsim->z-dsimrecz)>fabs(vrec->z()-vsim->z-dsimrecz)))
2746 || (!vsim->recVtx) )
2748 vsim->recVtx=&(*vrec);
2751 for(
unsigned int iclu=0; iclu<clusters.size(); iclu++){
2752 if( fabs(clusters[iclu].
position().
z()-vrec->position().z()) < 0.001 ){
2754 vsim->nclutrk=clusters[iclu].position().y();
2760 if ((simpv.size()==1) && ( fabs(vsim->recVtx->position().z()-vsim->z-dsimrecz)>
zmatch_ )){
2764 Fill(h,
"fakeVtxZ",vrec->z());
2765 if (vrec->ndof()>=0.5)
Fill(h,
"fakeVtxZNdofgt05",vrec->z());
2766 if (vrec->ndof()>=2.0)
Fill(h,
"fakeVtxZNdofgt2",vrec->z());
2767 Fill(h,
"fakeVtxNdof",vrec->ndof());
2768 Fill(h,
"fakeVtxNtrk",vrec->tracksSize());
2769 if(vrec->tracksSize()==2){
Fill(h,
"fake2trkchi2vsndof",vrec->ndof(),vrec->chi2()); }
2770 if(vrec->tracksSize()==3){
Fill(h,
"fake3trkchi2vsndof",vrec->ndof(),vrec->chi2()); }
2771 if(vrec->tracksSize()==4){
Fill(h,
"fake4trkchi2vsndof",vrec->ndof(),vrec->chi2()); }
2772 if(vrec->tracksSize()==5){
Fill(h,
"fake5trkchi2vsndof",vrec->ndof(),vrec->chi2()); }
2776 Fill(h,
"nsimtrk",
float(nsimtrk));
2777 Fill(h,
"nsimtrk",
float(nsimtrk),vsim==simpv.begin());
2778 Fill(h,
"nrecsimtrk",
float(vsim->nMatchedTracks));
2779 Fill(h,
"nrecnosimtrk",
float(nsimtrk-vsim->nMatchedTracks));
2782 if (vsim->recVtx && ( fabs(vsim->recVtx->z()-vsim->z*
simUnit_)<
zmatch_ )){
2784 if(
verbose_){
std::cout <<
"primary matched " << message <<
" " << setw(8) << setprecision(4) << vsim->x <<
" " << vsim->y <<
" " << vsim->z << std:: endl;}
2785 Fill(h,
"matchedVtxNdof", vsim->recVtx->ndof());
2791 Fill(h,
"pullx", (vsim->recVtx->x()-vsim->x*
simUnit_)/vsim->recVtx->xError() );
2792 Fill(h,
"pully", (vsim->recVtx->y()-vsim->y*
simUnit_)/vsim->recVtx->yError() );
2793 Fill(h,
"pullz", (vsim->recVtx->z()-vsim->z*
simUnit_)/vsim->recVtx->zError() );
2794 Fill(h,
"resxr", vsim->recVtx->x()-vsim->x*
simUnit_-dsimrecx);
2795 Fill(h,
"resyr", vsim->recVtx->y()-vsim->y*
simUnit_-dsimrecy );
2796 Fill(h,
"reszr", vsim->recVtx->z()-vsim->z*
simUnit_-dsimrecz);
2797 Fill(h,
"pullxr", (vsim->recVtx->x()-vsim->x*
simUnit_-dsimrecx)/vsim->recVtx->xError() );
2798 Fill(h,
"pullyr", (vsim->recVtx->y()-vsim->y*
simUnit_-dsimrecy)/vsim->recVtx->yError() );
2799 Fill(h,
"pullzr", (vsim->recVtx->z()-vsim->z*
simUnit_-dsimrecz)/vsim->recVtx->zError() );
2803 if(simpv.size()==1){
2804 if (vsim->recVtx==&(*recVtxs->begin())){
2805 Fill(h,
"efftag", 1.);
2807 Fill(h,
"efftag", 0.);
2813 Fill(h,
"effvsptsq",vsim->ptsq,1.);
2814 Fill(h,
"effvsnsimtrk",vsim->nGenTrk,1.);
2815 Fill(h,
"effvsnrectrk",nrectrks,1.);
2816 Fill(h,
"effvsnseltrk",nseltrks,1.);
2823 bool plapper=
verbose_ && vsim->nGenTrk;
2831 std::cout <<
"nearest recvertex at " << vsim->recVtx->z() <<
" dz=" << vsim->recVtx->z()-vsim->z*
simUnit_ << std::endl;
2834 if (fabs(vsim->recVtx->z()-vsim->z*
simUnit_)<0.2 ){
2838 if (fabs(vsim->recVtx->z()-vsim->z*
simUnit_)<0.5 ){
2843 if(plapper){
std::cout <<
"type 2a no vertex anywhere near" << std::endl;}
2848 if(plapper){
std::cout <<
"type 2b, no vertex at all" << std::endl;}
2854 for(
unsigned int iclu=0; iclu<clusters.size(); iclu++){
2856 selstat=int(clusters[iclu].
position().
x()+0.1);
2857 if(
verbose_){
std::cout <<
"matching cluster found with selstat=" << clusters[iclu].position().x() << std::endl;}
2861 if(plapper){
std::cout <<
"vertex rejected (distance to beam)" << std::endl;}
2863 }
else if(selstat==-1){
2864 if(plapper) {
std::cout <<
"vertex invalid" << std::endl;}
2866 }
else if(selstat==1){
2867 if(plapper){
std::cout <<
"vertex accepted, this cannot be right!!!!!!!!!!" << std::endl;}
2868 }
else if(selstat==-2){
2869 if(plapper){
std::cout <<
"dont know what this means !!!!!!!!!!" << std::endl;}
2870 }
else if(selstat==-3){
2871 if(plapper){
std::cout <<
"no matching cluster found " << std::endl;}
2874 if(plapper){
std::cout <<
"dont know what this means either !!!!!!!!!!" << selstat << std::endl;}
2880 if(simpv.size()==1){
Fill(h,
"efftag", 0.); }
2882 Fill(h,
"effvsptsq",vsim->ptsq,0.);
2883 Fill(h,
"effvsnsimtrk",
float(vsim->nGenTrk),0.);
2884 Fill(h,
"effvsnrectrk",nrectrks,0.);
2885 Fill(h,
"effvsnseltrk",nseltrks,0.);
2896 if (recVtxs->size()>0){
2897 Double_t dz=(*recVtxs->begin()).
z() - (*simpv.begin()).
z*
simUnit_;
2898 Fill(h,
"zdistancetag",dz);
2899 Fill(h,
"abszdistancetag",fabs(dz));
2901 Fill(h,
"puritytag",1.);
2904 Fill(h,
"puritytag",0.);
2923 for(reco::TrackCollection::const_iterator
t=recTrks->begin();
2924 t!=recTrks->end(); ++
t){
2925 if((recVtxs->size()>0) && (recVtxs->begin()->
isValid())){
2934 selTrks.push_back(*
t);
2938 for(reco::VertexCollection::const_iterator
v=recVtxs->begin();
2939 v!=recVtxs->end(); ++
v){
2941 if((
v->isFake()) || (
v->ndof()<-2) )
break;
2942 for(
trackit_t tv=
v->tracks_begin(); tv!=
v->tracks_end(); tv++ ){
2943 if( ((**tv).vz()==
t->vz()&&((**tv).phi()==
t->phi())) ) {
2950 }
else if(foundinvtx>1){
2951 cout <<
"hmmmm " << foundinvtx << endl;
2959 nseltrks=selTrks.size();
2960 }
else if( ! (nseltrks==(
int)selTrks.size()) ){
2961 std::cout <<
"Warning: inconsistent track selection !" << std::endl;
2965 int nrec=0, nrec0=0, nrec8=0, nrec2=0, nrec4=0;
2966 for(reco::VertexCollection::const_iterator
v=recVtxs->begin();
2967 v!=recVtxs->end(); ++
v){
2969 if (! (
v->isFake()) &&
v->ndof()>0 &&
v->chi2()>0 ){
2971 if (
v->ndof()>0) nrec0++;
2972 if (
v->ndof()>8) nrec8++;
2973 if (
v->ndof()>2) nrec2++;
2974 if (
v->ndof()>4) nrec4++;
2976 if(
v==recVtxs->begin()){
2982 Float_t wt=
v->trackWeight(*
t);
2984 Fill(h,
"trackWt",wt);
2997 for(
unsigned int iclu=0; iclu<clusters.size(); iclu++){
2998 if (clusters[iclu].tracksSize()==1){
2999 for(
trackit_t t = clusters[iclu].tracks_begin();
3000 t!=clusters[iclu].tracks_end();
t++){
3010 Fill(h,
"szRecVtx",recVtxs->size());
3011 Fill(h,
"nclu",clusters.size());
3012 Fill(h,
"nseltrk",nseltrks);
3013 Fill(h,
"nrectrk",nrectrks);
3014 Fill(h,
"nrecvtx",nrec);
3015 Fill(h,
"nrecvtx2",nrec2);
3016 Fill(h,
"nrecvtx4",nrec4);
3017 Fill(h,
"nrecvtx8",nrec8);
3020 Fill(h,
"eff0vsntrec",nrectrks,1.);
3021 Fill(h,
"eff0vsntsel",nseltrks,1.);
3023 Fill(h,
"eff0vsntrec",nrectrks,0.);
3024 Fill(h,
"eff0vsntsel",nseltrks,0.);
3026 cout << Form(
"PrimaryVertexAnalyzer4PU: %s may have lost a vertex %10d %14llu %4d / %4d ",message.c_str(),
run_,
event_, nrectrks,nseltrks) << endl;
3030 if(nrec0>0) {
Fill(h,
"eff0ndof0vsntsel",nseltrks,1.);}
else{
Fill(h,
"eff0ndof0vsntsel",nseltrks,0.);}
3031 if(nrec2>0) {
Fill(h,
"eff0ndof2vsntsel",nseltrks,1.);}
else{
Fill(h,
"eff0ndof2vsntsel",nseltrks,0.);}
3032 if(nrec4>0) {
Fill(h,
"eff0ndof4vsntsel",nseltrks,1.);}
else{
Fill(h,
"eff0ndof4vsntsel",nseltrks,0.);}
3033 if(nrec8>0) {
Fill(h,
"eff0ndof8vsntsel",nseltrks,1.);}
else{
Fill(h,
"eff0ndof8vsntsel",nseltrks,0.);}
3036 cout <<
"multivertex event" << endl;
3040 if((nrectrks>10)&&(nseltrks<3)){
3041 cout <<
"small fraction of selected tracks " << endl;
3046 if((nrec==0)||(recVtxs->begin()->isFake())){
3047 Fill(h,
"nrectrk0vtx",nrectrks);
3048 Fill(h,
"nseltrk0vtx",nseltrks);
3049 Fill(h,
"nclu0vtx",clusters.size());
3054 double ndof2=-10,ndof1=-10, zndof1=0, zndof2=0;
3055 for(reco::VertexCollection::const_iterator
v=recVtxs->begin();
3056 v!=recVtxs->end(); ++
v){
3057 if(
v->isFake()){
Fill(h,
"isFake",1.);}
else{
Fill(h,
"isFake",0.);}
3058 if(
v->isFake()||((
v->ndof()<0)&&(
v->ndof()>-3))){
Fill(h,
"isFake1",1.);}
else{
Fill(h,
"isFake1",0.);}
3060 if((
v->isFake())||(
v->ndof()<0))
continue;
3061 if(
v->ndof()>ndof1){ ndof2=ndof1; zndof2=zndof1; ndof1=
v->ndof(); zndof1=
v->position().z();}
3062 else if(
v->ndof()>ndof2){ ndof2=
v->ndof(); zndof2=
v->position().z();}
3066 if(
v->tracksSize()==2){
3070 double dphi=t1->
phi()-t2->
phi();
if (dphi<0) dphi+=2*
M_PI;
3078 Fill(h,
"2trkmassOS",m12);
3081 Fill(h,
"2trkmassSS",m12);
3083 Fill(h,
"2trkdphi",dphi);
3085 if(fabs(dphi-
M_PI)<0.1)
Fill(h,
"2trksetacurl",t1->
eta()+t2->
eta());
3086 if(fabs(t1->
eta()+t2->
eta())<0.1)
Fill(h,
"2trkdphicurl",dphi);
3088 if(
v!=recVtxs->begin()){
3091 Fill(h,
"2trkmassOSPU",m12);
3094 Fill(h,
"2trkmassSSPU",m12);
3096 Fill(h,
"2trkdphiPU",dphi);
3098 if(fabs(dphi-
M_PI)<0.1)
Fill(h,
"2trksetacurlPU",t1->
eta()+t2->
eta());
3099 if(fabs(t1->
eta()+t2->
eta())<0.1)
Fill(h,
"2trkdphicurlPU",dphi);
3104 Fill(h,
"trkchi2vsndof",
v->ndof(),
v->chi2());
3105 if(
v->ndof()>0){
Fill(h,
"trkchi2overndof",
v->chi2()/
v->ndof()); }
3106 if(
v->tracksSize()==2){
Fill(h,
"2trkchi2vsndof",
v->ndof(),
v->chi2()); }
3107 if(
v->tracksSize()==3){
Fill(h,
"3trkchi2vsndof",
v->ndof(),
v->chi2()); }
3108 if(
v->tracksSize()==4){
Fill(h,
"4trkchi2vsndof",
v->ndof(),
v->chi2()); }
3109 if(
v->tracksSize()==5){
Fill(h,
"5trkchi2vsndof",
v->ndof(),
v->chi2()); }
3111 Fill(h,
"nbtksinvtx",
v->tracksSize());
3112 Fill(h,
"nbtksinvtx2",
v->tracksSize());
3113 Fill(h,
"vtxchi2",
v->chi2());
3114 Fill(h,
"vtxndf",
v->ndof());
3116 Fill(h,
"vtxndfvsntk",
v->tracksSize(),
v->ndof());
3117 Fill(h,
"vtxndfoverntk",
v->ndof()/
v->tracksSize());
3118 Fill(h,
"vtxndf2overntk",(
v->ndof()+2)/
v->tracksSize());
3119 Fill(h,
"zrecvsnt",
v->position().z(),float(nrectrks));
3121 Fill(h,
"zrecNt100",
v->position().z());
3125 Fill(h,
"xrec",
v->position().x());
3126 Fill(h,
"yrec",
v->position().y());
3127 Fill(h,
"zrec",
v->position().z());
3128 Fill(h,
"xrec1",
v->position().x());
3129 Fill(h,
"yrec1",
v->position().y());
3130 Fill(h,
"zrec1",
v->position().z());
3131 Fill(h,
"xrec2",
v->position().x());
3132 Fill(h,
"yrec2",
v->position().y());
3133 Fill(h,
"zrec2",
v->position().z());
3134 Fill(h,
"xrec3",
v->position().x());
3135 Fill(h,
"yrec3",
v->position().y());
3136 Fill(h,
"zrec3",
v->position().z());
3162 Fill(h,
"errx",
v->xError());
3163 Fill(h,
"erry",
v->yError());
3164 Fill(h,
"errz",
v->zError());
3165 double vxx=
v->covariance(0,0);
3166 double vyy=
v->covariance(1,1);
3167 double vxy=
v->covariance(1,0);
3168 double dv=0.25*(vxx+vyy)*(vxx+vyy-(vxx*vyy-vxy*vxy));
3170 double l1=0.5*(vxx+vyy)+
sqrt(dv);
3172 double l2=
sqrt(0.5*(vxx+vyy)-
sqrt(dv));
3178 if (
v==recVtxs->begin()){
3179 Fill(h,
"nbtksinvtxTag",
v->tracksSize());
3180 Fill(h,
"nbtksinvtxTag2",
v->tracksSize());
3181 Fill(h,
"xrectag",
v->position().x());
3182 Fill(h,
"yrectag",
v->position().y());
3183 Fill(h,
"zrectag",
v->position().z());
3185 Fill(h,
"nbtksinvtxPU",
v->tracksSize());
3186 Fill(h,
"nbtksinvtxPU2",
v->tracksSize());
3190 Fill(h,
"xresvsntrk",
v->tracksSize(),
v->xError());
3191 Fill(h,
"yresvsntrk",
v->tracksSize(),
v->yError());
3192 Fill(h,
"zresvsntrk",
v->tracksSize(),
v->zError());
3197 for(
unsigned int iclu=0; iclu<clusters.size(); iclu++){
3198 if( fabs(clusters[iclu].
position().
z()-
v->position().z()) < 0.0001 ){
3199 Fill(h,
"nclutrkvtx",clusters[iclu].tracksSize());
3204 reco::VertexCollection::const_iterator v1=
v; v1++;
3205 for(; v1!=recVtxs->end(); ++v1){
3206 if((v1->isFake())||(v1->ndof()<0))
continue;
3207 Fill(h,
"zdiffrec",
v->position().z()-v1->position().z());
3211 Fill(h,
"zPUcand",z0);
Fill(h,
"zPUcand",z1);
3212 Fill(h,
"ndofPUcand",
v->ndof());
Fill(h,
"ndofPUcand",v1->ndof());
3214 Fill(h,
"zdiffvsz",z1-z0,0.5*(z1+z0));
3216 if ((
v->ndof()>2) && (v1->ndof()>2)){
3217 Fill(h,
"zdiffrec2",
v->position().z()-v1->position().z());
3218 Fill(h,
"zPUcand2",z0);
3219 Fill(h,
"zPUcand2",z1);
3220 Fill(h,
"ndofPUcand2",
v->ndof());
3221 Fill(h,
"ndofPUcand2",v1->ndof());
3222 Fill(h,
"zvszrec2",z0, z1);
3223 Fill(h,
"pzvspz2",TMath::Freq(z0/2.16),TMath::Freq(z1/2.16) );
3226 if ((
v->ndof()>4) && (v1->ndof()>4)){
3227 Fill(h,
"zdiffvsz4",z1-z0,0.5*(z1+z0));
3228 Fill(h,
"zdiffrec4",
v->position().z()-v1->position().z());
3229 Fill(h,
"zvszrec4",z0, z1);
3230 Fill(h,
"pzvspz4",TMath::Freq(z0/2.16),TMath::Freq(z1/2.16) );
3231 if(fabs(z0-z1)>1.0){
3236 Fill(h,
"ndofOverNtkPUcand",
v->ndof()/
v->tracksSize());
3237 Fill(h,
"ndofOverNtkPUcand",v1->ndof()/v1->tracksSize());
3242 Fill(h,
"zPUcand4",z0);
3243 Fill(h,
"zPUcand4",z1);
3244 Fill(h,
"ndofPUcand4",
v->ndof());
3245 Fill(h,
"ndofPUcand4",v1->ndof());
3251 if ((
v->ndof()>4) && (v1->ndof()>2) && (v1->ndof()<4)){
3255 if ((
v->ndof()>8) && (v1->ndof()>8)){
3256 Fill(h,
"zdiffrec8",
v->position().z()-v1->position().z());
3258 cout <<
"PU candidate " <<
run_ <<
" " <<
event_ <<
" " << message <<
" zdiff=" <<z0-z1 << endl;
3266 bool problem =
false;
3272 for (
int i = 0;
i != 3;
i++) {
3273 for (
int j =
i;
j != 3;
j++) {
3278 if (
j ==
i &&
v->covariance(
i,
j) < 0) {
3279 Fill(h,
"nans",index*1., 1.);
3287 t!=
v->tracks_end();
t++) {
3289 if ( (**t).charge() < -1 || (**t).charge() > 1 ) {
3290 Fill(h,
"tklinks",0.);
3293 Fill(h,
"tklinks",1.);
3298 Fill(h,
"tklinks",0.);
3307 t!=
v->tracks_end();
t++) {
3308 std::cout <<
"Track " << itk++ << std::endl;
3310 for (
int i = 0;
i != 5;
i++) {
3311 for (
int j = 0;
j != 5;
j++) {
3312 data[i2] = (**t).covariance(
i,
j);
3313 std::cout << std:: scientific << data[i2] <<
" ";
3319 = gsl_matrix_view_array (data, 5, 5);
3321 gsl_vector *eval = gsl_vector_alloc (5);
3322 gsl_matrix *evec = gsl_matrix_alloc (5, 5);
3324 gsl_eigen_symmv_workspace *
w =
3325 gsl_eigen_symmv_alloc (5);
3327 gsl_eigen_symmv (&m.matrix, eval, evec, w);
3329 gsl_eigen_symmv_free (w);
3331 gsl_eigen_symmv_sort (eval, evec,
3332 GSL_EIGEN_SORT_ABS_ASC);
3337 for (i = 0; i < 5; i++) {
3339 = gsl_vector_get (eval, i);
3343 printf (
"eigenvalue = %g\n", eval_i);
3361 Fill(h,
"ndofnr2",ndof2);
3362 if(fabs(zndof1-zndof2)>1)
Fill(h,
"ndofnr2d1cm",ndof2);
3363 if(fabs(zndof1-zndof2)>2)
Fill(h,
"ndofnr2d2cm",ndof2);
3368 if ( pui_z.size()>0 ) {
3370 vector<int> used_indizesV;
3372 for (
unsigned spv_idx=0; spv_idx<pui_z.size(); spv_idx++) {
3374 float sv = pui_z[spv_idx];
3376 if ( fabs(sv)>24. )
continue;
3384 unsigned numMatchs = matchedV->size();
3386 bool dsflag =
false;
3388 for (
unsigned i=0;
i<used_indizesV.size();
i++) {
3389 for (
unsigned j=0;
j<numMatchs;
j++) {
3390 if ( used_indizesV.at(
i)==matchedV->at(
j) ) {
3397 if ( numMatchs>0 ) eff = 1.;
3398 if ( numMatchs>1 ) dreco = 1.;
3399 if ( dsflag ) dsimed = 1.;
3400 if ( ( numMatchs>0 ) && ( !dsflag ) ) effwod = 1.;
3402 for (
unsigned i=0;
i<numMatchs;
i++) {
3403 used_indizesV.push_back(matchedV->at(
i));
3408 Fill(h,
"effvszsep", sep, eff);
3409 Fill(h,
"effwodvszsep", sep, effwod);
3410 Fill(h,
"mergedvszsep", sep, dsimed);
3411 Fill(h,
"splitvszsep", sep, dreco);
3416 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
const reco::GenParticle * mother(const reco::GenParticle &p, unsigned int imoth=0)
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
edm::EDGetTokenT< reco::TrackToTrackingParticleAssociator > recoTrackToTrackingParticleAssociatorToken_
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 &)
const reco::TrackToTrackingParticleAssociator * associatorByHits_
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
const reco::GenParticle * daughter(const reco::GenParticle &p, unsigned int idau)
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
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
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.
reco::RecoToSimCollection associateRecoToSim(const edm::Handle< edm::View< reco::Track > > &tCH, const edm::Handle< TrackingParticleCollection > &tPCH) const
compare reco to sim the handle of reco::Track and TrackingParticle collections
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
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.