diff --git a/.gitignore b/.gitignore
index 08ecc3688a6ee92e92c47442fe06d32aa5fa904c..f2300f29cfaed309d48dc65edd240f7ac7012723 100644
--- a/.gitignore
+++ b/.gitignore
@@ -14,7 +14,6 @@ THaDecDict.C
 THaDecDict.h
 haDict.h
 haDict.C
-hcana
 src/HallC_LinkDef.h
 src/hc_compiledata.h
 
diff --git a/src/THcCherenkov.cxx b/src/THcCherenkov.cxx
index 33d4571642f548e5d7a45259b4ca9246e5dfe946..87d94235160cc8e143633e7a8456f577a35e8caa 100644
--- a/src/THcCherenkov.cxx
+++ b/src/THcCherenkov.cxx
@@ -6,78 +6,73 @@
 */
 
 #include "THcCherenkov.h"
-#include "THcHodoscope.h"
 #include "TClonesArray.h"
-#include "THcSignalHit.h"
-#include "THaEvData.h"
+#include "THaApparatus.h"
+#include "THaCutList.h"
 #include "THaDetMap.h"
+#include "THaEvData.h"
+#include "THaTrack.h"
+#include "THaTrackProj.h"
 #include "THcDetectorMap.h"
 #include "THcGlobals.h"
-#include "THaCutList.h"
-#include "THcParmList.h"
+#include "THcHallCSpectrometer.h"
 #include "THcHitList.h"
-#include "THaApparatus.h"
+#include "THcHodoscope.h"
+#include "THcParmList.h"
+#include "THcSignalHit.h"
+#include "TMath.h"
 #include "VarDef.h"
 #include "VarType.h"
-#include "THaTrack.h"
-#include "TClonesArray.h"
-#include "TMath.h"
-#include "THaTrackProj.h"
-#include "THcHallCSpectrometer.h"
 
 #include <algorithm>
-#include <cstring>
 #include <cstdio>
 #include <cstdlib>
+#include <cstring>
+#include <iomanip>
 #include <iostream>
 #include <string>
-#include <iomanip>
-
 
 using namespace std;
 
-using std::cout;
 using std::cin;
+using std::cout;
 using std::endl;
-using std::setw;
 using std::setprecision;
+using std::setw;
 
 //_____________________________________________________________________________
-THcCherenkov::THcCherenkov( const char* name, const char* description,
-                            THaApparatus* apparatus ) :
-  THaNonTrackingDetector(name,description,apparatus)
-{
+THcCherenkov::THcCherenkov(const char* name, const char* description, THaApparatus* apparatus)
+    : THaNonTrackingDetector(name, description, apparatus) {
   // Normal constructor with name and description
-  frAdcPedRaw       = new TClonesArray("THcSignalHit", MaxNumCerPmt*MaxNumAdcPulse);
-  frAdcPulseIntRaw  = new TClonesArray("THcSignalHit", MaxNumCerPmt*MaxNumAdcPulse);
-  frAdcPulseAmpRaw  = new TClonesArray("THcSignalHit", MaxNumCerPmt*MaxNumAdcPulse);
-  frAdcPulseTimeRaw = new TClonesArray("THcSignalHit", MaxNumCerPmt*MaxNumAdcPulse);
-  frAdcPed          = new TClonesArray("THcSignalHit", MaxNumCerPmt*MaxNumAdcPulse);
-  frAdcPulseInt     = new TClonesArray("THcSignalHit", MaxNumCerPmt*MaxNumAdcPulse);
-  frAdcPulseAmp     = new TClonesArray("THcSignalHit", MaxNumCerPmt*MaxNumAdcPulse);
-  frAdcPulseTime    = new TClonesArray("THcSignalHit", MaxNumCerPmt*MaxNumAdcPulse);
-  fAdcErrorFlag     = new TClonesArray("THcSignalHit", MaxNumCerPmt*MaxNumAdcPulse);
-
-  fNumAdcHits         = vector<Int_t>    (MaxNumCerPmt, 0.0);
-  fNumGoodAdcHits     = vector<Int_t>    (MaxNumCerPmt, 0.0);
-  fNumTracksMatched   = vector<Int_t>    (MaxNumCerPmt, 0.0);
-  fNumTracksFired     = vector<Int_t>    (MaxNumCerPmt, 0.0);
-  fNpe                = vector<Double_t> (MaxNumCerPmt, 0.0);
-  fGoodAdcPed         = vector<Double_t> (MaxNumCerPmt, 0.0);
-  fGoodAdcMult         = vector<Double_t> (MaxNumCerPmt, 0.0);
-  fGoodAdcHitUsed         = vector<Double_t> (MaxNumCerPmt, 0.0);
-  fGoodAdcPulseInt    = vector<Double_t> (MaxNumCerPmt, 0.0);
-  fGoodAdcPulseIntRaw = vector<Double_t> (MaxNumCerPmt, 0.0);
-  fGoodAdcPulseAmp    = vector<Double_t> (MaxNumCerPmt, 0.0);
-  fGoodAdcPulseTime   = vector<Double_t> (MaxNumCerPmt, 0.0);
-  fGoodAdcTdcDiffTime   = vector<Double_t> (MaxNumCerPmt, 0.0);
+  frAdcPedRaw       = new TClonesArray("THcSignalHit", MaxNumCerPmt * MaxNumAdcPulse);
+  frAdcPulseIntRaw  = new TClonesArray("THcSignalHit", MaxNumCerPmt * MaxNumAdcPulse);
+  frAdcPulseAmpRaw  = new TClonesArray("THcSignalHit", MaxNumCerPmt * MaxNumAdcPulse);
+  frAdcPulseTimeRaw = new TClonesArray("THcSignalHit", MaxNumCerPmt * MaxNumAdcPulse);
+  frAdcPed          = new TClonesArray("THcSignalHit", MaxNumCerPmt * MaxNumAdcPulse);
+  frAdcPulseInt     = new TClonesArray("THcSignalHit", MaxNumCerPmt * MaxNumAdcPulse);
+  frAdcPulseAmp     = new TClonesArray("THcSignalHit", MaxNumCerPmt * MaxNumAdcPulse);
+  frAdcPulseTime    = new TClonesArray("THcSignalHit", MaxNumCerPmt * MaxNumAdcPulse);
+  fAdcErrorFlag     = new TClonesArray("THcSignalHit", MaxNumCerPmt * MaxNumAdcPulse);
+
+  fNumAdcHits         = vector<Int_t>(MaxNumCerPmt, 0.0);
+  fNumGoodAdcHits     = vector<Int_t>(MaxNumCerPmt, 0.0);
+  fNumTracksMatched   = vector<Int_t>(MaxNumCerPmt, 0.0);
+  fNumTracksFired     = vector<Int_t>(MaxNumCerPmt, 0.0);
+  fNpe                = vector<Double_t>(MaxNumCerPmt, 0.0);
+  fGoodAdcPed         = vector<Double_t>(MaxNumCerPmt, 0.0);
+  fGoodAdcMult        = vector<Double_t>(MaxNumCerPmt, 0.0);
+  fGoodAdcHitUsed     = vector<Double_t>(MaxNumCerPmt, 0.0);
+  fGoodAdcPulseInt    = vector<Double_t>(MaxNumCerPmt, 0.0);
+  fGoodAdcPulseIntRaw = vector<Double_t>(MaxNumCerPmt, 0.0);
+  fGoodAdcPulseAmp    = vector<Double_t>(MaxNumCerPmt, 0.0);
+  fGoodAdcPulseTime   = vector<Double_t>(MaxNumCerPmt, 0.0);
+  fGoodAdcTdcDiffTime = vector<Double_t>(MaxNumCerPmt, 0.0);
 
   InitArrays();
 }
 
 //_____________________________________________________________________________
-THcCherenkov::THcCherenkov( ) 
-{
+THcCherenkov::THcCherenkov() {
   // Constructor
   frAdcPedRaw       = NULL;
   frAdcPulseIntRaw  = NULL;
@@ -93,25 +88,32 @@ THcCherenkov::THcCherenkov( )
 }
 
 //_____________________________________________________________________________
-THcCherenkov::~THcCherenkov()
-{
+THcCherenkov::~THcCherenkov() {
   // Destructor
-  delete frAdcPedRaw;       frAdcPedRaw       = NULL;
-  delete frAdcPulseIntRaw;  frAdcPulseIntRaw  = NULL;
-  delete frAdcPulseAmpRaw;  frAdcPulseAmpRaw  = NULL;
-  delete frAdcPulseTimeRaw; frAdcPulseTimeRaw = NULL;
-  delete frAdcPed;          frAdcPed          = NULL;
-  delete frAdcPulseInt;     frAdcPulseInt     = NULL;
-  delete frAdcPulseAmp;     frAdcPulseAmp     = NULL;
-  delete frAdcPulseTime;    frAdcPulseTime    = NULL;
-  delete fAdcErrorFlag;     fAdcErrorFlag     = NULL;
+  delete frAdcPedRaw;
+  frAdcPedRaw = NULL;
+  delete frAdcPulseIntRaw;
+  frAdcPulseIntRaw = NULL;
+  delete frAdcPulseAmpRaw;
+  frAdcPulseAmpRaw = NULL;
+  delete frAdcPulseTimeRaw;
+  frAdcPulseTimeRaw = NULL;
+  delete frAdcPed;
+  frAdcPed = NULL;
+  delete frAdcPulseInt;
+  frAdcPulseInt = NULL;
+  delete frAdcPulseAmp;
+  frAdcPulseAmp = NULL;
+  delete frAdcPulseTime;
+  frAdcPulseTime = NULL;
+  delete fAdcErrorFlag;
+  fAdcErrorFlag = NULL;
 
   DeleteArrays();
 }
 
 //_____________________________________________________________________________
-void THcCherenkov::InitArrays()
-{
+void THcCherenkov::InitArrays() {
   fGain     = NULL;
   fPedSum   = NULL;
   fPedSum2  = NULL;
@@ -122,64 +124,70 @@ void THcCherenkov::InitArrays()
   fThresh   = NULL;
 }
 //_____________________________________________________________________________
-void THcCherenkov::DeleteArrays()
-{
-  delete [] fGain; fGain = NULL;
+void THcCherenkov::DeleteArrays() {
+  delete[] fGain;
+  fGain = NULL;
 
   // 6 Gev variables
-  delete [] fPedSum;   fPedSum   = NULL;
-  delete [] fPedSum2;  fPedSum2  = NULL;
-  delete [] fPedLimit; fPedLimit = NULL;
-  delete [] fPedMean;  fPedMean  = NULL;
-  delete [] fPedCount; fPedCount = NULL;
-  delete [] fPed;      fPed      = NULL;
-  delete [] fThresh;   fThresh   = NULL;
-
-  delete [] fAdcTimeWindowMin; fAdcTimeWindowMin = 0;
-  delete [] fAdcTimeWindowMax; fAdcTimeWindowMax = 0;
-  delete [] fRegionValue; fRegionValue = 0;
+  delete[] fPedSum;
+  fPedSum = NULL;
+  delete[] fPedSum2;
+  fPedSum2 = NULL;
+  delete[] fPedLimit;
+  fPedLimit = NULL;
+  delete[] fPedMean;
+  fPedMean = NULL;
+  delete[] fPedCount;
+  fPedCount = NULL;
+  delete[] fPed;
+  fPed = NULL;
+  delete[] fThresh;
+  fThresh = NULL;
+
+  delete[] fAdcTimeWindowMin;
+  fAdcTimeWindowMin = 0;
+  delete[] fAdcTimeWindowMax;
+  fAdcTimeWindowMax = 0;
+  delete[] fRegionValue;
+  fRegionValue = 0;
 }
 
 //_____________________________________________________________________________
-THaAnalysisObject::EStatus THcCherenkov::Init( const TDatime& date )
-{
+THaAnalysisObject::EStatus THcCherenkov::Init(const TDatime& date) {
   // cout << "THcCherenkov::Init for: " << GetName() << endl;
 
   string EngineDID = string(GetApparatus()->GetName()).substr(0, 1) + GetName();
   std::transform(EngineDID.begin(), EngineDID.end(), EngineDID.begin(), ::toupper);
-  if(gHcDetectorMap->FillMap(fDetMap, EngineDID.c_str()) < 0) {
+  if (gHcDetectorMap->FillMap(fDetMap, EngineDID.c_str()) < 0) {
     static const char* const here = "Init()";
     Error(Here(here), "Error filling detectormap for %s.", EngineDID.c_str());
     return kInitError;
   }
 
   EStatus status;
-  if((status = THaNonTrackingDetector::Init( date )))
-    return fStatus=status;
+  if ((status = THaNonTrackingDetector::Init(date)))
+    return fStatus = status;
 
   // Should probably put this in ReadDatabase as we will know the
   // maximum number of hits after setting up the detector map
-  InitHitList(fDetMap, "THcCherenkovHit", fDetMap->GetTotNumChan()+1,
-	      0, fADC_RefTimeCut);
+  InitHitList(fDetMap, "THcCherenkovHit", fDetMap->GetTotNumChan() + 1, 0, fADC_RefTimeCut);
 
-  THcHallCSpectrometer *app=dynamic_cast<THcHallCSpectrometer*>(GetApparatus());
-   if(  !app ||
-      !(fglHod = dynamic_cast<THcHodoscope*>(app->GetDetector("hod"))) ) {
+  THcHallCSpectrometer* app = dynamic_cast<THcHallCSpectrometer*>(GetApparatus());
+  if (!app || !(fglHod = dynamic_cast<THcHodoscope*>(app->GetDetector("hod")))) {
     static const char* const here = "ReadDatabase()";
-    Warning(Here(here),"Hodoscope \"%s\" not found. ","hod");
+    Warning(Here(here), "Hodoscope \"%s\" not found. ", "hod");
   }
 
-  fPresentP = 0;
-  THaVar* vpresent = gHaVars->Find(Form("%s.present",GetApparatus()->GetName()));
-  if(vpresent) {
-    fPresentP = (Bool_t *) vpresent->GetValuePointer();
+  fPresentP        = 0;
+  THaVar* vpresent = gHaVars->Find(Form("%s.present", GetApparatus()->GetName()));
+  if (vpresent) {
+    fPresentP = (Bool_t*)vpresent->GetValuePointer();
   }
   return fStatus = kOK;
 }
 
 //_____________________________________________________________________________
-Int_t THcCherenkov::ReadDatabase( const TDatime& date )
-{
+Int_t THcCherenkov::ReadDatabase(const TDatime& date) {
   // This function is called by THaDetectorBase::Init() once at the beginning
   // of the analysis.
 
@@ -190,59 +198,54 @@ Int_t THcCherenkov::ReadDatabase( const TDatime& date )
 
   CreateMissReportParms(prefix.c_str());
 
-  fNRegions = 4;  // Defualt if not set in paramter file
+  fNRegions = 4; // Defualt if not set in paramter file
 
-  DBRequest list_1[] = {
-    {"_tot_pmts", &fNelem, kInt},
-    {"_num_regions",      &fNRegions,         kInt},
-    {0}
-  };
+  DBRequest list_1[] = {{"_tot_pmts", &fNelem, kInt}, {"_num_regions", &fNRegions, kInt}, {0}};
 
   gHcParms->LoadParmValues(list_1, prefix.c_str());
 
   Bool_t optional = true;
 
-  _det_logger->info("Created Cherenkov detector {}.{} with {} PMTs",GetApparatus()->GetName(), GetName(), fNelem);
-  //cout << "Created Cherenkov detector " << GetApparatus()->GetName() << "."
+  _det_logger->info("Created Cherenkov detector {}.{} with {} PMTs", GetApparatus()->GetName(),
+                    GetName(), fNelem);
+  // cout << "Created Cherenkov detector " << GetApparatus()->GetName() << "."
   //     << GetName() << " with " << fNelem << " PMTs" << endl;
 
   // 6 GeV pedestal paramters
-  fPedLimit = new Int_t[fNelem];
-  fGain     = new Double_t[fNelem];
-  fPedMean  = new Double_t[fNelem];
-  fAdcTimeWindowMin =  new Double_t[fNelem];
-  fAdcTimeWindowMax=  new Double_t[fNelem];
+  fPedLimit         = new Int_t[fNelem];
+  fGain             = new Double_t[fNelem];
+  fPedMean          = new Double_t[fNelem];
+  fAdcTimeWindowMin = new Double_t[fNelem];
+  fAdcTimeWindowMax = new Double_t[fNelem];
   // Region parameters
   fRegionsValueMax = fNRegions * 8;
   fRegionValue     = new Double_t[fRegionsValueMax];
 
-  DBRequest list[]={
-    {"_ped_limit",        fPedLimit,          kInt,     (UInt_t) fNelem, optional},
-    {"_adc_to_npe",       fGain,              kDouble,  (UInt_t) fNelem},
-    {"_red_chi2_min",     &fRedChi2Min,       kDouble},
-    {"_red_chi2_max",     &fRedChi2Max,       kDouble},
-    {"_beta_min",         &fBetaMin,          kDouble},
-    {"_beta_max",         &fBetaMax,          kDouble},
-    {"_enorm_min",        &fENormMin,         kDouble},
-    {"_enorm_max",        &fENormMax,         kDouble},
-    {"_dp_min",           &fDpMin,            kDouble},
-    {"_dp_max",           &fDpMax,            kDouble},
-    {"_mirror_zpos",      &fMirrorZPos,       kDouble},
-    {"_npe_thresh",       &fNpeThresh,        kDouble},
-    {"_debug_adc",        &fDebugAdc,         kInt, 0, 1},
-    {"_adcTimeWindowMin", fAdcTimeWindowMin, kDouble,(UInt_t) fNelem,1},
-    {"_adcTimeWindowMax", fAdcTimeWindowMax, kDouble, (UInt_t) fNelem,1},
-    {"_adc_tdc_offset",   &fAdcTdcOffset,     kDouble, 0, 1},
-    {"_region",           &fRegionValue[0],   kDouble,  (UInt_t) fRegionsValueMax},
-    {"_adcrefcut",        &fADC_RefTimeCut,   kInt,    0, 1},
-    {0}
-  };
-  for (Int_t i=0;i<fNelem;i++) {
-    fAdcTimeWindowMin[i]=-1000.;
-    fAdcTimeWindowMax[i]=1000.;
+  DBRequest list[] = {{"_ped_limit", fPedLimit, kInt, (UInt_t)fNelem, optional},
+                      {"_adc_to_npe", fGain, kDouble, (UInt_t)fNelem},
+                      {"_red_chi2_min", &fRedChi2Min, kDouble},
+                      {"_red_chi2_max", &fRedChi2Max, kDouble},
+                      {"_beta_min", &fBetaMin, kDouble},
+                      {"_beta_max", &fBetaMax, kDouble},
+                      {"_enorm_min", &fENormMin, kDouble},
+                      {"_enorm_max", &fENormMax, kDouble},
+                      {"_dp_min", &fDpMin, kDouble},
+                      {"_dp_max", &fDpMax, kDouble},
+                      {"_mirror_zpos", &fMirrorZPos, kDouble},
+                      {"_npe_thresh", &fNpeThresh, kDouble},
+                      {"_debug_adc", &fDebugAdc, kInt, 0, 1},
+                      {"_adcTimeWindowMin", fAdcTimeWindowMin, kDouble, (UInt_t)fNelem, 1},
+                      {"_adcTimeWindowMax", fAdcTimeWindowMax, kDouble, (UInt_t)fNelem, 1},
+                      {"_adc_tdc_offset", &fAdcTdcOffset, kDouble, 0, 1},
+                      {"_region", &fRegionValue[0], kDouble, (UInt_t)fRegionsValueMax},
+                      {"_adcrefcut", &fADC_RefTimeCut, kInt, 0, 1},
+                      {0}};
+  for (Int_t i = 0; i < fNelem; i++) {
+    fAdcTimeWindowMin[i] = -1000.;
+    fAdcTimeWindowMax[i] = 1000.;
   }
-  fDebugAdc = 0; // Set ADC debug parameter to false unless set in parameter file
-  fAdcTdcOffset = 0.0;
+  fDebugAdc       = 0; // Set ADC debug parameter to false unless set in parameter file
+  fAdcTdcOffset   = 0.0;
   fADC_RefTimeCut = 0;
 
   gHcParms->LoadParmValues((DBRequest*)&list, prefix.c_str());
@@ -266,66 +269,84 @@ Int_t THcCherenkov::ReadDatabase( const TDatime& date )
 }
 
 //_____________________________________________________________________________
-Int_t THcCherenkov::DefineVariables( EMode mode )
-{
+Int_t THcCherenkov::DefineVariables(EMode mode) {
   // Initialize global variables for histogramming and tree
   // cout << "THcCherenkov::DefineVariables called for: " << GetName() << endl;
 
-  if( mode == kDefine && fIsSetup ) return kOK;
-  fIsSetup = ( mode == kDefine );
+  if (mode == kDefine && fIsSetup)
+    return kOK;
+  fIsSetup = (mode == kDefine);
 
   // Register variables in global list
 
   if (fDebugAdc) {
     RVarDef vars[] = {
-      {"numAdcHits",      "Number of ADC Hits Per PMT", "fNumAdcHits"},        // Cherenkov occupancy
-      {"totNumAdcHits",   "Total Number of ADC Hits",   "fTotNumAdcHits"},     // Cherenkov multiplicity
-      {"adcPedRaw",       "Raw ADC pedestals",          "frAdcPedRaw.THcSignalHit.GetData()"},
-      {"adcPulseIntRaw",  "Raw ADC pulse integrals",    "frAdcPulseIntRaw.THcSignalHit.GetData()"},
-      {"adcPulseAmpRaw",  "Raw ADC pulse amplitudes",   "frAdcPulseAmpRaw.THcSignalHit.GetData()"},
-      {"adcPulseTimeRaw", "Raw ADC pulse times",        "frAdcPulseTimeRaw.THcSignalHit.GetData()"},
-      {"adcPed",          "ADC pedestals",              "frAdcPed.THcSignalHit.GetData()"},
-      {"adcPulseInt",     "ADC pulse integrals",        "frAdcPulseInt.THcSignalHit.GetData()"},
-      {"adcPulseAmp",     "ADC pulse amplitudes",       "frAdcPulseAmp.THcSignalHit.GetData()"},
-      {"adcPulseTime",    "ADC pulse times",            "frAdcPulseTime.THcSignalHit.GetData()"},
-      { 0 }
-    };
-    DefineVarsFromList( vars, mode);
-  } //end debug statement
+        {"numAdcHits", "Number of ADC Hits Per PMT", "fNumAdcHits"},     // Cherenkov occupancy
+        {"totNumAdcHits", "Total Number of ADC Hits", "fTotNumAdcHits"}, // Cherenkov multiplicity
+        {"adcPedRaw", "Raw ADC pedestals", "frAdcPedRaw.THcSignalHit.GetData()"},
+        {"adcPulseIntRaw", "Raw ADC pulse integrals", "frAdcPulseIntRaw.THcSignalHit.GetData()"},
+        {"adcPulseAmpRaw", "Raw ADC pulse amplitudes", "frAdcPulseAmpRaw.THcSignalHit.GetData()"},
+        {"adcPulseTimeRaw", "Raw ADC pulse times", "frAdcPulseTimeRaw.THcSignalHit.GetData()"},
+        {"adcPed", "ADC pedestals", "frAdcPed.THcSignalHit.GetData()"},
+        {"adcPulseInt", "ADC pulse integrals", "frAdcPulseInt.THcSignalHit.GetData()"},
+        {"adcPulseAmp", "ADC pulse amplitudes", "frAdcPulseAmp.THcSignalHit.GetData()"},
+        {"adcPulseTime", "ADC pulse times", "frAdcPulseTime.THcSignalHit.GetData()"},
+        {0}};
+    DefineVarsFromList(vars, mode);
+  } // end debug statement
 
   RVarDef vars[] = {
-    {"adcCounter",   "ADC counter numbers",            "frAdcPulseIntRaw.THcSignalHit.GetPaddleNumber()"},
-    {"adcErrorFlag", "Error Flag for When FPGA Fails", "fAdcErrorFlag.THcSignalHit.GetData()"},
-    {"numGoodAdcHits",    "Number of Good ADC Hits Per PMT", "fNumGoodAdcHits"},    // Cherenkov occupancy
-    {"totNumGoodAdcHits", "Total Number of Good ADC Hits",   "fTotNumGoodAdcHits"}, // Cherenkov multiplicity
-    {"numTracksMatched",    "Number of Tracks Matched Per Region",       "fNumTracksMatched"},
-    {"numTracksFired",      "Number of Tracks that Fired Per Region",    "fNumTracksFired"},
-    {"totNumTracksMatched", "Total Number of Tracks Matched Per Region", "fTotNumTracksMatched"},
-    {"totNumTracksFired",   "Total Number of Tracks that Fired",         "fTotNumTracksFired"},
-
-    {"xAtCer",       "Track X at Cherenkov mirror",    "fXAtCer"},
-    {"yAtCer",       "Track Y at Cherenkov mirror",    "fYAtCer"},
-
-    {"npe",          "Number of PEs",                  "fNpe"},
-    {"npeSum",       "Total Number of PEs",            "fNpeSum"},
-
-    {"goodAdcPed",          "Good ADC pedestals",           "fGoodAdcPed"},
-    {"goodAdcMult",          "Good ADC Multiplicity",           "fGoodAdcMult"},
-    {"goodAdcHitUsed",          "Good ADC Hit Used",           "fGoodAdcHitUsed"},
-    {"goodAdcPulseInt",     "Good ADC pulse integrals",     "fGoodAdcPulseInt"},
-    {"goodAdcPulseIntRaw",  "Good ADC raw pulse integrals", "fGoodAdcPulseIntRaw"},
-    {"goodAdcPulseAmp",     "Good ADC pulse amplitudes",    "fGoodAdcPulseAmp"},
-    {"goodAdcPulseTime",    "Good ADC pulse times",         "fGoodAdcPulseTime"},
-     {"goodAdcTdcDiffTime",    "Good Hodo Start - ADC pulse times",         "fGoodAdcTdcDiffTime"},
-   { 0 }
-  };
+      {"adcCounter", "ADC counter numbers", "frAdcPulseIntRaw.THcSignalHit.GetPaddleNumber()"},
+      {"adcErrorFlag", "Error Flag for When FPGA Fails", "fAdcErrorFlag.THcSignalHit.GetData()"},
+      {"numGoodAdcHits", "Number of Good ADC Hits Per PMT",
+       "fNumGoodAdcHits"}, // Cherenkov occupancy
+      {"totNumGoodAdcHits", "Total Number of Good ADC Hits",
+       "fTotNumGoodAdcHits"}, // Cherenkov multiplicity
+      {"numTracksMatched", "Number of Tracks Matched Per Region", "fNumTracksMatched"},
+      {"numTracksFired", "Number of Tracks that Fired Per Region", "fNumTracksFired"},
+      {"totNumTracksMatched", "Total Number of Tracks Matched Per Region", "fTotNumTracksMatched"},
+      {"totNumTracksFired", "Total Number of Tracks that Fired", "fTotNumTracksFired"},
+
+      {"xAtCer", "Track X at Cherenkov mirror", "fXAtCer"},
+      {"yAtCer", "Track Y at Cherenkov mirror", "fYAtCer"},
+
+      {"npe", "Number of PEs", "fNpe"},
+      {"npeSum", "Total Number of PEs", "fNpeSum"},
+
+      {"goodAdcPed", "Good ADC pedestals", "fGoodAdcPed"},
+      {"goodAdcMult", "Good ADC Multiplicity", "fGoodAdcMult"},
+      {"goodAdcHitUsed", "Good ADC Hit Used", "fGoodAdcHitUsed"},
+      {"goodAdcPulseInt", "Good ADC pulse integrals", "fGoodAdcPulseInt"},
+      {"goodAdcPulseIntRaw", "Good ADC raw pulse integrals", "fGoodAdcPulseIntRaw"},
+      {"goodAdcPulseAmp", "Good ADC pulse amplitudes", "fGoodAdcPulseAmp"},
+      {"goodAdcPulseTime", "Good ADC pulse times", "fGoodAdcPulseTime"},
+      {"goodAdcTdcDiffTime", "Good Hodo Start - ADC pulse times", "fGoodAdcTdcDiffTime"},
+      {0}};
 
   return DefineVarsFromList(vars, mode);
 }
 //_____________________________________________________________________________
-inline
-void THcCherenkov::Clear(Option_t* opt)
-{
+
+Int_t THcCherenkov::ManualInitTree(TTree* t) {
+  // The most direct path to the output tree!!!
+  std::string app_name = GetApparatus()->GetName();
+  std::string det_name = GetName();
+  // if (t) {
+  //  std::string branch_name = (app_name + "_" + det_name + "_data");
+  //  _det_logger->info("THcHodoscope::ManualInitTree : Adding branch, {}, to output tree",
+  //  branch_name); t->Branch(branch_name.c_str(), &_basic_data, 32000, 99);
+  //}
+  if (t) {
+    std::string branch_name = (app_name + "_" + det_name + "_waveforms");
+    _det_logger->info("THcCherenkov::ManualInitTree : Adding branch, {}, to output tree",
+                      branch_name);
+    t->Branch(branch_name.c_str(), &_waveforms, 32000, 99);
+  }
+  return 0;
+}
+//_____________________________________________________________________________
+
+void THcCherenkov::Clear(Option_t* opt) {
   // Clear the hit lists
   fNhits               = 0;
   fTotNumAdcHits       = 0;
@@ -359,68 +380,75 @@ void THcCherenkov::Clear(Option_t* opt)
     fNumTracksFired.at(ielem) = 0;
   for (UInt_t ielem = 0; ielem < fGoodAdcPed.size(); ielem++) {
     fGoodAdcPed.at(ielem)         = 0.0;
-    fGoodAdcMult.at(ielem)         = 0.0;
-    fGoodAdcHitUsed.at(ielem)         = 0.0;
+    fGoodAdcMult.at(ielem)        = 0.0;
+    fGoodAdcHitUsed.at(ielem)     = 0.0;
     fGoodAdcPulseInt.at(ielem)    = 0.0;
     fGoodAdcPulseIntRaw.at(ielem) = 0.0;
     fGoodAdcPulseAmp.at(ielem)    = 0.0;
     fGoodAdcPulseTime.at(ielem)   = kBig;
-    fGoodAdcTdcDiffTime.at(ielem)   = kBig;
+    fGoodAdcTdcDiffTime.at(ielem) = kBig;
     fNpe.at(ielem)                = 0.0;
   }
-
 }
 
 //_____________________________________________________________________________
-Int_t THcCherenkov::Decode( const THaEvData& evdata )
-{
+
+Int_t THcCherenkov::Decode(const THaEvData& evdata) {
   // Get the Hall C style hitlist (fRawHitList) for this event
-  Bool_t present = kTRUE;	// Suppress reference time warnings
-  if(fPresentP) {		// if this spectrometer not part of trigger
+  Bool_t present = kTRUE; // Suppress reference time warnings
+  if (fPresentP) {        // if this spectrometer not part of trigger
     present = *fPresentP;
   }
   fNhits = DecodeToHitList(evdata, !present);
 
-  if(gHaCuts->Result("Pedestal_event")) {
+  if (gHaCuts->Result("Pedestal_event")) {
     AccumulatePedestals(fRawHitList);
-    fAnalyzePedestals = 1;	// Analyze pedestals first normal events
-    return(0);
+    fAnalyzePedestals = 1; // Analyze pedestals first normal events
+    return (0);
   }
 
-  if(fAnalyzePedestals) {
+  if (fAnalyzePedestals) {
     CalculatePedestals();
-    fAnalyzePedestals = 0;	// Don't analyze pedestals next event
+    fAnalyzePedestals = 0; // Don't analyze pedestals next event
   }
 
   Int_t  ihit      = 0;
   UInt_t nrAdcHits = 0;
 
-  while(ihit < fNhits) {
+  while (ihit < fNhits) {
 
-    THcCherenkovHit* hit         = (THcCherenkovHit*) fRawHitList->At(ihit);
-    Int_t            npmt        = hit->fCounter;
-    THcRawAdcHit&    rawAdcHit   = hit->GetRawAdcHitPos();
+    THcCherenkovHit* hit       = (THcCherenkovHit*)fRawHitList->At(ihit);
+    Int_t            npmt      = hit->fCounter;
+    THcRawAdcHit&    rawAdcHit = hit->GetRawAdcHitPos();
 
     for (UInt_t thit = 0; thit < rawAdcHit.GetNPulses(); thit++) {
 
-      ((THcSignalHit*) frAdcPedRaw->ConstructedAt(nrAdcHits))->Set(npmt, rawAdcHit.GetPedRaw());
-      ((THcSignalHit*) frAdcPed->ConstructedAt(nrAdcHits))->Set(npmt, rawAdcHit.GetPed());
+      ((THcSignalHit*)frAdcPedRaw->ConstructedAt(nrAdcHits))->Set(npmt, rawAdcHit.GetPedRaw());
+      ((THcSignalHit*)frAdcPed->ConstructedAt(nrAdcHits))->Set(npmt, rawAdcHit.GetPed());
 
-      ((THcSignalHit*) frAdcPulseIntRaw->ConstructedAt(nrAdcHits))->Set(npmt, rawAdcHit.GetPulseIntRaw(thit));
-      ((THcSignalHit*) frAdcPulseInt->ConstructedAt(nrAdcHits))->Set(npmt, rawAdcHit.GetPulseInt(thit));
+      ((THcSignalHit*)frAdcPulseIntRaw->ConstructedAt(nrAdcHits))
+          ->Set(npmt, rawAdcHit.GetPulseIntRaw(thit));
+      ((THcSignalHit*)frAdcPulseInt->ConstructedAt(nrAdcHits))
+          ->Set(npmt, rawAdcHit.GetPulseInt(thit));
 
-      ((THcSignalHit*) frAdcPulseAmpRaw->ConstructedAt(nrAdcHits))->Set(npmt, rawAdcHit.GetPulseAmpRaw(thit));
-      ((THcSignalHit*) frAdcPulseAmp->ConstructedAt(nrAdcHits))->Set(npmt, rawAdcHit.GetPulseAmp(thit));
+      ((THcSignalHit*)frAdcPulseAmpRaw->ConstructedAt(nrAdcHits))
+          ->Set(npmt, rawAdcHit.GetPulseAmpRaw(thit));
+      ((THcSignalHit*)frAdcPulseAmp->ConstructedAt(nrAdcHits))
+          ->Set(npmt, rawAdcHit.GetPulseAmp(thit));
 
-      ((THcSignalHit*) frAdcPulseTimeRaw->ConstructedAt(nrAdcHits))->Set(npmt, rawAdcHit.GetPulseTimeRaw(thit));
-      ((THcSignalHit*) frAdcPulseTime->ConstructedAt(nrAdcHits))->Set(npmt, rawAdcHit.GetPulseTime(thit)+fAdcTdcOffset);
+      ((THcSignalHit*)frAdcPulseTimeRaw->ConstructedAt(nrAdcHits))
+          ->Set(npmt, rawAdcHit.GetPulseTimeRaw(thit));
+      ((THcSignalHit*)frAdcPulseTime->ConstructedAt(nrAdcHits))
+          ->Set(npmt, rawAdcHit.GetPulseTime(thit) + fAdcTdcOffset);
 
-      if (rawAdcHit.GetPulseAmpRaw(thit) > 0)  ((THcSignalHit*) fAdcErrorFlag->ConstructedAt(nrAdcHits))->Set(npmt, 0);
-      if (rawAdcHit.GetPulseAmpRaw(thit) <= 0) ((THcSignalHit*) fAdcErrorFlag->ConstructedAt(nrAdcHits))->Set(npmt, 1);
+      if (rawAdcHit.GetPulseAmpRaw(thit) > 0)
+        ((THcSignalHit*)fAdcErrorFlag->ConstructedAt(nrAdcHits))->Set(npmt, 0);
+      if (rawAdcHit.GetPulseAmpRaw(thit) <= 0)
+        ((THcSignalHit*)fAdcErrorFlag->ConstructedAt(nrAdcHits))->Set(npmt, 1);
 
       ++nrAdcHits;
       fTotNumAdcHits++;
-      fNumAdcHits.at(npmt-1) = npmt;
+      fNumAdcHits.at(npmt - 1) = npmt;
     }
     ihit++;
   }
@@ -428,47 +456,43 @@ Int_t THcCherenkov::Decode( const THaEvData& evdata )
 }
 
 //_____________________________________________________________________________
-Int_t THcCherenkov::ApplyCorrections( void )
-{
-  return(0);
-}
+Int_t THcCherenkov::ApplyCorrections(void) { return (0); }
 
 //_____________________________________________________________________________
-Int_t THcCherenkov::CoarseProcess( TClonesArray&  )
-{
+Int_t THcCherenkov::CoarseProcess(TClonesArray&) {
   Double_t StartTime = 0.0;
-  if( fglHod ) StartTime = fglHod->GetStartTime();
+  if (fglHod)
+    StartTime = fglHod->GetStartTime();
 
   // Loop over the elements in the TClonesArray
-  for(Int_t ielem = 0; ielem < frAdcPulseInt->GetEntries(); ielem++) {
-
-    Int_t    npmt         = ((THcSignalHit*) frAdcPulseInt->ConstructedAt(ielem))->GetPaddleNumber() - 1;
-    Double_t pulsePed     = ((THcSignalHit*) frAdcPed->ConstructedAt(ielem))->GetData();
-    Double_t pulseInt     = ((THcSignalHit*) frAdcPulseInt->ConstructedAt(ielem))->GetData();
-    Double_t pulseIntRaw  = ((THcSignalHit*) frAdcPulseIntRaw->ConstructedAt(ielem))->GetData();
-    Double_t pulseAmp     = ((THcSignalHit*) frAdcPulseAmp->ConstructedAt(ielem))->GetData();
-    Double_t pulseTime    = ((THcSignalHit*) frAdcPulseTime->ConstructedAt(ielem))->GetData();
-   Double_t adctdcdiffTime = StartTime-pulseTime;
-     Bool_t   errorFlag    = ((THcSignalHit*) fAdcErrorFlag->ConstructedAt(ielem))->GetData();
-    Bool_t   pulseTimeCut = adctdcdiffTime > fAdcTimeWindowMin[npmt] && adctdcdiffTime < fAdcTimeWindowMax[npmt];
-
-    
-    if (!errorFlag)
-      {
-	fGoodAdcMult.at(npmt) += 1;
-      }
+  for (Int_t ielem = 0; ielem < frAdcPulseInt->GetEntries(); ielem++) {
+
+    Int_t    npmt     = ((THcSignalHit*)frAdcPulseInt->ConstructedAt(ielem))->GetPaddleNumber() - 1;
+    Double_t pulsePed = ((THcSignalHit*)frAdcPed->ConstructedAt(ielem))->GetData();
+    Double_t pulseInt = ((THcSignalHit*)frAdcPulseInt->ConstructedAt(ielem))->GetData();
+    Double_t pulseIntRaw    = ((THcSignalHit*)frAdcPulseIntRaw->ConstructedAt(ielem))->GetData();
+    Double_t pulseAmp       = ((THcSignalHit*)frAdcPulseAmp->ConstructedAt(ielem))->GetData();
+    Double_t pulseTime      = ((THcSignalHit*)frAdcPulseTime->ConstructedAt(ielem))->GetData();
+    Double_t adctdcdiffTime = StartTime - pulseTime;
+    Bool_t   errorFlag      = ((THcSignalHit*)fAdcErrorFlag->ConstructedAt(ielem))->GetData();
+    Bool_t   pulseTimeCut =
+        adctdcdiffTime > fAdcTimeWindowMin[npmt] && adctdcdiffTime < fAdcTimeWindowMax[npmt];
+
+    if (!errorFlag) {
+      fGoodAdcMult.at(npmt) += 1;
+    }
 
     // By default, the last hit within the timing cut will be considered "good"
     if (!errorFlag && pulseTimeCut) {
       fGoodAdcPed.at(npmt)         = pulsePed;
-      fGoodAdcHitUsed.at(npmt)         = ielem+1;
+      fGoodAdcHitUsed.at(npmt)     = ielem + 1;
       fGoodAdcPulseInt.at(npmt)    = pulseInt;
       fGoodAdcPulseIntRaw.at(npmt) = pulseIntRaw;
       fGoodAdcPulseAmp.at(npmt)    = pulseAmp;
       fGoodAdcPulseTime.at(npmt)   = pulseTime;
-      fGoodAdcTdcDiffTime.at(npmt)   = adctdcdiffTime;
+      fGoodAdcTdcDiffTime.at(npmt) = adctdcdiffTime;
 
-      fNpe.at(npmt) = fGain[npmt]*fGoodAdcPulseInt.at(npmt);
+      fNpe.at(npmt) = fGain[npmt] * fGoodAdcPulseInt.at(npmt);
       fNpeSum += fNpe.at(npmt);
 
       fTotNumGoodAdcHits++;
@@ -479,83 +503,88 @@ Int_t THcCherenkov::CoarseProcess( TClonesArray&  )
 }
 
 //_____________________________________________________________________________
-Int_t THcCherenkov::FineProcess( TClonesArray& tracks )
-{
+Int_t THcCherenkov::FineProcess(TClonesArray& tracks) {
 
   Int_t nTracks = tracks.GetLast() + 1;
 
   for (Int_t itrack = 0; itrack < nTracks; itrack++) {
 
-    THaTrack* track = dynamic_cast<THaTrack*> (tracks[itrack]);
-    if (track->GetIndex() != 0) continue;  // Select the best track
+    THaTrack* track = dynamic_cast<THaTrack*>(tracks[itrack]);
+    if (track->GetIndex() != 0)
+      continue; // Select the best track
 
     Double_t trackChi2    = track->GetChi2();
     Int_t    trackNDoF    = track->GetNDoF();
-    Double_t trackRedChi2 = trackChi2/trackNDoF;
+    Double_t trackRedChi2 = trackChi2 / trackNDoF;
     Double_t trackBeta    = track->GetBeta();
     Double_t trackEnergy  = track->GetEnergy();
     Double_t trackMom     = track->GetP();
     Double_t trackDp      = track->GetDp();
-    Double_t trackENorm   = trackEnergy/trackMom;
+    Double_t trackENorm   = trackEnergy / trackMom;
     Double_t trackXfp     = track->GetX();
     Double_t trackYfp     = track->GetY();
     Double_t trackTheta   = track->GetTheta();
     Double_t trackPhi     = track->GetPhi();
 
     Bool_t trackRedChi2Cut = trackRedChi2 > fRedChi2Min && trackRedChi2 < fRedChi2Max;
-    Bool_t trackBetaCut    = trackBeta    > fBetaMin    && trackBeta    < fBetaMax;
-    Bool_t trackENormCut   = trackENorm   > fENormMin   && trackENorm   < fENormMax;
-    Bool_t trackDpCut      = trackDp      > fDpMin      && trackDp      < fDpMax;
-        fXAtCer = trackXfp + trackTheta * fMirrorZPos;
-        fYAtCer = trackYfp + trackPhi   * fMirrorZPos;
+    Bool_t trackBetaCut    = trackBeta > fBetaMin && trackBeta < fBetaMax;
+    Bool_t trackENormCut   = trackENorm > fENormMin && trackENorm < fENormMax;
+    Bool_t trackDpCut      = trackDp > fDpMin && trackDp < fDpMax;
+    fXAtCer                = trackXfp + trackTheta * fMirrorZPos;
+    fYAtCer                = trackYfp + trackPhi * fMirrorZPos;
 
     if (trackRedChi2Cut && trackBetaCut && trackENormCut && trackDpCut) {
 
-        // Project the track to the Cherenkov mirror planes
-
-        // cout << "Cherenkov Detector: " << GetName() << " has fNRegions = " << fNRegions << endl;
-        // cout << "nTracks = " << nTracks << "\t" << "trackChi2 = " << trackChi2
-        // 	   << "\t" << "trackNDof = " << trackNDoF << "\t" << "trackRedChi2 = " << trackRedChi2 << endl;
-        // cout << "trackBeta = " << trackBeta << "\t" << "trackEnergy = " << trackEnergy << "\t"
-        // 	   << "trackMom = " << trackMom << "\t" << "trackENorm = " << trackENorm << endl;
-        // cout << "trackXfp = " << trackXfp << "\t" << "trackYfp = " << trackYfp << "\t"
-        // 	   << "trackTheta = " << trackTheta << "\t" << "trackPhi = " << trackPhi << endl;
-        // cout << "fMirrorZPos = " << fMirrorZPos << "\t" << "fXAtCer = " << fXAtCer << "\t" << "fYAtCer = " << fYAtCer << endl;
-        // cout << "=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:" << endl;
-
-        for (Int_t iregion = 0; iregion < fNRegions; iregion++) {
-
-            if ((TMath::Abs(fRegionValue[GetIndex(iregion, 0)] - fXAtCer)   < fRegionValue[GetIndex(iregion, 4)]) &&
-                (TMath::Abs(fRegionValue[GetIndex(iregion, 1)] - fYAtCer)   < fRegionValue[GetIndex(iregion, 5)]) &&
-                (TMath::Abs(fRegionValue[GetIndex(iregion, 2)] - trackTheta) < fRegionValue[GetIndex(iregion, 6)]) &&
-                (TMath::Abs(fRegionValue[GetIndex(iregion, 3)] - trackPhi)   < fRegionValue[GetIndex(iregion, 7)])) {
-
-                fTotNumTracksMatched++;
-                fNumTracksMatched.at(iregion) = iregion + 1;
-
-                if (fNpeSum > fNpeThresh) {
-                    fTotNumTracksFired++;
-                    fNumTracksFired.at(iregion) = iregion + 1;
-                }  // NPE threshold cut
-            }  // Regional cuts
-        }  // Loop over regions
-    }  // Tracking cuts
-  }  // Track loop
+      // Project the track to the Cherenkov mirror planes
+
+      // cout << "Cherenkov Detector: " << GetName() << " has fNRegions = " << fNRegions << endl;
+      // cout << "nTracks = " << nTracks << "\t" << "trackChi2 = " << trackChi2
+      // 	   << "\t" << "trackNDof = " << trackNDoF << "\t" << "trackRedChi2 = " <<
+      // trackRedChi2 << endl; cout << "trackBeta = " << trackBeta << "\t" << "trackEnergy = " <<
+      // trackEnergy << "\t"
+      // 	   << "trackMom = " << trackMom << "\t" << "trackENorm = " << trackENorm << endl;
+      // cout << "trackXfp = " << trackXfp << "\t" << "trackYfp = " << trackYfp << "\t"
+      // 	   << "trackTheta = " << trackTheta << "\t" << "trackPhi = " << trackPhi << endl;
+      // cout << "fMirrorZPos = " << fMirrorZPos << "\t" << "fXAtCer = " << fXAtCer << "\t" <<
+      // "fYAtCer = " << fYAtCer << endl; cout <<
+      // "=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:" << endl;
+
+      for (Int_t iregion = 0; iregion < fNRegions; iregion++) {
+
+        if ((TMath::Abs(fRegionValue[GetIndex(iregion, 0)] - fXAtCer) <
+             fRegionValue[GetIndex(iregion, 4)]) &&
+            (TMath::Abs(fRegionValue[GetIndex(iregion, 1)] - fYAtCer) <
+             fRegionValue[GetIndex(iregion, 5)]) &&
+            (TMath::Abs(fRegionValue[GetIndex(iregion, 2)] - trackTheta) <
+             fRegionValue[GetIndex(iregion, 6)]) &&
+            (TMath::Abs(fRegionValue[GetIndex(iregion, 3)] - trackPhi) <
+             fRegionValue[GetIndex(iregion, 7)])) {
+
+          fTotNumTracksMatched++;
+          fNumTracksMatched.at(iregion) = iregion + 1;
+
+          if (fNpeSum > fNpeThresh) {
+            fTotNumTracksFired++;
+            fNumTracksFired.at(iregion) = iregion + 1;
+          } // NPE threshold cut
+        }   // Regional cuts
+      }     // Loop over regions
+    }       // Tracking cuts
+  }         // Track loop
 
   return 0;
 }
 
 //_____________________________________________________________________________
-void THcCherenkov::InitializePedestals()
-{
+void THcCherenkov::InitializePedestals() {
   fNPedestalEvents = 0;
-  fMinPeds         = 500; 		// In engine, this is set in parameter file
-  fPedSum          = new Int_t [fNelem];
-  fPedSum2         = new Int_t [fNelem];
-  fPedCount        = new Int_t [fNelem];
-  fPed             = new Double_t [fNelem];
-  fThresh          = new Double_t [fNelem];
-  for(Int_t i = 0; i < fNelem; i++) {
+  fMinPeds         = 500; // In engine, this is set in parameter file
+  fPedSum          = new Int_t[fNelem];
+  fPedSum2         = new Int_t[fNelem];
+  fPedCount        = new Int_t[fNelem];
+  fPed             = new Double_t[fNelem];
+  fThresh          = new Double_t[fNelem];
+  for (Int_t i = 0; i < fNelem; i++) {
     fPedSum[i]   = 0;
     fPedSum2[i]  = 0;
     fPedCount[i] = 0;
@@ -563,25 +592,24 @@ void THcCherenkov::InitializePedestals()
 }
 
 //_____________________________________________________________________________
-void THcCherenkov::AccumulatePedestals(TClonesArray* rawhits)
-{
+void THcCherenkov::AccumulatePedestals(TClonesArray* rawhits) {
   // Extract data from the hit list, accumulating into arrays for
   // calculating pedestals
 
-  Int_t nrawhits = rawhits->GetLast()+1;
+  Int_t nrawhits = rawhits->GetLast() + 1;
 
   Int_t ihit = 0;
-  while(ihit < nrawhits) {
-    THcCherenkovHit* hit = (THcCherenkovHit *) rawhits->At(ihit);
+  while (ihit < nrawhits) {
+    THcCherenkovHit* hit = (THcCherenkovHit*)rawhits->At(ihit);
 
     Int_t element = hit->fCounter - 1;
-    Int_t nadc = hit->GetRawAdcHitPos().GetPulseIntRaw();
-    if(nadc <= fPedLimit[element]) {
-      fPedSum[element]  += nadc;
-      fPedSum2[element] += nadc*nadc;
+    Int_t nadc    = hit->GetRawAdcHitPos().GetPulseIntRaw();
+    if (nadc <= fPedLimit[element]) {
+      fPedSum[element] += nadc;
+      fPedSum2[element] += nadc * nadc;
       fPedCount[element]++;
-      if(fPedCount[element] == fMinPeds/5) {
-	fPedLimit[element] = 100 + fPedSum[element]/fPedCount[element];
+      if (fPedCount[element] == fMinPeds / 5) {
+        fPedLimit[element] = 100 + fPedSum[element] / fPedCount[element];
       }
     }
     ihit++;
@@ -593,62 +621,51 @@ void THcCherenkov::AccumulatePedestals(TClonesArray* rawhits)
 }
 
 //_____________________________________________________________________________
-void THcCherenkov::CalculatePedestals()
-{
+void THcCherenkov::CalculatePedestals() {
   // Use the accumulated pedestal data to calculate pedestals
   // Later add check to see if pedestals have drifted ("Danger Will Robinson!")
   //  cout << "Plane: " << fPlaneNum << endl;
-  for(Int_t i=0; i<fNelem;i++) {
+  for (Int_t i = 0; i < fNelem; i++) {
 
     // PMT tubes
-    fPed[i] = ((Double_t) fPedSum[i]) / TMath::Max(1, fPedCount[i]);
+    fPed[i]    = ((Double_t)fPedSum[i]) / TMath::Max(1, fPedCount[i]);
     fThresh[i] = fPed[i] + 15;
 
     // Just a copy for now, but allow the possibility that fXXXPedMean is set
     // in a parameter file and only overwritten if there is a sufficient number of
     // pedestal events.  (So that pedestals are sensible even if the pedestal events were
     // not acquired.)
-    if(fMinPeds > 0) {
-      if(fPedCount[i] > fMinPeds) {
-	fPedMean[i] = fPed[i];
+    if (fMinPeds > 0) {
+      if (fPedCount[i] > fMinPeds) {
+        fPedMean[i] = fPed[i];
       }
     }
   }
   //  cout << " " << endl;
-
 }
 
 //_____________________________________________________________________________
-Int_t THcCherenkov::GetIndex(Int_t nRegion, Int_t nValue)
-{
-  return fNRegions * nValue + nRegion;
-}
-
+Int_t THcCherenkov::GetIndex(Int_t nRegion, Int_t nValue) { return fNRegions * nValue + nRegion; }
 
 //_____________________________________________________________________________
-void THcCherenkov::Print(const Option_t* opt) const
-{
+void THcCherenkov::Print(const Option_t* opt) const {
   THaNonTrackingDetector::Print(opt);
   // Print out the pedestals
   cout << endl;
   cout << "Cherenkov Pedestals" << endl;
   // Ahmed
   cout << "No.   ADC" << endl;
-  for(Int_t i=0; i<fNelem; i++)
+  for (Int_t i = 0; i < fNelem; i++)
     cout << " " << i << "    " << fPed[i] << endl;
   cout << endl;
 }
 
 //_____________________________________________________________________________
-Double_t THcCherenkov::GetCerNPE()
-{
-  return fNpeSum;
-}
+Double_t THcCherenkov::GetCerNPE() { return fNpeSum; }
 //_____________________________________________________________________________
-Int_t THcCherenkov::End(THaRunBase* run)
-{
+Int_t THcCherenkov::End(THaRunBase* run) {
   MissReport(Form("%s.%s", GetApparatus()->GetName(), GetName()));
   return 0;
 }
 ClassImp(THcCherenkov)
-////////////////////////////////////////////////////////////////////////////////
+    ////////////////////////////////////////////////////////////////////////////////
diff --git a/src/THcCherenkov.h b/src/THcCherenkov.h
index 53ff2d6921956f74fdfebe3157ba03a89f418766..12606074011646c0cba7048a243c7e4b249084c0 100644
--- a/src/THcCherenkov.h
+++ b/src/THcCherenkov.h
@@ -13,10 +13,14 @@
 #include "THcCherenkovHit.h"
 
 #include "hcana/Logger.h"
+#include "hcana/HallC_Data.h"
 
 class THcHodoscope;
 
 class THcCherenkov : public THaNonTrackingDetector, public THcHitList {
+public: 
+
+  std::vector<hallc::data::PulseWaveForm> _waveforms; 
 
   using vec = std::vector<Double_t>;
 
@@ -31,6 +35,7 @@ class THcCherenkov : public THaNonTrackingDetector, public THcHitList {
   virtual Int_t   Decode(const THaEvData&);
   virtual Int_t   ReadDatabase(const TDatime& date);
   virtual Int_t   DefineVariables(EMode mode = kDefine);
+  virtual Int_t   ManualInitTree( TTree* t );
   virtual Int_t   CoarseProcess(TClonesArray& tracks);
   virtual Int_t   FineProcess(TClonesArray& tracks);
   virtual Int_t   ApplyCorrections( void );
diff --git a/src/THcHodoscope.cxx b/src/THcHodoscope.cxx
index a4e4ce53fc3429f9041bddf5d451d3005085efa9..f1856c64372bc2df1ebf67cac57d991dfd94c2ee 100644
--- a/src/THcHodoscope.cxx
+++ b/src/THcHodoscope.cxx
@@ -574,8 +574,8 @@ Int_t THcHodoscope::ManualInitTree( TTree* t ){
   std::string app_name    = GetApparatus()->GetName();
   std::string det_name    = GetName();
   std::string branch_name = (app_name + "_" + det_name + "_data");
-  _det_logger->info("THcHodoscope::ManualInitTree : Adding branch, {}, to output tree", branch_name);
   if (t) {
+    _det_logger->info("THcHodoscope::ManualInitTree : Adding branch, {}, to output tree", branch_name);
     t->Branch(branch_name.c_str(), &_basic_data, 32000, 99);
   }
   return 0;
diff --git a/src/THcHodoscope.h b/src/THcHodoscope.h
index c7c0a1e3c182ff432854368c59e2ad6de1247447..8a0a1c55ef6d021f5a533f04181db84d74c2429c 100644
--- a/src/THcHodoscope.h
+++ b/src/THcHodoscope.h
@@ -32,12 +32,14 @@
 #include <fstream>
 
 #include "hcana/Logger.h"
+#include "hcana/HallC_Data.h"
 
 class THaScCalib;
 
 namespace hallc {
   namespace data {
 
+
     struct Hodoscope {
       double fBeta           = 0.0;
       double fBetaNoTrk      = 0.0;
diff --git a/src/include/HallC_LinkDef.h b/src/include/HallC_LinkDef.h
index aae86159850b50087293a930fe2d4fc6326aea25..2ffec3df0ab1969ae77aba7cc9a17fccc74055bd 100644
--- a/src/include/HallC_LinkDef.h
+++ b/src/include/HallC_LinkDef.h
@@ -17,6 +17,10 @@
 #pragma link C++ class hallc::data::Hodoscope+;
 #pragma link C++ class hallc::data::DriftChamber+;
 
+#pragma link C++ class hallc::data::PulseWaveForm+;
+#pragma link C++ class std::vector<hallc::data::PulseWaveForm>+;
+
+
 
 #pragma link C++ global gHcParms;
 #pragma link C++ global gHcDetectorMap;
diff --git a/src/include/hcana/HallC_Data.h b/src/include/hcana/HallC_Data.h
new file mode 100644
index 0000000000000000000000000000000000000000..dab221a32043ef56fac65bcdc6552420c84ba724
--- /dev/null
+++ b/src/include/hcana/HallC_Data.h
@@ -0,0 +1,17 @@
+#ifndef hallc_HallC_Data_HH
+#define hallc_HallC_Data_HH
+
+#include <array>
+
+namespace hallc {
+  namespace data {
+
+    struct PulseWaveForm {
+      std::array<float,200> _buffer;
+      ClassDef(PulseWaveForm,1)
+    };
+
+  }
+}
+
+#endif