ATTPCROOT  0.3.0-alpha
A ROOT-based framework for analyzing data from active target detectors
AtElectronicResponse.cxx
Go to the documentation of this file.
1 #include "AtElectronicResponse.h"
2 
3 #include <cmath>
4 #include <fstream> // IWYU pragma: keep
5 #include <iostream>
6 #include <string>
7 #include <utility>
8 using namespace ElectronicResponse;
9 
13 AtNominalResponse::AtNominalResponse(double peakingTime) : fPeakingTime(peakingTime) {}
14 
15 double AtNominalResponse::GetResponse(double time) const
16 {
17  double reducedTime = time / fPeakingTime;
18  return pow(2.718, -3 * reducedTime) * sin(reducedTime) * pow(reducedTime, 3);
19 }
20 
27  : fPeakingTime(peakingTime), fResponse(std::move(response))
28 {
29 }
30 
31 double AtReducedTimeResponse::GetResponse(double time) const
32 {
33  return fResponse(time / fPeakingTime);
34 }
35 
39 AtVectorResponse::AtVectorResponse(double tbTime, std::vector<double> trace) : fTBTime(tbTime), fTrace(std::move(trace))
40 {
41 }
42 
43 double AtVectorResponse::GetResponse(double time) const
44 {
45  // int tb = (double(time) / fTBTime + 0.5);
46  int tb = time / fTBTime;
47  if (tb >= fTrace.size())
48  return 0;
49  return fTrace.at(tb);
50 }
51 
56 AtFileResponse::AtFileResponse(double tbTime, std::string filePath) : AtVectorResponse(tbTime, {})
57 {
58  std::ifstream input(filePath);
59  if (!input.is_open())
60  std::cout << "wave input not open" << std::endl;
61  else {
62  std::cout << "wave input is open" << std::endl;
63  while (!input.eof()) {
64  double value = 0;
65  input >> value;
66  fTrace.push_back(value);
67  }
68  }
69  input.close();
70 
71  for (int i = 0; i < fTrace.size(); i++) {
72  std::cout << "fWaveSample[" << i << "]: " << fTrace[i] << std::endl;
73  }
74 }
ElectronicResponse::AtReducedTimeResponse::ReducedResponse
std::function< double(double)> ReducedResponse
Definition: AtElectronicResponse.h:71
ElectronicResponse::AtVectorResponse::fTBTime
double fTBTime
Definition: AtElectronicResponse.h:89
ElectronicResponse::AtReducedTimeResponse::fPeakingTime
double fPeakingTime
Definition: AtElectronicResponse.h:72
ElectronicResponse::AtVectorResponse::GetResponse
virtual double GetResponse(double time) const override
Definition: AtElectronicResponse.cxx:43
ElectronicResponse::AtNominalResponse::GetResponse
virtual double GetResponse(double time) const override
Definition: AtElectronicResponse.cxx:15
AtElectronicResponse.h
ElectronicResponse::AtVectorResponse
Response function speficied as a trace.
Definition: AtElectronicResponse.h:87
ElectronicResponse::AtReducedTimeResponse::fResponse
ReducedResponse fResponse
Electric peaking time in us.
Definition: AtElectronicResponse.h:73
ElectronicResponse::AtVectorResponse::AtVectorResponse
AtVectorResponse(double tbTime, std::vector< double > trace)
Definition: AtElectronicResponse.cxx:39
ElectronicResponse::AtNominalResponse::fPeakingTime
double fPeakingTime
Definition: AtElectronicResponse.h:55
ElectronicResponse::AtNominalResponse::AtNominalResponse
AtNominalResponse(double peakingTime)
Electric peaking time in us.
Definition: AtElectronicResponse.cxx:13
ElectronicResponse::AtReducedTimeResponse::GetResponse
virtual double GetResponse(double time) const override
Definition: AtElectronicResponse.cxx:31
ElectronicResponse::AtReducedTimeResponse::AtReducedTimeResponse
AtReducedTimeResponse(double peakingTime, ReducedResponse response)
Definition: AtElectronicResponse.cxx:26
ElectronicResponse::AtFileResponse::AtFileResponse
AtFileResponse(double tbTime, std::string filePath)
Definition: AtElectronicResponse.cxx:56
trace
std::array< Double_t, 512 > trace
Definition: AtCalibration.h:9
ElectronicResponse::AtVectorResponse::fTrace
std::vector< double > fTrace
Width of a time bucket in us.
Definition: AtElectronicResponse.h:90
ElectronicResponse
Definition: AtVectorResponse.h:8