Fork me on GitHub

Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • modules/TrackCovariance.cc

    rfd4b326 r3051ea17  
    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 F. Bedeschi - INFN Pisa
    24 *            P. Demin - UCLouvain, Louvain-la-Neuve
     23 *  \authors P. Demin - UCLouvain, Louvain-la-Neuve
    2524 *           M. Selvaggi - CERN
    26  *
    2725 *
    2826 */
     
    5250
    5351TrackCovariance::TrackCovariance() :
    54   fGeometry(0), fCovariance(0), fAcx(0), fItInputArray(0)
     52  fGeometry(0), fCovariance(0), fItInputArray(0)
    5553{
    5654  fGeometry = new SolGeom();
     
    7270  fBz = GetDouble("Bz", 0.0);
    7371  fGeometry->Read(GetString("DetectorGeometry", ""));
    74   fNMinHits = GetInt("NMinHits", 6);
    7572
    76   // load geometry
    7773  fCovariance->Calc(fGeometry);
    78   fCovariance->SetMinHits(fNMinHits);
    79   // load geometry
    80   fAcx = fCovariance->AccPnt();
    8174
    8275  // import input array
     76
    8377  fInputArray = ImportArray(GetString("InputArray", "TrackMerger/tracks"));
    8478  fItInputArray = fInputArray->MakeIterator();
     
    10094void TrackCovariance::Process()
    10195{
    102   Candidate *candidate, *mother, *particle;
     96  Candidate *candidate, *mother;
    10397  Double_t mass, p, pt, q, ct;
    10498  Double_t dd0, ddz, dphi, dct, dp, dpt, dC;
    105 
     99 
    106100
    107101  fItInputArray->Reset();
    108102  while((candidate = static_cast<Candidate *>(fItInputArray->Next())))
    109103  {
    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;
     104    const TLorentzVector &candidatePosition = candidate->InitialPosition;
     105    const TLorentzVector &candidateMomentum = candidate->Momentum;
    119106
    120107    mass = candidateMomentum.M();
     
    123110
    124111    mother    = candidate;
    125     candidate = static_cast<Candidate*>(candidate->Clone());
     112    candidate = static_cast<Candidate *>(candidate->Clone());
    126113
    127114    candidate->Momentum.SetVectM(track.GetObsP(), mass);
    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 
     115    candidate->InitialPosition.SetXYZT(track.GetObsX().X(),track.GetObsX().Y(),track.GetObsX().Z(),candidatePosition.T());
     116   
    132117    // save full covariance 5x5 matrix internally (D0, phi, Curvature, dz, ctg(theta))
    133118    candidate->TrackCovariance = track.GetCov();
     
    138123    ct = track.GetObsPar()[4];
    139124
    140     candidate->Xd = track.GetObsX().X()*1e03;
    141     candidate->Yd = track.GetObsX().Y()*1e03;
    142     candidate->Zd = track.GetObsX().Z()*1e03;
     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];
     133    candidate->CtgTheta = track.GetObsPar()[4];
     134    candidate->P  = track.GetObsP().Mag();
     135    candidate->PT = pt;
     136    candidate->Charge = q;
    143137
    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;
    150     candidate->CtgTheta = track.GetObsPar()[4];
    151     candidate->P        = track.GetObsP().Mag();
    152     candidate->PT       = pt;
    153     candidate->Charge   = q;
    154 
    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));
     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));
    159142    dpt       = 2 * TMath::Sqrt( track.GetCov()(2, 2))*pt*pt / (0.2998*fBz);
    160143    dp        = TMath::Sqrt((1.+ct*ct)*dpt*dpt + 4*pt*pt*ct*ct*dct*dct/(1.+ct*ct)/(1.+ct*ct));
    161     dC        = TMath::Sqrt(track.GetCov()(2, 2))*1e-03;
     144    dC        = TMath::Sqrt(track.GetCov()(2, 2));
    162145
    163146    candidate->ErrorD0 = dd0;
     
    171154    candidate->TrackResolution = dp / p;
    172155
     156
    173157    candidate->AddCandidate(mother);
    174158
Note: See TracChangeset for help on using the changeset viewer.