From d6e15d1667932495ec1c3e7e4723314cc496838d Mon Sep 17 00:00:00 2001
From: Carlos Yero <cyero002@fiu.edu>
Date: Mon, 23 Apr 2018 13:49:00 -0400
Subject: [PATCH] Coincidence Time physics module 1) Created Coincidence Time
 Physics Module 2) Created method to get coin. trig times in the
 THcTrigDet.cxx class

---
 src/THcCoinTime.cxx | 307 ++++++++++++++++++++++++++++++++++++++++++++
 src/THcCoinTime.h   | 139 ++++++++++++++++++++
 src/THcTrigDet.cxx  |  51 ++++++++
 src/THcTrigDet.h    |  21 +++
 4 files changed, 518 insertions(+)
 create mode 100644 src/THcCoinTime.cxx
 create mode 100644 src/THcCoinTime.h

diff --git a/src/THcCoinTime.cxx b/src/THcCoinTime.cxx
new file mode 100644
index 0000000..5b12889
--- /dev/null
+++ b/src/THcCoinTime.cxx
@@ -0,0 +1,307 @@
+/** \class THcCoinTime
+    \ingroup PhysMods
+
+\brief Class for calculating and adding the Coincidence Time in the Tree.
+
+//Author: Carlos Yero
+//Date: April 27, 2018
+*/
+#include "THaEvData.h"
+#include "THaCutList.h"
+#include "VarDef.h"
+#include "VarType.h"
+#include "TClonesArray.h"
+
+#include <cstring>
+#include <cstdio>
+#include <cstdlib>
+#include <iostream>
+
+#include "THcCoinTime.h"
+#include "THcTrigDet.h"
+#include "THaApparatus.h"
+#include "THcHodoHit.h"
+#include "THcGlobals.h"
+#include "THcParmList.h"
+
+using namespace std;
+
+//_____________________________________________________________________________
+THcCoinTime::THcCoinTime (const char *name, const char* description, const char* hadArmName, 
+			  const char* elecArmName, const char* coinname) :
+  
+  THaPhysicsModule(name, description), 
+  fhadArmName(hadArmName),                 //initialize spectro names
+  felecArmName(elecArmName),
+  fCoinDetName(coinname), 
+  fhadSpectro(NULL),                      //initialize spectro objects
+  felecSpectro(NULL),
+  fCoinDet(NULL)
+{
+
+}
+
+//_____________________________________________________________________________
+THcCoinTime::~THcCoinTime()
+{
+  //Destructor
+
+  RemoveVariables();
+
+}
+//_____________________________________________________________________________
+void THcCoinTime::Clear( Option_t* opt )
+{
+  // Clear all event-by-event variables.
+  
+  //  THaPhysicsModule::Clear(opt);
+  fROC1_epCoinTime=kBig;
+  fROC2_epCoinTime=kBig;
+  fROC1_eKCoinTime=kBig;
+  fROC2_eKCoinTime=kBig;
+  fROC1_ePiCoinTime=kBig;
+  fROC2_ePiCoinTime=kBig;
+  fROC1_ePosCoinTime=kBig;
+  fROC2_ePosCoinTime=kBig;
+  fROC1_RAW_CoinTime=kBig;
+  fROC2_RAW_CoinTime=kBig;
+}
+
+//_____________________________________________________________________________
+void THcCoinTime::Reset( Option_t* opt)
+// Clear event-by-event data
+{
+  Clear(opt);
+}
+
+
+//_____________________________________________________________________________
+THaAnalysisObject::EStatus THcCoinTime::Init( const TDatime& run_time )
+{
+  // Initialize THcCoinTime physics module
+  
+  cout << "*************************************************" << endl;
+  cout << "Initializing THcCointTime Physics Modue" << endl;
+  cout << "Hadron Arm   -------> " << fhadArmName << endl;
+  cout << "Electron Arm -------> " << felecArmName << endl;
+  cout << "TrigDet  -------> " << fCoinDetName << endl;
+  cout << "**************************************************" << endl;
+
+  fStatus = kOK;
+
+  fhadSpectro = dynamic_cast<THcHallCSpectrometer*>
+    ( FindModule( fhadArmName.Data(), "THcHallCSpectrometer"));
+  if( !fhadSpectro ) {
+    cout << "THcCoinTime module  Cannnot find Hadron Arm = " <<  fhadArmName.Data() << endl;
+    fStatus = kInitError;
+    return fStatus;
+  }
+  
+  felecSpectro = dynamic_cast<THcHallCSpectrometer*>
+    ( FindModule( felecArmName.Data(), "THcHallCSpectrometer"));
+  if( !felecSpectro ) {
+    cout << "THcCoinTime module  Cannnot find Electron Arm = " << felecArmName.Data() << endl;
+    fStatus = kInitError;
+    return fStatus;
+  }
+    
+  fCoinDet = dynamic_cast<THcTrigDet*>
+    ( FindModule( fCoinDetName.Data(), "THcTrigDet"));
+  if( !fCoinDet ) {
+    cout << "THcCoinTime module  Cannnot find TrigDet = " << fCoinDetName.Data() << endl;
+    fStatus = kInitError;
+    return fStatus;
+  }
+  
+
+  
+  if( (fStatus=THaPhysicsModule::Init( run_time )) != kOK ) {
+    return fStatus;
+  }
+
+  return fStatus;
+}
+
+//_____________________________________________________________________________
+Int_t THcCoinTime::ReadDatabase( const TDatime& date )
+{
+  // Read database. Gets variable needed for CoinTime calculation
+
+
+  DBRequest list[]={
+    {"eHadCoinTime_Offset",  &eHad_CT_Offset, kDouble, 0, 1},   //coin time offset for ep coincidences
+
+    {"HMS_CentralPathLen",  &HMScentralPathLen, kDouble, 0, 1},
+    {"SHMS_CentralPathLen", &SHMScentralPathLen, kDouble, 0, 1},
+    {0}
+  };
+  
+  //Default values if not read from param file
+  eHad_CT_Offset = 0.0;
+
+  HMScentralPathLen = 22.0*100.;
+  SHMScentralPathLen = 18.1*100.;
+
+  
+  gHcParms->LoadParmValues((DBRequest*)&list, "");
+
+  return kOK;
+}
+
+//_____________________________________________________________________________
+Int_t THcCoinTime::DefineVariables( EMode mode )
+{
+
+  if( mode == kDefine && fIsSetup ) return kOK;
+  fIsSetup = ( mode == kDefine );
+
+  const RVarDef vars[] = {
+    {"epCoinTime_ROC1",    "ROC1 Corrected ep Coincidence Time",  "fROC1_epCoinTime"},
+    {"epCoinTime_ROC2",    "ROC2 Corrected ep Coincidence Time",  "fROC2_epCoinTime"},
+  
+    {"eKCoinTime_ROC1",    "ROC1 Corrected eK Coincidence Time",  "fROC1_eKCoinTime"},
+    {"eKCoinTime_ROC2",    "ROC2 Corrected eK Coincidence Time",  "fROC2_eKCoinTime"},
+    
+    {"ePiCoinTime_ROC1",    "ROC1 Corrected ePi Coincidence Time",  "fROC1_ePiCoinTime"},
+    {"ePiCoinTime_ROC2",    "ROC2 Corrected ePi Coincidence Time",  "fROC2_ePiCoinTime"},
+      
+    {"ePositronCoinTime_ROC1",    "ROC1 Corrected e-Positorn Coincidence Time",  "fROC1_ePosCoinTime"},
+    {"ePositronCoinTime_ROC2",    "ROC2 Corrected e-Positron Coincidence Time",  "fROC2_ePosCoinTime"},
+    
+    {"CoinTime_RAW_ROC1",    "ROC1 RAW Coincidence Time",  "fROC1_RAW_CoinTime"},
+    {"CoinTime_RAW_ROC2",    "ROC2 RAW Coincidence Time",  "fROC2_RAW_CoinTime"},
+    { 0 }
+  };
+
+  return DefineVarsFromList( vars, mode );
+
+}
+
+
+
+//_____________________________________________________________________________
+Int_t THcCoinTime::Process( const THaEvData& evdata )
+{
+  
+  if( !IsOK() || !gHaRun ) return -1;
+
+  //Declare track information objects for hadron/electron arm
+  THaTrackInfo* had_trkifo = fhadSpectro->GetTrackInfo();
+  THaTrackInfo* elec_trkifo = felecSpectro->GetTrackInfo();
+
+  if( !had_trkifo) cout << " no hadron track " << endl;
+  if( !elec_trkifo) cout << " no electron track " << endl;
+  //Check if the hadron/electron arm had a track
+  if( !had_trkifo || !had_trkifo->IsOK() ) return 1;
+  if( !elec_trkifo || !elec_trkifo->IsOK() ) return 1;
+
+  //Create THaTrack object for hadron/elec arms to get relevant golden track quantities
+  if (felecArmName=="H") {
+    theSHMSTrack =(fhadSpectro->GetGoldenTrack()); 
+    theHMSTrack = (felecSpectro->GetGoldenTrack());
+  } else{
+    theSHMSTrack =(felecSpectro->GetGoldenTrack()); 
+    theHMSTrack = (fhadSpectro->GetGoldenTrack());
+  }
+  //Gather relevant variables for Coincidence time calculation
+  lightSpeed = 29.9792; // in cm/ns
+
+  //Particle Masses (HardCoded)
+  elecMass =  0.510998/1000.0; // electron mass in GeV/c^2
+  positronMass =  0.510998/1000.0;
+  protonMass = 938.27208/1000.0; // proton mass in GeV/c^2	
+  kaonMass = 493.677/1000.0;    //charged kaon mass in GeV/c^2
+  pionMass = 139.570/1000.0;    //charged pion mass in GeV/c^2
+
+ 
+  //Check if there was a golden track in both arms
+  if (!theSHMSTrack || !theHMSTrack)
+    {
+      return 1;
+    }
+
+  //Check if Database is reading the correct elec-arm particle mass
+  if (felecSpectro->GetParticleMass() > 0.00052) return 1;
+   
+     
+      //SHMS arm
+      Double_t shms_xptar = theSHMSTrack->GetTTheta();     
+      Double_t shms_dP = theSHMSTrack->GetDp();            
+      Double_t SHMS_FPtime = theSHMSTrack->GetFPTime();    
+      
+      //HMS arm
+      Double_t hms_xfp = theHMSTrack->GetX();           
+      Double_t hms_xpfp = theHMSTrack->GetTheta();      
+      Double_t hms_ypfp = theHMSTrack->GetPhi();        
+      Double_t HMS_FPtime = theHMSTrack->GetFPTime();    
+      
+      //Get raw TDC Times for HMS/SHMS (3/4 trigger)
+      pTRIG1_rawTdcTime_ROC1 = fCoinDet->Get_pTRG1_ROC1_rawTdctime();  //TDC Channels (0.1 ns/Ch)
+      pTRIG4_rawTdcTime_ROC1 = fCoinDet->Get_pTRG4_ROC1_rawTdctime();
+      pTRIG1_rawTdcTime_ROC2 = fCoinDet->Get_pTRG1_ROC2_rawTdctime();
+      pTRIG4_rawTdcTime_ROC2 = fCoinDet->Get_pTRG4_ROC2_rawTdctime();
+
+	  DeltaSHMSpathLength = -0.11*atan2(shms_xptar,1)*1000 - 0.057*shms_dP;
+	  DeltaHMSpathLength = 12.462*hms_xpfp + 0.1138*hms_xpfp*hms_xfp - 0.0154*hms_xfp - 72.292*hms_xpfp*hms_xpfp - 0.0000544*hms_xfp*had_xfp - 116.52*hms_ypfp*hms_ypfp;
+          // default assume SHMS is electron arm
+	  Double_t ElecPathLength=SHMScentralPathLen +  DeltaSHMSpathLength;
+	  Double_t HadPathLength=HMScentralPathLen +  DeltaHMSpathLength;
+          elec_P = theSHMSTrack->GetP();              //electron golden track arm momentum
+          had_P = theHMSTrack->GetP();              //hadron golden track arm momentum
+          Int_t sign=-1;
+	  if (felecArmName=="H") {
+             ElecPathLength=HMScentralPathLen +  DeltaHMSpathLength;
+	     HadPathLength=SHMScentralPathLen +  DeltaSHMSpathLength;
+             elec_P = theHMSTrack->GetP();              //electron golden track arm momentum
+             had_P = theSHMSTrack->GetP();              //hadron golden track arm momentum
+             sign=1;
+	  }
+
+	  //beta calculations beta = v/c = p/E
+	  elecArm_BetaCalc = elec_P / sqrt(elec_P*elec_P + elecMass*elecMass);
+	  hadArm_BetaCalc_proton = had_P / sqrt(had_P*had_P + protonMass*protonMass);
+	  hadArm_BetaCalc_Kaon = had_P / sqrt(had_P*had_P + kaonMass*kaonMass);
+	  hadArm_BetaCalc_Pion = had_P / sqrt(had_P*had_P + pionMass*pionMass);	
+	  hadArm_BetaCalc_Positron = had_P / sqrt(had_P*had_P + positronMass*positronMass);
+
+
+	  //Coincidence Corrections
+	  elec_coinCorr = (ElecPathLength) / (lightSpeed * elecArm_BetaCalc );
+	  had_coinCorr_proton = (HadPathLength) / (lightSpeed * hadArm_BetaCalc_proton );
+	  had_coinCorr_Kaon =  (HadPathLength)/ (lightSpeed * hadArm_BetaCalc_Kaon );
+	  had_coinCorr_Pion =  (HadPathLength)/ (lightSpeed * hadArm_BetaCalc_Pion );
+	  had_coinCorr_Positron = (HadPathLength) / (lightSpeed * hadArm_BetaCalc_Positron );
+
+	  //Raw, Uncorrected Coincidence Time
+	  fROC1_RAW_CoinTime =  (pTRIG1_rawTdcTime_ROC1*0.1 + SHMS_FPtime) - (pTRIG4_rawTdcTime_ROC1*0.1 + HMS_FPtime);
+	  fROC2_RAW_CoinTime =  (pTRIG1_rawTdcTime_ROC2*0.1 + SHMS_FPtime) - (pTRIG4_rawTdcTime_ROC2*0.1 + HMS_FPtime);
+	  
+	  
+	  //Corrected Coincidence Time for ROC1/ROC2 (ROC1 Should be identical to ROC2)
+          // 
+	  //PROTON
+	  fROC1_epCoinTime = fROC1_RAW_CoinTime + sign*( elec_coinCorr-had_coinCorr_proton) - eHad_CT_Offset; 
+	  fROC2_epCoinTime = fROC2_RAW_CoinTime + sign*( elec_coinCorr-had_coinCorr_proton) - eHad_CT_Offset; 
+
+	  //KAON
+	  fROC1_eKCoinTime = fROC1_RAW_CoinTime + sign*( elec_coinCorr-had_coinCorr_Kaon) - eHad_CT_Offset;
+	  fROC2_eKCoinTime = fROC2_RAW_CoinTime + sign*( elec_coinCorr-had_coinCorr_Kaon) - eHad_CT_Offset;
+	
+	  //PION
+	  fROC1_ePiCoinTime = fROC1_RAW_CoinTime + sign*( elec_coinCorr - had_coinCorr_Pion) - eHad_CT_Offset;	  
+	  fROC2_ePiCoinTime = fROC2_RAW_CoinTime + sign*( elec_coinCorr - had_coinCorr_Pion) - eHad_CT_Offset;
+
+	  //POSITRON
+	  fROC1_ePosCoinTime = fROC1_RAW_CoinTime + sign*( elec_coinCorr + had_coinCorr_Positron) - eHad_CT_Offset ;	  
+	  fROC2_ePosCoinTime = fROC2_RAW_CoinTime + sign*( elec_coinCorr + had_coinCorr_Positron) - eHad_CT_Offset;
+
+   
+  
+  
+  return 0;
+}
+
+//_____________________________________________________________________________
+
+ClassImp(THcCoinTime)
+////////////////////////////////////////////////////////////////////////////////
diff --git a/src/THcCoinTime.h b/src/THcCoinTime.h
new file mode 100644
index 0000000..ed1cb18
--- /dev/null
+++ b/src/THcCoinTime.h
@@ -0,0 +1,139 @@
+#ifndef ROOT_THcCoinTime
+#define ROOT_THcCoinTime
+
+///////////////////////////////////////////////////////////////////////////////
+//                                                                           //
+// THcCoinTime Physics Module                                                //
+// Author: Carlos Yero                                                       //
+// Date: April 27, 2018                                                      //
+///////////////////////////////////////////////////////////////////////////////
+
+#include "THaEvData.h"
+#include "THaCutList.h"
+#include "VarDef.h"
+#include "VarType.h"
+#include "TClonesArray.h"
+
+#include <cstring>
+#include <cstdio>
+#include <cstdlib>
+#include <iostream>
+
+#include "THaPhysicsModule.h"
+#include "THcTrigDet.h" 
+#include "THcHodoscope.h"
+//#include "THaSpectrometer.h"
+#include "THcHallCSpectrometer.h"
+#include "THaTrack.h"
+
+class THcCoinTime : public THaPhysicsModule {
+public:
+  THcCoinTime( const char* name, const char* description, const char* hadArmName="", 
+	       const char* elecArmName="", const char* coinname="");
+
+  virtual ~THcCoinTime();
+
+
+  virtual EStatus Init( const TDatime& run_time );
+  virtual Int_t   Process( const THaEvData& );
+
+  void            Reset( Option_t* opt="" );
+  void            Clear( Option_t* opt="" );
+  
+
+ protected:
+
+  virtual Int_t ReadDatabase( const TDatime& date);
+  virtual Int_t  DefineVariables( EMode mode = kDefine );
+
+  // Data needed for adding coincidence time as a Leaf Variable
+  
+  TString     fHodName;		// Name of hodoscope
+  TString     fCoinDetName;         // Name of Coin Trigger
+  TString     fhadArmName;       //name of hadron arm
+  TString     felecArmName;     // name of electron arm
+
+
+  THcHallCSpectrometer* fhadSpectro;	// hadron Spectrometer object
+  THcHallCSpectrometer* felecSpectro;	// electron Spectrometer object
+  THcTrigDet* fCoinDet;                 //Coin Trigger detector object
+
+  THaTrack* theSHMSTrack;
+  THaTrack* theHMSTrack;
+
+  THcHodoscope* fHod;	                // Hodscope object
+ 
+  //-----Declare Variables used in HMS/SHMS Coin. time correction-----
+  Double_t lightSpeed;
+  Double_t elecMass;
+  Double_t positronMass;
+
+  //hadron masses (the e- could be in coincidence with any of the hadrons)
+  Double_t protonMass;
+  Double_t kaonMass;
+  Double_t pionMass;
+
+  Double_t eHad_CT_Offset;  //e-Hadron coin time Offset
+
+  Double_t SHMScentralPathLen;  
+  Double_t HMScentralPathLen;   
+
+  Double_t DeltaSHMSpathLength;
+  Double_t DeltaHMSpathLength;
+
+  Double_t fROC1_RAW_CoinTime;
+  Double_t fROC2_RAW_CoinTime;
+  
+  
+  Double_t fROC1_epCoinTime;
+  Double_t fROC2_epCoinTime;
+
+  Double_t fROC1_eKCoinTime;
+  Double_t fROC2_eKCoinTime;
+ 
+  Double_t fROC1_ePiCoinTime;
+  Double_t fROC2_ePiCoinTime;
+ 
+  Double_t fROC1_ePosCoinTime;   //electron-positron coin time 
+  Double_t fROC2_ePosCoinTime;
+  
+  Double_t elec_coinCorr;
+  Double_t elecArm_BetaCalc;
+  Double_t elec_hodFPtime;
+  
+  Double_t had_coinCorr_proton;
+  Double_t hadArm_BetaCalc_proton;
+  
+  Double_t had_coinCorr_Kaon;
+  Double_t hadArm_BetaCalc_Kaon;
+   
+  Double_t had_coinCorr_Pion;
+  Double_t hadArm_BetaCalc_Pion;
+  
+  Double_t had_coinCorr_Positron;
+  Double_t hadArm_BetaCalc_Positron;
+  
+
+  Double_t elec_P;     //electron golden track momentum
+  Double_t elec_dP;     //electron golden track delta-> (P-P0 / P0)
+  Double_t elec_xptar;    //electron golden track theta (xptar, :) 
+  Double_t elec_FPtime;   //electron focal plane time
+
+  Double_t had_P;     //hadron golden track momentum
+  Double_t had_xfp;      //hadron x-focal plane
+  Double_t had_xpfp;     //hadron xp focal plane
+  Double_t had_ypfp;     //hadron yp focal plane
+  Double_t had_FPtime;   //hadron focal plane time
+
+  //Raw trigger times pTrig1 (SHMS 3/4 trig) and pTrig4 (HMS 3/4 trig)
+  Int_t pTRIG1_rawTdcTime_ROC1;
+  Int_t pTRIG4_rawTdcTime_ROC1;
+  Int_t pTRIG1_rawTdcTime_ROC2;
+  Int_t pTRIG4_rawTdcTime_ROC2;
+
+  //--------------------------------------------------------------------
+
+  ClassDef(THcCoinTime,0) 	// Coincidence Time Module
+};
+
+#endif
diff --git a/src/THcTrigDet.cxx b/src/THcTrigDet.cxx
index b36fb16..f86b5c4 100644
--- a/src/THcTrigDet.cxx
+++ b/src/THcTrigDet.cxx
@@ -221,8 +221,19 @@ void THcTrigDet::Clear(Option_t* opt) {
   };
 }
 
+//Added function to SET coincidence trigger times
+void THcTrigDet::SetCoinTrigTimes() 
+{ 
+  pTrig1_ROC1 = fTdcTimeRaw[fidx0];
+  pTrig4_ROC1 = fTdcTimeRaw[fidx1];
+  pTrig1_ROC2 = fTdcTimeRaw[fidx2];
+  pTrig4_ROC2 = fTdcTimeRaw[fidx3];
+
+}
+
 
 Int_t THcTrigDet::Decode(const THaEvData& evData) {
+    
   // Decode raw data for this event.
   Bool_t present = kTRUE;	// Don't suppress reference time warnings
   if(HaveIgnoreList()) {
@@ -289,10 +300,15 @@ Int_t THcTrigDet::Decode(const THaEvData& evData) {
     ++iHit;
   }
 
+  //Set raw Tdc coin. trigger times for pTRIG1/4
+  SetCoinTrigTimes();
+
   return 0;
 }
 
 
+
+
 void THcTrigDet::Setup(const char* name, const char* description) {
   // Prefix for parameters in `param` file.
   string kwPrefix = string(GetApparatus()->GetName()) + "_" + name;
@@ -348,11 +364,44 @@ Int_t THcTrigDet::ReadDatabase(const TDatime& date) {
   fAdcNames = vsplit(adcNames);
   fTdcNames = vsplit(tdcNames);
 
+  //default index values
+  fidx0 = 27;
+  fidx1 = 30;
+  fidx2 = 58;
+  fidx3 = 61;	
+
+  //Assign an index to coincidence trigger times strings
+  for (int i = 0; i <fNumTdc; i++)
+    {
+     
+      if(fTdcNames.at(i)=="pTRIG1_ROC1")
+	{
+	  fidx0 = i;
+	}
+      else if(fTdcNames.at(i)=="pTRIG4_ROC1")
+	{
+	  fidx1 = i;
+	}
+      else if(fTdcNames.at(i)=="pTRIG1_ROC2")
+	{
+	  fidx2 = i;
+	}
+      else if(fTdcNames.at(i)=="pTRIG4_ROC2")
+	{
+	  fidx3 = i;
+	}
+
+    }
+  
+  
+
   return kOK;
 }
 
 
 Int_t THcTrigDet::DefineVariables(THaAnalysisObject::EMode mode) {
+
+
   if (mode == kDefine && fIsSetup) return kOK;
   fIsSetup = (mode == kDefine);
 
@@ -461,6 +510,8 @@ Int_t THcTrigDet::DefineVariables(THaAnalysisObject::EMode mode) {
   for (int i=0; i<fNumTdc; ++i) {
     tdcTimeRawTitle.at(i) = fTdcNames.at(i) + "_tdcTimeRaw";
     tdcTimeRawVar.at(i) = TString::Format("fTdcTimeRaw[%d]", i);
+    
+
     RVarDef entry1 {
       tdcTimeRawTitle.at(i).Data(),
       tdcTimeRawTitle.at(i).Data(),
diff --git a/src/THcTrigDet.h b/src/THcTrigDet.h
index 58be607..fd8cd53 100644
--- a/src/THcTrigDet.h
+++ b/src/THcTrigDet.h
@@ -32,11 +32,32 @@ class THcTrigDet : public THaDetector, public THcHitList {
     virtual Bool_t IsIgnoreType(Int_t evtype) const;
     virtual Bool_t HaveIgnoreList() const;
     Int_t          End(THaRunBase* run);
+    
+    //Funtions to get raw TdcTimes 
+    Int_t Get_pTRG1_ROC1_rawTdctime() {return pTrig1_ROC1;}
+    Int_t Get_pTRG4_ROC1_rawTdctime() {return pTrig4_ROC1;}
+    Int_t Get_pTRG1_ROC2_rawTdctime() {return pTrig1_ROC2;}
+    Int_t Get_pTRG4_ROC2_rawTdctime() {return pTrig4_ROC2;}
 
   protected:
     void Setup(const char* name, const char* description);
     virtual Int_t ReadDatabase(const TDatime& date);
     virtual Int_t DefineVariables(EMode mode=kDefine);
+    
+    //Added for coin. time calculation
+    void SetCoinTrigTimes();
+
+    //indices to store pTrig string locations
+    Int_t fidx0;
+    Int_t fidx1;
+    Int_t fidx2;
+    Int_t fidx3;
+
+
+    Int_t pTrig1_ROC1;
+    Int_t pTrig4_ROC1;
+    Int_t pTrig1_ROC2;
+    Int_t pTrig4_ROC2;
 
     std::string fKwPrefix;
 
-- 
GitLab