KaliVeda
Toolkit for HIC analysis
KVSignal.h
1 
4 #ifndef __KVSIGNAL_H
5 #define __KVSIGNAL_H
6 
7 #include "TGraph.h"
8 #include "TArrayF.h"
9 #include "TH1F.h"
10 #include "KVNameValueList.h"
11 
19 class KVSignal : public TGraph {
20 
21 protected:
33 
47 
49 
54 
55  virtual void BuildCubicSignal(); //Interpolazione mediante cubic
56  virtual void BuildCubicSplineSignal(); //Interpolazione mediante cubic spline
57  virtual void BuildSmoothingSplineSignal(); //Interpolazione mediante cubic spline
58  void init();
59 
60  void print_psa_parameters() const;
61 
62  public:
63  KVSignal();
64  KVSignal(const char* name, const char* title);
65  KVSignal(const TString& name, const TString& title);
66 
67  Bool_t IsLongEnough() const;
68 
69  virtual Bool_t IsCharge() const
70  {
71  return kFALSE;
72  }
73  virtual Bool_t IsCurrent() const
74  {
75  return kFALSE;
76  }
80  virtual const Char_t* GetDetectorName() const
81  {
82  return "";
83  }
84  void SetType(const Char_t* type)
85  {
86  fType = type;
87  SetTitle(type);
88  }
89  const Char_t* GetType() const
90  {
91  return fType.Data();
92  }
93  virtual Int_t GetIndex() const
94  {
95  return -1;
96  }
97  virtual Int_t GetNFPGAValues() const
98  {
99  return -1;
100  }
101  virtual Bool_t HasFPGA() const
102  {
103  return false;
104  }
105 
106  void Print(Option_t* chopt = "") const override;
107 
109  void SetData(Int_t nn, Double_t* xx, Double_t* yy);
110  void Set(Int_t n) override;
111  void SetADCData();
113  {
114  return &fAdc;
115  }
116 
120  virtual Double_t GetPSAParameter(const Char_t* parname)
121  {
122  return 0;
123  }
124  virtual void LoadPSAParameters();
125  virtual void SetDefaultValues();
126  virtual void UpdatePSAParameter(KVNameValueList* par);
127  KVSignal* ConvertTo(const Char_t* type);
128 
129  bool IsOK();
130 
134  virtual void TreateSignal();
135  virtual void GetPSAResults(KVNameValueList&) const {}
137  {
138  return fPSAIsDone;
139  }
140 
144  void SetChannelWidth(double width)
145  {
148  }
150  {
151  return fChannelWidth;
152  }
153  Bool_t TestWidth() const;
154  void ChangeChannelWidth(Double_t newwidth);
156  void SetMaxT(double t)
157  {
158  fAdc.Set((int)(t / fChannelWidth));
159  }
161  void SetNSamples(int nn)
162  {
163  fAdc.Set(nn);
164  }
166  {
167  return fAdc.GetSize();
168  }
169 
173  void SetBaseLineLength(Int_t length, Int_t first = 0)
174  {
175  fFirstBL = first;
176  fLastBL = length - first;
177  }
179  {
180  return fFirstBL;
181  }
183  {
184  return fLastBL - fFirstBL;
185  }
186 
187  virtual Double_t ComputeBaseLine();
188  virtual Double_t ComputeDuration(Double_t th = 0.2);
189  virtual Double_t ComputeEndLine();
190  virtual void RemoveBaseLine();
191 
192  void BuildReverseTimeSignal();
193 
194  Bool_t IsFired();
195 
197  {
198  return fBaseLine;
199  }
201  {
202  return fSigmaBase;
203  }
204 
206  {
207  return fEndLine;
208  }
210  {
211  return fSigmaEnd;
212  }
213 
219  {
220  return fRiseTime;
221  }
222 
228  {
229  return fAmplitude;
230  }
231 
236  {
237  fTrapRiseTime = rise;
238  fTrapFlatTop = flat;
239  }
241  {
242  fTrapRiseTime = rise;
243  }
245  {
246  fTrapFlatTop = flat;
247  }
249  {
250  return fTrapRiseTime;
251  }
253  {
254  return fTrapFlatTop;
255  }
256  Double_t ComputeCFDThreshold(Double_t threshold = 0.5);
257 
262  {
263  fSemiGaussSigma = sig;
264  }
266  {
267  return fSemiGaussSigma;
268  }
269 
273  void SetPoleZeroCorrection(Bool_t with = kTRUE)
274  {
276  }
277  void SetTauRC(Int_t taurc)
278  {
279  fTauRC = taurc;
280  }
282  {
283  return fTauRC;
284  }
285 
289  void SetInterpolation(Bool_t with = kTRUE)
290  {
291  fWithInterpolation = with;
292  }
293  void SetInterpolatedChannelWidth(double width)
294  {
296  }
298  {
300  }
301 
305  virtual void ComputeRawAmplitude(void);
307  {
308  return fYmax - fYmin;
309  }
311  {
312  return fYmin;
313  }
315  {
316  return fYmax;
317  }
318 
321  {
323  }
325  {
327  }
328 
330  Bool_t ComputeMeanAndSigma(Int_t start, Int_t stop, Double_t& mean, Double_t& sigma);
331  Bool_t ComputeMeanAndSigma(Double_t start, Double_t stop, Double_t& mean, Double_t& sigma);
332 
334  void Multiply(Double_t fact);
335  void Add(Double_t fact);
336 
338  Double_t ARC_CFD(Double_t threshold = 0.3, Double_t tdelay = 10);
339  double FindTzeroLeadingEdgeCubic(double LEVEL, int Nrecurr);
340  Double_t FindTzeroCFDCubic(double level, int Nrecurr);
341  double FindTzeroCFDCubic_rev(double level, double tend, int Nrecurr);
342  Double_t CubicInterpolation(float* data, int x2, double fmax, int Nrecurr);
343 
344  virtual void BuildCubicSignal(double taufinal); //Interpolazione mediante cubic
345  virtual void BuildCubicSplineSignal(double taufinal);//Interpolazione mediante spline cubic
346  virtual void BuildSmoothingSplineSignal(double taufinal, double l = 1, int nbits = -1); //Interpolazione mediante smoothing spline
347 
348  virtual double GetDataInter(double t);
349  virtual double GetDataInterCubic(double t);
350  virtual double GetDataCubicSpline(double t);
351  virtual double GetDataSmoothingSplineLTI(double t);//metodo che serve a BuildSmoothingSpline
352  virtual double EvalCubicSpline(double X);//metodo che serve a BuildSmoothingSpline
353 
355  void FIR_ApplyTrapezoidal(double trise, double tflat); // trise=sqrt(12)*tausha di CR-RC^4 se tflat=trise/2
356  void FIR_ApplySemigaus(double tau_usec);
357  void FIR_ApplyRCLowPass(double time_usec, int reverse = 0);
358  void FIR_ApplyRCHighPass(double time_usec, int reverse = 0);
359  void FIR_ApplyRecursiveFilter(double a0, int N, double* a, double* b, int reverse);
360  void FIR_ApplyMovingAverage(int npoints);
361  void PoleZeroSuppression(Double_t tauRC);
362  int FIR_ApplySmoothingSpline(double l, int nbits = -1);
363  double ApplyNewton(double l, double x0);//metodo che serve a FIR_ApplySmoothingSpline
364 
366  void ApplyWindowing(int window_type = 3); // 0: barlett, 1:hanning, 2:hamming, 3: blackman
367  static int FFT(unsigned int p_nSamples, bool p_bInverseTransform, double* p_lpRealIn, double* p_lpImagIn, double* p_lpRealOut, double* p_lpImagOut); // nsamples: power of 2
368  int FFT(bool p_bInverseTransform, double* p_lpRealOut, double* p_lpImagOut);
369  TH1* FFT2Histo(int output, TH1* hh = 0); // 0 modulo, 1 modulo db (normalized), 2, re, 3 im
370 
372  void ApplyModifications(TGraph* newSignal = 0, Int_t nsa = -1);
373 
374 
376  void ShiftLeft(double);//shift in ns
377  void ShiftRight(double);//shift in ns
378  void TestDraw();
379 
380  static KVSignal* MakeSignal(const char* sig_type);
381 
382  ClassDefOverride(KVSignal, 5) //Base class for signal processing
383 
384 };
385 
386 #endif
int Int_t
bool Bool_t
char Char_t
constexpr Bool_t kFALSE
double Double_t
const char Option_t
#define ClassDefOverride(name, id)
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h length
Option_t Option_t width
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h Atom_t Int_t ULong_t ULong_t unsigned char prop_list Atom_t Atom_t Atom_t Time_t type
Handles lists of named parameters with different types, a list of KVNamedParameter objects.
Base class for digital signal processing.
Definition: KVSignal.h:19
Double_t fInterpolatedChannelWidth
channel width used to produced the interpolated signal
Definition: KVSignal.h:38
void SetTauRC(Int_t taurc)
Definition: KVSignal.h:277
Double_t ComputeCFDThreshold(Double_t threshold=0.5)
calculate the time during which the signal is higher than th*fAmplitude
Definition: KVSignal.cpp:351
void FIR_ApplyMovingAverage(int npoints)
Definition: KVSignal.cpp:1543
Double_t CubicInterpolation(float *data, int x2, double fmax, int Nrecurr)
Definition: KVSignal.cpp:975
void Add(Double_t fact)
Definition: KVSignal.cpp:1602
const Char_t * GetType() const
Definition: KVSignal.h:89
Double_t GetSemiGaussSigma() const
Definition: KVSignal.h:265
Bool_t IsLongEnough() const
Definition: KVSignal.cpp:109
TString fType
string to identify the signal type
Definition: KVSignal.h:48
void ChangeChannelWidth(Double_t newwidth)
Definition: KVSignal.cpp:286
Double_t GetShaperRiseTime() const
Definition: KVSignal.h:248
virtual Double_t ComputeDuration(Double_t th=0.2)
calculate the time during which the signal is higher than th*fAmplitude
Definition: KVSignal.cpp:321
static int FFT(unsigned int p_nSamples, bool p_bInverseTransform, double *p_lpRealIn, double *p_lpImagIn, double *p_lpRealOut, double *p_lpImagOut)
Definition: KVSignal.cpp:774
void SetInterpolation(Bool_t with=kTRUE)
Definition: KVSignal.h:289
void ApplyModifications(TGraph *newSignal=0, Int_t nsa=-1)
apply modifications of fAdc to the original signal
Definition: KVSignal.cpp:1577
virtual void RemoveBaseLine()
Definition: KVSignal.cpp:406
virtual const Char_t * GetDetectorName() const
Definition: KVSignal.h:80
Double_t fEndLine
mean value of the signal line at the end
Definition: KVSignal.h:31
Double_t fYmax
raw min/max of the signal
Definition: KVSignal.h:28
void SetShaperRiseTime(Double_t rise)
Definition: KVSignal.h:240
virtual void GetPSAResults(KVNameValueList &) const
Definition: KVSignal.h:135
virtual Bool_t IsCharge() const
Definition: KVSignal.h:69
void FIR_ApplyRCLowPass(double time_usec, int reverse=0)
Definition: KVSignal.cpp:1444
Double_t fAmplitude
results of signal treatement
Definition: KVSignal.h:24
double FindTzeroCFDCubic_rev(double level, double tend, int Nrecurr)
Definition: KVSignal.cpp:1403
virtual void TreateSignal()
Definition: KVSignal.cpp:212
virtual Double_t ComputeBaseLine()
Definition: KVSignal.cpp:303
virtual void BuildCubicSplineSignal()
Definition: KVSignal.cpp:1163
void Set(Int_t n) override
Definition: KVSignal.cpp:118
Bool_t ComputeMeanAndSigma(Int_t start, Int_t stop, Double_t &mean, Double_t &sigma)
compute mean value and rms of a subset of samples
Definition: KVSignal.cpp:505
virtual double EvalCubicSpline(double X)
Definition: KVSignal.cpp:1389
Double_t fSigmaBase
base line rms
Definition: KVSignal.h:30
virtual double GetDataInter(double t)
Definition: KVSignal.cpp:1013
void SetData(Int_t nn, Double_t *xx, Double_t *yy)
operation on data arrays
Definition: KVSignal.cpp:130
virtual Bool_t HasFPGA() const
Definition: KVSignal.h:101
TArrayF * GetArray()
Definition: KVSignal.h:112
void SetInterpolatedChannelWidth(double width)
Definition: KVSignal.h:293
virtual Int_t GetNFPGAValues() const
Definition: KVSignal.h:97
virtual double GetDataCubicSpline(double t)
see HSIEH S.HOU IEEE Trans. Acoustic Speech, vol. ASSP-26, NO.6, DECEMBER 1978
Definition: KVSignal.cpp:1053
void ApplyWindowing(int window_type=3)
fast fourier transform and windowing of the signal (modify only fAdc)
Definition: KVSignal.cpp:738
Int_t GetNSamples() const
Definition: KVSignal.h:165
void print_psa_parameters() const
Definition: KVSignal.cpp:221
virtual void LoadPSAParameters()
Definition: KVSignal.cpp:193
Double_t GetAmplitude() const
Definition: KVSignal.h:227
void SetPoleZeroCorrection(Bool_t with=kTRUE)
Definition: KVSignal.h:273
Bool_t fWithInterpolation
use of interpolation or not
Definition: KVSignal.h:45
Double_t fChannelWidth
channel width in ns
Definition: KVSignal.h:37
Int_t fFirstBL
Definition: KVSignal.h:39
virtual Double_t GetPSAParameter(const Char_t *parname)
Definition: KVSignal.h:120
Double_t GetAmplitudeTriggerValue() const
routines to manage threshold for minimum charge in the detector
Definition: KVSignal.h:320
Double_t GetBLFirst() const
Definition: KVSignal.h:178
bool IsOK()
Definition: KVSignal.cpp:99
Double_t fYmin
Definition: KVSignal.h:28
static KVSignal * MakeSignal(const char *sig_type)
Create new KVSignal instance corresponding to sig_type.
Definition: KVSignal.cpp:1664
Double_t fMinimumValueForAmplitude
Minimum value to say if detector has been hitted.
Definition: KVSignal.h:46
Double_t GetRawAmplitude() const
Definition: KVSignal.h:306
void ShiftLeft(double)
---------------— OPERATORI ------------------—//
Definition: KVSignal.cpp:1612
Double_t fSigmaEnd
rms value of the signal line at the end
Definition: KVSignal.h:32
void SetNSamples(int nn)
Definition: KVSignal.h:161
Double_t fBaseLine
base line mean value
Definition: KVSignal.h:29
Double_t ARC_CFD(Double_t threshold=0.3, Double_t tdelay=10)
Interpolations.
Definition: KVSignal.cpp:466
Double_t fChannelWidthInt
internal parameter channel width of interpolated signal in ns
Definition: KVSignal.h:53
void SetBaseLineLength(Int_t length, Int_t first=0)
Definition: KVSignal.h:173
Double_t fIMax
position of the maximum in channel
Definition: KVSignal.h:26
virtual double GetDataInterCubic(double t)
Definition: KVSignal.cpp:1032
Double_t ComputeAmplitude()
Compute and return the absolute value of the signal amplitude.
Definition: KVSignal.cpp:431
void SetTrapShaperParameters(Double_t rise, Double_t flat)
Definition: KVSignal.h:235
KVSignal()
Default constructor.
Definition: KVSignal.cpp:50
void Multiply(Double_t fact)
multiply the signal (modify only fAdc)
Definition: KVSignal.cpp:1593
Double_t GetSigmaEndLine() const
Definition: KVSignal.h:209
virtual void BuildSmoothingSplineSignal()
Definition: KVSignal.cpp:1236
void init()
Definition: KVSignal.cpp:21
void FIR_ApplyRCHighPass(double time_usec, int reverse=0)
Definition: KVSignal.cpp:1466
virtual double GetDataSmoothingSplineLTI(double t)
Definition: KVSignal.cpp:1370
void SetShaperFlatTop(Double_t flat)
Definition: KVSignal.h:244
int FIR_ApplySmoothingSpline(double l, int nbits=-1)
Definition: KVSignal.cpp:1249
Double_t GetBaseLine() const
Definition: KVSignal.h:196
Int_t fLastBL
first and last channel number to compute the base line
Definition: KVSignal.h:39
TArrayF fAdc
Definition: KVSignal.h:22
void TestDraw()
Definition: KVSignal.cpp:1653
void Print(Option_t *chopt="") const override
Definition: KVSignal.cpp:240
void SetMaxT(double t)
Definition: KVSignal.h:156
Bool_t IsFired()
ComputeBaseLine and ComputeEndLine methods have to be called before.
Definition: KVSignal.cpp:393
void SetADCData()
Definition: KVSignal.cpp:152
Double_t GetEndLine() const
Definition: KVSignal.h:205
void SetType(const Char_t *type)
Definition: KVSignal.h:84
void SetChannelWidth(double width)
Definition: KVSignal.h:144
Bool_t PSAHasBeenComputed() const
Definition: KVSignal.h:136
Double_t GetBLLength() const
Definition: KVSignal.h:182
Double_t GetShaperFlatTop() const
Definition: KVSignal.h:252
Double_t fTauRC
tau_rc of the electronics. Used for pole zero cancellation.
Definition: KVSignal.h:40
virtual Bool_t IsCurrent() const
Definition: KVSignal.h:73
Double_t ComputeRiseTime()
Definition: KVSignal.cpp:448
Double_t fTMax
position of the maximum in ns
Definition: KVSignal.h:27
Double_t GetInterpolatedChannelWidth() const
Definition: KVSignal.h:297
void FIR_ApplyTrapezoidal(double trise, double tflat)
different shapers (modify only fAdc)
Definition: KVSignal.cpp:651
virtual void SetDefaultValues()
To be defined in child class.
Definition: KVSignal.cpp:203
void ShiftRight(double)
Definition: KVSignal.cpp:1631
Double_t GetYmax() const
Definition: KVSignal.h:314
void FIR_ApplyRecursiveFilter(double a0, int N, double *a, double *b, int reverse)
signal will be: y[n]=a0*x[n]+sum a[k] x[k] + sum b[k] y[k]
Definition: KVSignal.cpp:1487
Double_t GetSigmaBaseLine() const
Definition: KVSignal.h:200
KVSignal * ConvertTo(const Char_t *type)
Definition: KVSignal.cpp:85
double ApplyNewton(double l, double x0)
Definition: KVSignal.cpp:1327
virtual void ComputeRawAmplitude(void)
Definition: KVSignal.cpp:252
Double_t FindTzeroCFDCubic(double level, int Nrecurr)
Definition: KVSignal.cpp:697
void FIR_ApplySemigaus(double tau_usec)
Definition: KVSignal.cpp:1425
Bool_t fWithPoleZeroCorrection
use or nor pole zero correction
Definition: KVSignal.h:44
Double_t fTrapFlatTop
flat top of the trapezoidal shaper
Definition: KVSignal.h:42
double FindTzeroLeadingEdgeCubic(double LEVEL, int Nrecurr)
Definition: KVSignal.cpp:488
Double_t fRiseTime
rise time of the signal
Definition: KVSignal.h:25
virtual void UpdatePSAParameter(KVNameValueList *par)
Definition: KVSignal.cpp:165
Double_t fSemiGaussSigma
sigma of the semi-gaussian shaper
Definition: KVSignal.h:43
Bool_t fPSAIsDone
indicate if PSA has been done
Definition: KVSignal.h:52
void SetSemiGaussSigma(Double_t sig)
Definition: KVSignal.h:261
TH1 * FFT2Histo(int output, TH1 *hh=0)
Definition: KVSignal.cpp:916
void PoleZeroSuppression(Double_t tauRC)
Definition: KVSignal.cpp:1560
Double_t fTrapRiseTime
rise time of the trapezoidal shaper
Definition: KVSignal.h:41
virtual void BuildCubicSignal()
Definition: KVSignal.cpp:1198
void BuildReverseTimeSignal()
Definition: KVSignal.cpp:418
Double_t GetTauRC() const
Definition: KVSignal.h:281
Bool_t TestWidth() const
Definition: KVSignal.cpp:270
virtual Double_t ComputeEndLine()
Definition: KVSignal.cpp:376
Double_t GetYmin() const
Definition: KVSignal.h:310
Double_t GetRiseTime() const
Definition: KVSignal.h:218
virtual Int_t GetIndex() const
Definition: KVSignal.h:93
Double_t GetChannelWidth() const
Definition: KVSignal.h:149
void SetAmplitudeTriggerValue(Double_t val)
Definition: KVSignal.h:324
void Set(Int_t n) override
Int_t GetSize() const
void SetTitle(const char *title="") override
const char * Data() const