Changeset 2b5ff2c in git
- Timestamp:
- Dec 12, 2019, 3:01:34 PM (5 years ago)
- Branches:
- Timing
- Children:
- 584e2e9, d4e5b6a
- Parents:
- 2c81caa
- Location:
- modules
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
modules/TimeSmearing.cc
r2c81caa r2b5ff2c 53 53 54 54 TimeSmearing::TimeSmearing() : 55 f ItInputArray(0)55 fFormula(0), fItInputArray(0) 56 56 { 57 fFormula = new DelphesFormula; 57 58 } 58 59 … … 61 62 TimeSmearing::~TimeSmearing() 62 63 { 64 if(fFormula) delete fFormula; 63 65 } 64 66 … … 69 71 // read resolution formula 70 72 71 fTimeResolution = GetDouble("TimeResolution", 1.0E-10); 73 fFormula->Compile(GetString("TimeResolution", "1.0")); 74 72 75 // import input array 73 76 fEtaMax = GetDouble("EtaMax", 6.); 74 77 fInputArray = ImportArray(GetString("InputArray", "MuonMomentumSmearing/muons")); 75 78 fItInputArray = fInputArray->MakeIterator(); … … 92 95 { 93 96 Candidate *candidate, *mother; 94 Double_t ti, tf_smeared, tf; 97 Double_t ti, tf_smeared, tf, timeResolution; 98 Double_t pt, eta, phi, e, d0, dz, ctgTheta; 99 100 95 101 const Double_t c_light = 2.99792458E8; 96 102 97 103 fItInputArray->Reset(); 98 while((candidate = static_cast<Candidate 104 while((candidate = static_cast<Candidate*>(fItInputArray->Next()))) 99 105 { 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; 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; 105 119 106 120 // apply smearing formula 107 tf_smeared = gRandom->Gaus(tf, fTimeResolution); 108 ti = ti + tf_smeared - tf; 109 tf = tf_smeared; 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); 110 131 111 132 mother = candidate; 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 133 candidate = static_cast<Candidate*>(candidate->Clone()); 118 134 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; 119 138 120 139 fOutputArray->Add(candidate); -
modules/TimeSmearing.h
r2c81caa r2b5ff2c 32 32 class TIterator; 33 33 class TObjArray; 34 class DelphesFormula; 34 35 35 36 class TimeSmearing: public DelphesModule … … 44 45 45 46 private: 46 Double_t fTimeResolution; 47 DelphesFormula *fFormula; //! 48 Double_t fEtaMax; 47 49 48 50 TIterator *fItInputArray; //!
Note:
See TracChangeset
for help on using the changeset viewer.