From d5134c3db98b427795c69ce9b4c64907eedd73f3 Mon Sep 17 00:00:00 2001 From: hallc-online <hallc-online@jlab.org> Date: Wed, 26 Apr 2017 17:28:41 -0400 Subject: [PATCH] Modify THcDC and THcHallCSpectrometer The purpose is to add a call in THcHallCSpectrometer:TrackCalc to fill variables in THcDC for the golden track. THcHallCSpectrometer.h ---------------------- 1) Add object THcDC* fDC 2) Eliminate object fShower since it was not being used. THcHallCSpectrometer.cxx ---------------------- 1) in ReadDatabase method cast fDC in detector "dc" is defined 2) in FindVertices method add call to fDC->SetFocalPlaneBestTrack(hit_gold_track) where hit_gold_track is the HaTracks array index of the golden track THcDC.h ------- 1) Add method SetFocalPlaneBestTrack THcDC.cxx --------- 1) Eliminate filling of best focal plane quantities in CoarseTrack which defined "best" by lowest chi2 2) Create method SetFocalPlaneBestTrack a)fills the best focal plane quantities using the golden track b) fills fResiduals using golden track --- src/THcDC.cxx | 61 +++++++++--------------------------- src/THcDC.h | 1 + src/THcHallCSpectrometer.cxx | 15 +++++---- src/THcHallCSpectrometer.h | 4 +-- 4 files changed, 27 insertions(+), 54 deletions(-) diff --git a/src/THcDC.cxx b/src/THcDC.cxx index 9db00a9..0b56793 100644 --- a/src/THcDC.cxx +++ b/src/THcDC.cxx @@ -507,8 +507,6 @@ Int_t THcDC::CoarseTrack( TClonesArray& tracks ) // Now link the stubs between chambers LinkStubs(); 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++) { @@ -522,39 +520,14 @@ 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 - // Histogram the focal plane tracks - // Histograms made in h_fill_dc_fp_hist - // The following are one hist per track - // x_fp - // y_fp - // xp_fp - // yp_fp - // log chi2 - // reduced chi2 - // For each plane: - // double residual - // single residual - // Will need to make a track class that has all these things. Need to - // move the structure out of THcDC into it's own class which should probably - // inherit from a podd track class ApplyCorrections(); @@ -576,6 +549,20 @@ Int_t THcDC::FineTrack( TClonesArray& tracks ) return 0; } // +void THcDC::SetFocalPlaneBestTrack(Int_t golden_track_index) +{ + THcDCTrack *tr1 = static_cast<THcDCTrack*>( fDCTracks->At(golden_track_index)); + fX_fp_best=tr1->GetX(); + fY_fp_best=tr1->GetY(); + fXp_fp_best=tr1->GetXP(); + fYp_fp_best=tr1->GetYP(); + for (UInt_t ihit = 0; ihit < UInt_t (tr1->GetNHits()); ihit++) { + THcDCHit *hit = tr1->GetHit(ihit); + Int_t plane = hit->GetPlaneNum() - 1; + fResiduals[plane] = tr1->GetResidual(plane); + } +} +// void THcDC::PrintSpacePoints() { for(UInt_t ich=0;ich<fNChambers;ich++) { @@ -1012,24 +999,6 @@ 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)); - 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 << "track = " << itrack+1 << "plane = " << plane << ", fResiduals[plane] = " << fResiduals[plane] << "chi = " << theDCTrack->GetChisq()<< endl; - } - } - } // if (fdebugtrackprint) { printf("%5s %-14s %-14s %-14s %-14s %-10s %-10s \n","Track","x_t","y_t","xp_t","yp_t","chi2","DOF"); diff --git a/src/THcDC.h b/src/THcDC.h index 4f30ddc..3398af8 100644 --- a/src/THcDC.h +++ b/src/THcDC.h @@ -38,6 +38,7 @@ public: // Int_t GetNTracks() const { return fNDCTracks; } // const TClonesArray* GetTrackHits() const { return fTrackProj; } + void SetFocalPlaneBestTrack(Int_t golden_track_index); // Called in THcHallCSpectrometer: Int_t GetNWires(Int_t plane) const { return fNWires[plane-1];} Int_t GetNChamber(Int_t plane) const { return fNChamber[plane-1];} diff --git a/src/THcHallCSpectrometer.cxx b/src/THcHallCSpectrometer.cxx index 7cea33b..14d1eb1 100644 --- a/src/THcHallCSpectrometer.cxx +++ b/src/THcHallCSpectrometer.cxx @@ -117,8 +117,6 @@ Int_t THcHallCSpectrometer::ReadDatabase( const TDatime& date ) cout << "In THcHallCSpectrometer::ReadDatabase()" << endl; #endif - // --------------- To get energy from THcShower ---------------------- - const char* detector_name = "hod"; //THaApparatus* app = GetDetector(); THaDetector* det = GetDetector("hod"); @@ -133,9 +131,13 @@ Int_t THcHallCSpectrometer::ReadDatabase( const TDatime& date ) } - // fShower = static_cast<THcShower*>(det); // fShower is a membervariable - - // --------------- To get energy from THcShower ---------------------- + THaDetector* detdc = GetDetector("dc"); + if( dynamic_cast<THcDC*>(detdc) ) { + fDC = static_cast<THcDC*>(detdc); // fHodo is a membervariable + } else { + Error("THcHallCSpectrometer", "Cannot find detector DC"); + fDC = NULL; + } // Get the matrix element filename from the variable store @@ -357,7 +359,7 @@ Int_t THcHallCSpectrometer::FindVertices( TClonesArray& tracks ) } - if (fHodo==0 || ( fSelUsingScin == 0 ) && ( fSelUsingPrune == 0 ) ) { + if (fHodo==0 || (( fSelUsingScin == 0 ) && ( fSelUsingPrune == 0 )) ) { BestTrackSimple(); } else if (fHodo!=0 && fSelUsingPrune !=0) { BestTrackUsingPrune(); @@ -380,6 +382,7 @@ Int_t THcHallCSpectrometer::TrackCalc() if (aTrack->GetIndex()==0) hit_gold_track=itrack; } + fDC->SetFocalPlaneBestTrack(hit_gold_track); fGoldenTrack = static_cast<THaTrack*>( fTracks->At(hit_gold_track) ); fTrkIfo = *fGoldenTrack; fTrk = fGoldenTrack; diff --git a/src/THcHallCSpectrometer.h b/src/THcHallCSpectrometer.h index 8045b64..7dfbe25 100644 --- a/src/THcHallCSpectrometer.h +++ b/src/THcHallCSpectrometer.h @@ -16,7 +16,7 @@ #include "THcHitList.h" #include "THcRawHodoHit.h" #include "THcScintillatorPlane.h" -#include "THcShower.h" +#include "THcDC.h" //#include "THaTrackingDetector.h" //#include "THcHitList.h" @@ -99,8 +99,8 @@ protected: // Int_t** fHodScinHit; // [4] Array - THcShower* fShower; THcHodoscope* fHodo; + THcDC* fDC; Int_t fNReconTerms; struct reconTerm { -- GitLab