diff --git a/src/THcDC.cxx b/src/THcDC.cxx index b22db72bcc4a0b7a3c1045e12efeaaf192533153..b4ac0bbca3a01e33b323d93a3a34d10820648202 100644 --- a/src/THcDC.cxx +++ b/src/THcDC.cxx @@ -456,9 +456,9 @@ Int_t THcDC::Decode( const THaEvData& evdata ) cout << " Hit # " << "Plane " << " Wire " << " Raw TDC " << endl; for(UInt_t ihit = 0; ihit < fNRawHits ; ihit++) { THcRawDCHit* hit = (THcRawDCHit *) fRawHitList->At(ihit); - for(UInt_t imhit = 0; imhit < hit->fNHits; imhit++) { + for(UInt_t imhit = 0; imhit < hit->GetRawTdcHit().GetNHits(); imhit++) { counter++; - cout << counter << " " << hit->fPlane << " " << hit->fCounter << " " << hit->fTDC[imhit] << endl; + cout << counter << " " << hit->fPlane << " " << hit->fCounter << " " << hit->GetRawTdcHit().GetTimeRaw(imhit) << endl; } } cout << endl; @@ -899,9 +899,9 @@ void THcDC::TrackFit() chi2 = 0.0; for(Int_t ihit=0;ihit < theDCTrack->GetNHits();ihit++) { Double_t residual = coords[ihit] - theDCTrack->GetCoord(planes[ihit]); - // cout << "ihit = " << ihit << ", planes[ihit] = " << planes[ihit] - // << ", coords[ihit] = " << coords[ihit] - // << ", theDCTrack->GetCoord(planes[ihit]) = " + // cout << "ihit = " << ihit << ", planes[ihit] = " << planes[ihit] + // << ", coords[ihit] = " << coords[ihit] + // << ", theDCTrack->GetCoord(planes[ihit]) = " // << theDCTrack->GetCoord(planes[ihit]) << endl; theDCTrack->SetResidual(planes[ihit], residual); // cout << "Getting residual = " << theDCTrack->GetResidual(planes[ihit]) << endl; diff --git a/src/THcDriftChamberPlane.cxx b/src/THcDriftChamberPlane.cxx index 61d1adb48da29b31380de51521826bcce474841b..c111664c8b1bd75c18a0637745932ed7199b4609 100644 --- a/src/THcDriftChamberPlane.cxx +++ b/src/THcDriftChamberPlane.cxx @@ -312,10 +312,10 @@ Int_t THcDriftChamberPlane::ProcessHits(TClonesArray* rawhits, Int_t nexthit) Int_t wireNum = hit->fCounter; THcDCWire* wire = GetWire(wireNum); // Int_t reftime = hit->GetReference(0); - for(UInt_t mhit=0; mhit<hit->fNHits; mhit++) { + for(UInt_t mhit=0; mhit<hit->GetRawTdcHit().GetNHits(); mhit++) { fNRawhits++; /* Sort into early, late and ontime */ - Int_t rawtdc = hit->GetData(0,mhit); // Get the ref time subtracted time + Int_t rawtdc = hit->GetRawTdcHit().GetTime(mhit); // Get the ref time subtracted time if(rawtdc < fTdcWinMin) { // Increment early counter (Actually late because TDC is backward) } else if (rawtdc > fTdcWinMax) { @@ -335,7 +335,3 @@ Int_t THcDriftChamberPlane::ProcessHits(TClonesArray* rawhits, Int_t nexthit) } return(ihit); } - - - - diff --git a/src/THcRawDCHit.cxx b/src/THcRawDCHit.cxx index a2f39e7a2d976a47000d74fc239f59dff6ca294c..00f14b6bf84761412f3466dac739fcafde2d5d92 100644 --- a/src/THcRawDCHit.cxx +++ b/src/THcRawDCHit.cxx @@ -9,110 +9,125 @@ #include "THcRawDCHit.h" #include <stdexcept> -using namespace std; +THcRawDCHit::THcRawDCHit(Int_t plane, Int_t counter) : + THcRawHit(plane, counter), fTdcHit() +{} -void THcRawDCHit::SetData(Int_t signal, Int_t data) { - if (fNHits >= fMaxNSamplesTDC) {throw std::runtime_error("Too many samples for `THcRawDCHit` TDC!");} - fTDC[fNHits++] = data; -} -// Return just the first hit -Int_t THcRawDCHit::GetData(Int_t signal) { - if(fNHits>0) { - if(fHasRef) { - return(fTDC[0]-fReferenceTime); - } else { - return(fTDC[0]); - } - } else { - return(-1); +THcRawDCHit& THcRawDCHit::operator=(const THcRawDCHit& right) { + THcRawHit::operator=(right); + + if (this != &right) { + fTdcHit = right.fTdcHit; } + + return *this; } -// Return just the first hit -Int_t THcRawDCHit::GetRawData(Int_t signal) { - if(fNHits>0) { - return(fTDC[0]); - } else { - return(-1); + +THcRawDCHit::~THcRawDCHit() {} + + +void THcRawDCHit::Clear(Option_t* opt) { + THcRawHit::Clear(opt); + + fTdcHit.Clear(); +} + + +void THcRawDCHit::SetData(Int_t signal, Int_t data) { + if (signal == 0) { + fTdcHit.SetTime(data); + } + else { + throw std::out_of_range( + "`THcRawDCHit::SetData`: only signal `0` available!" + ); } } -// Return a requested hit with reference time subtracted -Int_t THcRawDCHit::GetData(Int_t signal, UInt_t ihit) { - if(ihit < fNHits) { - if(fHasRef) { - return(fTDC[ihit]-fReferenceTime); - } else { - return(fTDC[ihit]); - } - } else { - return(-1); + +void THcRawDCHit::SetReference(Int_t signal, Int_t reference) { + if (signal == 0) { + fTdcHit.SetRefTime(reference); + } + else { + throw std::out_of_range( + "`THcRawDCHit::SetReference`: only signal `0` available!" + ); } } -// Return a requested raw hit -Int_t THcRawDCHit::GetRawData(Int_t signal, UInt_t ihit) { - if(ihit < fNHits) { - return(fTDC[ihit]); - } else { - return(-1); + +Int_t THcRawDCHit::GetData(Int_t signal) { + if (signal == 0) { + return fTdcHit.GetTime(); + } + else { + throw std::out_of_range( + "`THcRawDCHit::GetData`: only signal `0` available!" + ); } } -// Set the reference time -void THcRawDCHit::SetReference(Int_t signal, Int_t reference) { - fReferenceTime = reference; - fHasRef = kTRUE; + +Int_t THcRawDCHit::GetRawData(Int_t signal) { + if (signal == 0) { + return fTdcHit.GetTimeRaw(); + } + else { + throw std::out_of_range( + "`THcRawDCHit::GetRawData`: only signal `0` available!" + ); + } } -// Get the reference time + Int_t THcRawDCHit::GetReference(Int_t signal) { - if(fHasRef) { - return(fReferenceTime); - } else { - return(0); + if (signal == 0) { + return fTdcHit.GetRefTime(); + } + else { + throw std::out_of_range( + "`THcRawDCHit::GetReference`: only signal `0` available!" + ); } } -Int_t THcRawDCHit::Compare(const TObject* obj) const -{ - // Compare to sort by plane and counter - // Should we be able to move this into THcRawHit - - const THcRawDCHit* hit = dynamic_cast<const THcRawDCHit*>(obj); - if(!hit) return -1; - Int_t p1 = fPlane; - Int_t p2 = hit->fPlane; - if(p1 < p2) return -1; - else if(p1 > p2) return 1; +THcRawHit::ESignalType THcRawDCHit::GetSignalType(Int_t signal) { + if (signal == 0) { + return kTDC; + } else { - Int_t c1 = fCounter; - Int_t c2 = hit->fCounter; - if(c1 < c2) return -1; - else if (c1 == c2) return 0; - else return 1; + throw std::out_of_range( + "`THcRawDCHit::GetReference`: only signal `0` available!" + ); } } -//_____________________________________________________________________________ -THcRawDCHit& THcRawDCHit::operator=( const THcRawDCHit& rhs ) -{ - // Assignment operator. - - THcRawHit::operator=(rhs); - if ( this != &rhs ) { - fNHits = rhs.fNHits; - fReferenceTime = rhs.fReferenceTime; - fHasRef = rhs.fHasRef; - for(UInt_t ihit=0;ihit<fNHits;ihit++) { - fTDC[ihit] = rhs.fTDC[ihit]; - } + + +Int_t THcRawDCHit::GetNSignals() { + return fNTdcSignals; +} + + +Bool_t THcRawDCHit::HasReference(Int_t signal) { + if (signal == 0) { + return fTdcHit.HasRefTime(); } - return *this; + else { + throw std::out_of_range( + "`THcRawDCHit::HasReference`: only signal `0` available!" + ); + } +} + + +THcRawTdcHit& THcRawDCHit::GetRawTdcHit() { + return fTdcHit; } -////////////////////////////////////////////////////////////////////////// ClassImp(THcRawDCHit) diff --git a/src/THcRawDCHit.h b/src/THcRawDCHit.h index 50c454d4570ebca636131ddd2f08902ffa50a921..b1f315f7a8ec5387f7e33cf32686ff46fbe44cb9 100644 --- a/src/THcRawDCHit.h +++ b/src/THcRawDCHit.h @@ -2,50 +2,40 @@ #define ROOT_THcRawDCHit #include "THcRawHit.h" +#include "THcRawTdcHit.h" -class THcRawDCHit : public THcRawHit { -public: +class THcRawDCHit : public THcRawHit { friend class THcDriftChamberPlane; friend class THcDC; - THcRawDCHit(Int_t plane=0, Int_t counter=0) : THcRawHit(plane, counter), - fNHits(0), fHasRef(kFALSE) { - } - THcRawDCHit& operator=( const THcRawDCHit& ); - virtual ~THcRawDCHit() {} + public: + THcRawDCHit(Int_t plane=0, Int_t counter=0); + THcRawDCHit& operator=(const THcRawDCHit& right); + virtual ~THcRawDCHit(); - virtual void Clear( Option_t* opt="" ) { fNHits=0; fHasRef=kFALSE; } + virtual void Clear(Option_t* opt=""); - void SetData(Int_t signal, Int_t data); - void SetReference(Int_t signal, Int_t reference); - Int_t GetData(Int_t signal); - Int_t GetData(Int_t signal, UInt_t ihit); - Int_t GetRawData(Int_t signal); - Int_t GetRawData(Int_t signal, UInt_t ihit); - Int_t GetReference(Int_t signal); - Bool_t HasReference(Int_t signal) {return fHasRef;} + virtual void SetData(Int_t signal, Int_t data); + virtual void SetReference(Int_t signal, Int_t reference); - Int_t GetNSignals() { return 1;} - ESignalType GetSignalType(Int_t signal) { - return(kTDC); - } + virtual Int_t GetData(Int_t signal); + virtual Int_t GetRawData(Int_t signal); + virtual Int_t GetReference(Int_t signal); + virtual ESignalType GetSignalType(Int_t signal); + virtual Int_t GetNSignals(); - virtual Bool_t IsSortable () const {return kTRUE; } - virtual Int_t Compare(const TObject* obj) const; + virtual Bool_t HasReference(Int_t signal); - UInt_t GetMaxNSamplesTDC() {return fMaxNSamplesTDC;} + THcRawTdcHit& GetRawTdcHit(); -protected: - static const UInt_t fMaxNSamplesTDC = 128; - UInt_t fNHits; - Int_t fTDC[fMaxNSamplesTDC]; - Int_t fReferenceTime; - Int_t fHasRef; + protected: + static const Int_t fNTdcSignals = 1; -private: + THcRawTdcHit fTdcHit; - ClassDef(THcRawDCHit, 0); // Raw Drift Chamber hit + private: + ClassDef(THcRawDCHit, 0); // Raw Drift Chamber hit }; #endif diff --git a/src/THcRawHodoHit.cxx b/src/THcRawHodoHit.cxx index 514712a5c2668ccc1d2255ad38b27562db9c5a02..fa1407e8f183b792449be5b835add100b873cdea 100644 --- a/src/THcRawHodoHit.cxx +++ b/src/THcRawHodoHit.cxx @@ -17,7 +17,7 @@ THcRawHodoHit::THcRawHodoHit(Int_t plane, Int_t counter) : - fAdcHits(), fTdcHits() + THcRawHit(plane, counter), fAdcHits(), fTdcHits() {}