16 #include "HepMC/GenEvent.h"
17 #include "HepMC/GenVertex.h"
18 #include "HepMC/GenParticle.h"
23 #include <TDirectory.h>
30 #include <gsl/gsl_math.h>
31 #include <gsl/gsl_eigen.h>
46 : verbose_( iConfig.getUntrackedParameter<bool>(
"verbose",
false ) )
48 , recoTrackCollectionToken_( consumes<
reco::
TrackCollection >( edm::InputTag( iConfig.getUntrackedParameter<std::
string>(
"recoTrackProducer" ) ) ) )
49 , edmSimVertexContainerToken_( consumes< edm::
SimVertexContainer>( iConfig.getParameter<edm::InputTag>(
"simG4" ) ) )
50 , edmSimTrackContainerToken_( consumes< edm::
SimTrackContainer >( iConfig.getParameter<edm::InputTag>(
"simG4" ) ) )
51 , edmHepMCProductToken_( consumes< edm::
HepMCProduct >( edm::InputTag( std::
string(
"generator" ) ) ) )
57 tversion = tversion.Remove(0,1);
58 tversion = tversion.Remove(tversion.Length()-1,tversion.Length());
61 std::vector<std::string> vtxSample = iConfig.
getUntrackedParameter<std::vector< std::string > >(
"vtxSample");
64 auto vtxSampleBegin = vtxSample.begin();
65 auto vtxSampleEnd = vtxSample.end();
66 for(
auto isample = vtxSampleBegin; isample != vtxSampleEnd; ++isample ) {
68 if ( *isample ==
"offlinePrimaryVertices" )
suffixSample_.push_back(
"AVF");
69 if ( *isample ==
"offlinePrimaryVerticesWithBS" )
suffixSample_.push_back(
"wBS");
97 std::cout <<
" PrimaryVertexAnalyzer::beginJob conversion from sim units to rec units is " <<
simUnit_ << std::endl;
105 hdir[*isuffix]->cd();
106 h[
"nbvtx"+ *isuffix] =
new TH1F(TString(
"nbvtx"+ *isuffix),
"Reconstructed Vertices in Event",20,-0.5,19.5);
107 h[
"nbtksinvtx"+ *isuffix] =
new TH1F(TString(
"nbtksinvtx"+ *isuffix),
"Reconstructed Tracks in Vertex",200,-0.5,199.5);
108 h[
"resx"+ *isuffix] =
new TH1F(TString(
"resx"+ *isuffix),
"Residual X",100,-0.04,0.04);
109 h[
"resy"+ *isuffix] =
new TH1F(TString(
"resy"+ *isuffix),
"Residual Y",100,-0.04,0.04);
110 h[
"resz"+ *isuffix] =
new TH1F(TString(
"resz"+ *isuffix),
"Residual Z",100,-0.1,0.1);
111 h[
"pullx"+ *isuffix] =
new TH1F(TString(
"pullx"+ *isuffix),
"Pull X",100,-25.,25.);
112 h[
"pully"+ *isuffix] =
new TH1F(TString(
"pully"+ *isuffix),
"Pull Y",100,-25.,25.);
113 h[
"pullz"+ *isuffix] =
new TH1F(TString(
"pullz"+ *isuffix),
"Pull Z",100,-25.,25.);
114 h[
"vtxchi2"+ *isuffix] =
new TH1F(TString(
"vtxchi2"+ *isuffix),
"#chi^{2}",100,0.,100.);
115 h[
"vtxndf"+ *isuffix] =
new TH1F(TString(
"vtxndf"+ *isuffix),
"ndof",100,0.,100.);
116 h[
"tklinks"+ *isuffix] =
new TH1F(TString(
"tklinks"+ *isuffix),
"Usable track links",2,-0.5,1.5);
117 h[
"nans"+ *isuffix] =
new TH1F(TString(
"nans"+ *isuffix),
"Illegal values for x,y,z,xx,xy,xz,yy,yz,zz",9,0.5,9.5);
119 h[
"vtxprob"+ *isuffix] =
new TH1F(TString(
"vtxprob"+ *isuffix),
"#chi^{2} probability",100,0.,1.);
120 h[
"eff"+ *isuffix] =
new TH1F(TString(
"eff"+ *isuffix),
"efficiency",2, -0.5, 1.5);
121 h[
"efftag"+ *isuffix] =
new TH1F(TString(
"efftag"+ *isuffix),
"efficiency tagged vertex",2, -0.5, 1.5);
122 h[
"effvseta"+ *isuffix] =
new TProfile(TString(
"effvseta"+ *isuffix),
"efficiency vs eta",20, -2.5, 2.5, 0, 1.);
123 h[
"effvsptsq"+ *isuffix] =
new TProfile(TString(
"effvsptsq"+ *isuffix),
"efficiency vs ptsq",20, 0., 10000., 0, 1.);
124 h[
"effvsntrk"+ *isuffix] =
new TProfile(TString(
"effvsntrk"+ *isuffix),
"efficiency vs # simtracks",200, 0., 200., 0, 1.);
125 h[
"effvsnrectrk"+ *isuffix] =
new TProfile(TString(
"effvsnrectrk"+ *isuffix),
"efficiency vs # rectracks",200, 0., 200., 0, 1.);
126 h[
"effvsz"+ *isuffix] =
new TProfile(TString(
"effvsz"+ *isuffix),
"efficiency vs z",40, -20., 20., 0, 1.);
127 h[
"nbsimtksinvtx"+ *isuffix]=
new TH1F(TString(
"nbsimtksinvtx"+ *isuffix),
"simulated tracks in vertex",100,-0.5,99.5);
128 h[
"xrec"+ *isuffix] =
new TH1F(TString(
"xrec"+ *isuffix),
"reconstructed x",100,-0.1,0.1);
129 h[
"yrec"+ *isuffix] =
new TH1F(TString(
"yrec"+ *isuffix),
"reconstructed y",100,-0.1,0.1);
130 h[
"zrec"+ *isuffix] =
new TH1F(TString(
"zrec"+ *isuffix),
"reconstructed z",100,-20.,20.);
131 h[
"xsim"+ *isuffix] =
new TH1F(TString(
"xsim"+ *isuffix),
"simulated x",100,-0.1,0.1);
132 h[
"ysim"+ *isuffix] =
new TH1F(TString(
"ysim"+ *isuffix),
"simulated y",100,-0.1,0.1);
133 h[
"zsim"+ *isuffix] =
new TH1F(TString(
"zsim"+ *isuffix),
"simulated z",100,-20.,20.);
134 h[
"nrecvtx"+ *isuffix] =
new TH1F(TString(
"nrecvtx"+ *isuffix),
"# of reconstructed vertices", 50, -0.5, 49.5);
135 h[
"nsimvtx"+ *isuffix] =
new TH1F(TString(
"nsimvtx"+ *isuffix),
"# of simulated vertices", 50, -0.5, 49.5);
136 h[
"nrectrk"+ *isuffix] =
new TH1F(TString(
"nrectrk"+ *isuffix),
"# of reconstructed tracks", 200, -0.5, 199.5);
137 h[
"nsimtrk"+ *isuffix] =
new TH1F(TString(
"nsimtrk"+ *isuffix),
"# of simulated tracks", 200, -0.5, 199.5);
138 h[
"xrectag"+ *isuffix] =
new TH1F(TString(
"xrectag"+ *isuffix),
"reconstructed x, signal vtx",100,-0.1,0.1);
139 h[
"yrectag"+ *isuffix] =
new TH1F(TString(
"yrectag"+ *isuffix),
"reconstructed y, signal vtx",100,-0.1,0.1);
140 h[
"zrectag"+ *isuffix] =
new TH1F(TString(
"zrectag"+ *isuffix),
"reconstructed z, signal vtx",100,-20.,20.);
141 h[
"rapidity"+ *isuffix] =
new TH1F(TString(
"rapidity"+ *isuffix),
"rapidity ",100,-10., 10.);
142 h[
"pt"+ *isuffix] =
new TH1F(TString(
"pt"+ *isuffix),
"pt ",100,0., 20.);
143 h[
"nrectrk0vtx"+ *isuffix] =
new TH1F(TString(
"nrectrk0vtx"+ *isuffix),
"# rec tracks no vertex ",200,0., 200.);
144 h[
"zdistancetag"+ *isuffix] =
new TH1F(TString(
"zdistancetag"+ *isuffix),
"z-distance between tagged and generated",100, -0.1, 0.1);
145 h[
"puritytag"+ *isuffix] =
new TH1F(TString(
"puritytag"+ *isuffix),
"purity of primary vertex tags",2, -0.5, 1.5);
154 for (std::map<std::string, TDirectory*>::const_iterator idir=
hdir.begin(); idir!=
hdir.end(); idir++){
156 for(std::map<std::string,TH1*>::const_iterator
hist=
h.begin();
hist!=
h.end();
hist++){
157 if (TString(
hist->first).Contains(idir->first))
hist->second->Write();
166 return (fabs(vsim.
z*
simUnit_-vrec.
z())<0.0500);
170 double ctau=(
pdt->particle(
abs(p->pdg_id()) ))->lifetime();
171 if(
verbose_)
std::cout <<
"isResonance " << p->pdg_id() <<
" " << ctau << std::endl;
172 return ctau >0 && ctau <1
e-6;
176 return ( !p->end_vertex() && p->status()==1 );
182 return part->charge()!=0;
185 return pdt->particle( -p->pdg_id() )!=0;
191 for(reco::VertexCollection::const_iterator
v=recVtxs->begin();
192 v!=recVtxs->end(); ++
v){
193 std::cout <<
"Recvtx "<< std::setw(3) << std::setfill(
' ')<<ivtx++
194 <<
"#trk " << std::setw(3) <<
v->tracksSize()
195 <<
" chi2 " << std::setw(4) <<
v->chi2()
196 <<
" ndof " << std::setw(3) <<
v->ndof() << std::endl
197 <<
" x " << std::setw(8) <<std::fixed << std::setprecision(4) <<
v->x()
198 <<
" dx " << std::setw(8) <<
v->xError()<< std::endl
199 <<
" y " << std::setw(8) <<
v->y()
200 <<
" dy " << std::setw(8) <<
v->yError()<< std::endl
201 <<
" z " << std::setw(8) <<
v->z()
202 <<
" dz " << std::setw(8) <<
v->zError()
210 for(edm::SimVertexContainer::const_iterator vsim=simVtxs->begin();
211 vsim!=simVtxs->end(); ++vsim){
212 std::cout << i++ <<
")" << std::scientific
213 <<
" evtid=" << vsim->eventId().event()
214 <<
" sim x=" << vsim->position().x()*
simUnit_
215 <<
" sim y=" << vsim->position().y()*
simUnit_
216 <<
" sim z=" << vsim->position().z()*
simUnit_
217 <<
" sim t=" << vsim->position().t()
218 <<
" parent=" << vsim->parentIndex()
225 std::cout <<
" simTrks type, (momentum), vertIndex, genpartIndex" << std::endl;
227 for(edm::SimTrackContainer::const_iterator
t=simTrks->begin();
228 t!=simTrks->end(); ++
t){
233 << (*t).genpartIndex();
247 std::vector<PrimaryVertexAnalyzer::simPrimaryVertex> simpv;
248 const HepMC::GenEvent* evt=evtMC->GetEvent();
251 if(
verbose_)
std::cout <<
"signal process vertex "<< ( evt->signal_process_vertex() ?
252 evt->signal_process_vertex()->barcode() : 0 ) <<std::endl;
253 if(
verbose_)
std::cout <<
"number of vertices " << evt->vertices_size() << std::endl;
257 for(HepMC::GenEvent::vertex_const_iterator vitr= evt->vertices_begin();
258 vitr != evt->vertices_end(); ++vitr )
260 HepMC::FourVector pos = (*vitr)->position();
263 bool hasMotherVertex=
false;
265 for ( HepMC::GenVertex::particle_iterator
269 HepMC::GenVertex * mv=(*mother)->production_vertex();
271 hasMotherVertex=
true;
278 if(hasMotherVertex) {
continue;}
284 for(std::vector<simPrimaryVertex>::iterator v0=simpv.begin();
285 v0!=simpv.end(); v0++){
286 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)){
294 if(
verbose_)
std::cout <<
"this is a new vertex " << sv.x <<
" " << sv.y <<
" " << sv.z << std::endl;
298 if(
verbose_)
std::cout <<
"this is not new vertex " << sv.x <<
" " << sv.y <<
" " << sv.z << std::endl;
300 vp->genVertex.push_back((*vitr)->barcode());
302 for ( HepMC::GenVertex::particle_iterator
303 daughter = (*vitr)->particles_begin(HepMC::descendants);
304 daughter != (*vitr)->particles_end(HepMC::descendants);
307 if (
find(vp->finalstateParticles.begin(), vp->finalstateParticles.end(),(*daughter)->barcode())
308 == vp->finalstateParticles.end()){
309 vp->finalstateParticles.push_back((*daughter)->barcode());
310 HepMC::FourVector
m=(*daughter)->momentum();
313 vp->ptot.setPx(vp->ptot.px()+m.px());
314 vp->ptot.setPy(vp->ptot.py()+m.py());
315 vp->ptot.setPz(vp->ptot.pz()+m.pz());
316 vp->ptot.setE(vp->ptot.e()+m.e());
317 vp->ptsq+=(m.perp())*(m.perp());
318 if ( (m.perp()>0.8) && (fabs(m.pseudoRapidity())<2.5) &&
isCharged( *daughter ) ){
322 h[
"rapidity"+
suffix]->Fill(m.pseudoRapidity());
323 h[
"pt"+
suffix]->Fill(m.perp());
342 std::vector<PrimaryVertexAnalyzer::simPrimaryVertex> simpv;
344 for(edm::SimTrackContainer::const_iterator
t=simTrks->begin();
345 t!=simTrks->end(); ++
t){
346 if ( !(
t->noVertex()) && !(
t->type()==-99) ){
349 bool resonance=
false;
353 HepMC::GenVertex * gv=gp->production_vertex();
355 for ( HepMC::GenVertex::particle_iterator
356 daughter = gv->particles_begin(HepMC::descendants);
357 daughter != gv->particles_end(HepMC::descendants);
360 ptsq+=(*daughter)->momentum().perp()*(*daughter)->momentum().perp();
363 primary = ( gv->position().t()==0);
366 resonance= (
isResonance(*(gp->production_vertex()->particles_in_const_begin())));
367 if (gp->status()==1){
374 const HepMC::FourVector &
v=(*simVtxs)[
t->vertIndex()].position();
376 if(primary
or resonance){
380 for(std::vector<simPrimaryVertex>::iterator v0=simpv.begin();
381 v0!=simpv.end(); v0++){
382 if( (fabs(v0->x-v.x())<0.001) && (fabs(v0->y-v.y())<0.001) && (fabs(v0->z-v.z())<0.001) ){
384 v0->simTrackIndex.push_back(idx);
385 if (ptsq>(*v0).ptsq){(*v0).ptsq=ptsq;}
390 if(newVertex && !resonance){
393 anotherVertex.ptsq=ptsq;
394 simpv.push_back(anotherVertex);
431 std::cout <<
"Some problem occurred with the particle data table. This may not work !." <<std::endl;
440 std::cout <<
"no HepMCProduct found"<< std::endl;
444 std::cout <<
"generator HepMCProduct found"<< std::endl;
459 std::vector<simPrimaryVertex> simpv;
465 h[
"nsimvtx"+isuffix]->Fill(simpv.size());
467 for(std::vector<simPrimaryVertex>::iterator vsim=simpv.begin();
468 vsim!=simpv.end(); vsim++){
472 h[
"nbsimtksinvtx"+isuffix]->Fill(vsim->nGenTrk);
473 h[
"xsim"+isuffix]->Fill(vsim->x*
simUnit_);
474 h[
"ysim"+isuffix]->Fill(vsim->y*
simUnit_);
475 h[
"zsim"+isuffix]->Fill(vsim->z*
simUnit_);
476 nsimtrk+=vsim->nGenTrk;
479 for(reco::VertexCollection::const_iterator vrec=recVtxs->begin();
480 vrec!=recVtxs->end(); ++vrec){
483 if( ((vsim->recVtx) && (fabs(vsim->recVtx->position().z()-vsim->z)>fabs(vrec->z()-vsim->z)))
486 vsim->recVtx=&(*vrec);
490 h[
"nsimtrk"+isuffix]->Fill(
float(nsimtrk));
496 if(
verbose_){
std::cout <<
"primary matched " << vsim->x <<
" " << vsim->y <<
" " << vsim->z << std:: endl;}
498 h[
"resx"+isuffix]->Fill( vsim->recVtx->x()-vsim->x*
simUnit_ );
499 h[
"resy"+isuffix]->Fill( vsim->recVtx->y()-vsim->y*
simUnit_ );
500 h[
"resz"+isuffix]->Fill( vsim->recVtx->z()-vsim->z*
simUnit_ );
501 h[
"pullx"+isuffix]->Fill( (vsim->recVtx->x()-vsim->x*
simUnit_)/vsim->recVtx->xError() );
502 h[
"pully"+isuffix]->Fill( (vsim->recVtx->y()-vsim->y*
simUnit_)/vsim->recVtx->yError() );
503 h[
"pullz"+isuffix]->Fill( (vsim->recVtx->z()-vsim->z*
simUnit_)/vsim->recVtx->zError() );
504 h[
"eff"+isuffix]->Fill( 1.);
506 if (vsim->recVtx==&(*recVtxs->begin())){
507 h[
"efftag"+isuffix]->Fill( 1.);
509 h[
"efftag"+isuffix]->Fill( 0.);
512 h[
"effvseta"+isuffix]->Fill(vsim->ptot.pseudoRapidity(),1.);
513 h[
"effvsptsq"+isuffix]->Fill(vsim->ptsq,1.);
514 h[
"effvsntrk"+isuffix]->Fill(vsim->nGenTrk,1.);
515 h[
"effvsnrectrk"+isuffix]->Fill(recTrks->size(),1.);
516 h[
"effvsz"+isuffix]->Fill(vsim->z*
simUnit_,1.);
520 if(
verbose_){
std::cout <<
"primary not found " << vsim->x <<
" " << vsim->y <<
" " << vsim->z <<
" nGenTrk=" << vsim->nGenTrk << std::endl;}
522 h[
"eff"+isuffix]->Fill( 0.);
523 if(simpv.size()==1){
h[
"efftag"+isuffix]->Fill( 0.); }
524 h[
"effvseta"+isuffix]->Fill(vsim->ptot.pseudoRapidity(),0.);
525 h[
"effvsptsq"+isuffix]->Fill(vsim->ptsq,0.);
526 h[
"effvsntrk"+isuffix]->Fill(
float(vsim->nGenTrk),0.);
527 h[
"effvsnrectrk"+isuffix]->Fill(recTrks->size(),0.);
528 h[
"effvsz"+isuffix]->Fill(vsim->z*
simUnit_,0.);
535 if (recVtxs->size()>0 && simpv.size()>0){
536 Double_t dz=(*recVtxs->begin()).
z() - (*simpv.begin()).
z*
simUnit_;
537 h[
"zdistancetag"+isuffix]->Fill(dz);
538 if( fabs(dz)<0.0500){
539 h[
"puritytag"+isuffix]->Fill(1.);
542 h[
"puritytag"+isuffix]->Fill(0.);
551 h[
"nrecvtx"+isuffix]->Fill(recVtxs->size());
552 h[
"nrectrk"+isuffix]->Fill(recTrks->size());
553 h[
"nbvtx"+isuffix]->Fill(recVtxs->size()*1.);
554 if((recVtxs->size()==0)||recVtxs->begin()->isFake()) {
h[
"nrectrk0vtx"+isuffix]->Fill(recTrks->size());}
556 for(reco::VertexCollection::const_iterator
v=recVtxs->begin();
557 v!=recVtxs->end(); ++
v){
559 if(
v->isFake())
continue;
563 t!=
v->tracks_end();
t++) {
565 if ( (**t).charge() < -1 || (**t).charge() > 1 ) {
566 h[
"tklinks"+isuffix]->Fill(0.);
569 h[
"tklinks"+isuffix]->Fill(1.);
575 h[
"tklinks"+isuffix]->Fill(0.);
578 h[
"nbtksinvtx"+isuffix]->Fill(
v->tracksSize());
579 h[
"vtxchi2"+isuffix]->Fill(
v->chi2());
580 h[
"vtxndf"+isuffix]->Fill(
v->ndof());
582 h[
"xrec"+isuffix]->Fill(
v->position().x());
583 h[
"yrec"+isuffix]->Fill(
v->position().y());
584 h[
"zrec"+isuffix]->Fill(
v->position().z());
585 if (
v==recVtxs->begin()){
586 h[
"xrectag"+isuffix]->Fill(
v->position().x());
587 h[
"yrectag"+isuffix]->Fill(
v->position().y());
588 h[
"zrectag"+isuffix]->Fill(
v->position().z());
591 bool problem =
false;
592 h[
"nans"+isuffix]->Fill(1.,
isnan(
v->position().x())*1.);
593 h[
"nans"+isuffix]->Fill(2.,
isnan(
v->position().y())*1.);
594 h[
"nans"+isuffix]->Fill(3.,
isnan(
v->position().z())*1.);
597 for (
int i = 0;
i != 3;
i++) {
598 for (
int j =
i;
j != 3;
j++) {
600 h[
"nans"+isuffix]->Fill(index*1.,
isnan(
v->covariance(
i,
j))*1.);
601 if (
isnan(
v->covariance(
i,
j))) problem =
true;
603 if (
j ==
i &&
v->covariance(
i,
j) < 0) {
604 h[
"nans"+isuffix]->Fill(index*1., 1.);
616 t!=
v->tracks_end();
t++) {
617 std::cout <<
"Track " << itk++ << std::endl;
619 for (
int i = 0;
i != 5;
i++) {
620 for (
int j = 0;
j != 5;
j++) {
621 data[i2] = (**t).covariance(
i,
j);
622 std::cout << std:: scientific << data[i2] <<
" ";
628 = gsl_matrix_view_array (data, 5, 5);
630 gsl_vector *eval = gsl_vector_alloc (5);
631 gsl_matrix *evec = gsl_matrix_alloc (5, 5);
633 gsl_eigen_symmv_workspace *
w =
634 gsl_eigen_symmv_alloc (5);
636 gsl_eigen_symmv (&m.matrix, eval, evec, w);
638 gsl_eigen_symmv_free (w);
640 gsl_eigen_symmv_sort (eval, evec,
641 GSL_EIGEN_SORT_ABS_ASC);
646 for (i = 0; i < 5; i++) {
648 = gsl_vector_get (eval, i);
652 printf (
"eigenvalue = %g\n", eval_i);
T getUntrackedParameter(std::string const &, T const &) const
void printRecVtxs(const edm::Handle< reco::VertexCollection > &recVtxs)
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e< void, edm::EventIDconst &, edm::Timestampconst & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
bool isCharged(const HepMC::GenParticle *p)
bool getByToken(EDGetToken token, Handle< PROD > &result) const
bool isFinalstateParticle(const HepMC::GenParticle *p)
edm::EDGetTokenT< edm::SimTrackContainer > edmSimTrackContainerToken_
std::map< std::string, TDirectory * > hdir
std::vector< Track > TrackCollection
collection of Tracks
void printSimVtxs(const edm::Handle< edm::SimVertexContainer > &simVtxs)
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
void getData(T &iHolder) const
std::vector< int > simTrackIndex
void printSimTrks(const edm::Handle< edm::SimTrackContainer > &simVtrks)
edm::ESHandle< ParticleDataTable > pdt
virtual void analyze(const edm::Event &, const edm::EventSetup &)
Abs< T >::type abs(const T &t)
double z() const
y coordinate
float ChiSquaredProbability(double chiSquared, double nrDOF)
HepPDT::ParticleData ParticleData
std::string getReleaseVersion()
edm::EDGetTokenT< edm::HepMCProduct > edmHepMCProductToken_
bool isResonance(const HepMC::GenParticle *p)
tuple idx
DEBUGGING if hasattr(process,"trackMonIterativeTracking2012"): print "trackMonIterativeTracking2012 D...
std::map< std::string, TH1 * > h
std::vector< SimVertex > SimVertexContainer
std::vector< simPrimaryVertex > getSimPVs(const edm::Handle< edm::HepMCProduct > &evtMC, const std::string &suffix="")
std::vector< edm::EDGetTokenT< reco::VertexCollection > > recoVertexCollectionTokens_
edm::EDGetTokenT< reco::TrackCollection > recoTrackCollectionToken_
char data[epos_bytes_allocation]
PrimaryVertexAnalyzer(const edm::ParameterSet &)
std::vector< TrackBaseRef >::const_iterator trackRef_iterator
The iteratator for the vector<TrackRef>
volatile std::atomic< bool > shutdown_flag false
std::vector< std::string > suffixSample_
bool matchVertex(const simPrimaryVertex &vsim, const reco::Vertex &vrec)
std::vector< SimTrack > SimTrackContainer
edm::EDGetTokenT< edm::SimVertexContainer > edmSimVertexContainerToken_