29 std::cout <<
"Warning, TSceptar::SetWave() set, but data waveform size is zero!" << std::endl;
90 std::ostringstream str;
91 str <<
"Sceptar Detector: " <<
GetDetector() << std::endl;
92 str <<
"Sceptar hit energy: " <<
GetEnergy() << std::endl;
93 str <<
"Sceptar hit time: " <<
GetTime() << std::endl;
105 std::vector<Int_t> baselineCorrections(8, 0);
110 unsigned int interpolationSteps = 256;
112 double attenuation = 24. / 64.;
113 int halfsmoothingwindow = 0;
116 for(
size_t i = 0; i < 8 && i <
WaveSize(); ++i) {
119 for(
size_t i = 8; i < 16 && i <
WaveSize(); ++i) {
120 baselineCorrections[i - 8] =
121 ((baselineCorrections[i - 8] +
GetWaveform()->at(i)) + ((baselineCorrections[i - 8] +
GetWaveform()->at(i)) > 0 ? 1 : -1)) >>
124 for(
size_t i = 0; i <
WaveSize(); ++i) {
125 newWaveform[i] -= baselineCorrections[i % 8];
135 unsigned int interpolationSteps)
138 std::vector<Short_t> monitor;
144 unsigned int interpolationSteps, std::vector<Short_t>& monitor)
148 Short_t monitormax = 0;
154 std::vector<Short_t> smoothedWaveform;
160 if(
static_cast<unsigned int>(
WaveSize()) > delay + 1) {
162 if(halfsmoothingwindow > 0) {
168 monitor.resize(smoothedWaveform.size() - delay);
169 monitor[0] =
static_cast<Short_t
>(attenuation * smoothedWaveform[delay] - smoothedWaveform[0]);
170 if(monitor[0] > monitormax) {
172 monitormax = monitor[0];
175 for(
unsigned int i = delay + 1; i < smoothedWaveform.size(); ++i) {
176 monitor[i - delay] =
static_cast<Short_t
>(attenuation * smoothedWaveform[i] - smoothedWaveform[i - delay]);
177 if(monitor[i - delay] > monitormax) {
179 monitormax = monitor[i - delay];
181 if(armed && monitor[i - delay] < 0) {
183 if(monitor[i - delay - 1] - monitor[i - delay] != 0) {
185 cfd = (i - delay - 1) * interpolationSteps +
186 (monitor[i - delay - 1] * interpolationSteps) / (monitor[i - delay - 1] - monitor[i - delay]);
209 std::vector<Short_t> smoothedWaveform(std::max(
static_cast<size_t>(0),
WaveSize() - 2 * halfsmoothingwindow),
212 for(
size_t i = halfsmoothingwindow; i <
WaveSize() - halfsmoothingwindow; ++i) {
213 for(
int j = -
static_cast<int>(halfsmoothingwindow); j <= static_cast<int>(halfsmoothingwindow); ++j) {
214 smoothedWaveform[i - halfsmoothingwindow] +=
GetWaveform()->at(i + j);
218 return smoothedWaveform;
229 std::vector<Short_t> smoothedWaveform;
231 if(halfsmoothingwindow > 0) {
237 std::vector<Short_t> monitor(std::max(
static_cast<size_t>(0), smoothedWaveform.size() - delay), 0);
239 for(
size_t i = delay; i < smoothedWaveform.size(); ++i) {
240 monitor[i - delay] =
static_cast<Short_t
>(attenuation * smoothedWaveform[i] - smoothedWaveform[i - delay]);
virtual void SetCfd(const Float_t &val)
!
virtual double GetEnergy(Option_t *opt="") const
void SetWaveform(const std::vector< Short_t > &val)
!
const std::vector< Short_t > * GetWaveform() const
!
void Clear(Option_t *opt="") override
!
virtual Int_t GetDetector() const
!
void Copy(TObject &) const override
!
virtual Double_t GetTime(const ETimeFlag &correct_flag=ETimeFlag::kAll, Option_t *opt="") const
Returns a time value to the nearest nanosecond!
virtual bool HasWave() const
!
virtual size_t WaveSize() const
!
virtual void CopyWave(TObject &) const
!
Double_t GetDefaultDistance() const
Int_t CalculateCfdAndMonitor(double attenuation, unsigned int delay, int halfsmoothingwindow, unsigned int interpolationSteps, std::vector< Short_t > &monitor)
!
void Print(Option_t *opt="") const override
!
void Clear(Option_t *opt="") override
!
std::vector< Short_t > CalculateSmoothedWaveform(unsigned int halfsmoothingwindow)
!
void Copy(TObject &) const override
!
Int_t CalculateCfd(double attenuation, unsigned int delay, int halfsmoothingwindow, unsigned int interpolationSteps)
!
TVector3 GetPosition() const override
!
std::vector< Short_t > CalculateCfdMonitor(double attenuation, int delay, int halfsmoothingwindow)
!
static TVector3 GetPosition(int DetNbr)
!