From a3f44011c26f1e5cfebfb97aa260c3d2f6d78607 Mon Sep 17 00:00:00 2001
From: hallc-online <hallconline@gmail.com>
Date: Sat, 27 Jan 2018 16:00:17 -0500
Subject: [PATCH] Modify THcScalerEvtHandler

1) add error message if Time between sucessive reads is zero.
    This should never happen.

2) Add the event number of that scaler read to the Scaler root tree
   The tree variable is evNumber
---
 src/THcScalerEvtHandler.cxx | 16 ++++++++++++++--
 src/THcScalerEvtHandler.h   |  2 ++
 2 files changed, 16 insertions(+), 2 deletions(-)

diff --git a/src/THcScalerEvtHandler.cxx b/src/THcScalerEvtHandler.cxx
index 423aad8..5e3bdbb 100644
--- a/src/THcScalerEvtHandler.cxx
+++ b/src/THcScalerEvtHandler.cxx
@@ -103,7 +103,7 @@ Int_t THcScalerEvtHandler::End( THaRunBase* r)
     AnalyzeBuffer(rdata,kFALSE);
   }
   if (fDebugFile) *fDebugFile << "scaler tree ptr  "<<fScalerTree<<endl;
-
+    evNumberR = -1;
   if (fScalerTree) fScalerTree->Fill();
 
   fDelayedEvents.clear();	// Does this free the arrays?
@@ -207,6 +207,10 @@ Int_t THcScalerEvtHandler::Analyze(THaEvData *evdata)
     name = "evcount";
     tinfo = name + "/D";
     fScalerTree->Branch(name.Data(), &evcountR, tinfo.Data(), 4000);
+ 
+   name = "evNumber";
+    tinfo = name + "/D";
+    fScalerTree->Branch(name.Data(), &evNumberR, tinfo.Data(), 4000);
 
     for (size_t i = 0; i < scalerloc.size(); i++) {
       name = scalerloc[i]->name;
@@ -220,6 +224,7 @@ Int_t THcScalerEvtHandler::Analyze(THaEvData *evdata)
 
   if( evdata->GetEvType() == fDelayedType) { // Save this event for processing later
     Int_t evlen = evdata->GetEvLength();
+    
     UInt_t *datacopy = new UInt_t[evlen];
     fDelayedEvents.push_back(datacopy);
     for(Int_t i=0;i<evlen;i++) {
@@ -227,7 +232,9 @@ Int_t THcScalerEvtHandler::Analyze(THaEvData *evdata)
     }
     return 1;
   } else { 			// A normal event
-    if (fDebugFile) *fDebugFile<<"\n\nTHcScalerEvtHandler :: Debugging event type "<<dec<<evdata->GetEvType()<<endl<<endl;
+    if (fDebugFile) *fDebugFile<<"\n\nTHcScalerEvtHandler :: Debugging event type "<<dec<<evdata->GetEvType()<< " event num = " << evdata->GetEvNum() << endl<<endl;
+    evNumber=evdata->GetEvNum();
+    evNumberR = evNumber;
     Int_t ret;
     if((ret=AnalyzeBuffer(rdata,fOnlySyncEvents))) {
       if (fDebugFile) *fDebugFile << "scaler tree ptr  "<<fScalerTree<<endl;
@@ -344,6 +351,11 @@ Int_t THcScalerEvtHandler::AnalyzeBuffer(UInt_t* rdata, Bool_t onlysync)
   fTotalTime = (thisClock+(((Double_t) fClockOverflows)*kMaxUInt+fClockOverflows))/fClockFreq;
   fLastClock = thisClock;
   fDeltaTime= fTotalTime - fPrevTotalTime;
+  if (fDeltaTime==0) {
+    cout << " *******************   Severe Warning ****************************" << endl;
+    cout << " In THcScalerEvtHandler have found fDeltaTime is zero !!   " << endl;
+      cout << " ******************* Alert DAQ experts ****************************" << endl;
+  }
   fPrevTotalTime=fTotalTime;
   Int_t nscal=0;
   for (size_t i = 0; i < scalerloc.size(); i++)  {
diff --git a/src/THcScalerEvtHandler.h b/src/THcScalerEvtHandler.h
index b31a5df..cca447e 100644
--- a/src/THcScalerEvtHandler.h
+++ b/src/THcScalerEvtHandler.h
@@ -65,6 +65,8 @@ private:
    char** fBCM_Name;
    UInt_t evcount;
    Double_t evcountR;
+   UInt_t evNumber;
+   Double_t evNumberR;
    Int_t Nvars, ifound, fNormIdx, nscalers;
    Double_t *dvars;
    UInt_t *dvars_prev_read;
-- 
GitLab