/home/docs/checkouts/readthedocs.org/user_builds/ratpac/checkouts/latest/src/daq/include/RAT/WaveformAnalysisRAVEN.hh Source File

Ratpac-two: /home/docs/checkouts/readthedocs.org/user_builds/ratpac/checkouts/latest/src/daq/include/RAT/WaveformAnalysisRAVEN.hh Source File
Ratpac-two
WaveformAnalysisRAVEN.hh
1 #ifndef __RAT_WaveformAnalysisRAVEN__
32 #define __RAT_WaveformAnalysisRAVEN__
33 
34 #include <TMatrixDfwd.h>
35 #include <TObject.h>
36 
37 #include <RAT/DB.hh>
38 #include <RAT/DS/DigitPMT.hh>
39 #include <RAT/Digitizer.hh>
40 #include <RAT/Processor.hh>
41 #include <RAT/WaveformAnalyzerBase.hh>
42 #include <utility>
43 #include <vector>
44 
45 namespace RAT {
46 
48  public:
50 
51  WaveformAnalysisRAVEN(std::string config_name) : WaveformAnalyzerBase("WaveformAnalysisRAVEN", config_name) {
52  Configure(config_name);
53  };
54 
55  virtual ~WaveformAnalysisRAVEN(){};
56 
57  void BuildDictionaryMatrix(int nsamples, double digitizer_period);
58 
59  void Configure(const std::string &config_name) override;
60 
61  void SetD(std::string param, double value) override;
62  void SetI(std::string param, int value) override;
63 
64  protected:
65  DBLinkPtr fDigit;
66 
70 
72 
73  // LogNormal template parameters
74  double lognormal_scale;
75  double lognormal_shape;
76 
77  // Gaussian template parameters
78  double gaussian_width;
79 
80  double vpe_charge;
81 
82  // Algorithm configuration
83  TMatrixD fW;
84  double epsilon;
85  size_t max_iterations;
86  double upsample_factor;
87 
88  // Thresholding parameters
91 
92  // NPE estimation parameters
93  bool npe_estimate;
96 
97  // Dictionary management
101 
102  void DoAnalysis(DS::DigitPMT *digitpmt, const std::vector<UShort_t> &digitWfm) override;
103 
105  TVectorD Thresholded_rsNNLS(const TMatrixD &W_region, const TVectorD &voltVec, const double threshold,
106  double &chi2ndf_out, int &iterations_out);
107 
109  std::vector<std::pair<int, int>> FindThresholdRegions(const std::vector<double> &voltWfm, double threshold,
110  int region_padding);
111 
113  void ProcessThresholdRegion(const std::vector<double> &voltWfm, int start_sample, int end_sample,
114  DS::WaveformAnalysisResult *fit_result, double gain_calibration);
115 
117  void ExtractPhotoelectrons(const TVectorD &region_weights, int dict_start, int dict_cols, int start_sample,
118  int end_sample, double chi2ndf, int iterations_ran, DS::WaveformAnalysisResult *fit_result,
119  double gain_calibration);
120 
123  std::vector<std::pair<double, double>> MergeNearbyWeights(const TVectorD &region_weights, int dict_start,
124  int dict_cols, double merge_window);
125 };
126 
127 } // namespace RAT
128 
129 #endif
Definition: DigitPMT.hh:23
Definition: WaveformAnalysisResult.hh:21
Perform reverse sparse non-negative least squares fitting and NPE likelihood estimation on digitized ...
Definition: WaveformAnalysisRAVEN.hh:47
int threshold_region_padding
Number of samples to pad around threshold crossing regions.
Definition: WaveformAnalysisRAVEN.hh:69
void ProcessThresholdRegion(const std::vector< double > &voltWfm, int start_sample, int end_sample, DS::WaveformAnalysisResult *fit_result, double gain_calibration)
Process a single threshold crossing region with rsNNLS.
Definition: WaveformAnalysisRAVEN.cc:356
double upsample_factor
Dictionary upsampling factor for sub-sample resolution.
Definition: WaveformAnalysisRAVEN.hh:86
bool dictionary_built
Flag to track if dictionary has been built.
Definition: WaveformAnalysisRAVEN.hh:98
size_t max_iterations
Maximum iterations for iterative thresholding.
Definition: WaveformAnalysisRAVEN.hh:85
double lognormal_shape
LogNormal 'sigma' parameter for SPE template.
Definition: WaveformAnalysisRAVEN.hh:75
double npe_estimate_charge_width
Width of Gaussian single-PE charge distribution.
Definition: WaveformAnalysisRAVEN.hh:94
double voltage_threshold
Voltage threshold for threshold crossing region detection.
Definition: WaveformAnalysisRAVEN.hh:68
std::vector< std::pair< int, int > > FindThresholdRegions(const std::vector< double > &voltWfm, double threshold, int region_padding)
Find threshold crossing regions in waveform for efficient processing.
Definition: WaveformAnalysisRAVEN.cc:314
int template_type
Template type: 0=lognormal, 1=gaussian.
Definition: WaveformAnalysisRAVEN.hh:71
TVectorD Thresholded_rsNNLS(const TMatrixD &W_region, const TVectorD &voltVec, const double threshold, double &chi2ndf_out, int &iterations_out)
Perform reverse sparse NNLS with iterative thresholding on a region submatrix.
Definition: WaveformAnalysisRAVEN.cc:225
void SetD(std::string param, double value) override
Definition: WaveformAnalysisRAVEN.cc:79
bool process_threshold_crossing
Whether to use threshold crossing region processing.
Definition: WaveformAnalysisRAVEN.hh:67
size_t npe_estimate_max_pes
Upper limit for NPE estimation.
Definition: WaveformAnalysisRAVEN.hh:95
double vpe_charge
Nominal charge of single PE in pC.
Definition: WaveformAnalysisRAVEN.hh:80
void DoAnalysis(DS::DigitPMT *digitpmt, const std::vector< UShort_t > &digitWfm) override
Definition: WaveformAnalysisRAVEN.cc:164
double gaussian_width
Gaussian 'sigma' parameter for SPE template.
Definition: WaveformAnalysisRAVEN.hh:78
void SetI(std::string param, int value) override
Definition: WaveformAnalysisRAVEN.cc:105
bool npe_estimate
Whether to perform NPE estimation on resolved wave packets.
Definition: WaveformAnalysisRAVEN.hh:93
double epsilon
NNLS convergence tolerance.
Definition: WaveformAnalysisRAVEN.hh:84
double cached_digitizer_period
Cached digitizer period for dictionary.
Definition: WaveformAnalysisRAVEN.hh:100
std::vector< std::pair< double, double > > MergeNearbyWeights(const TVectorD &region_weights, int dict_start, int dict_cols, double merge_window)
Definition: WaveformAnalysisRAVEN.cc:408
TMatrixD fW
Dictionary matrix for NNLS (nsamples × dict_size)
Definition: WaveformAnalysisRAVEN.hh:83
int cached_nsamples
Cached number of samples for dictionary.
Definition: WaveformAnalysisRAVEN.hh:99
double lognormal_scale
LogNormal 'm' parameter for SPE template.
Definition: WaveformAnalysisRAVEN.hh:74
void Configure(const std::string &config_name) override
Definition: WaveformAnalysisRAVEN.cc:21
double weight_threshold
Minimum weight threshold for component significance.
Definition: WaveformAnalysisRAVEN.hh:89
void ExtractPhotoelectrons(const TVectorD &region_weights, int dict_start, int dict_cols, int start_sample, int end_sample, double chi2ndf, int iterations_ran, DS::WaveformAnalysisResult *fit_result, double gain_calibration)
Extract photoelectrons from significant weights in the region.
Definition: WaveformAnalysisRAVEN.cc:460
double weight_merge_window
Time window (ns) for merging nearby weights before NPE estimation.
Definition: WaveformAnalysisRAVEN.hh:90
Definition: WaveformAnalyzerBase.hh:23
Definition: CCCrossSecMessenger.hh:29