diff --git a/SConscript.py b/SConscript.py index fdc3df87ed982e08e64fde383fc78a85857e624e..75e8fe887f5fdec019afaee8f47a86d06ae7a193 100644 --- a/SConscript.py +++ b/SConscript.py @@ -23,6 +23,7 @@ src/THcGlobals.h src/THcDCTrack.h src/THcFormula.h src/THcRaster.h src/THcRasteredBeam.h src/THcRasterRawHit.h src/THcScalerEvtHandler.h src/THcHodoEff.h src/THcTrigApp.h src/THcTrigDet.h src/THcTrigRawHit.h +src/THcRawAdcHit.h src/THcDummySpectrometer.h src/HallC_LinkDef.h """) diff --git a/src/HallC_LinkDef.h b/src/HallC_LinkDef.h index 0eedcdaf90a173f7c0fb7b3c07b58ab079a1a1ef..038d603f4d02adba6f77e30316f256ae75bd32cd 100644 --- a/src/HallC_LinkDef.h +++ b/src/HallC_LinkDef.h @@ -60,6 +60,7 @@ #pragma link C++ class THcTrigApp+; #pragma link C++ class THcTrigDet+; #pragma link C++ class THcTrigRawHit+; +#pragma link C++ class THcRawAdcHit+; #pragma link C++ class THcDummySpectrometer+; #endif diff --git a/src/SConscript.py b/src/SConscript.py index 91acb0403c82766d6f3b9c21308d59053adb0337..e78643521448f6b4a590f46c358e3a6de40805aa 100644 --- a/src/SConscript.py +++ b/src/SConscript.py @@ -28,6 +28,7 @@ THcFormula.cxx THcRaster.cxx THcRasteredBeam.cxx THcRasterRawHit.cxx THcScalerEvtHandler.cxx THcTrigApp.cxx THcTrigDet.cxx THcTrigRawHit.cxx +THcRawAdcHit.cxx THcDummySpectrometer.cxx THcHodoEff.cxx """) diff --git a/src/THcRawAdcHit.cxx b/src/THcRawAdcHit.cxx new file mode 100644 index 0000000000000000000000000000000000000000..b104b17f3eb630e5676043331d12c7b341e27932 --- /dev/null +++ b/src/THcRawAdcHit.cxx @@ -0,0 +1,203 @@ +/** +\class THcTrigRawHit +\ingroup DetSupport + +\brief Class representing a single raw ADC hit. + +It supports rich data from flash 250 ADC modules. +*/ + +#include "THcRawAdcHit.h" + +#include <stdexcept> + +#include "TString.h" + + +THcRawAdcHit::THcRawAdcHit() : + TObject(), + fAdc(), fAdcTime(), fAdcPedestal(), fAdcPeak(), fAdcSample(), + fHasMulti(kFALSE), fNPulses(0), fNSamples(0) +{} + + +THcRawAdcHit& THcRawAdcHit::operator=(const THcRawAdcHit& right) { + TObject::operator=(right); + + if (this != &right) { + for (UInt_t i=0; i<fMaxNPulses; ++i) { + fAdc[i] = right.fAdc[i]; + fAdcTime[i] = right.fAdcTime[i]; + fAdcPedestal[i] = right.fAdcPedestal[i]; + fAdcPeak[i] = right.fAdcPeak[i]; + } + for (UInt_t i=0; i<fMaxNSamples; ++i) { + fAdcSample[i] = right.fAdcSample[i]; + } + fHasMulti = right.fHasMulti; + fNPulses = right.fNPulses; + fNSamples = right.fNSamples; + } + + return *this; +} + + +THcRawAdcHit::~THcRawAdcHit() {} + + +void THcRawAdcHit::Clear(Option_t* opt) { + TObject::Clear(opt); + + //for (UInt_t i=0; i<fMaxNPulses; ++i) { + // fAdc[i] = 0; + // fAdcTime[i] = 0; + // fAdcPedestal[i] = 0; + // fAdcPeak[i] = 0; + //} + //for (UInt_t i=0; i<fMaxNSamples; ++i) { + // fAdcSample[i] = 0 ; + //} + fHasMulti = kFALSE; + fNPulses = 0; + fNSamples = 0; +} + + +void THcRawAdcHit::SetData(Int_t data) { + if (fNPulses >= fMaxNPulses) { + throw std::out_of_range( + "`THcRawAdcHit::SetData`: too many pulses!" + ); + } + fAdc[fNPulses] = data; + ++fNPulses; +} + + +void THcRawAdcHit::SetSample(Int_t data) { + if (fNSamples >= fMaxNSamples) { + throw std::out_of_range( + "`THcRawAdcHit::SetSample`: too many samples!" + ); + } + fAdcSample[fNSamples] = data; + ++fNSamples; +} + + +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!" + ); + } + fAdc[fNPulses] = data; + fAdcTime[fNPulses] = data; + fAdcPedestal[fNPulses] = data; + fAdcPeak[fNPulses] = data; + fHasMulti = kTRUE; + ++fNPulses; +} + + +Int_t THcRawAdcHit::GetRawData(UInt_t iPulse) { + if (iPulse >= fNPulses && iPulse != 0) { + TString msg = TString::Format( + "`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) { + return 0; + } + else { + return fAdc[iPulse]; + } +} + + +Int_t THcRawAdcHit::GetAdcTime(UInt_t iPulse) { + if (iPulse >= fNPulses && iPulse != 0) { + TString msg = TString::Format( + "`THcRawAdcHit::GetAdcTime`: requested pulse %d where only %d pulses available!", + iPulse, fNPulses + ); + throw std::out_of_range(msg.Data()); + } + else if (fHasMulti) { + return fAdcTime[iPulse]; + } + else { + return 0; + } +} + + +Int_t THcRawAdcHit::GetAdcPedestal(UInt_t iPulse) { + if (iPulse >= fNPulses && iPulse != 0) { + TString msg = TString::Format( + "`THcRawAdcHit::GetAdcPedestal`: requested pulse %d where only %d pulses available!", + iPulse, fNPulses + ); + throw std::out_of_range(msg.Data()); + } + else if (fHasMulti) { + return fAdcPedestal[iPulse]; + } + else { + return 0; + } +} + + +Int_t THcRawAdcHit::GetAdcPeak(UInt_t iPulse) { + if (iPulse >= fNPulses && iPulse != 0) { + TString msg = TString::Format( + "`THcRawAdcHit::GetAdcPeak`: requested pulse %d where only %d pulses available!", + iPulse, fNPulses + ); + throw std::out_of_range(msg.Data()); + } + else if (fHasMulti) { + return fAdcPeak[iPulse]; + } + else { + return 0; + } +} + + +Int_t THcRawAdcHit::GetSample(UInt_t iSample) { + if (iSample >= fNSamples && iSample != 0) { + TString msg = TString::Format( + "`THcRawAdcHit::GetSample`: requested sample %d where only %d sample available!", + iSample, fNSamples + ); + throw std::out_of_range(msg.Data()); + } + else { + return fAdcSample[iSample]; + } +} + + +UInt_t THcRawAdcHit::GetNPulses() { + return fNPulses; +} + + +UInt_t THcRawAdcHit::GetNSamples() { + return fNSamples; +} + + +Bool_t THcRawAdcHit::HasMulti() { + return fHasMulti; +} + + +ClassImp(THcRawAdcHit) diff --git a/src/THcRawAdcHit.h b/src/THcRawAdcHit.h new file mode 100644 index 0000000000000000000000000000000000000000..09d77bf1f1ffc872414aac18581191219898bf82 --- /dev/null +++ b/src/THcRawAdcHit.h @@ -0,0 +1,51 @@ +#ifndef ROOT_THcRawAdcHit +#define ROOT_THcRawAdcHit + +#include "TObject.h" + + +class THcRawAdcHit : public TObject { + public: + THcRawAdcHit(); + THcRawAdcHit& operator=(const THcRawAdcHit& right); + virtual ~THcRawAdcHit(); + + virtual void Clear(Option_t* opt=""); + + void SetData(Int_t data); + void SetSample(Int_t data); + void SetDataTimePedestalPeak( + Int_t data, Int_t time, Int_t pedestal, Int_t peak + ); + + Int_t GetRawData(UInt_t iPulse=0); + Int_t GetAdcTime(UInt_t iPulse=0); + Int_t GetAdcPedestal(UInt_t iPulse=0); + Int_t GetAdcPeak(UInt_t iPulse=0); + Int_t GetSample(UInt_t iSample); + + UInt_t GetNPulses(); + UInt_t GetNSamples(); + + Bool_t HasMulti(); + + protected: + static const UInt_t fMaxNPulses = 4; + static const UInt_t fMaxNSamples = 160; + + Int_t fAdc[fMaxNPulses]; + Int_t fAdcTime[fMaxNPulses]; + Int_t fAdcPedestal[fMaxNPulses]; + Int_t fAdcPeak[fMaxNPulses]; + Int_t fAdcSample[fMaxNSamples]; + + Bool_t fHasMulti; + UInt_t fNPulses; + UInt_t fNSamples; + + private: + ClassDef(THcRawAdcHit, 0) +}; + + +#endif // ROOT_THcRawAdcHit diff --git a/src/THcRawShowerHit.cxx b/src/THcRawShowerHit.cxx index 653c1df6d6e1632cb611c7b179cce78db114c085..6fd0d279459d8e07537166b72f30187c3e3691dc 100644 --- a/src/THcRawShowerHit.cxx +++ b/src/THcRawShowerHit.cxx @@ -1,167 +1,152 @@ -/** \class THcRawShowerHit - \ingroup DetSupport +/** +\class THcRawShowerHit +\ingroup DetSupport - Class representing a single raw hit for a hodoscope paddle - - Contains plane, counter and pos/neg adc and tdc values - - Enhanced to work with FADC250 data samples. If fNPosSamples/fNNegSamples - is greater than 1, assume that the data held in the hit is the sampled - waveform. Signals 0,1 will return the integrated pulse with dynamic - pedestal subtraction (first four samples comprise the pedestal). Signals - 2,3 are reserved for time information. Signals 4,5 are pedestals and - 6 and 7 are the straight sum of all the samples. +\brief Class representing a single raw hit for a hodoscope paddle. + - `signal 0` is ADC pos + - `signal 1` is ADC neg */ #include "THcRawShowerHit.h" + #include <iostream> -#include <cassert> +#include <stdexcept> -using namespace std; +THcRawShowerHit::THcRawShowerHit(Int_t plane, Int_t counter) : + fAdcPos(), fAdcNeg() +{} -void THcRawShowerHit::SetData(Int_t signal, Int_t data) { - if(signal==0) { - fADC_pos[fNPosSamples++] = data; - } else if (signal==1) { - fADC_neg[fNNegSamples++] = data; + +THcRawShowerHit& THcRawShowerHit::operator=(const THcRawShowerHit& right) { + THcRawHit::operator=(right); + + if (this != &right) { + fAdcPos = right.fAdcPos; + fAdcNeg = right.fAdcNeg; } + + return *this; } -Int_t THcRawShowerHit::GetData(Int_t signal, Int_t isamplow, Int_t isamphigh, - Int_t iintegrallow, Int_t iintegralhigh) { - Int_t adcsum=0; - Double_t pedestal=0.0; - - if(signal==0 || signal == 1) { - pedestal = GetPedestal(signal, isamplow, isamphigh); - -#if 0 - for(Int_t i=0;i<fNPosSamples;i++) { - cout << fCounter << " " << i; - if(i >= isamplow && i<=isamphigh) { - cout << "P "; - } else if (i >= iintegrallow && i<=iintegralhigh) { - cout << "D "; - } else { - cout << " "; - } - cout << fADC_pos[i] << " " << fADC_pos[i] - pedestal << endl; - } -#endif - } - if(signal==4 || signal==5) { - pedestal = GetPedestal(signal-4, isamplow, isamphigh); - return(pedestal); - } - if(signal==0 || signal==6) { - assert(iintegralhigh<(Int_t) fNPosSamples); - for(UInt_t isample=iintegrallow;isample<=iintegralhigh;isample++) { - adcsum += fADC_pos[isample] - pedestal; - } - return(adcsum); - } else if (signal==1 || signal==7) { - assert(iintegralhigh<(Int_t) fNNegSamples); - for(UInt_t isample=iintegrallow;isample<=iintegralhigh;isample++) { - adcsum += fADC_neg[isample] - pedestal; - } - return(adcsum); - } - return(-1); // Actually should throw exception + +THcRawShowerHit::~THcRawShowerHit() {} + + +void THcRawShowerHit::Clear(Option_t* opt) { + THcRawHit::Clear(opt); + + fAdcPos.Clear(); + fAdcNeg.Clear(); } -// Return sum of samples -// For Fastbus ADC, this will simply be the hardware ADC value as there -// is just one sample. For Flash ADCs, this should return the -// integrated ADC value if the FADC provided that, otherwise the sum -// of all the samples -Int_t THcRawShowerHit::GetData(Int_t signal) { - Int_t adcsum=0; - - if(signal==0) { - for(UInt_t isample=0;isample<fNPosSamples;isample++) { - adcsum += fADC_pos[isample]; - } - return(adcsum); - } else if (signal==1) { - for(UInt_t isample=0;isample<fNNegSamples;isample++) { - adcsum += fADC_neg[isample]; - } - return(adcsum); - } - return(-1); // Actually should throw exception + +void THcRawShowerHit::SetData(Int_t signal, Int_t data) { + if (signal == 0) { + fAdcPos.SetData(data); + } + else if (signal == 1) { + fAdcNeg.SetData(data); + } + else { + throw std::out_of_range( + "`THcTrigRawHit::GetData`: only signals `0` and `1` available!" + ); + } +} + + +void THcRawShowerHit::SetSample(Int_t signal, Int_t data) { + if (signal == 0) { + fAdcPos.SetSample(data); + } + else if (signal == 1) { + fAdcNeg.SetSample(data); + } + else { + throw std::out_of_range( + "`THcTrigRawHit::GetData`: only signals `0` and `1` available!" + ); + } } -// Return a requested sample -Int_t THcRawShowerHit::GetSample(Int_t signal, UInt_t isample) { - if(signal==0) { - if(isample < fNPosSamples) { - return(fADC_pos[isample]); - } - } else if (signal==1) { - if(isample < fNNegSamples) { - return(fADC_neg[isample]); - } - } - return(-1); + +void THcRawShowerHit::SetDataTimePedestalPeak( + Int_t signal, Int_t data, Int_t time, Int_t pedestal, Int_t peak +) { + if (signal == 0) { + fAdcPos.SetDataTimePedestalPeak(data, time, pedestal, peak); + } + else if (signal == 1) { + fAdcNeg.SetDataTimePedestalPeak(data, time, pedestal, peak); + } + else { + throw std::out_of_range( + "`THcTrigRawHit::GetData`: only signals `0` and `1` available!" + ); + } } -Double_t THcRawShowerHit::GetPedestal(Int_t signal, Int_t isamplow, Int_t isamphigh) { - // No error checking on pedestal range - Double_t pedestal=0.0; - if(signal==0 && fNPosSamples > 1) { - if(fNPosSamples > isamphigh) { - for(Int_t i = isamplow;i<=isamphigh;i++) { - pedestal += fADC_pos[i]; - } - return(pedestal/(isamphigh-isamplow+1)); - } - } else if (signal==1 && fNNegSamples > 1) { - if(fNNegSamples > isamphigh) { - for(Int_t i = isamplow;i<=isamphigh;i++) { - pedestal += fADC_neg[i]; - } - return(pedestal/(isamphigh-isamplow+1)); - } - } - return(pedestal); + +void THcRawShowerHit::SetReference(Int_t signal, Int_t reference) { + std::cerr + << "Warning:" + << " `THcRawShowerHit::SetReference`:" + << " ADC signal should not have reference time!" + << std::endl; } -// Return the number of samples -Int_t THcRawShowerHit::GetNSamples(Int_t signal) { - if(signal==0) { - return(fNPosSamples); - } else if (signal==1) { - return(fNNegSamples); + +Int_t THcRawShowerHit::GetData(Int_t signal) { + if (signal == 0) { + return fAdcPos.GetRawData(); + } + else if (signal == 1) { + return fAdcNeg.GetRawData(); + } + else { + throw std::out_of_range( + "`THcTrigRawHit::GetData`: only signals `0` and `1` available!" + ); } - return(-1); } -//_____________________________________________________________________________ -THcRawShowerHit& THcRawShowerHit::operator=( const THcRawShowerHit& rhs ) -{ - // Assignment operator. - - cout << "YES THIS HAPPENS" << endl; - THcRawHit::operator=(rhs); - if ( this != &rhs ) { - fPlane = rhs.fPlane; - fCounter = rhs.fCounter; - for(UInt_t isample=0;isample<fNPosSamples;isample++) { - fADC_pos[isample] = rhs.fADC_pos[isample]; - } - for(UInt_t isample=0;isample<fNNegSamples;isample++) { - fADC_pos[isample] = rhs.fADC_pos[isample]; - } - fNPosSamples = rhs.fNPosSamples; - fNNegSamples = rhs.fNNegSamples; + +Int_t THcRawShowerHit::GetRawData(Int_t signal) { + if (signal == 0) { + return fAdcPos.GetRawData(); + } + else if (signal == 1) { + return fAdcNeg.GetRawData(); + } + else { + throw std::out_of_range( + "`THcTrigRawHit::GetData`: only signals `0` and `1` available!" + ); } - return *this; } -////////////////////////////////////////////////////////////////////////// -ClassImp(THcRawShowerHit) +THcRawHit::ESignalType THcRawShowerHit::GetSignalType(Int_t signal) { + return kADC; +} + + +Int_t THcRawShowerHit::GetNSignals() { + return 2; +} + + +THcRawAdcHit& THcRawShowerHit::GetRawAdcHitPos() { + return fAdcPos; +} + + +THcRawAdcHit& THcRawShowerHit::GetRawAdcHitNeg() { + return fAdcNeg; +} + +ClassImp(THcRawShowerHit) diff --git a/src/THcRawShowerHit.h b/src/THcRawShowerHit.h index 93b325cf838b320923ba5996d003a24f8b13d5fd..832d7586503bb9ccc0b848fc19404eb311f439d7 100644 --- a/src/THcRawShowerHit.h +++ b/src/THcRawShowerHit.h @@ -1,51 +1,42 @@ #ifndef ROOT_THcRawShowerHit #define ROOT_THcRawShowerHit +#include "THcRawAdcHit.h" #include "THcRawHit.h" -#define MAXSAMPLES 126 class THcRawShowerHit : public THcRawHit { - - public: friend class THcShowerPlane; friend class THcShowerArray; - THcRawShowerHit(Int_t plane=0, Int_t counter=0) : - THcRawHit(plane, counter), fNPosSamples(0), fNNegSamples(0) { - } - THcRawShowerHit& operator=( const THcRawShowerHit& ); - virtual ~THcRawShowerHit() {} - - virtual void Clear( Option_t* opt="" ) - { fNPosSamples=0; fNNegSamples=0;} - - void SetData(Int_t signal, Int_t data); - Int_t GetData(Int_t signal); - Int_t GetData(Int_t signal, Int_t isamplow, Int_t isamphigh, - Int_t iintegrallow, Int_t iintegralhigh); - Int_t GetSample(Int_t signal, UInt_t isample); - Double_t GetPedestal(Int_t signal, Int_t isamplow, Int_t isamphigh); - Int_t GetNSamples(Int_t signal); - - Int_t GetNSignals() { return 2;} - ESignalType GetSignalType(Int_t signal) { - return kADC; - } - // virtual Bool_t IsSortable () const {return kTRUE; } - // virtual Int_t Compare(const TObject* obj) const; - - protected: - UInt_t fNPosSamples; - UInt_t fNNegSamples; - // Is there a way we could pass sample size from the detector initialization - Int_t fADC_pos[MAXSAMPLES]; - Int_t fADC_neg[MAXSAMPLES]; - - private: - - ClassDef(THcRawShowerHit, 0); // Raw Shower counter hit + public: + THcRawShowerHit(Int_t plane=0, Int_t counter=0); + THcRawShowerHit& operator=(const THcRawShowerHit& right); + virtual ~THcRawShowerHit(); + + virtual void Clear(Option_t* opt=""); + + virtual void SetData(Int_t signal, Int_t data); + virtual void SetSample(Int_t signal, Int_t data); + virtual void SetDataTimePedestalPeak( + Int_t signal, Int_t data, Int_t time, Int_t pedestal, Int_t peak + ); + virtual void SetReference(Int_t signal, Int_t reference); + + virtual Int_t GetData(Int_t signal); + virtual Int_t GetRawData(Int_t signal); + virtual ESignalType GetSignalType(Int_t signal); + virtual Int_t GetNSignals(); + + THcRawAdcHit& GetRawAdcHitPos(); + THcRawAdcHit& GetRawAdcHitNeg(); + + protected: + THcRawAdcHit fAdcPos; + THcRawAdcHit fAdcNeg; + + private: + ClassDef(THcRawShowerHit, 0); // Raw Shower counter hit }; #endif - diff --git a/src/THcShowerArray.cxx b/src/THcShowerArray.cxx index e59496881ecea88669d5a5acb29832d0ae65e1c2..da9008df3c7439a057a15f64525bdcf7a888f355 100644 --- a/src/THcShowerArray.cxx +++ b/src/THcShowerArray.cxx @@ -642,13 +642,8 @@ Int_t THcShowerArray::ProcessHits(TClonesArray* rawhits, Int_t nexthit) } // Should probably check that counter # is in range - if(fUsingFADC) { - fA[hit->fCounter-1] = hit->GetData(0,fPedSampLow,fPedSampHigh, - fDataSampLow,fDataSampHigh); - fP[hit->fCounter-1] = hit->GetPedestal(0,fPedSampLow,fPedSampHigh); - } else { - fA[hit->fCounter-1] = hit->GetData(0); - } + // TODO: Need to include rich FADC data if available. + fA[hit->fCounter-1] = hit->GetData(0); if(fA[hit->fCounter-1] > threshold) { ngood++; @@ -787,10 +782,8 @@ Int_t THcShowerArray::AccumulatePedestals(TClonesArray* rawhits, Int_t nexthit) Int_t element = hit->fCounter - 1; // Should check if in range - Int_t adc = fUsingFADC ? - hit->GetData(0,fPedSampLow,fPedSampHigh,fDataSampLow,fDataSampHigh) - : - hit->GetData(0); + // TODO: Need to include rich FADC data if available. + Int_t adc = hit->GetData(0); if(adc <= fPedLimit[element]) { fPedSum[element] += adc; @@ -822,10 +815,7 @@ Int_t THcShowerArray::AccumulatePedestals(TClonesArray* rawhits, Int_t nexthit) break; } - Int_t adc = fUsingFADC ? - hit->GetData(0,fPedSampLow,fPedSampHigh,fDataSampLow,fDataSampHigh) - : - hit->GetData(0); + Int_t adc = hit->GetData(0); cout << " hit " << ih << ":" << " plane = " << hit->fPlane diff --git a/src/THcShowerPlane.cxx b/src/THcShowerPlane.cxx index 2ff44bbbfe65868e43af16e35a0071bada236e4f..f673f6a2a09a46e691151f22ce9e6f64e4025e5e 100644 --- a/src/THcShowerPlane.cxx +++ b/src/THcShowerPlane.cxx @@ -322,15 +322,9 @@ Int_t THcShowerPlane::ProcessHits(TClonesArray* rawhits, Int_t nexthit) } // Should probably check that counter # is in range - if(fUsingFADC) { - fA_Pos[hit->fCounter-1] = hit->GetData(0,fPedSampLow,fPedSampHigh, - fDataSampLow,fDataSampHigh); - fA_Neg[hit->fCounter-1] = hit->GetData(1,fPedSampLow,fPedSampHigh, - fDataSampLow,fDataSampHigh); - } else { - fA_Pos[hit->fCounter-1] = hit->GetData(0); - fA_Neg[hit->fCounter-1] = hit->GetData(1); - } + // TODO: Need to include rich FADC data if available. + fA_Pos[hit->fCounter-1] = hit->GetData(0); + fA_Neg[hit->fCounter-1] = hit->GetData(1); // Sparsify positive side hits, fill the hit list, compute the // energy depostion from positive side for the counter. diff --git a/src/THcTrigRawHit.cxx b/src/THcTrigRawHit.cxx index 43b36acbf724db00614af255e6f929ffaf826da1..342ac0009067f0c3e2bb35b16daf71cb77cf1eef 100644 --- a/src/THcTrigRawHit.cxx +++ b/src/THcTrigRawHit.cxx @@ -352,7 +352,8 @@ void THcTrigRawHit::SetReference(Int_t signal, Int_t reference) { << "Warning:" << " `THcTrigRawHit::SetReference`:" << " signal 0 (ADC) should not have reference time!" - << " Check map file!"; + << " Check map file!" + << std::endl; } else if (signal == 1) { fReferenceTime[signal] = reference;