Report problems to ATLAS LXR Team (with time and IP address indicated)

The LXR Cross Referencer

source navigation ]
diff markup ]
identifier search ]
general search ]
 
 
Architecture: linux ]
Version: head ] [ nightly ] [ GaudiDev ]
  Links to LXR source navigation pages for stable releases [ 12.*.* ]   [ 13.*.* ]   [ 14.*.* ]   [ 15.*.* ] 

001 #include "AtlfastAlgs/BremBinData.h"
002 
003 namespace Atlfast 
004 {
005   /** @brief Class to hold smearing matrix data.
006    *
007    * The data is provided through the constructor
008    * in the format found in the flat file and the
009    * correlation matrix corresponding to the bin
010    * can be calculated and returned via public methods.
011    */
012 
013   //-----------------------------------------------
014   // PUBLIC - Constructor
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   // PUBLIC - Destructor
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   // PUBLIC - TrackTrajectory getBremTrack
048   // returns smeared track parameters
049   //--------------------------------------------------------------------
050   TrackTrajectory BremBinData::getBremTrack( const TrackTrajectory& traj ) const
051   {
052     // data necessary to generate bremsstrahlung corrections
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     // range of power-function distribution [x0, xMax]
061     // for q/pT, 500MeV is the offline reconstruction cut
062     double xMax[3] = { 90 * sigma[0], 90 * sigma[1], 1.0 / (0.5*GeV) };
063 
064     double charge = double( traj.signOfCharge() );
065     // bremsstrahlung results in both pos and neg tails, depending on charge and parameter
066     double sign[3] = { -charge, charge, charge };
067      
068     double random[3];
069     random[0] = m_randomEngine->flat();
070     random[1] = random[0];  // introduce correlation (d0,phi0) 
071     random[2] = random[0];  // introduce correlation (d0,q/pT), (phi0,q/pT)
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;   // normalised power-series distribution
079     }  
080    
081     // create output TrackTrajectory object: longitudinal parameters remain unchanged
082     // (small effects taken into account in double-Gaussian smearing in ElectronMatrixManager)
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     // Convert results to object
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 } //namespace bracket
109 

source navigation ] diff markup ] identifier search ] general search ]

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. Valid HTML 4.01!