3 #include <CLHEP/Random/RandGauss.h> 4 #include <CLHEP/Units/GlobalSystemOfUnits.h> 26 gpart = evt->barcode_to_particle( line );
28 direction=(gpart->momentum().pz()>0)?1:-1;
32 double time = ( ddd*meter - gpart->production_vertex()->position().z()*mm );
37 if(ddd == 0.)
continue;
39 LogDebug(
"ProtonTransportEventProcessing") <<
"ProtonTransport:: x= "<< (*(
m_xAtTrPoint.find(line))).second<<
"\n" 40 <<
"ProtonTransport:: y= "<< (*(
m_yAtTrPoint.find(line))).second<<
"\n" 41 <<
"ProtonTransport:: z= "<< ddd * direction*
m_to_mm <<
"\n" 42 <<
"ProtonTransport:: t= "<<
time;
44 TLorentzVector
const& p_out = (it).
second;
46 HepMC::GenVertex * vert =
new HepMC::GenVertex(
49 ddd * direction *
m_to_mm, time + time*0.001 ) );
51 gpart->set_status( 2 );
52 vert->add_particle_in( gpart );
53 vert->add_particle_out(
new HepMC::GenParticle( HepMC::FourVector(p_out.Px(),p_out.Py(),p_out.Pz(),p_out.E()), gpart->pdg_id(), 1, gpart->flow() )) ;
54 evt->add_vertex( vert );
56 int ingoing = (*vert->particles_in_const_begin())->barcode();
57 int outgoing = (*vert->particles_out_const_begin())->barcode();
60 if (
m_verbosity)
LogDebug(
"ProtonTransportEventProcessing") <<
"ProtonTransport:addPartToHepMC: LHCTransportLink " << theLink;
67 p_out.SetPx(p->momentum().px());
68 p_out.SetPy(p->momentum().py());
69 p_out.SetPz(p->momentum().pz());
70 p_out.SetE(p->momentum().e());
72 p->set_momentum(HepMC::FourVector(p_out.Px(),p_out.Py(),p_out.Pz(),p_out.E()));
76 double theta = p_out.Theta();
77 double thetax = atan(p_out.Px()/fabs(p_out.Pz()));
78 double thetay = atan(p_out.Py()/fabs(p_out.Pz()));
79 double energy = p_out.E();
82 int direction = (p_out.Pz()>0)?1:-1;
90 double denergy = (double)CLHEP::RandGauss::shoot(
engine,0.,
m_sig_E);
92 double s_theta =
sqrt(
pow(thetax+dtheta_x*urad,2)+
pow(thetay+dtheta_y*urad,2));
93 double s_phi = atan2(thetay+dtheta_y*urad,thetax+dtheta_x*urad);
97 p_out.SetPx((
double)p*
sin(s_theta)*
cos(s_phi));
98 p_out.SetPy((
double)p*
sin(s_theta)*
sin(s_phi));
99 p_out.SetPz((
double)p*(
cos(s_theta))*direction);
double fPPSRegionStart_45
void ApplyBeamCorrection(HepMC::GenParticle *p)
std::map< unsigned int, TLorentzVector > m_beamPart
virtual ~ProtonTransport()
Sin< T >::type sin(const T &t)
std::map< unsigned int, double > m_yAtTrPoint
Geom::Theta< T > theta() const
std::vector< LHCTransportLink > m_CorrespondenceMap
std::map< unsigned int, double > m_xAtTrPoint
U second(std::pair< T, U > const &p)
double fPPSRegionStart_56
Cos< T >::type cos(const T &t)
void addPartToHepMC(HepMC::GenEvent *)
static const double m_to_mm
static const double ProtonMassSQ
Power< A, B >::type pow(const A &a, const B &b)
CLHEP::HepRandomEngine * engine