39 : geomToken_(esConsumes()), magFieldToken_(esConsumes()) {
50 for (
int i = 0;
i < 2;
i++) {
53 for (
int j = 0;
j < 2;
j++) {
85 tree_eff =
new TTree(
"EffTracks",
"Efficiency Tracks Tree");
148 tree_fake =
new TTree(
"FakeTracks",
"Fake Rate Tracks Tree");
209 std::cout <<
"ValidationMisalignedTracker::endJob Processed " <<
eventCount_ <<
" events" << std::endl;
226 std::vector<const reco::TrackToTrackingParticleAssociator*> associatore;
232 associatore.push_back(theAssociator.
product());
236 edm::LogInfo(
"Tracker Misalignment Validation") <<
"\n Starting!";
240 std::vector<int> indmu;
244 iEvent.getByLabel(
"source", evt);
245 bool accepted =
false;
246 bool foundmuons =
false;
249 for (HepMC::GenEvent::particle_iterator
p = myGenEvent->particles_begin();
p != myGenEvent->particles_end(); ++
p) {
250 if (!accepted && ((*p)->pdg_id() == 23) && (*p)->status() == 3) {
252 for (HepMC::GenVertex::particle_iterator aDaughter = (*p)->end_vertex()->particles_begin(HepMC::descendants);
253 aDaughter != (*p)->end_vertex()->particles_end(HepMC::descendants);
255 if (
abs((*aDaughter)->pdg_id()) == 13) {
257 if ((*aDaughter)->status() != 1) {
258 for (HepMC::GenVertex::particle_iterator byaDaughter =
259 (*aDaughter)->end_vertex()->particles_begin(HepMC::descendants);
260 byaDaughter != (*aDaughter)->end_vertex()->particles_end(HepMC::descendants);
262 if ((*byaDaughter)->status() == 1 &&
abs((*byaDaughter)->pdg_id()) == 13) {
263 indmu.push_back((*byaDaughter)->barcode());
264 std::cout <<
"Stable muon from Z with charge " << (*byaDaughter)->pdg_id() <<
" and index "
265 << (*byaDaughter)->barcode() << std::endl;
269 indmu.push_back((*aDaughter)->barcode());
270 std::cout <<
"Stable muon from Z with charge " << (*aDaughter)->pdg_id() <<
" and index "
271 << (*aDaughter)->barcode() << std::endl;
276 std::cout <<
"No muons from Z ...skip event" << std::endl;
282 std::cout <<
"No Z particles in the event ...skip event" << std::endl;
293 auto testGeomDet = trackerGeometry->
detsTOB().front();
294 std::cout << testGeomDet->position() << std::endl;
306 for (
int i = 0;
i < 2;
i++) {
307 for (
int j = 0;
j < 2;
j++) {
331 for (
unsigned int ww = 0; ww <
associators.size(); ww++) {
343 LogTrace(
"TrackValidator") <<
"Calling associateRecoToSim method"
347 LogTrace(
"TrackValidator") <<
"Calling associateSimToReco method"
356 std::cout <<
"Computing Efficiency" << std::endl;
358 edm::LogVerbatim(
"TrackValidator") <<
"\n# of TrackingParticles (before cuts): " << tPCeff.size() <<
"\n";
375 if (
tp->charge() == 0)
382 const SimTrack* simulatedTrack = &(*
tp->g4Track_begin());
393 tscpBuilder(ftsAtProduction,
GlobalPoint(0, 0, 0));
400 double dxySim = (-
v.x() *
sin(
p.phi()) +
v.y() *
cos(
p.phi()));
401 double dszSim =
v.z() *
p.perp() /
p.mag() - (
v.x() *
p.x() +
v.y() *
p.y()) /
p.perp() *
p.z() /
p.mag();
406 std::cout <<
" TRACCIA SIM DI MUONI " << std::endl;
418 std::cout <<
"3) Before assoc: SimTrack of type = " << simulatedTrack->
type() <<
" ,at eta = " <<
eta
419 <<
" ,with pt at vertex = " << simulatedTrack->
momentum().pt() <<
" GeV/c"
420 <<
" ,d0 =" <<
d0 <<
" ,z0 =" <<
z0 <<
" ,nhit=" <<
nhit << std::endl;
425 std::cout <<
" TRACK sim of muons from Z " << std::endl;
443 std::vector<std::pair<edm::RefToBase<reco::Track>,
double> >
rt;
444 if (simRecColl.
find(
tp) != simRecColl.
end()) {
457 edm::LogVerbatim(
"TrackValidator") <<
"TrackingParticle #" << st <<
" with pt=" <<
t->pt()
458 <<
" associated with quality:" <<
rt.begin()->second <<
"\n";
459 std::cout <<
"Reconstructed Track:" <<
t->pt() << std::endl;
460 std::cout <<
"\tpT: " <<
t->pt() << std::endl;
461 std::cout <<
"\timpact parameter:d0: " <<
t->d0() << std::endl;
462 std::cout <<
"\timpact parameter:z0: " <<
t->dz() << std::endl;
463 std::cout <<
"\tAzimuthal angle of point of closest approach:" <<
t->phi() << std::endl;
464 std::cout <<
"\tcharge: " <<
t->charge() << std::endl;
465 std::cout <<
"\teta: " <<
t->eta() << std::endl;
466 std::cout <<
"\tnormalizedChi2: " <<
t->normalizedChi2() << std::endl;
482 <<
", pt at vertex = " <<
recpt <<
" GeV/c, "
483 <<
", recd0 = " <<
recd0 <<
", recz0= " <<
recz0 << std::endl;
494 <<
" ,z0 residual=" <<
resz0 <<
" with eff=" <<
eff << std::endl;
498 std::cout <<
" TRACCIA RECO DI MUONI " << std::endl;
503 std::cout <<
" TRACCIA RECO DI ELETTRONI " << std::endl;
514 sqrt((
t->momentum().x() *
t->momentum().x()) + (
t->momentum().y() *
t->momentum().y()));
522 <<
" and phi= " <<
recphi << std::endl;
526 <<
"TrackingParticle #" << st <<
" with pt=" <<
sqrt(
tp->momentum().perp2())
527 <<
" NOT associated to any reco::Track"
556 (
py[0][0] +
py[0][1]) * (
py[0][0] +
py[0][1]) - (
pz[0][0] +
pz[0][1]) * (
pz[0][0] +
pz[0][1]));
622 std::cout <<
"Computing Fake Rate" << std::endl;
665 std::cout <<
"Track number " <<
i << std::endl;
667 std::cout <<
"\timpact parameter:d0: " <<
track->d0() << std::endl;
668 std::cout <<
"\timpact parameter:z0: " <<
track->dz() << std::endl;
669 std::cout <<
"\tAzimuthal angle of point of closest approach:" <<
track->phi() << std::endl;
672 std::cout <<
"\tnormalizedChi2: " <<
track->normalizedChi2() << std::endl;
674 std::vector<std::pair<TrackingParticleRef, double> >
tp;
681 <<
" associated with quality:" <<
tp.begin()->second <<
"\n";
684 const SimTrack* fakeassocTrack = &(*tpr->g4Track_begin());
688 GlobalPoint(tpr->vertex().x(), tpr->vertex().y(), tpr->vertex().z()),
695 tscpBuilder(ftsAtProduction,
GlobalPoint(0, 0, 0));
702 double dxySim = (-
v.x() *
sin(
p.phi()) +
v.y() *
cos(
p.phi()));
703 double dszSim =
v.z() *
p.perp() /
p.mag() - (
v.x() *
p.x() +
v.y() *
p.y()) /
p.perp() *
p.z() /
p.mag();
715 std::cout <<
"4) After call to associator: the best SimTrack match is of type" << fakeassocTrack->
type()
718 <<
" ,d0 global = " <<
faked0 <<
" ,z0 = " <<
fakez0 << std::endl;
730 <<
"reco::Track #" << rT <<
" with pt=" <<
track->pt() <<
" NOT associated to any TrackingParticle"