MiniballSort
Loading...
Searching...
No Matches
Calibration.hh
Go to the documentation of this file.
1#ifndef __CALIBRATION_HH
2#define __CALIBRATION_HH
3
4#include <iostream>
5#include <iomanip>
6#include <memory>
7#include <fstream>
8#include <string>
9#include <array>
10#include <cstdlib>
11
12#include "TSystem.h"
13#include "TEnv.h"
14#include "TRandom3.h"
15#include "TMath.h"
16#include "TGraph.h"
17
18// Settings header
19#ifndef __SETTINGS_HH
20# include "Settings.hh"
21#endif
22
23
24class FebexMWD : public TObject {
25
26public:
27
28 // Constructor/destructor
29 inline FebexMWD() {};
30 virtual inline ~FebexMWD() {};
31
32 // Main algorithm
33 void DoMWD();
34
35 // Set functions
36 inline void SetTrace( std::vector<unsigned short> t ){ trace = t; };
37 inline void SetRiseTime( unsigned int t ){ rise_time = t; }; // L
38 inline void SetDecayTime( float t ){ decay_time = t; }; // torr
39 inline void SetFlatTop( unsigned int t ){ flat_top = t; }; // not in James' code
40 inline void SetBaseline( unsigned int t ){ baseline_length = t; }; // BLFL (baseline filter length?)
41 inline void SetWindow( unsigned int t ){ window = t; }; // M
42 inline void SetDelayTime( unsigned int t ){ cfd_delay = t; };
43 inline void SetHoldOff( unsigned int t ){ cfd_hold = t; };
44 inline void SetShapingTime( unsigned int t ){ cfd_shaping_time = t; };
45 inline void SetIntegrationTime( unsigned int t ){ cfd_integration_time = t; };
46 inline void SetThreshold( unsigned int t ){ threshold = t; };
47 inline void SetFraction( float f ){ fraction = f; };
48
49 // Get functions
50 inline unsigned int NumberOfTriggers(){ return energy_list.size(); };
51 inline float GetEnergy( unsigned int i ){
52 if( i < energy_list.size() ) return energy_list.at(i);
53 else return -99.9;
54 };
55 inline float GetCfdTime( unsigned int i ){
56 if( i < cfd_list.size() ) return cfd_list.at(i);
57 else return 0;
58 };
59 inline std::vector<float> GetEnergies(){ return energy_list; };
60 inline std::vector<float> GetCfdTimes(){ return cfd_list; };
61 inline std::vector<float> GetStage1(){ return stage1; };
62 inline std::vector<float> GetStage2(){ return stage2; };
63 inline std::vector<float> GetStage3(){ return stage3; };
64 inline std::vector<float> GetStage4(){ return stage4; };
65 inline std::vector<float> GetCfd(){ return cfd; };
66
67 // Is it clipped?
68 inline bool IsClipped(){ return clipped; };
69
70 // Graphs
71 inline TGraph* GetTraceGraph() {
72 return GetGraph( trace );
73 };
74 inline TGraph* GetStage1Graph() {
75 return GetGraph( stage1 );
76 };
77 inline TGraph* GetStage2Graph() {
78 return GetGraph( stage2 );
79 };
80 inline TGraph* GetStage3Graph() {
81 return GetGraph( stage3 );
82 };
83 inline TGraph* GetStage4Graph() {
84 return GetGraph( stage4 );
85 };
86 inline TGraph* GetCfdGraph() {
87 return GetGraph( cfd );
88 };
89
90private:
91
92 // List of energies and time to return
93 std::vector<float> energy_list;
94 std::vector<float> cfd_list;
95
96 // Vector to hold the trace
97 std::vector<unsigned short> trace;
98
99 // Initialise some vectors for holding the MWD and CFD etc.
100 std::vector<float> stage1, stage2, stage3, stage4;
101 std::vector<float> differential, shaper, cfd;
102
103 // Values of MWD
105
106 // Values for CFD
109 float fraction;
110
111 // Are any of the samples clipped?
113
114 // Graphs
115 inline TGraph* GetGraph( std::vector<float> &t ) {
116 std::vector<float> x;
117 for( unsigned short i = 0; i < t.size(); ++i )
118 x.push_back( i );
119 std::unique_ptr<TGraph> g = std::make_unique<TGraph>(
120 t.size(), x.data(), t.data() );
121 return (TGraph*)g.get()->Clone();
122 };
123 inline TGraph* GetGraph( std::vector<unsigned short> &t ) {
124 std::vector<float> y;
125 for( unsigned short i = 0; i < t.size(); ++i )
126 y.push_back( static_cast<float>(t[i]) );
127 return GetGraph(y);
128 };
129
131
132};
133
134
139
140class MiniballCalibration : public TObject {
141
142public:
143
144 MiniballCalibration( std::string filename, std::shared_ptr<MiniballSettings> myset );
146 void ReadCalibration();
148 void SetFile( std::string filename ){
149 fInputFile = filename;
150 }
151 const std::string InputFile(){
152 return fInputFile;
153 }
154
155 // ADC calibrations
156 float AdcEnergy( unsigned char mod, unsigned char ch, unsigned int raw );
157 double AdcOffset( unsigned char mod, unsigned char ch );
158 double AdcGain( unsigned char mod, unsigned char ch );
159 double AdcGainQuadr( unsigned char mod, unsigned char ch );
160 unsigned int AdcThreshold( unsigned char mod, unsigned char ch );
161 long AdcTime( unsigned char mod, unsigned char ch );
162
163 // DGF calibrations
164 float DgfEnergy( unsigned char mod, unsigned char ch, unsigned int raw );
165 double DgfOffset( unsigned char mod, unsigned char ch );
166 double DgfGain( unsigned char mod, unsigned char ch );
167 double DgfGainQuadr( unsigned char mod, unsigned char ch );
168 unsigned int DgfThreshold( unsigned char mod, unsigned char ch );
169 long DgfTime( unsigned char mod, unsigned char ch );
170
171 // Febex calibrations
172 float FebexEnergy( unsigned char sfp, unsigned char board, unsigned char ch, unsigned int raw );
173 double FebexOffset( unsigned char sfp, unsigned char board, unsigned char ch );
174 double FebexGain( unsigned char sfp, unsigned char board, unsigned char ch );
175 double FebexGainQuadr( unsigned char sfp, unsigned char board, unsigned char ch );
176 unsigned int FebexThreshold( unsigned char sfp, unsigned char board, unsigned char ch );
177 std::string FebexType( unsigned char sfp, unsigned char board, unsigned char ch );
178 long FebexTime( unsigned char sfp, unsigned char board, unsigned char ch );
179 FebexMWD DoMWD( unsigned char sfp, unsigned char board, unsigned char ch, std::vector<unsigned short> trace );
180
181 // Set functions for MWD
182 void SetMWDDecay( unsigned char sfp, unsigned char board, unsigned char ch, unsigned int decay );
183 void SetMWDRise( unsigned char sfp, unsigned char board, unsigned char ch, unsigned int rise );
184 void SetMWDFlatTop( unsigned char sfp, unsigned char board, unsigned char ch, unsigned int top );
185 void SetMWDBaseline( unsigned char sfp, unsigned char board, unsigned char ch, unsigned int baseline_length );
186 void SetMWDWindow( unsigned char sfp, unsigned char board, unsigned char ch, unsigned int window );
187 void SetCFDFraction( unsigned char sfp, unsigned char board, unsigned char ch, float fraction );
188 void SetCFDDelay( unsigned char sfp, unsigned char board, unsigned char ch, unsigned int delay );
189 void SetCFDHoldOff( unsigned char sfp, unsigned char board, unsigned char ch, unsigned int hold );
190 void SetCFDShapingTime( unsigned char sfp, unsigned char board, unsigned char ch, unsigned int shaping );
191 void SetCFDIntegrationTime( unsigned char sfp, unsigned char board, unsigned char ch, unsigned int integration );
192 void SetCFDThreshold( unsigned char sfp, unsigned char board, unsigned char ch, int threshold );
193
194 // Get functions for MWD
195 unsigned int GetMWDDecay( unsigned char sfp, unsigned char board, unsigned char ch );
196 unsigned int GetMWDRise( unsigned char sfp, unsigned char board, unsigned char ch );
197 unsigned int GetMWDFlatTop( unsigned char sfp, unsigned char board, unsigned char ch );
198 unsigned int GetMWDBaseline( unsigned char sfp, unsigned char board, unsigned char ch );
199 unsigned int GetMWDWindow( unsigned char sfp, unsigned char board, unsigned char ch );
200 float GetCFDFraction( unsigned char sfp, unsigned char board, unsigned char ch );
201 unsigned int GetCFDDelay( unsigned char sfp, unsigned char board, unsigned char ch );
202 unsigned int GetCFDHoldOff( unsigned char sfp, unsigned char board, unsigned char ch );
203 unsigned int GetCFDShapingTime( unsigned char sfp, unsigned char board, unsigned char ch );
204 unsigned int GetCFDIntegrationTime( unsigned char sfp, unsigned char board, unsigned char ch );
205 int GetCFDThreshold( unsigned char sfp, unsigned char board, unsigned char ch );
206
207 // Global default to Qint instead of Qshort
208 inline void SetDefaultQint(){ default_qint = true; };
209
210
211private:
212
213 std::string fInputFile;
214 std::unique_ptr<TRandom3> fRand;
215
217
218 std::shared_ptr<MiniballSettings> set;
219
220 // Mesytec or CAEN ADC calibration
221 std::vector<std::vector<long>> fAdcTime;
222 std::vector<std::vector<double>> fAdcOffset;
223 std::vector<std::vector<double>> fAdcGain;
224 std::vector<std::vector<double>> fAdcGainQuadr;
225 std::vector<std::vector<unsigned int>> fAdcThreshold;
226
227 // DGF calibration
228 std::vector<std::vector<long>> fDgfTime;
229 std::vector<std::vector<double>> fDgfOffset;
230 std::vector<std::vector<double>> fDgfGain;
231 std::vector<std::vector<double>> fDgfGainQuadr;
232 std::vector<std::vector<unsigned int>> fDgfThreshold;
233
234 // Febex
235 std::vector< std::vector<std::vector<std::string>> > fFebexType; // Qint or Qshort
236 std::vector< std::vector<std::vector<long>> > fFebexTime;
237 std::vector< std::vector<std::vector<double>> > fFebexOffset;
238 std::vector< std::vector<std::vector<double>> > fFebexGain;
239 std::vector< std::vector<std::vector<double>> > fFebexGainQuadr;
240 std::vector< std::vector<std::vector<unsigned int>> > fFebexThreshold;
241
242 // MWD + CFD
243 std::vector< std::vector<std::vector<unsigned int>> > fFebexMWD_Decay;
244 std::vector< std::vector<std::vector<unsigned int>> > fFebexMWD_Rise;
245 std::vector< std::vector<std::vector<unsigned int>> > fFebexMWD_Top;
246 std::vector< std::vector<std::vector<unsigned int>> > fFebexMWD_Baseline;
247 std::vector< std::vector<std::vector<unsigned int>> > fFebexMWD_Window;
248 std::vector< std::vector<std::vector<unsigned int>> > fFebexCFD_Delay;
249 std::vector< std::vector<std::vector<unsigned int>> > fFebexCFD_HoldOff;
250 std::vector< std::vector<std::vector<unsigned int>> > fFebexCFD_Shaping;
251 std::vector< std::vector<std::vector<unsigned int>> > fFebexCFD_Integration;
252 std::vector< std::vector<std::vector<int>> > fFebexCFD_Threshold; // polarity of CFD selected by a negative threshold
253 std::vector< std::vector<std::vector<float>> > fFebexCFD_Fraction;
254
255 // MWD defaults
267
268
269 ClassDef( MiniballCalibration, 4 )
270
271};
272
273#endif
virtual ~FebexMWD()
TGraph * GetGraph(std::vector< float > &t)
std::vector< float > GetStage2()
std::vector< float > GetStage3()
std::vector< float > stage3
unsigned int cfd_integration_time
std::vector< float > stage4
unsigned int baseline_length
std::vector< float > energy_list
TGraph * GetStage2Graph()
std::vector< float > GetEnergies()
std::vector< float > GetCfdTimes()
unsigned int decay_time
std::vector< unsigned short > trace
void SetWindow(unsigned int t)
void SetBaseline(unsigned int t)
unsigned int cfd_delay
std::vector< float > shaper
TGraph * GetStage4Graph()
std::vector< float > GetStage4()
void SetShapingTime(unsigned int t)
std::vector< float > differential
std::vector< float > GetStage1()
void SetFraction(float f)
void SetIntegrationTime(unsigned int t)
ClassDef(FebexMWD, 3)
unsigned int rise_time
std::vector< float > stage2
float fraction
unsigned int window
void SetFlatTop(unsigned int t)
std::vector< float > stage1
TGraph * GetTraceGraph()
unsigned int cfd_shaping_time
unsigned int cfd_hold
std::vector< float > GetCfd()
void SetDelayTime(unsigned int t)
float GetEnergy(unsigned int i)
TGraph * GetCfdGraph()
TGraph * GetStage3Graph()
std::vector< float > cfd
void DoMWD()
void SetRiseTime(unsigned int t)
void SetTrace(std::vector< unsigned short > t)
bool IsClipped()
void SetHoldOff(unsigned int t)
TGraph * GetStage1Graph()
unsigned int NumberOfTriggers()
void SetThreshold(unsigned int t)
TGraph * GetGraph(std::vector< unsigned short > &t)
std::vector< float > cfd_list
float GetCfdTime(unsigned int i)
void SetDecayTime(float t)
unsigned int flat_top
double DgfGain(unsigned char mod, unsigned char ch)
float FebexEnergy(unsigned char sfp, unsigned char board, unsigned char ch, unsigned int raw)
std::vector< std::vector< long > > fAdcTime
double AdcGain(unsigned char mod, unsigned char ch)
void SetFile(std::string filename)
int GetCFDThreshold(unsigned char sfp, unsigned char board, unsigned char ch)
std::vector< std::vector< std::vector< unsigned int > > > fFebexCFD_Integration
unsigned int default_FebexCFD_HoldOff
void SetCFDDelay(unsigned char sfp, unsigned char board, unsigned char ch, unsigned int delay)
long FebexTime(unsigned char sfp, unsigned char board, unsigned char ch)
long AdcTime(unsigned char mod, unsigned char ch)
FebexMWD DoMWD(unsigned char sfp, unsigned char board, unsigned char ch, std::vector< unsigned short > trace)
void SetMWDDecay(unsigned char sfp, unsigned char board, unsigned char ch, unsigned int decay)
void SetMWDRise(unsigned char sfp, unsigned char board, unsigned char ch, unsigned int rise)
std::shared_ptr< MiniballSettings > set
long DgfTime(unsigned char mod, unsigned char ch)
std::vector< std::vector< double > > fDgfGain
double FebexGain(unsigned char sfp, unsigned char board, unsigned char ch)
unsigned int GetCFDDelay(unsigned char sfp, unsigned char board, unsigned char ch)
std::vector< std::vector< std::vector< double > > > fFebexOffset
unsigned int default_FebexCFD_Delay
std::vector< std::vector< std::vector< unsigned int > > > fFebexThreshold
std::vector< std::vector< std::vector< unsigned int > > > fFebexMWD_Baseline
std::vector< std::vector< double > > fAdcGain
std::vector< std::vector< double > > fDgfGainQuadr
std::vector< std::vector< std::vector< unsigned int > > > fFebexMWD_Rise
double FebexOffset(unsigned char sfp, unsigned char board, unsigned char ch)
double DgfOffset(unsigned char mod, unsigned char ch)
unsigned int FebexThreshold(unsigned char sfp, unsigned char board, unsigned char ch)
std::vector< std::vector< std::vector< long > > > fFebexTime
std::vector< std::vector< double > > fDgfOffset
float DgfEnergy(unsigned char mod, unsigned char ch, unsigned int raw)
float AdcEnergy(unsigned char mod, unsigned char ch, unsigned int raw)
double AdcOffset(unsigned char mod, unsigned char ch)
void SetCFDThreshold(unsigned char sfp, unsigned char board, unsigned char ch, int threshold)
std::vector< std::vector< std::vector< unsigned int > > > fFebexMWD_Top
std::vector< std::vector< std::vector< unsigned int > > > fFebexCFD_HoldOff
unsigned int GetMWDWindow(unsigned char sfp, unsigned char board, unsigned char ch)
std::vector< std::vector< double > > fAdcOffset
void SetMWDBaseline(unsigned char sfp, unsigned char board, unsigned char ch, unsigned int baseline_length)
std::vector< std::vector< std::vector< unsigned int > > > fFebexMWD_Decay
void SetCFDIntegrationTime(unsigned char sfp, unsigned char board, unsigned char ch, unsigned int integration)
void SetCFDFraction(unsigned char sfp, unsigned char board, unsigned char ch, float fraction)
std::vector< std::vector< long > > fDgfTime
std::vector< std::vector< std::vector< float > > > fFebexCFD_Fraction
unsigned int GetMWDDecay(unsigned char sfp, unsigned char board, unsigned char ch)
std::string FebexType(unsigned char sfp, unsigned char board, unsigned char ch)
std::unique_ptr< TRandom3 > fRand
unsigned int GetMWDFlatTop(unsigned char sfp, unsigned char board, unsigned char ch)
std::vector< std::vector< double > > fAdcGainQuadr
std::vector< std::vector< std::vector< double > > > fFebexGainQuadr
unsigned int default_FebexCFD_Integration
float GetCFDFraction(unsigned char sfp, unsigned char board, unsigned char ch)
std::string fInputFile
unsigned int default_FebexMWD_Rise
std::vector< std::vector< unsigned int > > fDgfThreshold
std::vector< std::vector< std::vector< int > > > fFebexCFD_Threshold
unsigned int GetCFDIntegrationTime(unsigned char sfp, unsigned char board, unsigned char ch)
std::vector< std::vector< unsigned int > > fAdcThreshold
unsigned int AdcThreshold(unsigned char mod, unsigned char ch)
void SetCFDShapingTime(unsigned char sfp, unsigned char board, unsigned char ch, unsigned int shaping)
unsigned int GetMWDRise(unsigned char sfp, unsigned char board, unsigned char ch)
double DgfGainQuadr(unsigned char mod, unsigned char ch)
unsigned int default_FebexMWD_Baseline
unsigned int default_FebexMWD_Decay
void SetCFDHoldOff(unsigned char sfp, unsigned char board, unsigned char ch, unsigned int hold)
std::vector< std::vector< std::vector< unsigned int > > > fFebexCFD_Shaping
void SetMWDFlatTop(unsigned char sfp, unsigned char board, unsigned char ch, unsigned int top)
std::vector< std::vector< std::vector< std::string > > > fFebexType
const std::string InputFile()
MiniballCalibration(std::string filename, std::shared_ptr< MiniballSettings > myset)
std::vector< std::vector< std::vector< double > > > fFebexGain
unsigned int default_FebexMWD_Top
double AdcGainQuadr(unsigned char mod, unsigned char ch)
std::vector< std::vector< std::vector< unsigned int > > > fFebexMWD_Window
unsigned int DgfThreshold(unsigned char mod, unsigned char ch)
double FebexGainQuadr(unsigned char sfp, unsigned char board, unsigned char ch)
unsigned int default_FebexCFD_Shaping
unsigned int default_FebexMWD_Window
unsigned int GetMWDBaseline(unsigned char sfp, unsigned char board, unsigned char ch)
unsigned int GetCFDHoldOff(unsigned char sfp, unsigned char board, unsigned char ch)
std::vector< std::vector< std::vector< unsigned int > > > fFebexCFD_Delay
void SetMWDWindow(unsigned char sfp, unsigned char board, unsigned char ch, unsigned int window)
unsigned int GetCFDShapingTime(unsigned char sfp, unsigned char board, unsigned char ch)
std::shared_ptr< MiniballSettings > myset
Definition mb_sort.cc:123