50 for (
int i = 0;
i < 2;
i++) {
53 for (
int j = 0;
j < 2;
j++) {
82 file_ =
new TFile(rootfile_.c_str(),
"RECREATE");
85 tree_eff =
new TTree(
"EffTracks",
"Efficiency Tracks Tree");
87 tree_eff->Branch(
"Run", &
irun,
"irun/i");
88 tree_eff->Branch(
"Event", &
ievt,
"ievt/i");
91 tree_eff->Branch(
"TrackID", &
trackType,
"trackType/i");
92 tree_eff->Branch(
"pt", &
pt,
"pt/F");
93 tree_eff->Branch(
"eta", &
eta,
"eta/F");
94 tree_eff->Branch(
"CotTheta", &
cottheta,
"cottheta/F");
95 tree_eff->Branch(
"phi", &
phi,
"phi/F");
96 tree_eff->Branch(
"d0", &
d0,
"d0/F");
97 tree_eff->Branch(
"z0", &
z0,
"z0/F");
98 tree_eff->Branch(
"nhit", &
nhit,
"nhit/i");
101 tree_eff->Branch(
"recpt", &
recpt,
"recpt/F");
102 tree_eff->Branch(
"receta", &
receta,
"receta/F");
103 tree_eff->Branch(
"CotRecTheta", &
reccottheta,
"reccottheta/F");
104 tree_eff->Branch(
"recphi", &
recphi,
"recphi/F");
105 tree_eff->Branch(
"recd0", &
recd0,
"recd0/F");
106 tree_eff->Branch(
"recz0", &
recz0,
"recz0/F");
107 tree_eff->Branch(
"nAssoc", &
nAssoc,
"nAssoc/i");
108 tree_eff->Branch(
"recnhit", &
recnhit,
"recnhit/i");
109 tree_eff->Branch(
"CHISQ", &
recchiq,
"recchiq/F");
111 tree_eff->Branch(
"reseta", &
reseta,
"reseta/F");
112 tree_eff->Branch(
"respt", &
respt,
"respt/F");
113 tree_eff->Branch(
"resd0", &
resd0,
"resd0/F");
114 tree_eff->Branch(
"resz0", &
resz0,
"resz0/F");
115 tree_eff->Branch(
"resphi", &
resphi,
"resphi/F");
116 tree_eff->Branch(
"rescottheta", &
rescottheta,
"rescottheta/F");
117 tree_eff->Branch(
"eff", &
eff,
"eff/F");
120 tree_eff->Branch(
"mzmu", &
mzmu,
"mzmu/F");
121 tree_eff->Branch(
"ptzmu", &
ptzmu,
"ptzmu/F");
122 tree_eff->Branch(
"pLzmu", &
pLzmu,
"pLzmu/F");
123 tree_eff->Branch(
"enezmu", &
enezmu,
"enezmu/F");
124 tree_eff->Branch(
"etazmu", &
etazmu,
"etazmu/F");
125 tree_eff->Branch(
"thetazmu", &
thetazmu,
"thetazmu/F");
126 tree_eff->Branch(
"phizmu", &
phizmu,
"phizmu/F");
127 tree_eff->Branch(
"yzmu", &
yzmu,
"yzmu/F");
128 tree_eff->Branch(
"mxptmu", &
mxptmu,
"mxptmu/F");
129 tree_eff->Branch(
"minptmu", &
minptmu,
"minptmu/F");
131 tree_eff->Branch(
"recmzmu", &
recmzmu,
"recmzmu/F");
132 tree_eff->Branch(
"recptzmu", &
recptzmu,
"recptzmu/F");
133 tree_eff->Branch(
"recpLzmu", &
recpLzmu,
"recpLzmu/F");
134 tree_eff->Branch(
"recenezmu", &
recenezmu,
"recenezmu/F");
135 tree_eff->Branch(
"recetazmu", &
recetazmu,
"recetazmu/F");
136 tree_eff->Branch(
"recthetazmu", &
recthetazmu,
"recthetazmu/F");
137 tree_eff->Branch(
"recphizmu", &
recphizmu,
"recphizmu/F");
138 tree_eff->Branch(
"recyzmu", &
recyzmu,
"recyzmu/F");
139 tree_eff->Branch(
"recmxptmu", &
recmxptmu,
"recmxptmu/F");
140 tree_eff->Branch(
"recminptmu", &
recminptmu,
"recminptmu/F");
144 tree_eff->Branch(
"chi2Associator", &
recchiq,
"recchiq/F");
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;
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());
386 GlobalPoint(tp->vertex().x(), tp->vertex().y(), tp->vertex().z()),
393 tscpBuilder(ftsAtProduction,
GlobalPoint(0, 0, 0));
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;
416 nhit = tp->matchedHit();
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;
427 count = countpart[0];
432 count = countpart[1];
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;
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;
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;
522 <<
" and phi= " <<
recphi << std::endl;
526 <<
"TrackingParticle #" << st <<
" with pt=" <<
sqrt(tp->momentum().perp2())
527 <<
" NOT associated to any reco::Track"
553 if (countpart[0] == 2 &&
flag == 0) {
555 sqrt((ene[0][0] + ene[0][1]) * (ene[0][0] + ene[0][1]) - (px[0][0] + px[0][1]) * (px[0][0] + px[0][1]) -
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]));
558 ptzmu =
sqrt((px[0][0] + px[0][1]) * (px[0][0] + px[0][1]) + (py[0][0] + py[0][1]) * (py[0][0] + py[0][1]));
560 pLzmu = pz[0][0] + pz[0][1];
561 enezmu = ene[0][0] + ene[0][1];
562 phizmu = atan2((py[0][0] + py[0][1]), (px[0][0] + px[0][1]));
583 recmzmu =
sqrt((recene[0][0] + recene[0][1]) * (recene[0][0] + recene[0][1]) -
584 (recpx[0][0] + recpx[0][1]) * (recpx[0][0] + recpx[0][1]) -
585 (recpy[0][0] + recpy[0][1]) * (recpy[0][0] + recpy[0][1]) -
586 (recpz[0][0] + recpz[0][1]) * (recpz[0][0] + recpz[0][1]));
588 recptzmu =
sqrt((recpx[0][0] + recpx[0][1]) * (recpx[0][0] + recpx[0][1]) +
589 (recpy[0][0] + recpy[0][1]) * (recpy[0][0] + recpy[0][1]));
591 recpLzmu = recpz[0][0] + recpz[0][1];
593 recphizmu = atan2((recpy[0][0] + recpy[0][1]), (recpx[0][0] + recpx[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;
674 std::vector<std::pair<TrackingParticleRef, double> >
tp;
677 if (recSimColl.
find(track) != recSimColl.
end()) {
678 tp = recSimColl[
track];
680 edm::LogVerbatim(
"TrackValidator") <<
"reco::Track #" << rT <<
" with pt=" << track->
pt()
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));
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"
Log< level::Info, true > LogVerbatim
EventNumber_t event() const
T getUntrackedParameter(std::string const &, T const &) const
const edm::ESGetToken< MagneticField, IdealMagneticFieldRecord > magFieldToken_
static std::vector< std::string > checklist log
double d0() const
dxy parameter in perigee convention (d0 = -dxy)
const_iterator end() const
last iterator over the map (read only)
double normalizedChi2() const
chi-squared divided by n.d.o.f. (or chi-squared * 1e6 if n.d.o.f. is zero)
const FreeTrajectoryState & theState() const
double theta() const
polar angle
#define DEFINE_FWK_MODULE(type)
Sin< T >::type sin(const T &t)
const_iterator find(const key_type &k) const
find element with specified reference key
Geom::Phi< T > phi() const
Global3DPoint GlobalPoint
double phi() const
azimuthal angle of momentum vector
const Vector & momentum() const
track momentum vector
void analyze(const edm::Event &, const edm::EventSetup &) override
ValidationMisalignedTracker(const edm::ParameterSet &)
bool getData(T &iHolder) const
edm::InputTag label_tp_fake
double eta() const
pseudorapidity of momentum vector
const edm::ESGetToken< TrackerGeometry, TrackerDigiGeometryRecord > geomToken_
double pt() const
track transverse momentum
int genpartIndex() const
index of the corresponding Generator particle in the Event container (-1 if no Genpart) ...
Cos< T >::type cos(const T &t)
Tan< T >::type tan(const T &t)
Abs< T >::type abs(const T &t)
unsigned short numberOfValidHits() const
number of valid hits found
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
GlobalVector momentum() const
std::vector< std::string > associators
double dz() const
dz parameter (= dsz/cos(lambda)). This is the track z0 w.r.t (0,0,0) only if the refPoint is close to...
std::vector< edm::InputTag > label
Log< level::Info, false > LogInfo
GlobalPoint position() const
T const * product() const
T getParameter(std::string const &) const
~ValidationMisalignedTracker() override
int type() const
particle type (HEP PDT convension)
edm::InputTag label_tp_effic
const math::XYZTLorentzVectorD & momentum() const
const DetContainer & detsTOB() const
std::string trackassociator
int charge() const
track electric charge
std::vector< TrackingParticle > TrackingParticleCollection
std::vector< float > ptused
Global3DVector GlobalVector