diff --git a/src/THcRawAdcHit.cxx b/src/THcRawAdcHit.cxx
index 2f82b0c72a60b2022b52883aae38ff507d8476ec..7d1803ed8bfe20ca8c6ed2fd0b7b2e146f99a512 100644
--- a/src/THcRawAdcHit.cxx
+++ b/src/THcRawAdcHit.cxx
@@ -88,12 +88,12 @@ Returns 0 if tried to access first pulse but no pulses are set.
 */
 
 /**
-\fn Double_t THcRawAdcHit::GetData(UInt_t iPedLow, UInt_t iPedHigh, UInt_t iIntLow, UInt_t iIntHigh) const
-\brief Gets pedestal subtracted integral of samples. In channels.
-\param[in] iPedLow Sequential number of first sample to be averaged for pedestal value.
-\param[in] iPedHigh Sequential number of last sample to be averaged for pedestal value.
-\param[in] iIntLow Sequential number of first sample to be integrated.
-\param[in] iIntHigh Sequential number of last sample to be integrated.
+\fn Double_t THcRawAdcHit::GetData(UInt_t iPedLow, UInt_t iPedHigh, UInt_t iIntLow, UInt_t iIntHigh)
+const \brief Gets pedestal subtracted integral of samples. In channels. \param[in] iPedLow
+Sequential number of first sample to be averaged for pedestal value. \param[in] iPedHigh Sequential
+number of last sample to be averaged for pedestal value. \param[in] iIntLow Sequential number of
+first sample to be integrated. \param[in] iIntHigh Sequential number of last sample to be
+integrated.
 */
 
 /**
@@ -183,42 +183,39 @@ Returns 0 if no signal pedestal is set.
 
 // TODO: Disallow using both SetData and SetDataTimePedestalPeak.
 
-
 #include "THcRawAdcHit.h"
-#include <stdexcept>
 #include "TString.h"
-    const Double_t THcRawAdcHit::fNAdcChan      = 4096.0; // Number of FADC channels in units of ADC channels
-    const Double_t THcRawAdcHit::fAdcRange      = 1.0;    // Dynamic range of FADCs in units of V, // TO-DO: Get fAdcRange from pre-start event
-    const Double_t THcRawAdcHit::fAdcImpedence  = 50.0;   // FADC input impedence in units of Ohms
-    const Double_t THcRawAdcHit::fAdcTimeSample = 4000.0;    // Length of FADC time sample in units of ps
-    const Double_t THcRawAdcHit::fAdcTimeRes    = 0.0625; // FADC time resolution in units of ns
-
-THcRawAdcHit::THcRawAdcHit() :
-  TObject(),
-  fNPedestalSamples(4), fNPeakSamples(9),
-  fPeakPedestalRatio(1.0*fNPeakSamples/fNPedestalSamples),
-  fSubsampleToTimeFactor(0.0625),
-  fPed(0), fPulseInt(), fPulseAmp(), fPulseTime(), fSample(),
-  fRefTime(0), fHasMulti(kFALSE), fHasRefTime(kFALSE), fNPulses(0), fNSamples(0)
-{}
+#include <stdexcept>
+const Double_t THcRawAdcHit::fNAdcChan = 4096.0; // Number of FADC channels in units of ADC channels
+const Double_t THcRawAdcHit::fAdcRange =
+    1.0; // Dynamic range of FADCs in units of V, // TO-DO: Get fAdcRange from pre-start event
+const Double_t THcRawAdcHit::fAdcImpedence  = 50.0;   // FADC input impedence in units of Ohms
+const Double_t THcRawAdcHit::fAdcTimeSample = 4000.0; // Length of FADC time sample in units of ps
+const Double_t THcRawAdcHit::fAdcTimeRes    = 0.0625; // FADC time resolution in units of ns
+
+THcRawAdcHit::THcRawAdcHit()
+    : podd2::HitLogging<TObject>(), fNPedestalSamples(4), fNPeakSamples(9),
+      fPeakPedestalRatio(1.0 * fNPeakSamples / fNPedestalSamples), fSubsampleToTimeFactor(0.0625),
+      fPed(0), fPulseInt(), fPulseAmp(), fPulseTime(), fSample(), fRefTime(0), fHasMulti(kFALSE),
+      fHasRefTime(kFALSE), fNPulses(0), fNSamples(0) {}
 
 THcRawAdcHit& THcRawAdcHit::operator=(const THcRawAdcHit& right) {
   TObject::operator=(right);
 
   if (this != &right) {
     fPed = right.fPed;
-    for (UInt_t i=0; i<fMaxNPulses; ++i) {
+    for (UInt_t i = 0; i < fMaxNPulses; ++i) {
       fPulseInt[i]  = right.fPulseInt[i];
       fPulseAmp[i]  = right.fPulseAmp[i];
       fPulseTime[i] = right.fPulseTime[i];
     }
-    for (UInt_t i=0; i<fMaxNSamples; ++i) {
+    for (UInt_t i = 0; i < fMaxNSamples; ++i) {
       fSample[i] = right.fSample[i];
     }
-    fHasMulti = right.fHasMulti;
-    fNPulses  = right.fNPulses;
-    fNSamples = right.fNSamples;
-    fRefTime = right.fRefTime;
+    fHasMulti   = right.fHasMulti;
+    fNPulses    = right.fNPulses;
+    fNSamples   = right.fNSamples;
+    fRefTime    = right.fRefTime;
     fHasRefTime = right.fHasRefTime;
   }
 
@@ -231,147 +228,119 @@ void THcRawAdcHit::Clear(Option_t* opt) {
   TObject::Clear(opt);
 
   fPed = 0;
-  for (UInt_t i=0; i<fNPulses; ++i) {
-    fPulseInt[i] = 0;
-    fPulseAmp[i] = 0;
+  for (UInt_t i = 0; i < fNPulses; ++i) {
+    fPulseInt[i]  = 0;
+    fPulseAmp[i]  = 0;
     fPulseTime[i] = 0;
   }
-  for (UInt_t i=0; i<fNSamples; ++i) {
-    fSample[i] = 0 ;
+  for (UInt_t i = 0; i < fNSamples; ++i) {
+    fSample[i] = 0;
   }
-  fHasMulti = kFALSE;
-  fNPulses = 0;
-  fNSamples = 0;
-  fRefTime = 0;
+  fHasMulti   = kFALSE;
+  fNPulses    = 0;
+  fNSamples   = 0;
+  fRefTime    = 0;
   fHasRefTime = kFALSE;
 }
 
 void THcRawAdcHit::SetData(Int_t data) {
   if (fNPulses >= fMaxNPulses) {
-    throw std::out_of_range(
-      "`THcRawAdcHit::SetData`: too many pulses!"
-    );
+    _hit_logger->error("THcRawAdcHit::SetData: too many pulses! Ignoring pulse {}",fNPulses);
+    //throw std::out_of_range("`THcRawAdcHit::SetData`: too many pulses!");
+    return;
   }
   fPulseInt[fNPulses] = data;
   ++fNPulses;
 }
 
 void THcRawAdcHit::SetRefTime(Int_t refTime) {
-  fRefTime = refTime;
+  fRefTime    = refTime;
   fHasRefTime = kTRUE;
 }
 
 void THcRawAdcHit::SetSample(Int_t data) {
   if (fNSamples >= fMaxNSamples) {
-    throw std::out_of_range(
-      "`THcRawAdcHit::SetSample`: too many samples!"
-    );
+    throw std::out_of_range("`THcRawAdcHit::SetSample`: too many samples!");
   }
   fSample[fNSamples] = data;
   ++fNSamples;
 }
 
-void THcRawAdcHit::SetDataTimePedestalPeak(
-  Int_t data, Int_t time, Int_t pedestal, Int_t peak
-) {
+void THcRawAdcHit::SetDataTimePedestalPeak(Int_t data, Int_t time, Int_t pedestal, Int_t peak) {
   if (fNPulses >= fMaxNPulses) {
-    throw std::out_of_range(
-      "`THcRawAdcHit::SetData`: too many pulses!"
-    );
+    _hit_logger->error("THcRawAdcHit::SetDataTimePedestalPeak: too many pulses! Ignoring pulse {}",fNPulses);
+    //throw std::out_of_range("`THcRawAdcHit::SetData`: too many pulses!");
+    return;
   }
-  fPulseInt[fNPulses] = data;
+  fPulseInt[fNPulses]  = data;
   fPulseTime[fNPulses] = time;
-  fPed = pedestal;
-  fPulseAmp[fNPulses] = peak;
-  fHasMulti = kTRUE;
+  fPed                 = pedestal;
+  fPulseAmp[fNPulses]  = peak;
+  fHasMulti            = kTRUE;
   ++fNPulses;
 }
 
 Int_t THcRawAdcHit::GetRawData(UInt_t iPulse) const {
   if (iPulse >= fNPulses && iPulse != 0) {
     TString msg = TString::Format(
-      "`THcRawAdcHit::GetRawData`: requested pulse %d where only %d pulses available!",
-      iPulse, fNPulses
-    );
+        "`THcRawAdcHit::GetRawData`: requested pulse %d where only %d pulses available!", iPulse,
+        fNPulses);
     throw std::out_of_range(msg.Data());
-  }
-  else if (iPulse >= fNPulses && iPulse == 0) {
+  } else if (iPulse >= fNPulses && iPulse == 0) {
     return 0;
-  }
-  else {
+  } else {
     return fPulseInt[iPulse];
   }
 }
 
 Double_t THcRawAdcHit::GetAverage(UInt_t iSampleLow, UInt_t iSampleHigh) const {
   if (iSampleHigh >= fNSamples || iSampleLow >= fNSamples) {
-    TString msg = TString::Format(
-      "`THcRawAdcHit::GetAverage`: not this many samples available!"
-    );
+    TString msg = TString::Format("`THcRawAdcHit::GetAverage`: not this many samples available!");
     throw std::out_of_range(msg.Data());
-  }
-  else {
+  } else {
     Double_t average = 0.0;
-    for (UInt_t i=iSampleLow; i<=iSampleHigh; ++i) {
+    for (UInt_t i = iSampleLow; i <= iSampleHigh; ++i) {
       average += fSample[i];
     }
     return average / (iSampleHigh - iSampleLow + 1);
   }
 }
 
-
 Int_t THcRawAdcHit::GetIntegral(UInt_t iSampleLow, UInt_t iSampleHigh) const {
   if (iSampleHigh >= fNSamples || iSampleLow >= fNSamples) {
-    TString msg = TString::Format(
-      "`THcRawAdcHit::GetAverage`: not this many samples available!"
-    );
+    TString msg = TString::Format("`THcRawAdcHit::GetAverage`: not this many samples available!");
     throw std::out_of_range(msg.Data());
-  }
-  else {
+  } else {
     Int_t integral = 0;
-    for (UInt_t i=iSampleLow; i<=iSampleHigh; ++i) {
+    for (UInt_t i = iSampleLow; i <= iSampleHigh; ++i) {
       integral += fSample[i];
     }
     return integral;
   }
 }
 
-Double_t THcRawAdcHit::GetData(
-  UInt_t iPedLow, UInt_t iPedHigh, UInt_t iIntLow, UInt_t iIntHigh
-) const {
-  return
-    GetIntegral(iIntLow, iIntHigh)
-    - GetAverage(iPedHigh, iPedLow) * (iIntHigh - iIntLow + 1);
+Double_t THcRawAdcHit::GetData(UInt_t iPedLow, UInt_t iPedHigh, UInt_t iIntLow,
+                               UInt_t iIntHigh) const {
+  return GetIntegral(iIntLow, iIntHigh) - GetAverage(iPedHigh, iPedLow) * (iIntHigh - iIntLow + 1);
 }
 
-UInt_t THcRawAdcHit::GetNPulses() const {
-  return fNPulses;
-}
+UInt_t THcRawAdcHit::GetNPulses() const { return fNPulses; }
 
-UInt_t THcRawAdcHit::GetNSamples() const {
-  return fNSamples;
-}
+UInt_t THcRawAdcHit::GetNSamples() const { return fNSamples; }
 
-Bool_t THcRawAdcHit::HasMulti() const {
-  return fHasMulti;
-}
+Bool_t THcRawAdcHit::HasMulti() const { return fHasMulti; }
 
-Int_t THcRawAdcHit::GetPedRaw() const {
-  return fPed;
-}
+Int_t THcRawAdcHit::GetPedRaw() const { return fPed; }
 
 Int_t THcRawAdcHit::GetPulseIntRaw(UInt_t iPulse) const {
   if (iPulse < fNPulses) {
     return fPulseInt[iPulse];
-  }
-  else if (iPulse == 0) {
+  } else if (iPulse == 0) {
     return 0;
-  }
-  else {
+  } else {
     TString msg = TString::Format(
-      "`THcRawAdcHit::GetPulseIntRaw`: Trying to get pulse %d where only %d pulses available!",
-      iPulse, fNPulses
-    );
+        "`THcRawAdcHit::GetPulseIntRaw`: Trying to get pulse %d where only %d pulses available!",
+        iPulse, fNPulses);
     throw std::out_of_range(msg.Data());
   }
 }
@@ -379,15 +348,12 @@ Int_t THcRawAdcHit::GetPulseIntRaw(UInt_t iPulse) const {
 Int_t THcRawAdcHit::GetPulseAmpRaw(UInt_t iPulse) const {
   if (iPulse < fNPulses) {
     return fPulseAmp[iPulse];
-  }
-  else if (iPulse == 0) {
+  } else if (iPulse == 0) {
     return 0;
-  }
-  else {
+  } else {
     TString msg = TString::Format(
-      "`THcRawAdcHit::GetPulseAmpRaw`: Trying to get pulse %d where only %d pulses available!",
-      iPulse, fNPulses
-    );
+        "`THcRawAdcHit::GetPulseAmpRaw`: Trying to get pulse %d where only %d pulses available!",
+        iPulse, fNPulses);
     throw std::out_of_range(msg.Data());
   }
 }
@@ -395,15 +361,12 @@ Int_t THcRawAdcHit::GetPulseAmpRaw(UInt_t iPulse) const {
 Int_t THcRawAdcHit::GetPulseTimeRaw(UInt_t iPulse) const {
   if (iPulse < fNPulses) {
     return fPulseTime[iPulse];
-  }
-  else if (iPulse == 0) {
+  } else if (iPulse == 0) {
     return 0;
-  }
-  else {
+  } else {
     TString msg = TString::Format(
-      "`THcRawAdcHit::GetPulseTimeRaw`: Trying to get pulse %d where only %d pulses available!",
-      iPulse, fNPulses
-    );
+        "`THcRawAdcHit::GetPulseTimeRaw`: Trying to get pulse %d where only %d pulses available!",
+        iPulse, fNPulses);
     throw std::out_of_range(msg.Data());
   }
 }
@@ -411,26 +374,28 @@ Int_t THcRawAdcHit::GetPulseTimeRaw(UInt_t iPulse) const {
 Int_t THcRawAdcHit::GetSampleRaw(UInt_t iSample) const {
   if (iSample < fNSamples) {
     return fSample[iSample];
-  }
-  else {
+  } else {
     TString msg = TString::Format(
-      "`THcRawAdcHit::GetSampleRaw`: Trying to get sample %d where only %d samples available!",
-      iSample, fNSamples
-    );
+        "`THcRawAdcHit::GetSampleRaw`: Trying to get sample %d where only %d samples available!",
+        iSample, fNSamples);
     throw std::out_of_range(msg.Data());
   }
 }
 
 Double_t THcRawAdcHit::GetPed() const {
-  return (static_cast<Double_t>(fPed)/static_cast<Double_t>(fNPedestalSamples))*GetAdcTomV();
+  return (static_cast<Double_t>(fPed) / static_cast<Double_t>(fNPedestalSamples)) * GetAdcTomV();
 }
 
 Double_t THcRawAdcHit::GetPulseInt(UInt_t iPulse) const {
-  return (static_cast<Double_t>(fPulseInt[iPulse]) - static_cast<Double_t>(fPed)*fPeakPedestalRatio)*GetAdcTopC();
+  return (static_cast<Double_t>(fPulseInt[iPulse]) -
+          static_cast<Double_t>(fPed) * fPeakPedestalRatio) *
+         GetAdcTopC();
 }
 
 Double_t THcRawAdcHit::GetPulseAmp(UInt_t iPulse) const {
-  return (static_cast<Double_t>(fPulseAmp[iPulse]) - static_cast<Double_t>(fPed)/static_cast<Double_t>(fNPedestalSamples))*GetAdcTomV();
+  return (static_cast<Double_t>(fPulseAmp[iPulse]) -
+          static_cast<Double_t>(fPed) / static_cast<Double_t>(fNPedestalSamples)) *
+         GetAdcTomV();
 }
 
 Double_t THcRawAdcHit::GetPulseTime(UInt_t iPulse) const {
@@ -438,13 +403,13 @@ Double_t THcRawAdcHit::GetPulseTime(UInt_t iPulse) const {
   if (fHasRefTime) {
     rawtime -= fRefTime;
   }
-  return (static_cast<Double_t>(rawtime)*GetAdcTons());
+  return (static_cast<Double_t>(rawtime) * GetAdcTons());
 }
 
 Int_t THcRawAdcHit::GetSampleIntRaw() const {
   Int_t integral = 0;
 
-  for (UInt_t iSample=0; iSample<fNSamples; ++iSample) {
+  for (UInt_t iSample = 0; iSample < fNSamples; ++iSample) {
     integral += fSample[iSample];
   }
 
@@ -452,55 +417,46 @@ Int_t THcRawAdcHit::GetSampleIntRaw() const {
 }
 
 Double_t THcRawAdcHit::GetSampleInt() const {
-  return static_cast<Double_t>(GetSampleIntRaw()) - GetPed()*static_cast<Double_t>(fNSamples);
+  return static_cast<Double_t>(GetSampleIntRaw()) - GetPed() * static_cast<Double_t>(fNSamples);
 }
 
 void THcRawAdcHit::SetF250Params(Int_t NSA, Int_t NSB, Int_t NPED) {
   if (NSA < 0 || NSB < 0 || NPED < 0) {
-    TString msg = TString::Format(
-      "`THcRawAdcHit::SetF250Params`: One of the params is negative!  NSA = %d  NSB = %d  NPED = %d",
-      NSA, NSB, NPED
-    );
+    TString msg = TString::Format("`THcRawAdcHit::SetF250Params`: One of the params is negative!  "
+                                  "NSA = %d  NSB = %d  NPED = %d",
+                                  NSA, NSB, NPED);
     throw std::invalid_argument(msg.Data());
   }
-  fNPedestalSamples = NPED;
-  fNPeakSamples = NSA + NSB;
-  fPeakPedestalRatio = 1.0*fNPeakSamples/fNPedestalSamples;
+  fNPedestalSamples  = NPED;
+  fNPeakSamples      = NSA + NSB;
+  fPeakPedestalRatio = 1.0 * fNPeakSamples / fNPedestalSamples;
 }
 
 // FADC conversion factors
 // Convert pedestal and amplitude to mV
 Double_t THcRawAdcHit::GetAdcTomV() const {
   // 1000 mV / 4096 ADC channels
-  return (fAdcRange*1000. / fNAdcChan);
+  return (fAdcRange * 1000. / fNAdcChan);
 }
 
 // Convert integral to pC
 Double_t THcRawAdcHit::GetAdcTopC() const {
-  // (1 V / 4096 adc channels) * (4000 ps time sample / 50 ohms input resistance) = 0.020 pc/channel 
+  // (1 V / 4096 adc channels) * (4000 ps time sample / 50 ohms input resistance) = 0.020 pc/channel
   return (fAdcRange / fNAdcChan) * (fAdcTimeSample / fAdcImpedence);
 }
 
 // Convert time sub samples to ns
-Double_t THcRawAdcHit::GetAdcTons() const {
-  return fAdcTimeRes;
-}
+Double_t THcRawAdcHit::GetAdcTons() const { return fAdcTimeRes; }
 
 Int_t THcRawAdcHit::GetRefTime() const {
   if (fHasRefTime) {
     return fRefTime;
-  }
-  else {
-    TString msg = TString::Format(
-      "`THcRawAdcHit::GetRefTime`: Reference time not available!"
-    );
+  } else {
+    TString msg = TString::Format("`THcRawAdcHit::GetRefTime`: Reference time not available!");
     throw std::runtime_error(msg.Data());
   }
 }
 
-
-Bool_t THcRawAdcHit::HasRefTime() const {
-  return fHasRefTime;
-}
+Bool_t THcRawAdcHit::HasRefTime() const { return fHasRefTime; }
 
 ClassImp(THcRawAdcHit)
diff --git a/src/THcRawAdcHit.h b/src/THcRawAdcHit.h
index 8d474e7de190846a9723f0f21cae721e58d05547..49c9c3bb078cf4ee8d803af6647f64a9e31bd9f1 100644
--- a/src/THcRawAdcHit.h
+++ b/src/THcRawAdcHit.h
@@ -3,8 +3,9 @@
 
 #include "TObject.h"
 
+#include "podd2/Logger.h"
 
-class THcRawAdcHit : public TObject {
+class THcRawAdcHit : public podd2::HitLogging<TObject> {
   public:
     THcRawAdcHit();
     THcRawAdcHit& operator=(const THcRawAdcHit& right);
diff --git a/src/include/HallC_LinkDef.h b/src/include/HallC_LinkDef.h
index 2ffec3df0ab1969ae77aba7cc9a17fccc74055bd..bf00f903d928894dd04a23f9f3d5e9f21a06adc0 100644
--- a/src/include/HallC_LinkDef.h
+++ b/src/include/HallC_LinkDef.h
@@ -11,6 +11,7 @@
 
 #pragma link C++ namespace hallc;
 #pragma link C++ namespace hcana;
+#pragma link C++ namespace podd2;
 
 #pragma link C++ namespace hallc::data;
 
@@ -21,6 +22,7 @@
 #pragma link C++ class std::vector<hallc::data::PulseWaveForm>+;
 
 
+#pragma link C++ class podd2::HitLogging<TObject>+;
 
 #pragma link C++ global gHcParms;
 #pragma link C++ global gHcDetectorMap;