Fork me on GitHub

Changeset 2b5ff2c in git for modules


Ignore:
Timestamp:
Dec 12, 2019, 3:01:34 PM (5 years ago)
Author:
Michele Selvaggi <michele.selvaggi@…>
Branches:
Timing
Children:
584e2e9, d4e5b6a
Parents:
2c81caa
Message:

take Olmos Timesmearing and use TFormula as time resolution parameter

Location:
modules
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • modules/TimeSmearing.cc

    r2c81caa r2b5ff2c  
    5353
    5454TimeSmearing::TimeSmearing() :
    55   fItInputArray(0)
     55  fFormula(0), fItInputArray(0)
    5656{
     57  fFormula = new DelphesFormula;
    5758}
    5859
     
    6162TimeSmearing::~TimeSmearing()
    6263{
     64  if(fFormula) delete fFormula;
    6365}
    6466
     
    6971  // read resolution formula
    7072
    71   fTimeResolution = GetDouble("TimeResolution", 1.0E-10);
     73  fFormula->Compile(GetString("TimeResolution", "1.0"));
     74
    7275  // import input array
    73 
     76  fEtaMax = GetDouble("EtaMax", 6.);
    7477  fInputArray = ImportArray(GetString("InputArray", "MuonMomentumSmearing/muons"));
    7578  fItInputArray = fInputArray->MakeIterator();
     
    9295{
    9396  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
    95101  const Double_t c_light = 2.99792458E8;
    96102
    97103  fItInputArray->Reset();
    98   while((candidate = static_cast<Candidate *>(fItInputArray->Next())))
     104  while((candidate = static_cast<Candidate*>(fItInputArray->Next())))
    99105  {
    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;
    105119
    106120    // 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);
    110131
    111132    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());
    118134    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;
    119138
    120139    fOutputArray->Add(candidate);
  • modules/TimeSmearing.h

    r2c81caa r2b5ff2c  
    3232class TIterator;
    3333class TObjArray;
     34class DelphesFormula;
    3435
    3536class TimeSmearing: public DelphesModule
     
    4445
    4546private:
    46   Double_t fTimeResolution;
     47  DelphesFormula *fFormula; //!
     48  Double_t fEtaMax;
    4749
    4850  TIterator *fItInputArray; //!
Note: See TracChangeset for help on using the changeset viewer.