Fork me on GitHub

Changeset 56fb0be in git for external/TrackCovariance


Ignore:
Timestamp:
Feb 23, 2022, 4:24:07 PM (3 years ago)
Author:
GitHub <noreply@…>
Branches:
master
Children:
3a105e5
Parents:
dd263e4 (diff), 00b14d5 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
git-author:
Michele Selvaggi <michele.selvaggi@…> (02/23/22 16:24:07)
git-committer:
GitHub <noreply@…> (02/23/22 16:24:07)
Message:

Merge pull request #105 from fbedesch/master

Add method to get first track hit in ObsTrk

Location:
external/TrackCovariance
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • external/TrackCovariance/ObsTrk.cc

    rdd263e4 r56fb0be  
    7474        fCovILC.ResizeTo(5, 5);
    7575        fGenPar = XPtoPar(fGenX, fGenP, Q);
     76        fGenParMm = ParToMm(fGenPar);
    7677        fGenParACTS = ParToACTS(fGenPar);
    7778        fGenParILC = ParToILC(fGenPar);
    7879        //
    7980        fObsPar = GenToObsPar(fGenPar);
     81        fObsParMm = ParToMm(fObsPar);
    8082        fObsParACTS = ParToACTS(fObsPar);
    8183        fObsParILC = ParToILC(fObsPar);
     
    8385        fObsP = ParToP(fObsPar);
    8486        fObsQ = ParToQ(fObsPar);
     87        fCovMm = CovToMm(fCov);
    8588        fCovACTS = CovToACTS(fObsPar, fCov);
    8689        fCovILC = CovToILC(fCov);
     
    131134        Double_t ZinNeg = fG->GetZminNeg();
    132135        Bool_t inside = TrkUtil::IsInside(fGenX, Rin, ZinNeg, ZinPos); // Check if in inner box
     136        SolTrack* trk = new SolTrack(fGenX, fGenP, fG);
     137        Double_t Xfirst, Yfirst, Zfirst;
     138        Int_t iLay = trk->FirstHit(Xfirst, Yfirst, Zfirst);
     139        TVector3 fXfirst(Xfirst, Yfirst, Zfirst);
    133140        if (inside)
    134141        {
     
    144151                //std::cout<<"ObsTrk:: outside: x= "<<fGenX(0)<<", y= "<<fGenX(1)
    145152                //                         <<", z= "<<fGenX(2)<<std::endl;
    146                 SolTrack* trk = new SolTrack(fGenX, fGenP, fG);
    147153                Bool_t Res = kTRUE; Bool_t MS = kTRUE;
    148154                trk->CovCalc(Res, MS);                                  // Calculate covariance matrix
    149                 Cov = trk->Cov();                                       // Track covariance
    150                 delete trk;
    151         }
     155                Cov = trk->Cov();
     156        }                                       // Track covariance
     157        delete trk;
    152158        //
    153159        fCov = Cov;
  • external/TrackCovariance/ObsTrk.h

    rdd263e4 r56fb0be  
    4646        TMatrixDSym fCovILC;                    // Covariance of track parameters in ILC format
    4747                                                                        // (d0, phi0, w, z0, tan(lambda))
     48        TVector3 fXfirst;                       // x,y,z of first track hit
    4849        //
    4950        // Service routines
     
    8990        TMatrixDSym GetCovMm()  { return fCov; }        // in mm
    9091        TMatrixDSym GetCovACTS(){ return fCovACTS; }
    91         TMatrixDSym GetCovILC(){ return fCovILC; }
    92         //
     92        TMatrixDSym GetCovILC() { return fCovILC; }
     93        // First hit
     94        TVector3 GetFirstHit()  { return fXfirst; }
    9395};
    9496
  • external/TrackCovariance/SolTrack.cc

    rdd263e4 r56fb0be  
    232232        //
    233233        return kmh;
     234}
     235//
     236Int_t SolTrack::FirstHit(Double_t &Xfirst, Double_t &Yfirst, Double_t &Zfirst)
     237{
     238        Int_t iFirst = -1;     
     239        Int_t iFirstLay = -1;   // Default return with no hits
     240        Xfirst = 0.;
     241        Yfirst = 0.;
     242        Zfirst = 0.;
     243        Int_t Nmh = nmHit();    // # measurement hits
     244        if(Nmh > 0){
     245                Int_t    *ih = new Int_t   [Nmh];
     246                Double_t *Xh = new Double_t[Nmh];
     247                Double_t *Yh = new Double_t[Nmh];
     248                Double_t *Zh = new Double_t[Nmh];
     249                Double_t *dh = new Double_t[Nmh];
     250                //
     251                Int_t n = HitListXYZ(ih, Xh, Yh, Zh);   
     252                //
     253                for(Int_t i=0; i<Nmh; i++){
     254                        Double_t rr = TMath::Sqrt(Xh[i]*Xh[i]+Yh[i]*Yh[i]);     // Hit radius           
     255                        dh[i] = TMath::ASin(C() * TMath::Sqrt((rr * rr - D() * D()) / (1. + 2 * C() * D()))) / C();     // Arc length traveled
     256                }
     257                //
     258                Int_t *hord = new Int_t[Nmh];                   // hit order by increasing arc length
     259                TMath::Sort(Nmh, dh, hord, kFALSE);             // Order by increasing arc length
     260                iFirst = hord[0];                               // First hit pointer
     261                Xfirst = Xh[iFirst];
     262                Yfirst = Yh[iFirst];
     263                Zfirst = Zh[iFirst];
     264                iFirstLay = ih[iFirst];
     265                //
     266                // Clean
     267                delete [] ih;
     268                delete [] Xh;
     269                delete [] Yh;
     270                delete [] Zh;
     271                delete [] dh;
     272                delete [] hord;
     273        }
     274//
     275        return  iFirstLay;      // Return first hit layer number
    234276}
    235277//
  • external/TrackCovariance/SolTrack.h

    rdd263e4 r56fb0be  
    7373        Int_t HitList(Int_t *&ihh, Double_t *&rhh, Double_t *&zhh);
    7474        Int_t HitListXYZ(Int_t *&ihh, Double_t *&Xh, Double_t *&Yh, Double_t *&Zh);
     75        Int_t FirstHit(Double_t &Xfirst, Double_t &Yfirst, Double_t &Zfirst);   // First hit position
    7576        //
    7677        // Track graph
  • external/TrackCovariance/VertexFit.cc

    rdd263e4 r56fb0be  
    1717{
    1818        fNtr = 0;
    19         fRold = -1.0;
     19        fRstart = -1.0;
    2020        fVtxDone = kFALSE;
    2121        fVtxCst = kFALSE;
     
    3131{
    3232        fNtr = Ntr;
    33         fRold = -1.0;
     33        fRstart = -1.0;
    3434        fVtxDone = kFALSE;
    3535        fVtxCst = kFALSE;
     
    5555{
    5656        fNtr = Ntr;
    57         fRold = -1.0;
     57        fRstart = -1.0;
    5858        fVtxDone = kFALSE;
    5959        fVtxCst = kFALSE;
     
    220220        std::vector<TVectorD*> x0i;                             // Tracks at ma
    221221        std::vector<TVectorD*> ni;                              // Track derivative wrt phase
    222         std::vector<TMatrixDSym*> Ci;                   // Position error matrix at fixed phase
     222        std::vector<TMatrixDSym*> Ci;                           // Position error matrix at fixed phase
    223223        std::vector<TVectorD*> wi;                              // Ci*ni
     224        std::vector<Double_t> s_in;                             // Starting phase
     225        //
     226        //
    224227        //
    225228        // Track loop
    226229        for (Int_t i = 0; i < fNtr; i++)
    227230        {
    228                 Double_t s = 0.;
    229231                TVectorD par = *fPar[i];
    230232                TMatrixDSym Cov = *fCov[i];
    231                 x0i.push_back(new TVectorD(Fill_x0(par)));
     233                Double_t s = 0.;
     234                // Case when starting radius is provided
     235                if(fRstart > TMath::Abs(par(0))){
     236                        s = 2.*TMath::ASin(par(2)*TMath::Sqrt((fRstart*fRstart-par(0)*par(0))/(1.+2.*par(2)*par(0))));
     237                }
     238                //
     239                x0i.push_back(new TVectorD(Fill_x(par, s)));
    232240                ni.push_back(new TVectorD(derXds(par, s)));
    233241                TMatrixD A = derXdPar(par, s);
     
    235243                TMatrixDSym Cinv = RegInv(*Ci[i]);
    236244                wi.push_back(new TVectorD(Cinv * (*ni[i])));
     245                s_in.push_back(s);
    237246        }
    238247        //std::cout << "Vtx init completed. fNtr = "<<fNtr << std::endl;
     
    262271        for (Int_t i = 0; i < fNtr; i++){
    263272                Double_t si = Dot(*wi[i], fXv - (*x0i[i])) / Ci[i]->Similarity(*wi[i]);
    264                 ffi.push_back(si);
     273                ffi.push_back(si+s_in[i]);
    265274                //TVectorD xvi = Fill_x(*fPar[i],si);
    266275                //std::cout << "Fast vertex "<<i<<": xvi = "<<xvi(0)<<", "<<xvi(1)<<", "<<xvi(2)
     
    280289        Ci.clear();
    281290        wi.clear();
     291        s_in.clear();
    282292}
    283293//
     
    402412        //
    403413        fVtxDone = kTRUE;               // Set fit completion flag
    404         fRold = TMath::Sqrt(fXv(0)*fXv(0) + fXv(1)*fXv(1));     // Store fit
     414        //fRstart = TMath::Sqrt(fXv(0)*fXv(0) + fXv(1)*fXv(1)); // Store fit
    405415        //std::cout << "Found vertex " << fXv(0) << ", " << fXv(1) << ", " << fXv(2)
    406416        //      << ", after "<<Ntry<<" iterations"<<std::endl;
  • external/TrackCovariance/VertexFit.h

    rdd263e4 r56fb0be  
    3636        // Results
    3737        Bool_t fVtxDone;                        // Flag vertex fit completed
    38         Double_t fRold;                         // Current value of vertex radius
     38        Double_t fRstart;                       // Starting value of vertex radius (0 = none)
    3939        TVectorD fXv;                           // Found vertex
    4040        TMatrixDSym fcovXv;                     // Vertex covariance
     
    8383        // Handle tracks/constraints
    8484        void AddVtxConstraint(TVectorD xv, TMatrixDSym cov);    // Add gaussian vertex constraint
    85         void AddTrk(TVectorD *par, TMatrixDSym *Cov);                           // Add track to input list
    86         void RemoveTrk(Int_t iTrk);                                                             // Remove iTrk track
     85        void AddTrk(TVectorD *par, TMatrixDSym *Cov);           // Add track to input list
     86        void RemoveTrk(Int_t iTrk);                             // Remove iTrk track
     87        void SetStartR(Double_t R) { fRstart = R; };            // Set starting radius
    8788        //
    8889};
Note: See TracChangeset for help on using the changeset viewer.