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;
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)
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 &)
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
const HepMC::GenEvent * GetEvent() const
T const * product() 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
T const * product() const
edm::ESHandle< MagneticField > theMF
std::vector< float > ptused
Global3DVector GlobalVector