From b140267a8ca9af5ba68d76bc550830db9f0163c7 Mon Sep 17 00:00:00 2001 From: hallc-online <hallc-online@jlab.org> Date: Mon, 13 Mar 2017 11:17:11 -0400 Subject: [PATCH] Modify THcDC::CoarseTrack and THcDC::TrackFit Add variables fX_fp_best,fY_fp_best,fXp_fp_best,fYp_fp_best to THcDC.h Modified THcDC::CoarseTrack so that the variables are filled with the quantities from the track with the smallest chi-squared. Modified THcDC::TrackFit so that the fResidual per plane is filled with for the track with the lowest chi-squared. Modified THcDC::DefineVariables so that access the variables as dc.x_fp,dc.y_fp,dc.xp_fp and dc.yp_fp --- src/THcDC.cxx | 33 ++++++++++++++++++++++++++++----- src/THcDC.h | 8 ++++++-- 2 files changed, 34 insertions(+), 7 deletions(-) diff --git a/src/THcDC.cxx b/src/THcDC.cxx index b4ac0bb..9db00a9 100644 --- a/src/THcDC.cxx +++ b/src/THcDC.cxx @@ -340,6 +340,10 @@ Int_t THcDC::DefineVariables( EMode mode ) { "y", "Y at focal plane", "fDCTracks.THcDCTrack.GetY()"}, { "xp", "XP at focal plane", "fDCTracks.THcDCTrack.GetXP()"}, { "yp", "YP at focal plane", "fDCTracks.THcDCTrack.GetYP()"}, + { "x_fp", "X at focal plane (best chi2 track)", "fX_fp_best"}, + { "y_fp", "Y at focal plane( best chi2 track)", "fY_fp_best"}, + { "xp_fp", "XP at focal plane (best chi2 track)", "fXp_fp_best"}, + { "yp_fp", "YP at focal plane(best chi2 track) ", "fYp_fp_best"}, { "residual", "Residuals", "fResiduals"}, { 0 } }; @@ -411,6 +415,10 @@ void THcDC::ClearEvent() fNhits = 0; fNthits = 0; fN_True_RawHits=0; + fX_fp_best=-10000.; + fY_fp_best=-10000.; + fXp_fp_best=-10000.; + fYp_fp_best=-10000.; for(UInt_t i=0;i<fNChambers;i++) { fChambers[i]->Clear(); @@ -498,8 +506,10 @@ Int_t THcDC::CoarseTrack( TClonesArray& tracks ) if (fdebugflagstubs) PrintStubs(); // Now link the stubs between chambers LinkStubs(); - if(fNDCTracks > 0) { - TrackFit(); + if(fNDCTracks > 0) { + Double_t chi2_best=10000000.; + Int_t itrack_best=0; + TrackFit(); // Copy tracks into podd tracks list for(UInt_t itrack=0;itrack<fNDCTracks;itrack++) { THaTrack* theTrack = NULL; @@ -512,12 +522,21 @@ Int_t THcDC::CoarseTrack( TClonesArray& tracks ) theTrack->SetFlag((UInt_t) 0); // Need to look at how engine does chi2 and track selection. Reduced? theTrack->SetChi2(tr->GetChisq(),tr->GetNFree()); + if (tr->GetChisq()<chi2_best) { + chi2_best = tr->GetChisq(); + itrack_best=itrack; + } // CalcFocalPlaneCoords. Aren't our tracks already in focal plane coords // We should have some kind of track ID so that the THaTrack can be // associate back with the DC track // Assign the track number theTrack->SetTrkNum(itrack+1); } + THcDCTrack *tr1 = static_cast<THcDCTrack*>( fDCTracks->At(itrack_best)); + fX_fp_best=tr1->GetX(); + fY_fp_best=tr1->GetY(); + fXp_fp_best=tr1->GetXP(); + fYp_fp_best=tr1->GetYP(); } // Check for internal TrackFit errors @@ -994,16 +1013,20 @@ void THcDC::TrackFit() } } if(fNDCTracks>0) { + Double_t chi_max=1000000; for (UInt_t itrack = 0; itrack < fNDCTracks; itrack++) { //for(Int_t ip=0;ip<fNPlanes;ip++) { THcDCTrack *theDCTrack = static_cast <THcDCTrack*> (fDCTracks->At(itrack)); - for (UInt_t ihit = 0; ihit < UInt_t (theDCTrack->GetNHits()); ihit++) { + if (theDCTrack->GetChisq() < chi_max) { + chi_max = theDCTrack->GetChisq(); + for (UInt_t ihit = 0; ihit < UInt_t (theDCTrack->GetNHits()); ihit++) { //fResiduals[ip] = theDCTrack->GetResidual(ip); THcDCHit *hit = theDCTrack->GetHit(ihit); Int_t plane = hit->GetPlaneNum() - 1; // fResiduals[ip] = theDCTrack->GetResidual(ip); - fResiduals[plane] = theDCTrack->GetResidual(plane); - // cout << "plane = " << plane << ", fResiduals[plane] = " << fResiduals[plane] << endl; + fResiduals[plane] = theDCTrack->GetResidual(plane); + } + // cout << "track = " << itrack+1 << "plane = " << plane << ", fResiduals[plane] = " << fResiduals[plane] << "chi = " << theDCTrack->GetChisq()<< endl; } } } diff --git a/src/THcDC.h b/src/THcDC.h index 1237a3f..4f30ddc 100644 --- a/src/THcDC.h +++ b/src/THcDC.h @@ -147,8 +147,12 @@ protected: Double_t* fPlaneTimeZero; Double_t* fSigma; Double_t** fPlaneCoeffs; - - // For accumulating statitics for efficiencies + // + Double_t fX_fp_best; + Double_t fY_fp_best; + Double_t fXp_fp_best; + Double_t fYp_fp_best; + // For accumulating statitics for efficiencies Int_t fTotEvents; Int_t* fNChamHits; Int_t* fPlaneEvents; -- GitLab