BremBinData.cxx

Go to the documentation of this file.
00001 #include "AtlfastAlgs/BremBinData.h"
00002 
00003 namespace Atlfast 
00004 {
00005 
00006   //-----------------------------------------------
00007   // PUBLIC - Constructor
00008   //-----------------------------------------------
00009   BremBinData::BremBinData( BinID& id,
00010                             vector< ParameterResolutions* > startPoints,
00011                             vector< ParameterResolutions* > slopes,
00012                             vector< ParameterResolutions* > sigmas,
00013                             int randSeed
00014                           ) :
00015                 m_id(id),
00016                 m_startPoints(startPoints),    
00017                 m_slopes(slopes),
00018                 m_sigmas(sigmas)
00019   {
00020     m_randomEngine = new HepJamesRandom(randSeed);
00021   }    
00022   
00023   
00024   //-----------------------------------------------
00025   // PUBLIC - Destructor
00026   //-----------------------------------------------
00027   BremBinData::~BremBinData()
00028   {
00029     for (size_t i = 0; i < m_startPoints.size(); i++)
00030       delete m_startPoints[i];
00031     for (size_t i = 0; i < m_slopes.size(); i++)
00032       delete m_slopes[i];
00033     for (size_t i = 0; i < m_sigmas.size(); i++)
00034       delete m_sigmas[i];
00035     delete m_randomEngine;
00036   }  
00037   
00038   
00039   //--------------------------------------------------------------------
00040   // PUBLIC - TrackTrajectory getBremTrack
00041   // returns smeared track parameters
00042   //--------------------------------------------------------------------
00043   TrackTrajectory BremBinData::getBremTrack( const TrackTrajectory& traj ) const
00044   {
00045     // data necessary to generate bremsstrahlung corrections
00046     double x0[3], lambda[3], sigma[3];
00047     for ( int i = 0; i < 3; i++ )
00048     {
00049       x0[i]     = std::abs( m_startPoints[i]->resolution(traj) );
00050       lambda[i] = std::abs( m_slopes[i]->resolution(traj) );
00051       sigma[i]  = m_sigmas[i]->resolution(traj);
00052     }  
00053     // range of power-function distribution [x0, xMax]
00054     // for q/pT, 500MeV is the offline reconstruction cut
00055     double xMax[3] = { 90 * sigma[0], 90 * sigma[1], 1.0 / (0.5*GeV) };
00056 
00057     double charge = double( traj.signOfCharge() );
00058     // bremsstrahlung results in both pos and neg tails, depending on charge and parameter
00059     double sign[3] = { -charge, charge, charge };
00060      
00061     double random[3];
00062     random[0] = m_randomEngine->flat();
00063     random[1] = random[0];  // introduce correlation (d0,phi0) 
00064     random[2] = random[0];  // introduce correlation (d0,q/pT), (phi0,q/pT)
00065 
00066     double var[3];
00067     for ( int i = 0; i < 3; i++ )
00068     {
00069       double denom = 1 - random[i] * ( 1 - std::pow( x0[i] / xMax[i], lambda[i] - 1 ) );
00070       denom = std::pow( denom, 1.0 / ( lambda[i] - 1 ) );
00071       var[i] = sign[i] * x0[i] / denom;   // normalised power-series distribution
00072     }  
00073    
00074     // create output TrackTrajectory object: longitudinal parameters remain unchanged
00075     // (small effects taken into account in double-Gaussian smearing in ElectronMatrixManager)
00076     TrackParameters trkParam = traj.parameters();
00077 
00078     double impactParameter = var[0];
00079     double zPerigee        = trkParam.zPerigee();
00080     Phi phi                = var[1];
00081     double cotTheta        = trkParam.cotTheta();
00082     double invPtCharge     = var[2];
00083 
00084     double curvature = traj.curvature(); 
00085     double pT = std::abs( 1. / invPtCharge );
00086     Hep3Vector vec;
00087     vec.setX( pT * std::cos(phi) );
00088     vec.setY( pT * std::sin(phi) );
00089     vec.setZ( pT * cotTheta );
00090     
00091     // Convert results to object
00092     TrackTrajectory newTrajectory( TrackParameters( vec.pseudoRapidity(), 
00093                                                     phi, pT, impactParameter,
00094                                                     zPerigee, cotTheta,
00095                                                     invPtCharge ), 
00096                                    traj.startPoint(),
00097                                    curvature );
00098     return newTrajectory;
00099   }
00100   
00101 } //namespace bracket

Generated on Mon Sep 24 14:19:11 2007 for AtlfastAlgs by  doxygen 1.5.1