51 for (
int i=0;
i<2;
i++){
54 for (
int j=0;
j<2;
j++){
84 file_ =
new TFile(rootfile_.c_str(),
"RECREATE");
87 tree_eff =
new TTree(
"EffTracks",
"Efficiency Tracks Tree");
89 tree_eff->Branch(
"Run",&
irun,
"irun/i");
90 tree_eff->Branch(
"Event",&
ievt,
"ievt/i");
93 tree_eff->Branch(
"TrackID",&
trackType,
"trackType/i");
94 tree_eff->Branch(
"pt",&
pt,
"pt/F");
95 tree_eff->Branch(
"eta",&
eta,
"eta/F");
96 tree_eff->Branch(
"CotTheta",&
cottheta,
"cottheta/F");
97 tree_eff->Branch(
"phi",&
phi,
"phi/F");
98 tree_eff->Branch(
"d0",&
d0,
"d0/F");
99 tree_eff->Branch(
"z0",&
z0,
"z0/F");
100 tree_eff->Branch(
"nhit",&
nhit,
"nhit/i");
103 tree_eff->Branch(
"recpt",&
recpt,
"recpt/F");
104 tree_eff->Branch(
"receta",&
receta,
"receta/F");
105 tree_eff->Branch(
"CotRecTheta",&
reccottheta,
"reccottheta/F");
106 tree_eff->Branch(
"recphi",&
recphi,
"recphi/F");
107 tree_eff->Branch(
"recd0",&
recd0,
"recd0/F");
108 tree_eff->Branch(
"recz0",&
recz0,
"recz0/F");
109 tree_eff->Branch(
"nAssoc",&
nAssoc,
"nAssoc/i");
110 tree_eff->Branch(
"recnhit",&
recnhit,
"recnhit/i");
111 tree_eff->Branch(
"CHISQ",&
recchiq,
"recchiq/F");
113 tree_eff->Branch(
"reseta",&
reseta,
"reseta/F");
114 tree_eff->Branch(
"respt",&
respt,
"respt/F");
115 tree_eff->Branch(
"resd0",&
resd0,
"resd0/F");
116 tree_eff->Branch(
"resz0",&
resz0,
"resz0/F");
117 tree_eff->Branch(
"resphi",&
resphi,
"resphi/F");
118 tree_eff->Branch(
"rescottheta",&
rescottheta,
"rescottheta/F");
119 tree_eff->Branch(
"eff",&
eff,
"eff/F");
122 tree_eff->Branch(
"mzmu",&
mzmu,
"mzmu/F");
123 tree_eff->Branch(
"ptzmu",&
ptzmu,
"ptzmu/F");
124 tree_eff->Branch(
"pLzmu",&
pLzmu,
"pLzmu/F");
125 tree_eff->Branch(
"enezmu",&
enezmu,
"enezmu/F");
126 tree_eff->Branch(
"etazmu",&
etazmu,
"etazmu/F");
127 tree_eff->Branch(
"thetazmu",&
thetazmu,
"thetazmu/F");
128 tree_eff->Branch(
"phizmu",&
phizmu,
"phizmu/F");
129 tree_eff->Branch(
"yzmu",&
yzmu,
"yzmu/F");
130 tree_eff->Branch(
"mxptmu",&
mxptmu,
"mxptmu/F");
131 tree_eff->Branch(
"minptmu",&
minptmu,
"minptmu/F");
133 tree_eff->Branch(
"recmzmu",&
recmzmu,
"recmzmu/F");
134 tree_eff->Branch(
"recptzmu",&
recptzmu,
"recptzmu/F");
135 tree_eff->Branch(
"recpLzmu",&
recpLzmu,
"recpLzmu/F");
136 tree_eff->Branch(
"recenezmu",&
recenezmu,
"recenezmu/F");
137 tree_eff->Branch(
"recetazmu",&
recetazmu,
"recetazmu/F");
138 tree_eff->Branch(
"recthetazmu",&
recthetazmu,
"recthetazmu/F");
139 tree_eff->Branch(
"recphizmu",&
recphizmu,
"recphizmu/F");
140 tree_eff->Branch(
"recyzmu",&
recyzmu,
"recyzmu/F");
141 tree_eff->Branch(
"recmxptmu",&
recmxptmu,
"recmxptmu/F");
142 tree_eff->Branch(
"recminptmu",&
recminptmu,
"recminptmu/F");
147 tree_eff->Branch(
"chi2Associator",&
recchiq,
"recchiq/F");
151 tree_fake =
new TTree(
"FakeTracks",
"Fake Rate Tracks Tree");
218 <<
" events" << std::endl;
248 edm::LogInfo(
"Tracker Misalignment Validation") <<
"\n Starting!";
252 std::vector<int> indmu;
257 bool accepted =
false;
258 bool foundmuons=
false;
259 HepMC::GenEvent * myGenEvent =
new HepMC::GenEvent(*(evt->GetEvent()));
261 for ( HepMC::GenEvent::particle_iterator
p = myGenEvent->particles_begin();
p != myGenEvent->particles_end(); ++
p ) {
262 if ( !accepted && ( (*p)->pdg_id() == 23 ) && (*p)->status() == 3 ) {
264 for( HepMC::GenVertex::particle_iterator aDaughter=(*p)->end_vertex()->particles_begin(HepMC::descendants); aDaughter !=(*p)->end_vertex()->particles_end(HepMC::descendants);aDaughter++){
265 if (
abs((*aDaughter)->pdg_id())==13) {
267 if ((*aDaughter)->status()!=1 ) {
268 for( HepMC::GenVertex::particle_iterator byaDaughter=(*aDaughter)->end_vertex()->particles_begin(HepMC::descendants); byaDaughter !=(*aDaughter)->end_vertex()->particles_end(HepMC::descendants);byaDaughter++){
269 if ((*byaDaughter)->status()==1 &&
abs((*byaDaughter)->pdg_id())==13) {
270 indmu.push_back((*byaDaughter)->barcode());
271 std::cout <<
"Stable muon from Z with charge " << (*byaDaughter)->pdg_id() <<
" and index "<< (*byaDaughter)->barcode() << std::endl;
276 indmu.push_back((*aDaughter)->barcode());
277 std::cout <<
"Stable muon from Z with charge " << (*aDaughter)->pdg_id() <<
" and index "<< (*aDaughter)->barcode() << std::endl;
282 std::cout <<
"No muons from Z ...skip event" << std::endl;
288 std::cout <<
"No Z particles in the event ...skip event" << std::endl;
301 auto testGeomDet = trackerGeometry->detsTOB().front();
302 std::cout << testGeomDet->position() << std::endl;
315 for (
int i=0;
i<2;
i++){
316 for (
int j=0;
j<2;
j++){
342 for (
unsigned int ww=0;ww<
associators.size();ww++){
355 LogTrace(
"TrackValidator") <<
"Calling associateRecoToSim method" <<
"\n";
360 LogTrace(
"TrackValidator") <<
"Calling associateSimToReco method" <<
"\n";
372 std::cout <<
"Computing Efficiency" << std::endl;
374 edm::LogVerbatim(
"TrackValidator") <<
"\n# of TrackingParticles (before cuts): " << tPCeff.size() <<
"\n";
392 if (tp->charge()==0)
continue;
398 const SimTrack * simulatedTrack = &(*tp->g4Track_begin());
403 ftsAtProduction(
GlobalPoint(tp->vertex().x(),tp->vertex().y(),tp->vertex().z()),
423 std::cout <<
" TRACCIA SIM DI MUONI " << std::endl;
433 nhit=tp->matchedHit();
436 std::cout <<
"3) Before assoc: SimTrack of type = " << simulatedTrack->
type()
437 <<
" ,at eta = " <<
eta
438 <<
" ,with pt at vertex = " << simulatedTrack->
momentum().pt() <<
" GeV/c"
446 std::cout <<
" TRACK sim of muons from Z " << std::endl;
467 std::vector<std::pair<edm::RefToBase<reco::Track>,
double> > rt;
468 if(simRecColl.
find(tp) != simRecColl.
end()){
483 edm::LogVerbatim(
"TrackValidator") <<
"TrackingParticle #" << st <<
" with pt=" << t->
pt()
484 <<
" associated with quality:" << rt.begin()->second <<
"\n";
485 std::cout <<
"Reconstructed Track:" << t->
pt()<< std::endl;
487 std::cout <<
"\timpact parameter:d0: " << t->
d0()<< std::endl;
488 std::cout <<
"\timpact parameter:z0: " << t->
dz()<< std::endl;
489 std::cout <<
"\tAzimuthal angle of point of closest approach:" << t->
phi()<< std::endl;
507 std::cout <<
"5) After call to associator: the best match has "
509 <<
recchiq <<
", pt at vertex = "
510 <<
recpt <<
" GeV/c, "
511 <<
", recd0 = " <<
recd0
512 <<
", recz0= " <<
recz0
525 <<
" ,d0 residual=" <<
resd0
526 <<
" ,z0 residual=" <<
resz0
527 <<
" with eff=" <<
eff << std::endl;
532 std::cout <<
" TRACCIA RECO DI MUONI " << std::endl;
538 std::cout <<
" TRACCIA RECO DI ELETTRONI " << std::endl;
562 <<
" with pt=" <<
sqrt(tp->momentum().perp2())
563 <<
" NOT associated to any reco::Track" <<
"\n";
588 if (countpart[0]==2 &&
flag==0) {
590 (ene[0][0]+ene[0][1])*(ene[0][0]+ene[0][1])-
591 (px[0][0]+px[0][1])*(px[0][0]+px[0][1])-
592 (py[0][0]+py[0][1])*(py[0][0]+py[0][1])-
593 (pz[0][0]+pz[0][1])*(pz[0][0]+pz[0][1])
597 (px[0][0]+px[0][1])*(px[0][0]+px[0][1])+
598 (py[0][0]+py[0][1])*(py[0][0]+py[0][1])
601 pLzmu=pz[0][0]+pz[0][1];
602 enezmu=ene[0][0]+ene[0][1];
603 phizmu=atan2((py[0][0]+py[0][1]),(px[0][0]+px[0][1]));
626 (recene[0][0]+recene[0][1])*(recene[0][0]+recene[0][1])-
627 (recpx[0][0]+recpx[0][1])*(recpx[0][0]+recpx[0][1])-
628 (recpy[0][0]+recpy[0][1])*(recpy[0][0]+recpy[0][1])-
629 (recpz[0][0]+recpz[0][1])*(recpz[0][0]+recpz[0][1])
633 (recpx[0][0]+recpx[0][1])*(recpx[0][0]+recpx[0][1])+
634 (recpy[0][0]+recpy[0][1])*(recpy[0][0]+recpy[0][1])
639 recphizmu=atan2((recpy[0][0]+recpy[0][1]),(recpx[0][0]+recpx[0][1]));
669 std::cout <<
"Computing Fake Rate" << std::endl;
711 std::cout <<
"Track number "<<
i << std::endl ;
713 std::cout <<
"\timpact parameter:d0: " << track->
d0()<< std::endl;
714 std::cout <<
"\timpact parameter:z0: " << track->
dz()<< std::endl;
715 std::cout <<
"\tAzimuthal angle of point of closest approach:" << track->
phi()<< std::endl;
721 std::vector<std::pair<TrackingParticleRef, double> > tp;
724 if(recSimColl.
find(track) != recSimColl.
end()){
725 tp = recSimColl[track];
727 edm::LogVerbatim(
"TrackValidator") <<
"reco::Track #" << rT <<
" with pt=" << track->
pt()
728 <<
" associated with quality:" << tp.begin()->second <<
"\n";
732 const SimTrack * fakeassocTrack = &(*tpr->g4Track_begin());
737 ftsAtProduction(
GlobalPoint(tpr->vertex().x(),tpr->vertex().y(),tpr->vertex().z()),
764 std::cout <<
"4) After call to associator: the best SimTrack match is of type" << fakeassocTrack->
type()
767 <<
" ,with pt at vertex = " <<
fakept <<
" GeV/c"
768 <<
" ,d0 global = " <<
faked0
783 edm::LogVerbatim(
"TrackValidator") <<
"reco::Track #" << rT <<
" with pt=" << track->
pt()
784 <<
" NOT associated to any TrackingParticle" <<
"\n";
815 std::cout <<
"\t Misalignment analysis completed \n" << std::endl;
T getParameter(std::string const &) const
EventNumber_t event() const
T getUntrackedParameter(std::string const &, T const &) const
const Vector & momentum() const
track momentum vector
double d0() const
dxy parameter in perigee convention (d0 = - dxy)
std::vector< TrackingParticle > TrackingParticleCollection
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)
virtual void analyze(const edm::Event &, const edm::EventSetup &)
~ValidationMisalignedTracker()
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
ValidationMisalignedTracker(const edm::ParameterSet &)
edm::InputTag label_tp_fake
double eta() const
pseudorapidity of momentum vector
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
GlobalPoint position() const
T const * product() const
T const * product() const
bool check(const edm::EventSetup &iSetup)
int type() const
particle type (HEP PDT convension)
edm::InputTag label_tp_effic
const math::XYZTLorentzVectorD & momentum() const
std::string trackassociator
int charge() const
track electric charge
edm::ESHandle< MagneticField > theMF
edm::ESWatcher< TrackAssociatorRecord > watchTrackAssociatorRecord_
std::vector< float > ptused
Global3DVector GlobalVector
std::vector< const TrackAssociatorBase * > associatore