/* * ---- Delphes ---- * A Fast Simulator for general purpose LHC detector * S. Ovyn ~~~~ severine.ovyn@uclouvain.be * * Center for Particle Physics and Phenomenology (CP3) * Universite Catholique de Louvain (UCL) * Louvain-la-Neuve, Belgium * */ #include "interface/BFieldProp.h" #include "TRandom.h" #include #include #include #include #include using namespace std; //------------------------------------------------------------------------------ TrackPropagation::TrackPropagation() { MAXITERATION = 20000; MINSEGLENGTH = 70; } void TrackPropagation::Propagation(const TRootGenParticle *Part,TLorentzVector &genMomentum) { double q = Charge(Part->PID); if(q==0)return; float Xvertex1 = Part->X; float Yvertex1 = Part->Y; float Zvertex1 = Part->Z; //out of trackibg coverage? if(sqrt(Xvertex1*Xvertex1+Yvertex1*Yvertex1) > TRACKING_RADIUS){return;} if(fabs(Zvertex1) > TRACKING_LENGTH){return;} float Px = Part->Px; float Py = Part->Py; float Pz = Part->Pz; double px = Px / 0.003; double py = Py / 0.003; double pz = Pz / 0.003; double pt = sqrt(px*px+py*py); double p = sqrt(px*px+py*py+pz*pz); if(q!=0){ double e = Part->E / 0.003; // double M = sqrt(e*e - (px*px + py*py + pz*pz) ); double M = Part->M; /*if(fabs(Part->PID)==11) { cout<<"genMomentum.M() "<M<PID< TRACKING_RADIUS*TRACKING_RADIUS ){ x /= (x*x+y*y)/(TRACKING_RADIUS*TRACKING_RADIUS); y /= (x*x+y*y)/(TRACKING_RADIUS*TRACKING_RADIUS); break;} if( fabs(z)>TRACKING_LENGTH)break; xold = x; yold = y; zold = z; } if(x!=0 && y!=0 && z!=0) { double theta = fabs(atan(y/z)); double eta; if(z > 0)eta = -log(tan(theta/2)); else eta = -(-log(tan(theta/2))); double phi = atan2(y,x); genMomentum.SetPtEtaPhiE(Part->PT,eta,phi,Part->E); } // cout<<"genMomentum final "<