Atlfast::MuonSmearer Class Reference

#include <MuonSmearer.h>

Inheritance diagram for Atlfast::MuonSmearer:

Inheritance graph
[legend]
Collaboration diagram for Atlfast::MuonSmearer:

Collaboration graph
[legend]
List of all members.

Public Member Functions

 MuonSmearer (const int aseed, const int lumi, const int keymuo, std::string &resolutionFile, MsgStream &)
 MuonSmearer (const int aseed, const int lumi, const int keymuo, std::string &resolutionFile)
virtual ~MuonSmearer ()
virtual HepLorentzVector smear (const HepMC::GenParticle &)
virtual HepLorentzVector smear (const HepLorentzVector &avec)
pair< double, double > resolMS (const HepLorentzVector &avec)
pair< double, double > resolID (const HepMC::GenParticle &particle)
double resol (double sigmams, double sigmamuon, double sigmaid, double sigmatrack)
virtual int setSmearParameters (const std::vector< double > &smearValues)
virtual int setSmearParamSchema (const int smearSchema)

Private Member Functions

void makeResolutionCalculator (std::string &resolutionFile)
RandGauss * randGauss ()
RandFlat * randFlat ()

Private Attributes

int m_lumi
int m_keymuo
std::vector< double > m_smearParams
int m_smearParamSchema
TrackSmearerm_tracksmearer
MuonResolutionCalculatorm_muonResCalculator
ChargeServicem_chargeService

Detailed Description

Provides parameterised muon smearing. MuonSmearer honours the ISmearer interface and inherets implementation from DefaultSmearer.

Definition at line 43 of file MuonSmearer.h.


Constructor & Destructor Documentation

Atlfast::MuonSmearer::MuonSmearer ( const int  aseed,
const int  lumi,
const int  keymuo,
std::string &  resolutionFile,
MsgStream &   
)

Definition at line 31 of file MuonSmearer.cxx.

00032                                                                      : 
00033     ISmearer(), DefaultSmearer(aseed), m_lumi(lumi), m_keymuo(keymuo)
00034   {    
00035     makeResolutionCalculator(resolutionFile);
00036    
00037     // Make a (default) TrackSmearer
00038     int randSeed = 12345;
00039     m_tracksmearer = new TrackSmearer(randSeed,log);
00040   }

Atlfast::MuonSmearer::MuonSmearer ( const int  aseed,
const int  lumi,
const int  keymuo,
std::string &  resolutionFile 
)

Definition at line 42 of file MuonSmearer.cxx.

00043                                                      : 
00044     ISmearer(), DefaultSmearer(aseed), m_lumi(lumi), m_keymuo(keymuo)
00045   {    
00046     makeResolutionCalculator(resolutionFile);
00047   }

Atlfast::MuonSmearer::~MuonSmearer (  )  [virtual]

Definition at line 49 of file MuonSmearer.cxx.

00050   {
00051     delete m_muonResCalculator;
00052     delete m_tracksmearer;
00053   }


Member Function Documentation

HepLorentzVector Atlfast::MuonSmearer::smear ( const HepMC::GenParticle &   )  [virtual]

Smear methods

Reimplemented from Atlfast::DefaultSmearer.

Definition at line 85 of file MuonSmearer.cxx.

00085                                                                      {
00086     
00087     HepLorentzVector avec = particle.momentum();
00088     
00089     double sigmaMS;
00090     double sigmamuon;
00091     double sigmaID;
00092     double sigmatrack;
00093     double sigma=0.;
00094     HepLorentzVector bvec(0,0,0,0);
00095     pair<double, double> sigmapr;
00096 
00097     if(m_smearParamSchema==1){
00098       switch (m_keymuo) {
00099       case 1:
00100         while( ((sigmapr=resolMS(avec)).first) <-1.) {}
00101         sigma = sigmapr.first;
00102         break;
00103       case 2:
00104         while( ((sigmapr=resolID(particle)).first)<-1.) {}
00105         sigma = sigmapr.first;
00106         break;
00107       case 3:
00108         while( ((sigmapr=resolMS(avec)).first) <-1.) {}
00109         sigmaMS    = sigmapr.first;
00110         sigmamuon  = sigmapr.second;
00111         while( ((sigmapr=resolID(particle)).first)<-1.) {}
00112         sigmaID    = sigmapr.first;
00113         sigmatrack = sigmapr.second;
00114         
00115         sigma=resol(sigmaMS, sigmamuon, sigmaID, sigmatrack);
00116         break;
00117       default:
00118         std::cout << "Invalid value for MuonSmearKey: " << m_keymuo 
00119                   << ", returning unsmeared muon vector" << std::endl;
00120         return avec;
00121         break;      
00122       }
00123       
00124       bvec = avec/(1.0+sigma);
00125       
00126       //std::cout << "Unsmeared muon: " << avec << ", smeared muon: " << bvec << std::endl;
00127       
00128     } 
00129     
00130     return bvec; // bvec is zeroes if m_smearParamSchema!=1
00131   }

HepLorentzVector Atlfast::MuonSmearer::smear ( const HepLorentzVector &  avec  )  [virtual]

Smear method for HepLorentzVector

Reimplemented from Atlfast::DefaultSmearer.

Definition at line 70 of file MuonSmearer.cxx.

00070                                                                   {
00071 
00072     // ID smearing requires a GenParticle so this method is called for
00073     // spectrometer standalone muons only
00074     
00075     HepLorentzVector bvec(0,0,0,0);
00076     pair<double, double> sigmapr;
00077     if(m_smearParamSchema==1){
00078       while( ((sigmapr=resolMS(avec)).first) <-1.) {}
00079       double sigma = sigmapr.first;
00080       bvec = avec/(1.0+sigma);
00081     }
00082     return bvec; // bvec is zeroes if m_smearParamSchema!=1
00083   }

pair< double, double > Atlfast::MuonSmearer::resolMS ( const HepLorentzVector &  avec  ) 

Definition at line 133 of file MuonSmearer.cxx.

00133                                                                         {
00134     
00135     if (!m_muonResCalculator)
00136       std::cout << "No MuonResolutionCalculator, resolution set to 0.0" << std::endl;
00137     
00138     double sigmamuon = m_muonResCalculator ?
00139       m_muonResCalculator->calculateResolution(avec) : 0.;
00140     if (!sigmamuon){
00141       std::cout << "Zero spectrometer resolution!!!" << std::endl;
00142       pair<double, double>  sigmapr(0,0);
00143       return sigmapr;
00144     }
00145     
00146     double aa=randGauss()->fire();
00147     double sigmams   = aa*sigmamuon;
00148     pair<double, double> sigmapr(sigmams, sigmamuon);
00149     
00150     return sigmapr;
00151   }

pair< double, double > Atlfast::MuonSmearer::resolID ( const HepMC::GenParticle &  particle  ) 

Definition at line 153 of file MuonSmearer.cxx.

00153                                                                             {
00154 
00155     if (!m_tracksmearer){
00156       std::cout << "No TrackSmearer in MuonSmearer, resolution set to 0.0" << std::endl;
00157       std::cout << "To get inner detector resolutions, you must instantiate"
00158                 << " MuonSmearer with a MsgStream" << std::endl;
00159     }
00160 
00161     double sigmatrack = m_tracksmearer ? 
00162       m_tracksmearer->getPtResolution(particle) : 0.;
00163 
00164     if (!sigmatrack){
00165       std::cout << "Zero inner detector resolution!!!" << std::endl;
00166       pair<double, double>  sigmapr(0,0);
00167       return sigmapr;
00168     }
00169 
00170     double aa=randGauss()->fire();
00171     double sigmatr = aa*sigmatrack;
00172     pair<double, double> sigmapr(sigmatr, sigmatrack);
00173       
00174     return sigmapr;
00175 
00176   }

double Atlfast::MuonSmearer::resol ( double  sigmams,
double  sigmamuon,
double  sigmaid,
double  sigmatrack 
)

Definition at line 178 of file MuonSmearer.cxx.

00179                                                                  {
00180     double wmuon  = 1./(sigmamuon*sigmamuon);
00181     double wtrack = 1./(sigmatrack*sigmatrack);
00182     double wtot   = wmuon+wtrack;
00183     double corr   = (wmuon*(1.0+sigmams)+wtrack*(1.0+sigmaid))/wtot;
00184     double sigma   = corr-1.0;
00185     
00186     return sigma;
00187   }

int Atlfast::MuonSmearer::setSmearParameters ( const std::vector< double > &  smearValues  )  [virtual]

and the setSmearParamSchema method

Reimplemented from Atlfast::DefaultSmearer.

Definition at line 190 of file MuonSmearer.cxx.

00190                                                                           {
00191     m_smearParams=smearValues;
00192     return 0;
00193   }

int Atlfast::MuonSmearer::setSmearParamSchema ( const int  smearSchema  )  [virtual]

Sets the smearing schema

Reimplemented from Atlfast::DefaultSmearer.

Definition at line 195 of file MuonSmearer.cxx.

00195                                                              {
00196     m_smearParamSchema=smearSchema;
00197     return 0;
00198   }

void Atlfast::MuonSmearer::makeResolutionCalculator ( std::string &  resolutionFile  )  [private]

Definition at line 55 of file MuonSmearer.cxx.

00055                                                                      {
00056     
00057     std::string filename =
00058       PathResolver::find_file(resolutionFile, "DATAPATH");
00059     std::cout << "MuonSmearer getting file " << filename << std::endl;
00060     
00061     if (filename!="")
00062       m_muonResCalculator = new MuonResolutionCalculator(filename.c_str());
00063     else
00064       std::cout << "Could not open muon resolution file!!" << std::endl;
00065 
00066     return;
00067     
00068   }

RandGauss* Atlfast::DefaultSmearer::randGauss (  )  [inline, inherited]

Hook for subclasses etc. to get their hands on a randGauss object

Definition at line 65 of file DefaultSmearer.h.

00065 { return m_randGauss;}

RandFlat* Atlfast::DefaultSmearer::randFlat (  )  [inline, inherited]

Hook for subclasses etc. to get their hands on a randFlat object

Definition at line 71 of file DefaultSmearer.h.

00071 { return m_randFlat;}


Member Data Documentation

int Atlfast::MuonSmearer::m_lumi [private]

Definition at line 86 of file MuonSmearer.h.

int Atlfast::MuonSmearer::m_keymuo [private]

Definition at line 87 of file MuonSmearer.h.

std::vector<double> Atlfast::MuonSmearer::m_smearParams [private]

Definition at line 89 of file MuonSmearer.h.

int Atlfast::MuonSmearer::m_smearParamSchema [private]

Definition at line 90 of file MuonSmearer.h.

TrackSmearer* Atlfast::MuonSmearer::m_tracksmearer [private]

Definition at line 92 of file MuonSmearer.h.

MuonResolutionCalculator* Atlfast::MuonSmearer::m_muonResCalculator [private]

Definition at line 93 of file MuonSmearer.h.

ChargeService* Atlfast::MuonSmearer::m_chargeService [private]

Definition at line 94 of file MuonSmearer.h.


The documentation for this class was generated from the following files:
Generated on Mon Sep 24 14:19:41 2007 for AtlfastAlgs by  doxygen 1.5.1