#include <MuonSmearer.h>
Inheritance diagram for Atlfast::MuonSmearer:
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 |
TrackSmearer * | m_tracksmearer |
MuonResolutionCalculator * | m_muonResCalculator |
ChargeService * | m_chargeService |
Definition at line 43 of file MuonSmearer.h.
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 }
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;}
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.
Definition at line 93 of file MuonSmearer.h.
Definition at line 94 of file MuonSmearer.h.