From e4d6acb032589a208548ce35c1000c503d91ffb3 Mon Sep 17 00:00:00 2001
From: "Stephen A. Wood" <saw@jlab.org>
Date: Thu, 14 Dec 2017 12:25:59 -0500
Subject: [PATCH] THcHitlist finds THcConfigEvtHandler (Event 125) by type
 instead of name.   The Event handler can now be given any name.     (Only one
 THcConfigEvtHandler should be instatiated.)   Also:     
 THcConfigEventHandler clears CrateInfoMap on Init.      THcHitList caches
 FADC config on first event

---
 src/THcConfigEvtHandler.cxx |  2 ++
 src/THcHitList.cxx          | 30 ++++++++++++++++++++++--------
 src/THcHitList.h            |  4 ++++
 3 files changed, 28 insertions(+), 8 deletions(-)

diff --git a/src/THcConfigEvtHandler.cxx b/src/THcConfigEvtHandler.cxx
index e4607cb..e19d1be 100644
--- a/src/THcConfigEvtHandler.cxx
+++ b/src/THcConfigEvtHandler.cxx
@@ -354,6 +354,8 @@ THaAnalysisObject::EStatus THcConfigEvtHandler::Init(const TDatime& date)
     eventtypes.push_back(125);  // what events to look for
   }
 
+  CrateInfoMap.clear();
+
   fStatus = kOK;
   return kOK;
 }
diff --git a/src/THcHitList.cxx b/src/THcHitList.cxx
index a62908c..69f4079 100644
--- a/src/THcHitList.cxx
+++ b/src/THcHitList.cxx
@@ -118,10 +118,21 @@ void THcHitList::InitHitList(THaDetMap* detmap,
     }
   }
 
-  fPSE125 = static_cast<THcConfigEvtHandler*>(gHaEvtHandlers->FindObject("HC"));
-  if (!fPSE125) {
+  // Find the Event 125 handler
+  TObjLink *lnk = gHaEvtHandlers->FirstLink();
+  while (lnk) {
+    if(strcmp(lnk->GetObject()->ClassName(),"THcConfigEvtHandler")==0) {
+      break;
+    }
+    lnk = lnk->Next();
+  }
+  if(lnk) {
+    fPSE125 = static_cast<THcConfigEvtHandler*>(lnk->GetObject());
+  } else {
     cout << "THcHitList::InitHitList : Prestart event 125 not found." << endl;
+    fPSE125 = 0;
   }
+  fHaveFADCInfo = kFALSE;
 }
 
 /**
@@ -259,12 +270,15 @@ Int_t THcHitList::DecodeToHitList( const THaEvData& evdata, Bool_t suppresswarni
 	}
       } else {			// This is a Flash ADC
 
-        if (fPSE125) {  // Set F250 parameters.
-          rawhit->SetF250Params(
-            fPSE125->GetNSA(d->crate),
-            fPSE125->GetNSB(d->crate),
-            fPSE125->GetNPED(d->crate)
-          );
+        if (fPSE125) {
+	  if(!fHaveFADCInfo) {
+	    fNSA = fPSE125->GetNSA(d->crate);
+	    fNSB = fPSE125->GetNSB(d->crate);
+	    fNPED = fPSE125->GetNPED(d->crate);
+	    fHaveFADCInfo = kTRUE;
+	  }
+// Set F250 parameters.
+          rawhit->SetF250Params(fNSA, fNSB, fNPED);
         }
 
 	// Copy the samples
diff --git a/src/THcHitList.h b/src/THcHitList.h
index 7611e14..eb576f2 100644
--- a/src/THcHitList.h
+++ b/src/THcHitList.h
@@ -60,6 +60,10 @@ protected:
   THcRawHit::ESignalType *fSignalTypes;
 
   THcConfigEvtHandler* fPSE125;
+  Bool_t fHaveFADCInfo;
+  Int_t fNSA;
+  Int_t fNSB;
+  Int_t fNPED;
 
   ClassDef(THcHitList,0);  // List of raw hits sorted by plane, counter
 };
-- 
GitLab