Main Page   Namespace List   Class Hierarchy   Compound List   File List   Namespace Members   Compound Members   File Members  

TrackSmearer.cxx

Go to the documentation of this file.
00001 #include "AtlfastAlgs/TrackSmearer.h"
00002 #include <cmath>
00003 #include <iostream>
00004 
00005 #include "AtlfastAlgs/PionMatrixManager.h"
00006 #include "AtlfastAlgs/ElectronMatrixManager.h"
00007 #include "AtlfastAlgs/MuonMatrixManager.h"
00008 
00009 namespace Atlfast {
00010   using std::abs;
00011   
00012   //----------------------------------------
00013   // Constructor
00014   //----------------------------------------
00015   
00016   TrackSmearer::TrackSmearer(const string& config, 
00017                              int randSeed, 
00018                              MsgStream& log):
00019     m_log(log), m_muConfig(config){
00020     m_electronMatrixManager = new ElectronMatrixManager(randSeed, log);
00021     m_muonMatrixManager = new MuonMatrixManager(m_muConfig, randSeed, log);
00022     m_pionMatrixManager = new PionMatrixManager(randSeed, log);
00023     log << MSG::INFO << "TrackSmearer constructed"<<endreq;
00024   }
00025   
00026   
00027   //------------------------------------------
00028   // Destructor
00029   //------------------------------------------
00030   
00031   TrackSmearer::~TrackSmearer(){
00032     if (m_pionMatrixManager) delete m_pionMatrixManager;
00033     if (m_electronMatrixManager) delete m_electronMatrixManager;
00034     if (m_muonMatrixManager) delete m_muonMatrixManager;
00035   }
00036   
00037   //------------------------------------------------------------------
00038   // PUBLIC: smear : takes track trajectory and smears its parameters
00039   //------------------------------------------------------------------
00040   Track TrackSmearer::smear(const Track& track)const{
00041     vector<double> smearVariables ;   // Vector of correlated gaussian variables
00042     // IF to determine which manager to use ie. electron/muon/pion
00043     IMatrixManager* correctManager = NULL;
00044     int pdg = abs( track.pdg_id() );
00045     
00046     if (pdg == 11) {correctManager = m_electronMatrixManager;}
00047     if (pdg == 13) {correctManager = m_muonMatrixManager;}
00048     if (pdg == 211) {correctManager = m_pionMatrixManager;}
00049     if(correctManager == NULL) {
00050       correctManager = m_pionMatrixManager;
00051     }
00052     //End IF
00053     TrackTrajectory originalTrajectory = track.trajectory();
00054     HepMatrix sigma; // smear matrix for track
00055     TrackParameters parameters = originalTrajectory.parameters();
00056     smearVariables = correctManager->getVariables(originalTrajectory, sigma);
00057     // smear parameters with gaussian variables
00058 
00059     double impactParameter = parameters.impactParameter() + smearVariables[0] ;
00060     double zPerigee = parameters.zPerigee() + smearVariables[1] ;
00061     Phi phi = parameters.phi() + smearVariables[2] ;
00062     double cotTheta = parameters.cotTheta() + smearVariables[3] ;
00063     double invPtCharge = parameters.invPtCharge() +  smearVariables[4];
00064 
00065     double curvature = originalTrajectory.curvature(); 
00066     double pT = abs( 1. / invPtCharge ) ;
00067     Hep3Vector vec;
00068     vec.setX( pT*cos(phi) );
00069     vec.setY( pT*sin(phi) );
00070     vec.setZ( pT*cotTheta );
00071     // Convert results to object
00072     TrackTrajectory smearedTrajectory( TrackParameters(vec.pseudoRapidity(), 
00073                                                        phi, pT, impactParameter,
00074                                                        zPerigee, cotTheta,
00075                                                        invPtCharge), 
00076                                        originalTrajectory.startPoint(),
00077                                        curvature
00078                                        ) ;
00079 
00080 
00081     //PS - tracks should always have the 4-vector
00082     //    Track newTrack;
00083 
00084     //    if (track.truth()) {
00085     Track newTrack(originalTrajectory, smearedTrajectory, track.truth(), sigma);
00086     //    }
00087     //    else {
00088     //      newTrack = Track(originalTrajectory, smearedTrajectory, sigma, track.pdg_id());
00089     //    }
00090     return newTrack ;
00091     
00092   }
00093 } // end namespace

Generated on Tue Mar 18 11:18:25 2003 for AtlfastAlgs by doxygen1.3-rc1