From 84cde83ae1105f53ef25f2936b9cca188d08a00f Mon Sep 17 00:00:00 2001
From: Jure Bericic <bericic@jlab.org>
Date: Thu, 9 Feb 2017 13:14:35 -0500
Subject: [PATCH] Changed `THcRawDCHit` to use `THcRawTdcHit`.

Applied changes in several files to reflect this.
Minor fix in `THcRawHodoHit`.
---
 src/THcDC.cxx                |  10 +--
 src/THcDriftChamberPlane.cxx |   8 +-
 src/THcRawDCHit.cxx          | 169 +++++++++++++++++++----------------
 src/THcRawDCHit.h            |  52 +++++------
 src/THcRawHodoHit.cxx        |   2 +-
 5 files changed, 121 insertions(+), 120 deletions(-)

diff --git a/src/THcDC.cxx b/src/THcDC.cxx
index b22db72..b4ac0bb 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 61d1adb..c111664 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 a2f39e7..00f14b6 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 50c454d..b1f315f 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 514712a..fa1407e 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()
 {}
 
 
-- 
GitLab