From de787b3ee21f12d25fe88c3526f64c938b651fe0 Mon Sep 17 00:00:00 2001
From: Mark Jones <jones@jlab.org>
Date: Wed, 29 Nov 2017 08:22:54 -0500
Subject: [PATCH] Additional changes for adc reftime

Modified so that the fGoodPosAdcPulseTime, fGoodNegAdcPulseTime
  or fGoodAdcPulseTime is set to kBig

Modified THcShowerRawHit::SetReference to takeADC signals

Modified THcTrigRawHit::SetReference to take ADC signals

Modified THcShowerArray::ProcessHits so that fAdcTdcOffset add to frAdcPulseTime

Modified THcShowerArray::ReadDatabase so that defaults for fAdcThreshold etc
  are before gHcParms->LoadParmValues
---
 src/THcAerogel.cxx           |  4 ++--
 src/THcCherenkov.cxx         |  2 +-
 src/THcRawShowerHit.cxx      | 12 +++++++-----
 src/THcScintillatorPlane.cxx |  4 ++--
 src/THcShowerArray.cxx       | 10 +++++-----
 src/THcShowerPlane.cxx       |  4 ++--
 src/THcTrigRawHit.cxx        |  9 +++++----
 7 files changed, 24 insertions(+), 21 deletions(-)

diff --git a/src/THcAerogel.cxx b/src/THcAerogel.cxx
index 99bb5f5..94746cf 100644
--- a/src/THcAerogel.cxx
+++ b/src/THcAerogel.cxx
@@ -519,7 +519,7 @@ void THcAerogel::Clear(Option_t* opt)
     fGoodPosAdcPulseInt.at(ielem)    = 0.0;
     fGoodPosAdcPulseIntRaw.at(ielem) = 0.0;
     fGoodPosAdcPulseAmp.at(ielem)    = 0.0;
-    fGoodPosAdcPulseTime.at(ielem)   = 0.0;
+    fGoodPosAdcPulseTime.at(ielem)   = kBig;
     fPosNpe.at(ielem)                = 0.0;
   }
   for (UInt_t ielem = 0; ielem < fGoodNegAdcPed.size(); ielem++) {
@@ -527,7 +527,7 @@ void THcAerogel::Clear(Option_t* opt)
     fGoodNegAdcPulseInt.at(ielem)    = 0.0;
     fGoodNegAdcPulseIntRaw.at(ielem) = 0.0;
     fGoodNegAdcPulseAmp.at(ielem)    = 0.0;
-    fGoodNegAdcPulseTime.at(ielem)   = 0.0;
+    fGoodNegAdcPulseTime.at(ielem)   = kBig;
     fNegNpe.at(ielem)                = 0.0;
   }
 
diff --git a/src/THcCherenkov.cxx b/src/THcCherenkov.cxx
index 4e6ecfd..a639970 100644
--- a/src/THcCherenkov.cxx
+++ b/src/THcCherenkov.cxx
@@ -330,7 +330,7 @@ void THcCherenkov::Clear(Option_t* opt)
     fGoodAdcPulseInt.at(ielem)    = 0.0;
     fGoodAdcPulseIntRaw.at(ielem) = 0.0;
     fGoodAdcPulseAmp.at(ielem)    = 0.0;
-    fGoodAdcPulseTime.at(ielem)   = 0.0;
+    fGoodAdcPulseTime.at(ielem)   = kBig;
     fNpe.at(ielem)                = 0.0;
   }
 
diff --git a/src/THcRawShowerHit.cxx b/src/THcRawShowerHit.cxx
index 982266f..1a32508 100644
--- a/src/THcRawShowerHit.cxx
+++ b/src/THcRawShowerHit.cxx
@@ -83,11 +83,13 @@ void THcRawShowerHit::SetDataTimePedestalPeak(
 
 
 void THcRawShowerHit::SetReference(Int_t signal, Int_t reference) {
-  std::cerr
-    << "Warning:"
-    << " `THcRawShowerHit::SetReference`:"
-    << " ADC signal should not have reference time!"
-    << std::endl;
+  if (signal < fNAdcSignals) {
+    fAdcHits[signal].SetRefTime(reference);
+  } else {
+    throw std::out_of_range(
+      "`THcRawHodoHit::SetReference`: only signals `2` and `3` available!"
+    );
+  }
 }
 
 
diff --git a/src/THcScintillatorPlane.cxx b/src/THcScintillatorPlane.cxx
index 1625aca..c74dad0 100644
--- a/src/THcScintillatorPlane.cxx
+++ b/src/THcScintillatorPlane.cxx
@@ -494,13 +494,13 @@ void THcScintillatorPlane::Clear( Option_t* )
     fGoodPosAdcPed.at(ielem)         = 0.0;
     fGoodPosAdcPulseInt.at(ielem)    = 0.0;
     fGoodPosAdcPulseAmp.at(ielem)    = 0.0;
-    fGoodPosAdcPulseTime.at(ielem)   = 0.0;
+    fGoodPosAdcPulseTime.at(ielem)   = kBig;
   }
   for (UInt_t ielem = 0; ielem < fGoodNegAdcPed.size(); ielem++) {
     fGoodNegAdcPed.at(ielem)         = 0.0;
     fGoodNegAdcPulseInt.at(ielem)    = 0.0;
     fGoodNegAdcPulseAmp.at(ielem)    = 0.0;
-    fGoodNegAdcPulseTime.at(ielem)   = 0.0;
+    fGoodNegAdcPulseTime.at(ielem)   = kBig;
   }
 
   //Clear Good TDC Variables
diff --git a/src/THcShowerArray.cxx b/src/THcShowerArray.cxx
index 401976d..aca7f40 100644
--- a/src/THcShowerArray.cxx
+++ b/src/THcShowerArray.cxx
@@ -163,13 +163,13 @@ Int_t THcShowerArray::ReadDatabase( const TDatime& date )
   };
 
   fDebugAdc = 0;  // Set ADC debug parameter to false unless set in parameter file
-
-  gHcParms->LoadParmValues((DBRequest*)&list, prefix);
   fADCMode=kADCDynamicPedestal;
   fAdcTimeWindowMin=0;
   fAdcTimeWindowMax=10000;
   fAdcTdcOffset=0.0;
   fAdcThreshold=0.;
+
+  gHcParms->LoadParmValues((DBRequest*)&list, prefix);
   fNelem = fNRows*fNColumns;
 
   fXPos = new Double_t* [fNRows];
@@ -483,7 +483,7 @@ void THcShowerArray::Clear( Option_t* )
     fGoodAdcPed.at(ielem)              = 0.0;
     fGoodAdcPulseInt.at(ielem)         = 0.0;
     fGoodAdcPulseAmp.at(ielem)         = 0.0;
-    fGoodAdcPulseTime.at(ielem)        = 0.0;
+    fGoodAdcPulseTime.at(ielem)        = kBig;
     fNumGoodAdcHits.at(ielem)          = 0.0;
     fE.at(ielem)                       = 0.0;
   }
@@ -913,7 +913,7 @@ Int_t THcShowerArray::ProcessHits(TClonesArray* rawhits, Int_t nexthit)
   }
 
   fEarray = 0;
-
+ 
   // Process raw hits. Get ADC hits for the plane, assign variables for each
   // channel.
 
@@ -945,7 +945,7 @@ Int_t THcShowerArray::ProcessHits(TClonesArray* rawhits, Int_t nexthit)
       ((THcSignalHit*) frAdcPulseAmp->ConstructedAt(nrAdcHits))->Set(padnum, rawAdcHit.GetPulseAmp(thit));
 
       ((THcSignalHit*) frAdcPulseTimeRaw->ConstructedAt(nrAdcHits))->Set(padnum, rawAdcHit.GetPulseTimeRaw(thit));
-      ((THcSignalHit*) frAdcPulseTime->ConstructedAt(nrAdcHits))->Set(padnum, rawAdcHit.GetPulseTime(thit));
+      ((THcSignalHit*) frAdcPulseTime->ConstructedAt(nrAdcHits))->Set(padnum, rawAdcHit.GetPulseTime(thit)+fAdcTdcOffset);
 
       if (rawAdcHit.GetPulseAmp(thit)>0&&rawAdcHit.GetPulseIntRaw(thit)>0) {
 	((THcSignalHit*) frAdcErrorFlag->ConstructedAt(nrAdcHits))->Set(padnum,0);
diff --git a/src/THcShowerPlane.cxx b/src/THcShowerPlane.cxx
index 38903f5..be73ef5 100644
--- a/src/THcShowerPlane.cxx
+++ b/src/THcShowerPlane.cxx
@@ -430,7 +430,7 @@ void THcShowerPlane::Clear( Option_t* )
     fGoodPosAdcPulseIntRaw.at(ielem)      = 0.0;
     fGoodPosAdcPulseInt.at(ielem)         = 0.0;
     fGoodPosAdcPulseAmp.at(ielem)         = 0.0;
-    fGoodPosAdcPulseTime.at(ielem)        = 0.0;
+    fGoodPosAdcPulseTime.at(ielem)        = kBig;
     fEpos.at(ielem)                       = 0.0;
     fNumGoodPosAdcHits.at(ielem)          = 0.0;
   }
@@ -440,7 +440,7 @@ void THcShowerPlane::Clear( Option_t* )
     fGoodNegAdcPulseIntRaw.at(ielem)      = 0.0;
     fGoodNegAdcPulseInt.at(ielem)         = 0.0;
     fGoodNegAdcPulseAmp.at(ielem)         = 0.0;
-    fGoodNegAdcPulseTime.at(ielem)        = 0.0;
+    fGoodNegAdcPulseTime.at(ielem)        = kBig;
     fEneg.at(ielem)                       = 0.0;
     fNumGoodNegAdcHits.at(ielem)          = 0.0;
   }
diff --git a/src/THcTrigRawHit.cxx b/src/THcTrigRawHit.cxx
index 60e3b60..4d87b2e 100644
--- a/src/THcTrigRawHit.cxx
+++ b/src/THcTrigRawHit.cxx
@@ -217,12 +217,13 @@ void THcTrigRawHit::SetDataTimePedestalPeak(
 
 
 void THcTrigRawHit::SetReference(Int_t signal, Int_t reference) {
-  if (fNAdcSignals <= signal && signal < fNAdcSignals+fNTdcSignals) {
+  if (signal < fNAdcSignals) {
+    fAdcHits[signal].SetRefTime(reference);
+  } else if (signal < fNAdcSignals+fNTdcSignals) {
     fTdcHits[signal-fNAdcSignals].SetRefTime(reference);
-  }
-  else {
+  } else {
     throw std::out_of_range(
-      "`THcTrigRawHit::SetReference`: only signal `1` available!"
+      "`THcTrigRawHit::SetReference`: only signals `2` and `3` available!"
     );
   }
 }
-- 
GitLab