Fork me on GitHub

Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • modules/TrackCovariance.cc

    r3051ea17 rfd4b326  
    1 /*
     1  /*
    22 *  Delphes: a framework for fast simulation of a generic collider experiment
    33 *  Copyright (C) 2020  Universite catholique de Louvain (UCLouvain), Belgium
     
    2121 *  Smears track parameters according to appropriate covariance matrix.
    2222 *
    23  *  \authors P. Demin - UCLouvain, Louvain-la-Neuve
     23 *  \authors F. Bedeschi - INFN Pisa
     24*            P. Demin - UCLouvain, Louvain-la-Neuve
    2425 *           M. Selvaggi - CERN
     26 *
    2527 *
    2628 */
     
    5052
    5153TrackCovariance::TrackCovariance() :
    52   fGeometry(0), fCovariance(0), fItInputArray(0)
     54  fGeometry(0), fCovariance(0), fAcx(0), fItInputArray(0)
    5355{
    5456  fGeometry = new SolGeom();
     
    7072  fBz = GetDouble("Bz", 0.0);
    7173  fGeometry->Read(GetString("DetectorGeometry", ""));
     74  fNMinHits = GetInt("NMinHits", 6);
    7275
     76  // load geometry
    7377  fCovariance->Calc(fGeometry);
     78  fCovariance->SetMinHits(fNMinHits);
     79  // load geometry
     80  fAcx = fCovariance->AccPnt();
    7481
    7582  // import input array
    76 
    7783  fInputArray = ImportArray(GetString("InputArray", "TrackMerger/tracks"));
    7884  fItInputArray = fInputArray->MakeIterator();
     
    94100void TrackCovariance::Process()
    95101{
    96   Candidate *candidate, *mother;
     102  Candidate *candidate, *mother, *particle;
    97103  Double_t mass, p, pt, q, ct;
    98104  Double_t dd0, ddz, dphi, dct, dp, dpt, dC;
    99  
     105
    100106
    101107  fItInputArray->Reset();
    102108  while((candidate = static_cast<Candidate *>(fItInputArray->Next())))
    103109  {
    104     const TLorentzVector &candidatePosition = candidate->InitialPosition;
    105     const TLorentzVector &candidateMomentum = candidate->Momentum;
     110
     111    // converting to meters
     112    particle = static_cast<Candidate *>(candidate->GetCandidates()->At(0));
     113
     114    // converting to meters
     115    const TLorentzVector &candidatePosition = particle->Position*1e-03;
     116    const TLorentzVector &candidateMomentum = particle->Momentum;
     117
     118    if ( !fCovariance->IsAccepted(candidateMomentum.Vect()) ) continue;
    106119
    107120    mass = candidateMomentum.M();
     
    110123
    111124    mother    = candidate;
    112     candidate = static_cast<Candidate *>(candidate->Clone());
     125    candidate = static_cast<Candidate*>(candidate->Clone());
    113126
    114127    candidate->Momentum.SetVectM(track.GetObsP(), mass);
    115     candidate->InitialPosition.SetXYZT(track.GetObsX().X(),track.GetObsX().Y(),track.GetObsX().Z(),candidatePosition.T());
    116    
     128
     129    // converting back to mm
     130    candidate->InitialPosition.SetXYZT(track.GetObsX().X()*1e03,track.GetObsX().Y()*1e03,track.GetObsX().Z()*1e03,candidatePosition.T()*1e03);
     131
    117132    // save full covariance 5x5 matrix internally (D0, phi, Curvature, dz, ctg(theta))
    118133    candidate->TrackCovariance = track.GetCov();
     
    123138    ct = track.GetObsPar()[4];
    124139
    125     candidate->Xd = track.GetObsX().X();
    126     candidate->Yd = track.GetObsX().Y();
    127     candidate->Zd = track.GetObsX().Z();
    128    
    129     candidate->D0 = track.GetObsPar()[0];
    130     candidate->Phi = track.GetObsPar()[1];
    131     candidate->C = track.GetObsPar()[2];
    132     candidate->DZ = track.GetObsPar()[3];
     140    candidate->Xd = track.GetObsX().X()*1e03;
     141    candidate->Yd = track.GetObsX().Y()*1e03;
     142    candidate->Zd = track.GetObsX().Z()*1e03;
     143
     144    candidate->D0       = track.GetObsPar()[0]*1e03;
     145    candidate->Phi      = track.GetObsPar()[1];
     146
     147    // inverse of curvature
     148    candidate->C        = track.GetObsPar()[2]*1e-03;
     149    candidate->DZ       = track.GetObsPar()[3]*1e03;
    133150    candidate->CtgTheta = track.GetObsPar()[4];
    134     candidate->P  = track.GetObsP().Mag();
    135     candidate->PT = pt;
    136     candidate->Charge = q;
     151    candidate->P        = track.GetObsP().Mag();
     152    candidate->PT       = pt;
     153    candidate->Charge   = q;
    137154
    138     dd0       = TMath::Sqrt(track.GetCov()(0, 0));
    139     ddz       = TMath::Sqrt(track.GetCov()(3, 3));
    140     dphi      = TMath::Sqrt(track.GetCov()(1, 1)); 
    141     dct       = TMath::Sqrt(track.GetCov()(4, 4)); 
     155    dd0       = TMath::Sqrt(track.GetCov()(0, 0))*1e03;
     156    ddz       = TMath::Sqrt(track.GetCov()(3, 3))*1e03;
     157    dphi      = TMath::Sqrt(track.GetCov()(1, 1));
     158    dct       = TMath::Sqrt(track.GetCov()(4, 4));
    142159    dpt       = 2 * TMath::Sqrt( track.GetCov()(2, 2))*pt*pt / (0.2998*fBz);
    143160    dp        = TMath::Sqrt((1.+ct*ct)*dpt*dpt + 4*pt*pt*ct*ct*dct*dct/(1.+ct*ct)/(1.+ct*ct));
    144     dC        = TMath::Sqrt(track.GetCov()(2, 2));
     161    dC        = TMath::Sqrt(track.GetCov()(2, 2))*1e-03;
    145162
    146163    candidate->ErrorD0 = dd0;
     
    154171    candidate->TrackResolution = dp / p;
    155172
    156 
    157173    candidate->AddCandidate(mother);
    158174
Note: See TracChangeset for help on using the changeset viewer.