14 #include "CLHEP/Vector/LorentzVector.h" 38 , edmSimTrackContainerToken_( consumes<
edm::
SimTrackContainer>( iConfig.getParameter<
edm::InputTag>(
"simG4" ) ) )
40 , outputFile_( iConfig.getUntrackedParameter<
std::
string>(
"outputFile" ) )
42 , verbose_( iConfig.getUntrackedParameter<
bool>(
"verbose",
false ) ) {
46 tversion = tversion.erase(tversion.size() - 1, 1).erase(0, 1);
48 rootFile_ = TFile::Open(outputFile_.c_str(),
"RECREATE");
68 std::cout <<
" TrackParameterAnalyzer::beginJob conversion from sim units to rec units is " <<
simUnit_ << std::endl;
71 h1_pull0_ =
new TH1F(
"pull0",
"pull q/p",100,-25.,25.);
72 h1_pull1_ =
new TH1F(
"pull1",
"pull lambda",100,-25.,25.);
73 h1_pull2_ =
new TH1F(
"pull2",
"pull phi ",100,-25.,25.);
74 h1_pull3_ =
new TH1F(
"pull3",
"pull dca ",100,-25.,25.);
75 h1_pull4_ =
new TH1F(
"pull4",
"pull zdca ",100,-25.,25.);
77 h1_res0_ =
new TH1F(
"res0",
"res q/p",100,-0.1,0.1);
78 h1_res1_ =
new TH1F(
"res1",
"res lambda",100,-0.1,0.1);
79 h1_res2_ =
new TH1F(
"res2",
"res phi ",100,-0.1,0.1);
80 h1_res3_ =
new TH1F(
"res3",
"res dca ",100,-0.1,0.1);
81 h1_res4_ =
new TH1F(
"res4",
"res zdca ",100,-0.1,0.1);
83 h1_Beff_ =
new TH1F(
"Beff",
"Beff",2000,-10.,10.);
85 h1_par0_ =
new TH1F(
"par0",
"q/p",100,-0.1,0.1);
88 h1_par3_ =
new TH1F(
"par3",
"dca ",100,-0.1,0.1);
89 h1_par4_ =
new TH1F(
"par4",
"zdca ",1000,-10.,10.);
119 double dtheta=
a(1)-
b(1);
120 double dphi =
a(2)-
b(2);
121 if (dphi>
M_PI){ dphi-=M_2_PI; }
else if(dphi<-
M_PI){dphi+=M_2_PI;}
122 return ( (fabs(dtheta)<0.02) && (fabs(dphi)<0.04) );
129 using CLHEP::HepLorentzVector;
131 const double fBfield=3.8;
136 std::cout <<
"SimVertex " << simVtcs->size() << std::endl;
137 for(edm::SimVertexContainer::const_iterator
v=simVtcs->begin();
138 v!=simVtcs->end(); ++
v){
140 << std::setw(10) << std::setprecision(4)
141 <<
v->position().x() <<
" " 142 <<
v->position().y() <<
" " 143 <<
v->position().z() <<
" " 144 <<
v->parentIndex() <<
" " 145 <<
v->noParent() <<
" " 155 std::vector<ParameterVector > tsim;
156 for(edm::SimTrackContainer::const_iterator
t=simTrks->begin();
157 t!=simTrks->end(); ++
t){
159 std::cout <<
"simtrk has no vertex" << std::endl;
163 HepLorentzVector
v((*simVtcs)[
t->vertIndex()].position().x(),
164 (*simVtcs)[
t->vertIndex()].position().y(),
165 (*simVtcs)[
t->vertIndex()].position().z(),
166 (*simVtcs)[
t->vertIndex()].position().e());
167 int pdgCode=
t->type();
171 std::cout <<
"funny particle skipped , code=" << pdgCode << std::endl;
174 if ((pdgCode==11)||(pdgCode==13)||(pdgCode==15)||(pdgCode==-211)||(pdgCode==-2212)||(pdgCode==321)){Q=-1;}
175 else if((pdgCode==-11)||(pdgCode==-13)||(pdgCode==-15)||(pdgCode==211)||(pdgCode==2212)||(pdgCode==321)){Q=1;}
179 HepLorentzVector
p(
t->momentum().x(),
t->momentum().y(),
t->momentum().z(),
t->momentum().e());
182 <<
" gen=" << std::setw( 4) <<
t->genpartIndex()
183 <<
" vtx=" << std::setw( 4) <<
t->vertIndex()
184 <<
" pdg=" << std::setw( 5) <<
t->type()
185 <<
" Q=" << std::setw( 3) << Q
186 <<
" pt=" << std::setw(6) <<
p.perp()
187 <<
" vx=" << std::setw(6) <<
v.x()
188 <<
" vy=" << std::setw(6) <<
v.y()
189 <<
" vz=" << std::setw(6) <<
v.z()
192 if ( (Q != 0) && (
p.perp()>0.1) ){
196 double kappa=-Q*0.002998*fBfield/
p.perp();
197 double D0=x0*
sin(
p.phi())-y0*
cos(
p.phi())-0.5*kappa*(x0*x0+y0*y0);
198 double q=
sqrt(1.-2.*kappa*D0);
199 double s0=(x0*
cos(
p.phi())+y0*
sin(
p.phi()))/
q;
201 if (fabs(kappa*s0)>0.001){
202 s1=asin(kappa*s0)/
kappa;
204 double ks02=(kappa*s0)*(kappa*s0);
205 s1=s0*(1.+ks02/6.+3./40.*ks02*ks02+5./112.*
pow(ks02,3));
226 for(reco::TrackCollection::const_iterator
t=recTracks->begin();
227 t!=recTracks->end(); ++
t){
231 std::cout <<
"reco pars= " << p << std::endl;
233 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_
std::string getReleaseVersion()
edm::EDGetTokenT< edm::SimVertexContainer > edmSimVertexContainerToken_
std::vector< SimVertex > SimVertexContainer
reco::TrackBase::ParameterVector ParameterVector
void analyze(const edm::Event &, const edm::EventSetup &) override
static const G4double kappa
~TrackParameterAnalyzer() override
std::vector< SimTrack > SimTrackContainer
Power< A, B >::type pow(const A &a, const B &b)
math::Error< dimension >::type CovarianceMatrix
5 parameter covariance matrix