diff --git a/src/THcDC.cxx b/src/THcDC.cxx index 9db00a9a91d63d1fa8936a5e1e4fb259fabfa013..0b56793304dfa8096005257903e35e18567f20d5 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 4f30ddce720e13a4c02c84b12e9d5e256d249745..3398af83b1467dba6ba3657a7ecd243a6794cccd 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 7cea33be2113a2000c475e5e859fefd7e81fec43..14d1eb1d24d40dbc5d688b891fd68330fd9e3a4f 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 8045b645b9df689980acf9912b6eb3d46d168e31..7dfbe257942fb5558e37f5b9b6087fddb93c2997 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 {