From 1f1830a1032f670b2bf8bc77db33070da328fd82 Mon Sep 17 00:00:00 2001
From: Mark Jones <jones@jlab.org>
Date: Mon, 11 May 2020 08:38:23 -0400
Subject: [PATCH] Update for Reference time Differencee

Add methods to THcRawHit,THcRawTdcHit,
THcRawAdcHit,THcRawDCHit,THcRawHodoHit,THcRawShowerHit
 to be able to Set and Get the time difference between
good reference time pulse and the previous pulse
  if more than one pulse in channel for that event.

Modified THcHitList to Set the reference time difference
between good reference time pulse and the previous pulse.
If no previouse pulse then difference ==0.

Modified THcScintillatorPLane to have new tree variables
for each plane : PosTdcRefDiffTime,PosAdcRefDiffTime
NegTdcRefDiffTime,NegAdcRefDiffTime
so that one can see the time difference
between good reference time pulse and the previous pulse.
---
 src/THcHitList.cxx           | 14 ++++++++++++++
 src/THcHitList.h             |  1 +
 src/THcRawAdcHit.cxx         | 15 +++++++++++++++
 src/THcRawAdcHit.h           |  3 +++
 src/THcRawDCHit.cxx          | 22 ++++++++++++++++++++++
 src/THcRawDCHit.h            |  2 ++
 src/THcRawHit.h              |  1 +
 src/THcRawHodoHit.cxx        | 23 +++++++++++++++++++++++
 src/THcRawHodoHit.h          |  2 ++
 src/THcRawShowerHit.cxx      | 10 ++++++++++
 src/THcRawShowerHit.h        |  1 +
 src/THcRawTdcHit.cxx         | 18 ++++++++++++++++++
 src/THcRawTdcHit.h           |  3 +++
 src/THcScintillatorPlane.cxx | 32 ++++++++++++++++++++++++++++----
 src/THcScintillatorPlane.h   |  4 ++++
 15 files changed, 147 insertions(+), 4 deletions(-)

diff --git a/src/THcHitList.cxx b/src/THcHitList.cxx
index 6b7ed91..6e47ea5 100644
--- a/src/THcHitList.cxx
+++ b/src/THcHitList.cxx
@@ -259,10 +259,12 @@ Int_t THcHitList::DecodeToHitList( const THaEvData& evdata, Bool_t suppresswarni
 	fRefIndexMaps[i].hashit = kFALSE;
 	Bool_t goodreftime=kFALSE;
 	Int_t reftime = 0;
+	Int_t prevtime = 0;
 	for(Int_t ihit=0; ihit<nrefhits; ihit++) {
 	  reftime = evdata.GetData(Decoder::kPulseTime,fRefIndexMaps[i].crate,
 				   fRefIndexMaps[i].slot, fRefIndexMaps[i].channel,ihit);
 	  reftime += 64*timeshift;
+	  if (ihit != (nrefhits-1)) prevtime = reftime;
 	  if(reftime >= fADC_RefTimeCut) {
 	    goodreftime = kTRUE;
 	    break;
@@ -270,6 +272,7 @@ Int_t THcHitList::DecodeToHitList( const THaEvData& evdata, Bool_t suppresswarni
 	}
 	if(goodreftime || (nrefhits>0 && fADC_RefTimeBest)) {
 	  fRefIndexMaps[i].reftime = reftime;
+	  fRefIndexMaps[i].refdifftime = reftime-prevtime;
 	  fRefIndexMaps[i].hashit = kTRUE;
 	}
       } else {			// Assume this is a TDC
@@ -281,9 +284,11 @@ Int_t THcHitList::DecodeToHitList( const THaEvData& evdata, Bool_t suppresswarni
 	// then fTDC_RefTimeCut
 	Bool_t goodreftime=kFALSE;
 	Int_t reftime = 0;
+	Int_t prevtime = 0;
 	for(Int_t ihit=0; ihit<nrefhits; ihit++) {
 	  reftime = evdata.GetData(fRefIndexMaps[i].crate,fRefIndexMaps[i].slot,
 				   fRefIndexMaps[i].channel,ihit);
+	  if( ihit != (nrefhits-1))prevtime=reftime;
 	  if(reftime >= fTDC_RefTimeCut) {
 	    goodreftime = kTRUE;
 	    break;
@@ -291,6 +296,7 @@ Int_t THcHitList::DecodeToHitList( const THaEvData& evdata, Bool_t suppresswarni
 	}
 	if(goodreftime || (nrefhits>0 && fTDC_RefTimeBest)) {
 	    fRefIndexMaps[i].reftime = reftime;
+	    fRefIndexMaps[i].refdifftime = reftime-prevtime;
 	    fRefIndexMaps[i].hashit = kTRUE;
 	}
       }
@@ -354,8 +360,10 @@ Int_t THcHitList::DecodeToHitList( const THaEvData& evdata, Bool_t suppresswarni
 	  Int_t nrefhits = evdata.GetNumHits(d->crate,d->slot,d->refchan);
 	  Bool_t goodreftime=kFALSE;
 	  Int_t reftime=0;
+	  Int_t prevtime=0;
 	  for(Int_t ihit=0; ihit<nrefhits; ihit++) {
 	    reftime = evdata.GetData(d->crate, d->slot, d->refchan, ihit);
+	    if (ihit != (nrefhits-1))prevtime = reftime;
 	    if(reftime >= fTDC_RefTimeCut) {
 	      goodreftime = kTRUE;
 	      break;
@@ -365,6 +373,7 @@ Int_t THcHitList::DecodeToHitList( const THaEvData& evdata, Bool_t suppresswarni
 	  // hits make the RefTimeCut
 	  if(goodreftime || (nrefhits>0 && fTDC_RefTimeBest)) {
 	    rawhit->SetReference(signal, reftime);
+	    rawhit->SetReferenceDiff(signal, prevtime);
 	  } else if (!suppresswarnings) {
 	    cout << "HitList(event=" << evdata.GetEvNum() << "): refchan " << d->refchan <<
 	      " missing for (" << d->crate << ", " << d->slot <<
@@ -375,6 +384,7 @@ Int_t THcHitList::DecodeToHitList( const THaEvData& evdata, Bool_t suppresswarni
 	  if(d->refindex >=0 && d->refindex < fNRefIndex) {
 	    if(fRefIndexMaps[d->refindex].hashit) {
 	      rawhit->SetReference(signal, fRefIndexMaps[d->refindex].reftime);
+	      rawhit->SetReferenceDiff(signal, fRefIndexMaps[d->refindex].refdifftime);
 	    } else {
 	      if(!suppresswarnings) {
 		cout << "HitList(event=" << evdata.GetEvNum() << "): refindex " << d->refindex <<
@@ -437,6 +447,7 @@ Int_t THcHitList::DecodeToHitList( const THaEvData& evdata, Bool_t suppresswarni
 					       d->crate, d->slot, d->refchan);
 	  Bool_t goodreftime=kFALSE;
 	  Int_t reftime = 0;
+	  Int_t prevtime = 0;
 	  timeshift=0;
 	  if(fTISlot>0) {		// Get the trigger time for this module
 	    if(fTrigTimeShiftMap.find(d->slot)
@@ -451,6 +462,7 @@ Int_t THcHitList::DecodeToHitList( const THaEvData& evdata, Bool_t suppresswarni
 	  for(Int_t ihit=0; ihit<nrefhits; ihit++) {
 	    reftime = evdata.GetData(Decoder::kPulseTime, d->crate, d->slot, d->refchan, ihit);
 	    reftime += 64*timeshift;
+	     if (ihit != (nrefhits-1)) prevtime=reftime;
 	    if(reftime >= fADC_RefTimeCut) {
 	      goodreftime=kTRUE;
 	      break;
@@ -460,6 +472,7 @@ Int_t THcHitList::DecodeToHitList( const THaEvData& evdata, Bool_t suppresswarni
 	  // hits make the RefTimeCut
 	  if(goodreftime || (nrefhits>0 && fADC_RefTimeBest)) {
 	    rawhit->SetReference(signal, reftime);
+	    rawhit->SetReferenceDiff(signal, reftime-prevtime);
 	  } else if (!suppresswarnings) {
 #ifndef SUPPRESSMISSINGADCREFTIMEMESSAGES
 	    cout << "HitList(event=" << evdata.GetEvNum() << "): refchan " << d->refchan <<
@@ -472,6 +485,7 @@ Int_t THcHitList::DecodeToHitList( const THaEvData& evdata, Bool_t suppresswarni
 	  if(d->refindex >=0 && d->refindex < fNRefIndex) {
 	    if(fRefIndexMaps[d->refindex].hashit) {
 	      rawhit->SetReference(signal, fRefIndexMaps[d->refindex].reftime);
+	      rawhit->SetReferenceDiff(signal, fRefIndexMaps[d->refindex].refdifftime);
 	    } else {
 	      if(!suppresswarnings) {
 #ifndef SUPPRESSMISSINGADCREFTIMEMESSAGES
diff --git a/src/THcHitList.h b/src/THcHitList.h
index 423a75e..568d089 100644
--- a/src/THcHitList.h
+++ b/src/THcHitList.h
@@ -62,6 +62,7 @@ protected:
     Int_t slot;
     Int_t channel;
     Int_t reftime;
+    Int_t refdifftime;
   };
   std::vector<RefIndexMap> fRefIndexMaps;
   // Should this be a sparse list instead in case user
diff --git a/src/THcRawAdcHit.cxx b/src/THcRawAdcHit.cxx
index d99e674..0f60c65 100644
--- a/src/THcRawAdcHit.cxx
+++ b/src/THcRawAdcHit.cxx
@@ -261,6 +261,10 @@ void THcRawAdcHit::SetRefTime(Int_t refTime) {
   fHasRefTime = kTRUE;
 }
 
+void THcRawAdcHit::SetRefDiffTime(Int_t refDiffTime) {
+  fRefDiffTime = refDiffTime;
+}
+
 void THcRawAdcHit::SetSample(Int_t data) {
   if (fNSamples >= fMaxNSamples) {
     throw std::out_of_range(
@@ -498,6 +502,17 @@ Int_t THcRawAdcHit::GetRefTime() const {
   }
 }
 
+Int_t THcRawAdcHit::GetRefDiffTime() const {
+  if (fHasRefTime) {
+    return fRefDiffTime;
+  }
+  else {
+    TString msg = TString::Format(
+      "`THcRawAdcHit::GetRefTime`: Reference time not available!"
+    );
+    throw std::runtime_error(msg.Data());
+  }
+}
 
 Bool_t THcRawAdcHit::HasRefTime() const {
   return fHasRefTime;
diff --git a/src/THcRawAdcHit.h b/src/THcRawAdcHit.h
index 29cbbd1..fc31189 100644
--- a/src/THcRawAdcHit.h
+++ b/src/THcRawAdcHit.h
@@ -15,6 +15,7 @@ class THcRawAdcHit : public TObject {
     void SetData(Int_t data);
     void SetSample(Int_t data);
     void SetRefTime(Int_t refTime);
+    void SetRefDiffTime(Int_t refDiffTime);
     void SetDataTimePedestalPeak(
       Int_t data, Int_t time, Int_t pedestal, Int_t peak
     );
@@ -41,6 +42,7 @@ class THcRawAdcHit : public TObject {
     Int_t GetPulseTimeRaw(UInt_t iPulse=0) const;
     Int_t GetSampleRaw(UInt_t iSample=0) const;
     Int_t GetRefTime() const;
+    Int_t GetRefDiffTime() const;
 
     Double_t GetPed() const;
     Double_t GetPulseInt(UInt_t iPulse=0) const;
@@ -78,6 +80,7 @@ class THcRawAdcHit : public TObject {
     Int_t fPulseTime[fMaxNPulses];
     Int_t fSample[fMaxNSamples];
     Int_t fRefTime;
+    Int_t fRefDiffTime;
 
     Bool_t fHasMulti;
     Bool_t fHasRefTime;
diff --git a/src/THcRawDCHit.cxx b/src/THcRawDCHit.cxx
index a8e9eff..17b23b1 100644
--- a/src/THcRawDCHit.cxx
+++ b/src/THcRawDCHit.cxx
@@ -59,6 +59,17 @@ void THcRawDCHit::SetReference(Int_t signal, Int_t reference) {
   }
 }
 
+void THcRawDCHit::SetReferenceDiff(Int_t signal, Int_t reference) {
+  if (signal == 0) {
+    fTdcHit.SetRefDiffTime(reference);
+  }
+  else {
+    throw std::out_of_range(
+      "`THcRawDCHit::SetReference`: only signal `0` available!"
+    );
+  }
+}
+
 
 Int_t THcRawDCHit::GetData(Int_t signal) {
   if (signal == 0) {
@@ -95,6 +106,17 @@ Int_t THcRawDCHit::GetReference(Int_t signal) {
   }
 }
 
+Int_t THcRawDCHit::GetReferenceDiff(Int_t signal) {
+  if (signal == 0) {
+    return fTdcHit.GetRefDiffTime();
+  }
+  else {
+    throw std::out_of_range(
+      "`THcRawDCHit::GetReference`: only signal `0` available!"
+    );
+  }
+}
+
 
 THcRawHit::ESignalType THcRawDCHit::GetSignalType(Int_t signal) {
   if (signal == 0) {
diff --git a/src/THcRawDCHit.h b/src/THcRawDCHit.h
index b1f315f..363ba2d 100644
--- a/src/THcRawDCHit.h
+++ b/src/THcRawDCHit.h
@@ -18,10 +18,12 @@ class THcRawDCHit : public THcRawHit {
 
     virtual void SetData(Int_t signal, Int_t data);
     virtual void SetReference(Int_t signal, Int_t reference);
+    virtual void SetReferenceDiff(Int_t signal, Int_t reference);
 
     virtual Int_t GetData(Int_t signal);
     virtual Int_t GetRawData(Int_t signal);
     virtual Int_t GetReference(Int_t signal);
+    virtual Int_t GetReferenceDiff(Int_t signal);
     virtual ESignalType GetSignalType(Int_t signal);
     virtual Int_t GetNSignals();
 
diff --git a/src/THcRawHit.h b/src/THcRawHit.h
index e56674f..e1fb877 100644
--- a/src/THcRawHit.h
+++ b/src/THcRawHit.h
@@ -39,6 +39,7 @@ public:
   virtual Int_t GetNSignals() { return 1;}
 
   virtual void SetReference(Int_t signal, Int_t reference) {};
+  virtual void SetReferenceDiff(Int_t signal, Int_t reference) {};
   virtual Bool_t HasReference(Int_t signal) {return kFALSE;};
   virtual Int_t GetReference(Int_t signal) {return 0;};
 
diff --git a/src/THcRawHodoHit.cxx b/src/THcRawHodoHit.cxx
index 2e7c84c..848f88d 100644
--- a/src/THcRawHodoHit.cxx
+++ b/src/THcRawHodoHit.cxx
@@ -105,6 +105,18 @@ void THcRawHodoHit::SetReference(Int_t signal, Int_t reference) {
   }
 }
 
+void THcRawHodoHit::SetReferenceDiff(Int_t signal, Int_t referenceDiff) {
+  if (signal < fNAdcSignals) {
+    fAdcHits[signal].SetRefDiffTime(referenceDiff);
+  } else if (signal < fNAdcSignals+fNTdcSignals) {
+    fTdcHits[signal-fNAdcSignals].SetRefDiffTime(referenceDiff);
+  } else {
+    throw std::out_of_range(
+      "`THcRawHodoHit::SetReference`: only signals `2` and `3` available!"
+    );
+  }
+}
+
 
 Int_t THcRawHodoHit::GetData(Int_t signal) {
   if (0 <= signal && signal < fNAdcSignals) {
@@ -147,6 +159,17 @@ Int_t THcRawHodoHit::GetReference(Int_t signal) {
   }
 }
 
+Int_t THcRawHodoHit::GetReferenceDiff(Int_t signal) {
+  if (fNAdcSignals <= signal && signal < fNAdcSignals+fNTdcSignals) {
+    return fTdcHits[signal-fNAdcSignals].GetRefDiffTime();
+  }
+  else {
+    throw std::out_of_range(
+      "`THcRawHodoHit::GetReference`: only signals `2` and `3` available!"
+    );
+  }
+}
+
 
 THcRawHit::ESignalType THcRawHodoHit::GetSignalType(Int_t signal) {
   if (0 <= signal && signal < fNAdcSignals) {
diff --git a/src/THcRawHodoHit.h b/src/THcRawHodoHit.h
index dc2528f..025e0ae 100644
--- a/src/THcRawHodoHit.h
+++ b/src/THcRawHodoHit.h
@@ -25,10 +25,12 @@ class THcRawHodoHit : public THcRawHit {
       Int_t signal, Int_t data, Int_t time, Int_t pedestal, Int_t peak
     );
     virtual void SetReference(Int_t signal, Int_t reference);
+    virtual void SetReferenceDiff(Int_t signal, Int_t referenceDiff);
 
     virtual Int_t GetData(Int_t signal);
     virtual Int_t GetRawData(Int_t signal);
     virtual Int_t GetReference(Int_t signal);
+    virtual Int_t GetReferenceDiff(Int_t signal);
     virtual ESignalType GetSignalType(Int_t signal);
     virtual Int_t GetNSignals();
 
diff --git a/src/THcRawShowerHit.cxx b/src/THcRawShowerHit.cxx
index 1a32508..043de13 100644
--- a/src/THcRawShowerHit.cxx
+++ b/src/THcRawShowerHit.cxx
@@ -92,6 +92,16 @@ void THcRawShowerHit::SetReference(Int_t signal, Int_t reference) {
   }
 }
 
+void THcRawShowerHit::SetReferenceDiff(Int_t signal, Int_t reference) {
+  if (signal < fNAdcSignals) {
+    fAdcHits[signal].SetRefDiffTime(reference);
+  } else {
+    throw std::out_of_range(
+      "`THcRawHodoHit::SetReference`: only signals `2` and `3` available!"
+    );
+  }
+}
+
 
 Int_t THcRawShowerHit::GetData(Int_t signal) {
   if (0 <= signal && signal < fNAdcSignals) {
diff --git a/src/THcRawShowerHit.h b/src/THcRawShowerHit.h
index 9008831..c1a4fd8 100644
--- a/src/THcRawShowerHit.h
+++ b/src/THcRawShowerHit.h
@@ -22,6 +22,7 @@ class THcRawShowerHit : public THcRawHit {
       Int_t signal, Int_t data, Int_t time, Int_t pedestal, Int_t peak
     );
     virtual void SetReference(Int_t signal, Int_t reference);
+    virtual void SetReferenceDiff(Int_t signal, Int_t reference);
 
     virtual Int_t GetData(Int_t signal);
     virtual Int_t GetRawData(Int_t signal);
diff --git a/src/THcRawTdcHit.cxx b/src/THcRawTdcHit.cxx
index d2ec274..38fb647 100644
--- a/src/THcRawTdcHit.cxx
+++ b/src/THcRawTdcHit.cxx
@@ -95,6 +95,7 @@ THcRawTdcHit& THcRawTdcHit::operator=(const THcRawTdcHit& right) {
       fTime[iHit] = right.fTime[iHit];
     }
     fRefTime = right.fRefTime;
+    fRefDiffTime = right.fRefDiffTime;
     fHasRefTime = right.fHasRefTime;
     fNHits = right.fNHits;
   }
@@ -113,6 +114,7 @@ void THcRawTdcHit::Clear(Option_t* opt) {
     fTime[iHit] = 0;
   }
   fRefTime = 0;
+  fRefDiffTime = 0;
   fHasRefTime = kFALSE;
   fNHits = 0;
 }
@@ -138,6 +140,10 @@ void THcRawTdcHit::SetRefTime(Int_t refTime) {
   fHasRefTime = kTRUE;
 }
 
+void THcRawTdcHit::SetRefDiffTime(Int_t refDiffTime) {
+  fRefDiffTime = refDiffTime;
+}
+
 
 Int_t THcRawTdcHit::GetTimeRaw(UInt_t iHit) const {
   if (iHit < fNHits) {
@@ -177,6 +183,18 @@ Int_t THcRawTdcHit::GetRefTime() const {
   }
 }
 
+Int_t THcRawTdcHit::GetRefDiffTime() const {
+  if (fHasRefTime) {
+    return fRefDiffTime;
+  }
+  else {
+    TString msg = TString::Format(
+      "`THcRawTdcHit::GetRefDiffTime`: Reference time not available!"
+    );
+    throw std::runtime_error(msg.Data());
+  }
+}
+
 
 Bool_t THcRawTdcHit::HasRefTime() const {
   return fHasRefTime;
diff --git a/src/THcRawTdcHit.h b/src/THcRawTdcHit.h
index c930f27..91e7eba 100644
--- a/src/THcRawTdcHit.h
+++ b/src/THcRawTdcHit.h
@@ -14,10 +14,12 @@ class THcRawTdcHit : public TObject {
 
     void SetTime(Int_t time);
     void SetRefTime(Int_t refTime);
+    void SetRefDiffTime(Int_t refDiffTime);
 
     Int_t GetTimeRaw(UInt_t iHit=0) const;
     Int_t GetTime(UInt_t iHit=0) const;
     Int_t GetRefTime() const;
+    Int_t GetRefDiffTime() const;
 
     Bool_t HasRefTime() const;
 
@@ -30,6 +32,7 @@ class THcRawTdcHit : public TObject {
 
     Int_t fTime[fMaxNHits];
     Int_t fRefTime;
+    Int_t fRefDiffTime;
 
     Bool_t fHasRefTime;
     UInt_t fNHits;
diff --git a/src/THcScintillatorPlane.cxx b/src/THcScintillatorPlane.cxx
index 6dbc58b..f2605e4 100644
--- a/src/THcScintillatorPlane.cxx
+++ b/src/THcScintillatorPlane.cxx
@@ -544,6 +544,10 @@ Int_t THcScintillatorPlane::DefineVariables( EMode mode )
     {"NegTdcRefTime",   "Reference time of Neg TDC", "fNegTdcRefTime"},
     {"PosAdcRefTime",   "Reference time of Pos ADC", "fPosAdcRefTime"},
     {"NegAdcRefTime",   "Reference time of Neg aDC", "fNegAdcRefTime"},
+    {"PosTdcRefDiffTime",   "Reference Diff time of Pos TDC", "fPosTdcRefDiffTime"},
+    {"NegTdcRefDiffTime",   "Reference Diff time of Neg TDC", "fNegTdcRefDiffTime"},
+    {"PosAdcRefDiffTime",   "Reference Diff time of Pos ADC", "fPosAdcRefDiffTime"},
+    {"NegAdcRefDiffTime",   "Reference Diff time of Neg aDC", "fNegAdcRefDiffTime"},
    //{"ngoodhits", "Number of paddle hits (passed tof tolerance and used to determine the focal plane time )",           "GetNGoodHits() "},
     { 0 }
   };
@@ -657,6 +661,10 @@ void THcScintillatorPlane::Clear( Option_t* )
   fPosAdcRefTime = kBig;
   fNegTdcRefTime = kBig;
   fNegAdcRefTime = kBig;
+  fPosTdcRefDiffTime = kBig;
+  fPosAdcRefDiffTime = kBig;
+  fNegTdcRefDiffTime = kBig;
+  fNegAdcRefDiffTime = kBig;
 }
 
 //_____________________________________________________________________________
@@ -715,6 +723,10 @@ Int_t THcScintillatorPlane::ProcessHits(TClonesArray* rawhits, Int_t nexthit)
   fPosAdcRefTime = kBig;
   fNegTdcRefTime = kBig;
   fNegAdcRefTime = kBig;
+  fPosTdcRefDiffTime = kBig;
+  fPosAdcRefDiffTime = kBig;
+  fNegTdcRefDiffTime = kBig;
+  fNegAdcRefDiffTime = kBig;
   Int_t nrPosTDCHits=0;
   Int_t nrNegTDCHits=0;
   Int_t nrPosADCHits=0;
@@ -802,7 +814,10 @@ Int_t THcScintillatorPlane::ProcessHits(TClonesArray* rawhits, Int_t nexthit)
 
     THcRawTdcHit& rawPosTdcHit = hit->GetRawTdcHitPos();
     if (rawPosTdcHit.GetNHits() >0 && rawPosTdcHit.HasRefTime()) {
-    if (fPosTdcRefTime == kBig) fPosTdcRefTime=rawPosTdcHit.GetRefTime() ;
+      if (fPosTdcRefTime == kBig)  {
+	fPosTdcRefTime=rawPosTdcHit.GetRefTime() ;
+	fPosTdcRefDiffTime=rawPosTdcHit.GetRefDiffTime() ;
+      }
     if (fPosTdcRefTime != rawPosTdcHit.GetRefTime()) {
       cout <<  "THcScintillatorPlane: " << GetName() << " reftime problem at paddle num = " << padnum << " TDC pos hits = " << rawPosTdcHit.GetNHits() << endl;
         problem_flag=kTRUE;
@@ -817,7 +832,10 @@ Int_t THcScintillatorPlane::ProcessHits(TClonesArray* rawhits, Int_t nexthit)
     }
     THcRawTdcHit& rawNegTdcHit = hit->GetRawTdcHitNeg();
     if (rawNegTdcHit.GetNHits() >0 && rawNegTdcHit.HasRefTime()) {
-    if (fNegTdcRefTime == kBig) fNegTdcRefTime=rawNegTdcHit.GetRefTime() ;
+      if (fNegTdcRefTime == kBig) {
+	fNegTdcRefTime=rawNegTdcHit.GetRefTime() ;
+	fNegTdcRefDiffTime=rawNegTdcHit.GetRefDiffTime() ;
+      }
     if (fNegTdcRefTime != rawNegTdcHit.GetRefTime()) {
         cout <<  "THcScintillatorPlane: " << GetName()<< " Neg TDC reftime problem at paddle num = " << padnum << " TDC neg hits = " << rawNegTdcHit.GetNHits() << endl;
         problem_flag=kTRUE;
@@ -833,7 +851,10 @@ Int_t THcScintillatorPlane::ProcessHits(TClonesArray* rawhits, Int_t nexthit)
     }
     THcRawAdcHit& rawPosAdcHit = hit->GetRawAdcHitPos();
     if (rawPosAdcHit.GetNPulses() >0 && rawPosAdcHit.HasRefTime()) {
-    if (fPosAdcRefTime == kBig  ) fPosAdcRefTime=rawPosAdcHit.GetRefTime() ;
+      if (fPosAdcRefTime == kBig  ) {
+	fPosAdcRefTime=rawPosAdcHit.GetRefTime() ;
+	fPosAdcRefDiffTime=rawPosAdcHit.GetRefDiffTime() ;
+      }
     if (fPosAdcRefTime != rawPosAdcHit.GetRefTime()) {
       cout <<  "THcScintillatorPlane: " << GetName()<< " Pos ADC reftime problem at paddle num = " << padnum << " ADC pos hits = " << rawPosAdcHit.GetNPulses() << endl;
         problem_flag=kTRUE;
@@ -863,7 +884,10 @@ Int_t THcScintillatorPlane::ProcessHits(TClonesArray* rawhits, Int_t nexthit)
     }
     THcRawAdcHit& rawNegAdcHit = hit->GetRawAdcHitNeg();
     if (rawNegAdcHit.GetNPulses()>0 && rawNegAdcHit.HasRefTime()) {
-    if (fNegAdcRefTime == kBig) fNegAdcRefTime=rawNegAdcHit.GetRefTime() ;
+      if (fNegAdcRefTime == kBig) {
+	fNegAdcRefTime=rawNegAdcHit.GetRefTime() ;
+	fNegAdcRefDiffTime=rawNegAdcHit.GetRefDiffTime() ;
+      }
     if (fNegAdcRefTime != rawNegAdcHit.GetRefTime()) {
       cout <<  "THcScintillatorPlane: " << GetName()<< " Neg ADC reftime problem at paddle num = " << padnum << " TDC pos hits = " << rawNegAdcHit.GetNPulses() << endl;
         problem_flag=kTRUE;
diff --git a/src/THcScintillatorPlane.h b/src/THcScintillatorPlane.h
index 6320373..72e1719 100644
--- a/src/THcScintillatorPlane.h
+++ b/src/THcScintillatorPlane.h
@@ -185,6 +185,10 @@ class THcScintillatorPlane : public THaSubDetector {
   Double_t fPosAdcRefTime;
   Double_t fNegTdcRefTime;
   Double_t fNegAdcRefTime;
+  Double_t fPosTdcRefDiffTime;
+  Double_t fPosAdcRefDiffTime;
+  Double_t fNegTdcRefDiffTime;
+  Double_t fNegAdcRefDiffTime;
   Double_t fHitDistance;
   Double_t fScinXPos;
   Double_t fScinYPos;
-- 
GitLab