14 #include "CLHEP/Vector/LorentzVector.h"
40 , outputFile_( iConfig.getUntrackedParameter<std::
string>(
"outputFile" ) )
42 , verbose_( iConfig.getUntrackedParameter<bool>(
"verbose",
false ) ) {
46 tversion = tversion.Remove(0,1);
47 tversion = tversion.Remove(tversion.Length()-1,tversion.Length());
69 std::cout <<
" TrackParameterAnalyzer::beginJob conversion from sim units to rec units is " <<
simUnit_ << std::endl;
72 h1_pull0_ =
new TH1F(
"pull0",
"pull q/p",100,-25.,25.);
73 h1_pull1_ =
new TH1F(
"pull1",
"pull lambda",100,-25.,25.);
74 h1_pull2_ =
new TH1F(
"pull2",
"pull phi ",100,-25.,25.);
75 h1_pull3_ =
new TH1F(
"pull3",
"pull dca ",100,-25.,25.);
76 h1_pull4_ =
new TH1F(
"pull4",
"pull zdca ",100,-25.,25.);
78 h1_res0_ =
new TH1F(
"res0",
"res q/p",100,-0.1,0.1);
79 h1_res1_ =
new TH1F(
"res1",
"res lambda",100,-0.1,0.1);
80 h1_res2_ =
new TH1F(
"res2",
"res phi ",100,-0.1,0.1);
81 h1_res3_ =
new TH1F(
"res3",
"res dca ",100,-0.1,0.1);
82 h1_res4_ =
new TH1F(
"res4",
"res zdca ",100,-0.1,0.1);
84 h1_Beff_ =
new TH1F(
"Beff",
"Beff",2000,-10.,10.);
86 h1_par0_ =
new TH1F(
"par0",
"q/p",100,-0.1,0.1);
89 h1_par3_ =
new TH1F(
"par3",
"dca ",100,-0.1,0.1);
90 h1_par4_ =
new TH1F(
"par4",
"zdca ",1000,-10.,10.);
120 double dtheta=
a(1)-
b(1);
121 double dphi =
a(2)-
b(2);
122 if (dphi>
M_PI){ dphi-=M_2_PI; }
else if(dphi<-
M_PI){dphi+=M_2_PI;}
123 return ( (fabs(dtheta)<0.02) && (fabs(dphi)<0.04) );
130 using CLHEP::HepLorentzVector;
132 const double fBfield=3.8;
137 std::cout <<
"SimVertex " << simVtcs->size() << std::endl;
138 for(edm::SimVertexContainer::const_iterator
v=simVtcs->begin();
139 v!=simVtcs->end(); ++
v){
141 << std::setw(10) << std::setprecision(4)
142 <<
v->position().x() <<
" "
143 <<
v->position().y() <<
" "
144 <<
v->position().z() <<
" "
145 <<
v->parentIndex() <<
" "
146 <<
v->noParent() <<
" "
156 std::vector<ParameterVector > tsim;
157 for(edm::SimTrackContainer::const_iterator
t=simTrks->begin();
158 t!=simTrks->end(); ++
t){
160 std::cout <<
"simtrk has no vertex" << std::endl;
164 HepLorentzVector
v((*simVtcs)[
t->vertIndex()].position().x(),
165 (*simVtcs)[
t->vertIndex()].position().y(),
166 (*simVtcs)[
t->vertIndex()].position().z(),
167 (*simVtcs)[
t->vertIndex()].position().e());
168 int pdgCode=
t->type();
172 std::cout <<
"funny particle skipped , code=" << pdgCode << std::endl;
175 if ((pdgCode==11)||(pdgCode==13)||(pdgCode==15)||(pdgCode==-211)||(pdgCode==-2212)||(pdgCode==321)){Q=-1;}
176 else if((pdgCode==-11)||(pdgCode==-13)||(pdgCode==-15)||(pdgCode==211)||(pdgCode==2212)||(pdgCode==321)){Q=1;}
180 HepLorentzVector
p(
t->momentum().x(),
t->momentum().y(),
t->momentum().z(),
t->momentum().e());
183 <<
" gen=" << std::setw( 4) <<
t->genpartIndex()
184 <<
" vtx=" << std::setw( 4) <<
t->vertIndex()
185 <<
" pdg=" << std::setw( 5) <<
t->type()
186 <<
" Q=" << std::setw( 3) << Q
187 <<
" pt=" << std::setw(6) <<
p.perp()
188 <<
" vx=" << std::setw(6) <<
v.x()
189 <<
" vy=" << std::setw(6) <<
v.y()
190 <<
" vz=" << std::setw(6) <<
v.z()
193 if ( (Q != 0) && (
p.perp()>0.1) ){
197 double kappa=-Q*0.002998*fBfield/
p.perp();
198 double D0=x0*
sin(
p.phi())-y0*
cos(
p.phi())-0.5*kappa*(x0*x0+y0*y0);
199 double q=
sqrt(1.-2.*kappa*D0);
200 double s0=(x0*
cos(
p.phi())+y0*
sin(
p.phi()))/
q;
202 if (fabs(kappa*s0)>0.001){
203 s1=asin(kappa*s0)/
kappa;
205 double ks02=(kappa*s0)*(kappa*s0);
206 s1=s0*(1.+ks02/6.+3./40.*ks02*ks02+5./112.*
pow(ks02,3));
227 for(reco::TrackCollection::const_iterator
t=recTracks->begin();
228 t!=recTracks->end(); ++
t){
232 std::cout <<
"reco pars= " << p << std::endl;
234 for(std::vector<ParameterVector>::const_iterator
s=tsim.begin();
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Sin< T >::type sin(const T &t)
std::vector< Track > TrackCollection
collection of Tracks
TrackParameterAnalyzer(const edm::ParameterSet &)
math::Vector< dimension >::type ParameterVector
parameter vector
bool match(const ParameterVector &a, const ParameterVector &b)
edm::EDGetTokenT< edm::SimTrackContainer > edmSimTrackContainerToken_
Cos< T >::type cos(const T &t)
edm::EDGetTokenT< reco::TrackCollection > recoTrackCollectionToken_
virtual void analyze(const edm::Event &, const edm::EventSetup &)
std::string getReleaseVersion()
edm::EDGetTokenT< edm::SimVertexContainer > edmSimVertexContainerToken_
std::vector< SimVertex > SimVertexContainer
reco::TrackBase::ParameterVector ParameterVector
~TrackParameterAnalyzer()
static const G4double kappa
volatile std::atomic< bool > shutdown_flag false
std::vector< SimTrack > SimTrackContainer
Power< A, B >::type pow(const A &a, const B &b)
math::Error< dimension >::type CovarianceMatrix
5 parameter covariance matrix