001 #include "AtlfastAlgs/BremBinData.h"
002
003 namespace Atlfast
004 {
005
006
007
008
009
010
011
012
013
014
015
016 BremBinData::BremBinData( BinID& id,
017 vector< ParameterResolutions* > startPoints,
018 vector< ParameterResolutions* > slopes,
019 vector< ParameterResolutions* > sigmas,
020 int randSeed
021 ) :
022 m_id(id),
023 m_startPoints(startPoints),
024 m_slopes(slopes),
025 m_sigmas(sigmas)
026 {
027 m_randomEngine = new HepJamesRandom(randSeed);
028 }
029
030
031
032
033
034 BremBinData::~BremBinData()
035 {
036 for (size_t i = 0; i < m_startPoints.size(); i++)
037 delete m_startPoints[i];
038 for (size_t i = 0; i < m_slopes.size(); i++)
039 delete m_slopes[i];
040 for (size_t i = 0; i < m_sigmas.size(); i++)
041 delete m_sigmas[i];
042 delete m_randomEngine;
043 }
044
045
046
047
048
049
050 TrackTrajectory BremBinData::getBremTrack( const TrackTrajectory& traj ) const
051 {
052
053 double x0[3], lambda[3], sigma[3];
054 for ( int i = 0; i < 3; i++ )
055 {
056 x0[i] = std::abs( m_startPoints[i]->resolution(traj) );
057 lambda[i] = std::abs( m_slopes[i]->resolution(traj) );
058 sigma[i] = m_sigmas[i]->resolution(traj);
059 }
060
061
062 double xMax[3] = { 90 * sigma[0], 90 * sigma[1], 1.0 / (0.5*GeV) };
063
064 double charge = double( traj.signOfCharge() );
065
066 double sign[3] = { -charge, charge, charge };
067
068 double random[3];
069 random[0] = m_randomEngine->flat();
070 random[1] = random[0];
071 random[2] = random[0];
072
073 double var[3];
074 for ( int i = 0; i < 3; i++ )
075 {
076 double denom = 1 - random[i] * ( 1 - std::pow( x0[i] / xMax[i], lambda[i] - 1 ) );
077 denom = std::pow( denom, 1.0 / ( lambda[i] - 1 ) );
078 var[i] = sign[i] * x0[i] / denom;
079 }
080
081
082
083 TrackParameters trkParam = traj.parameters();
084
085 double impactParameter = var[0];
086 double zPerigee = trkParam.zPerigee();
087 Phi phi = var[1];
088 double cotTheta = trkParam.cotTheta();
089 double invPtCharge = var[2];
090
091 double curvature = traj.curvature();
092 double pT = std::abs( 1. / invPtCharge );
093 Hep3Vector vec;
094 vec.setX( pT * std::cos(phi) );
095 vec.setY( pT * std::sin(phi) );
096 vec.setZ( pT * cotTheta );
097
098
099 TrackTrajectory newTrajectory( TrackParameters( vec.pseudoRapidity(),
100 phi, pT, impactParameter,
101 zPerigee, cotTheta,
102 invPtCharge ),
103 traj.startPoint(),
104 curvature );
105 return newTrajectory;
106 }
107
108 }
109
| Due to the LXR bug, the updates fail sometimes to remove references to deleted files. The Saturday's full rebuilds fix these problems |
|
This page was automatically generated by the
LXR engine.
|
|