Changes in modules/TimeSmearing.cc [2b5ff2c:341014c] in git
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
modules/TimeSmearing.cc
r2b5ff2c r341014c 53 53 54 54 TimeSmearing::TimeSmearing() : 55 f Formula(0), fItInputArray(0)55 fItInputArray(0) 56 56 { 57 fFormula = new DelphesFormula;58 57 } 59 58 … … 62 61 TimeSmearing::~TimeSmearing() 63 62 { 64 if(fFormula) delete fFormula;65 63 } 66 64 … … 71 69 // read resolution formula 72 70 73 fFormula->Compile(GetString("TimeResolution", "1.0")); 71 fTimeResolution = GetDouble("TimeResolution", 1.0E-10); 72 // import input array 74 73 75 // import input array76 fEtaMax = GetDouble("EtaMax", 6.);77 74 fInputArray = ImportArray(GetString("InputArray", "MuonMomentumSmearing/muons")); 78 75 fItInputArray = fInputArray->MakeIterator(); … … 95 92 { 96 93 Candidate *candidate, *mother; 97 Double_t ti, tf_smeared, tf, timeResolution; 98 Double_t pt, eta, phi, e, d0, dz, ctgTheta; 99 100 94 Double_t ti, tf_smeared, tf; 101 95 const Double_t c_light = 2.99792458E8; 102 96 103 97 fItInputArray->Reset(); 104 while((candidate = static_cast<Candidate *>(fItInputArray->Next())))98 while((candidate = static_cast<Candidate *>(fItInputArray->Next()))) 105 99 { 106 ti = candidate->InitialPosition.T()*1.0E-3/c_light; 107 tf = candidate->Position.T()*1.0E-3/c_light; 108 109 // dummy, only need to properly call TFormula 110 const TLorentzVector &candidatePosition = candidate->Position; 111 const TLorentzVector &candidateMomentum = candidate->Momentum; 112 eta = candidatePosition.Eta(); 113 phi = candidatePosition.Phi(); 114 pt = candidateMomentum.Pt(); 115 e = candidateMomentum.E(); 116 d0 = candidate->D0; 117 dz = candidate->DZ; 118 ctgTheta = candidate->CtgTheta; 100 const TLorentzVector &candidateInitialPosition = candidate->InitialPosition; 101 const TLorentzVector &candidateFinalPosition = candidate->Position; 102 103 ti = candidateInitialPosition.T() * 1.0E-3 / c_light; 104 tf = candidateFinalPosition.T() * 1.0E-3 / c_light; 119 105 120 106 // apply smearing formula 121 122 timeResolution = fFormula->Eval(pt, eta, phi, e, d0, dz, ctgTheta); 123 if(fabs(candidate->Position.Eta())<fEtaMax) 124 { 125 tf_smeared = tf + timeResolution*gRandom->Gaus(0, 1); 126 } 127 else continue; 128 129 // double beta_particle = candidate->Momentum.P()/candidate->Momentum.E(); 130 // ti = tf_smeared - candidate->Ld*1.0E-3/(c_light*beta_particle); 107 tf_smeared = gRandom->Gaus(tf, fTimeResolution); 108 ti = ti + tf_smeared - tf; 109 tf = tf_smeared; 131 110 132 111 mother = candidate; 133 candidate = static_cast<Candidate*>(candidate->Clone()); 112 candidate = static_cast<Candidate *>(candidate->Clone()); 113 candidate->InitialPosition.SetT(ti * 1.0E3 * c_light); 114 candidate->Position.SetT(tf * 1.0E3 * c_light); 115 116 candidate->ErrorT = fTimeResolution * 1.0E3 * c_light; 117 134 118 candidate->AddCandidate(mother); 135 candidate->InitialPosition.SetT((100+ti)*1.0E3*c_light);136 candidate->Position.SetT(tf_smeared*1.0E3*c_light);137 candidate->ErrorT = timeResolution*1.0E3*c_light;138 119 139 120 fOutputArray->Add(candidate);
Note:
See TracChangeset
for help on using the changeset viewer.