55 for (
int i=0;
i<2;
i++){
58 for (
int j=0;j<2;j++){
88 file_ =
new TFile(rootfile_.c_str(),
"RECREATE");
91 tree_eff =
new TTree(
"EffTracks",
"Efficiency Tracks Tree");
93 tree_eff->Branch(
"Run",&
irun,
"irun/i");
94 tree_eff->Branch(
"Event",&
ievt,
"ievt/i");
97 tree_eff->Branch(
"TrackID",&
trackType,
"trackType/i");
98 tree_eff->Branch(
"pt",&
pt,
"pt/F");
99 tree_eff->Branch(
"eta",&
eta,
"eta/F");
100 tree_eff->Branch(
"CotTheta",&
cottheta,
"cottheta/F");
101 tree_eff->Branch(
"phi",&
phi,
"phi/F");
102 tree_eff->Branch(
"d0",&
d0,
"d0/F");
103 tree_eff->Branch(
"z0",&
z0,
"z0/F");
104 tree_eff->Branch(
"nhit",&
nhit,
"nhit/i");
107 tree_eff->Branch(
"recpt",&
recpt,
"recpt/F");
108 tree_eff->Branch(
"receta",&
receta,
"receta/F");
109 tree_eff->Branch(
"CotRecTheta",&
reccottheta,
"reccottheta/F");
110 tree_eff->Branch(
"recphi",&
recphi,
"recphi/F");
111 tree_eff->Branch(
"recd0",&
recd0,
"recd0/F");
112 tree_eff->Branch(
"recz0",&
recz0,
"recz0/F");
113 tree_eff->Branch(
"nAssoc",&
nAssoc,
"nAssoc/i");
114 tree_eff->Branch(
"recnhit",&
recnhit,
"recnhit/i");
115 tree_eff->Branch(
"CHISQ",&
recchiq,
"recchiq/F");
117 tree_eff->Branch(
"reseta",&
reseta,
"reseta/F");
118 tree_eff->Branch(
"respt",&
respt,
"respt/F");
119 tree_eff->Branch(
"resd0",&
resd0,
"resd0/F");
120 tree_eff->Branch(
"resz0",&
resz0,
"resz0/F");
121 tree_eff->Branch(
"resphi",&
resphi,
"resphi/F");
122 tree_eff->Branch(
"rescottheta",&
rescottheta,
"rescottheta/F");
123 tree_eff->Branch(
"eff",&
eff,
"eff/F");
126 tree_eff->Branch(
"mzmu",&
mzmu,
"mzmu/F");
127 tree_eff->Branch(
"ptzmu",&
ptzmu,
"ptzmu/F");
128 tree_eff->Branch(
"pLzmu",&
pLzmu,
"pLzmu/F");
129 tree_eff->Branch(
"enezmu",&
enezmu,
"enezmu/F");
130 tree_eff->Branch(
"etazmu",&
etazmu,
"etazmu/F");
131 tree_eff->Branch(
"thetazmu",&
thetazmu,
"thetazmu/F");
132 tree_eff->Branch(
"phizmu",&
phizmu,
"phizmu/F");
133 tree_eff->Branch(
"yzmu",&
yzmu,
"yzmu/F");
134 tree_eff->Branch(
"mxptmu",&
mxptmu,
"mxptmu/F");
135 tree_eff->Branch(
"minptmu",&
minptmu,
"minptmu/F");
137 tree_eff->Branch(
"recmzmu",&
recmzmu,
"recmzmu/F");
138 tree_eff->Branch(
"recptzmu",&
recptzmu,
"recptzmu/F");
139 tree_eff->Branch(
"recpLzmu",&
recpLzmu,
"recpLzmu/F");
140 tree_eff->Branch(
"recenezmu",&
recenezmu,
"recenezmu/F");
141 tree_eff->Branch(
"recetazmu",&
recetazmu,
"recetazmu/F");
142 tree_eff->Branch(
"recthetazmu",&
recthetazmu,
"recthetazmu/F");
143 tree_eff->Branch(
"recphizmu",&
recphizmu,
"recphizmu/F");
144 tree_eff->Branch(
"recyzmu",&
recyzmu,
"recyzmu/F");
145 tree_eff->Branch(
"recmxptmu",&
recmxptmu,
"recmxptmu/F");
146 tree_eff->Branch(
"recminptmu",&
recminptmu,
"recminptmu/F");
151 tree_eff->Branch(
"chi2Associator",&
recchiq,
"recchiq/F");
155 tree_fake =
new TTree(
"FakeTracks",
"Fake Rate Tracks Tree");
222 <<
" events" << std::endl;
243 std::vector<const reco::TrackToTrackingParticleAssociator*> associatore;
249 associatore.push_back( theAssociator.
product() );
253 edm::LogInfo(
"Tracker Misalignment Validation") <<
"\n Starting!";
257 std::vector<int> indmu;
262 bool accepted =
false;
263 bool foundmuons=
false;
264 HepMC::GenEvent * myGenEvent =
new HepMC::GenEvent(*(evt->
GetEvent()));
266 for ( HepMC::GenEvent::particle_iterator
p = myGenEvent->particles_begin();
p != myGenEvent->particles_end(); ++
p ) {
267 if ( !accepted && ( (*p)->pdg_id() == 23 ) && (*p)->status() == 3 ) {
269 for( HepMC::GenVertex::particle_iterator aDaughter=(*p)->end_vertex()->particles_begin(HepMC::descendants); aDaughter !=(*p)->end_vertex()->particles_end(HepMC::descendants);aDaughter++){
270 if (
abs((*aDaughter)->pdg_id())==13) {
272 if ((*aDaughter)->status()!=1 ) {
273 for( HepMC::GenVertex::particle_iterator byaDaughter=(*aDaughter)->end_vertex()->particles_begin(HepMC::descendants); byaDaughter !=(*aDaughter)->end_vertex()->particles_end(HepMC::descendants);byaDaughter++){
274 if ((*byaDaughter)->status()==1 &&
abs((*byaDaughter)->pdg_id())==13) {
275 indmu.push_back((*byaDaughter)->barcode());
276 std::cout <<
"Stable muon from Z with charge " << (*byaDaughter)->pdg_id() <<
" and index "<< (*byaDaughter)->barcode() << std::endl;
281 indmu.push_back((*aDaughter)->barcode());
282 std::cout <<
"Stable muon from Z with charge " << (*aDaughter)->pdg_id() <<
" and index "<< (*aDaughter)->barcode() << std::endl;
287 std::cout <<
"No muons from Z ...skip event" << std::endl;
293 std::cout <<
"No Z particles in the event ...skip event" << std::endl;
306 auto testGeomDet = trackerGeometry->
detsTOB().front();
307 std::cout << testGeomDet->position() << std::endl;
320 for (
int i=0;
i<2;
i++){
321 for (
int j=0;j<2;j++){
347 for (
unsigned int ww=0;ww<
associators.size();ww++){
360 LogTrace(
"TrackValidator") <<
"Calling associateRecoToSim method" <<
"\n";
364 LogTrace(
"TrackValidator") <<
"Calling associateSimToReco method" <<
"\n";
376 std::cout <<
"Computing Efficiency" << std::endl;
378 edm::LogVerbatim(
"TrackValidator") <<
"\n# of TrackingParticles (before cuts): " << tPCeff.size() <<
"\n";
396 if (tp->charge()==0)
continue;
402 const SimTrack * simulatedTrack = &(*tp->g4Track_begin());
407 ftsAtProduction(
GlobalPoint(tp->vertex().x(),tp->vertex().y(),tp->vertex().z()),
427 std::cout <<
" TRACCIA SIM DI MUONI " << std::endl;
437 nhit=tp->matchedHit();
440 std::cout <<
"3) Before assoc: SimTrack of type = " << simulatedTrack->
type()
441 <<
" ,at eta = " <<
eta 442 <<
" ,with pt at vertex = " << simulatedTrack->
momentum().pt() <<
" GeV/c" 450 std::cout <<
" TRACK sim of muons from Z " << std::endl;
471 std::vector<std::pair<edm::RefToBase<reco::Track>,
double> > rt;
472 if(simRecColl.
find(tp) != simRecColl.
end()){
487 edm::LogVerbatim(
"TrackValidator") <<
"TrackingParticle #" << st <<
" with pt=" << t->
pt()
488 <<
" associated with quality:" << rt.begin()->second <<
"\n";
489 std::cout <<
"Reconstructed Track:" << t->
pt()<< std::endl;
491 std::cout <<
"\timpact parameter:d0: " << t->
d0()<< std::endl;
492 std::cout <<
"\timpact parameter:z0: " << t->
dz()<< std::endl;
493 std::cout <<
"\tAzimuthal angle of point of closest approach:" << t->
phi()<< std::endl;
511 std::cout <<
"5) After call to associator: the best match has " 513 <<
recchiq <<
", pt at vertex = " 514 <<
recpt <<
" GeV/c, " 515 <<
", recd0 = " <<
recd0 516 <<
", recz0= " <<
recz0 529 <<
" ,d0 residual=" <<
resd0 530 <<
" ,z0 residual=" <<
resz0 531 <<
" with eff=" <<
eff << std::endl;
536 std::cout <<
" TRACCIA RECO DI MUONI " << std::endl;
542 std::cout <<
" TRACCIA RECO DI ELETTRONI " << std::endl;
566 <<
" with pt=" <<
sqrt(tp->momentum().perp2())
567 <<
" NOT associated to any reco::Track" <<
"\n";
592 if (countpart[0]==2 &&
flag==0) {
594 (ene[0][0]+ene[0][1])*(ene[0][0]+ene[0][1])-
595 (px[0][0]+px[0][1])*(px[0][0]+px[0][1])-
596 (py[0][0]+py[0][1])*(py[0][0]+py[0][1])-
597 (pz[0][0]+pz[0][1])*(pz[0][0]+pz[0][1])
601 (px[0][0]+px[0][1])*(px[0][0]+px[0][1])+
602 (py[0][0]+py[0][1])*(py[0][0]+py[0][1])
605 pLzmu=pz[0][0]+pz[0][1];
606 enezmu=ene[0][0]+ene[0][1];
607 phizmu=atan2((py[0][0]+py[0][1]),(px[0][0]+px[0][1]));
630 (recene[0][0]+recene[0][1])*(recene[0][0]+recene[0][1])-
631 (recpx[0][0]+recpx[0][1])*(recpx[0][0]+recpx[0][1])-
632 (recpy[0][0]+recpy[0][1])*(recpy[0][0]+recpy[0][1])-
633 (recpz[0][0]+recpz[0][1])*(recpz[0][0]+recpz[0][1])
637 (recpx[0][0]+recpx[0][1])*(recpx[0][0]+recpx[0][1])+
638 (recpy[0][0]+recpy[0][1])*(recpy[0][0]+recpy[0][1])
643 recphizmu=atan2((recpy[0][0]+recpy[0][1]),(recpx[0][0]+recpx[0][1]));
673 std::cout <<
"Computing Fake Rate" << std::endl;
715 std::cout <<
"Track number "<<
i << std::endl ;
717 std::cout <<
"\timpact parameter:d0: " << track->
d0()<< std::endl;
718 std::cout <<
"\timpact parameter:z0: " << track->
dz()<< std::endl;
719 std::cout <<
"\tAzimuthal angle of point of closest approach:" << track->
phi()<< std::endl;
725 std::vector<std::pair<TrackingParticleRef, double> > tp;
728 if(recSimColl.
find(track) != recSimColl.
end()){
729 tp = recSimColl[
track];
731 edm::LogVerbatim(
"TrackValidator") <<
"reco::Track #" << rT <<
" with pt=" << track->
pt()
732 <<
" associated with quality:" << tp.begin()->second <<
"\n";
736 const SimTrack * fakeassocTrack = &(*tpr->g4Track_begin());
741 ftsAtProduction(
GlobalPoint(tpr->vertex().x(),tpr->vertex().y(),tpr->vertex().z()),
768 std::cout <<
"4) After call to associator: the best SimTrack match is of type" << fakeassocTrack->
type()
771 <<
" ,with pt at vertex = " <<
fakept <<
" GeV/c" 772 <<
" ,d0 global = " <<
faked0 787 edm::LogVerbatim(
"TrackValidator") <<
"reco::Track #" << rT <<
" with pt=" << track->
pt()
788 <<
" NOT associated to any TrackingParticle" <<
"\n";
819 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
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)
~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
const Vector & momentum() const
track momentum vector
virtual void analyze(const edm::Event &, const edm::EventSetup &) override
ValidationMisalignedTracker(const edm::ParameterSet &)
edm::InputTag label_tp_fake
virtual void endJob() override
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
const HepMC::GenEvent * GetEvent() const
T const * product() const
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
T const * product() const
edm::ESHandle< MagneticField > theMF
std::vector< float > ptused
Global3DVector GlobalVector