AEvent.h 4.32 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
/*
 * AEvent.h
 *
 *  Created on: Dec 28, 2016
 *      Author: daria
 */

#ifndef DATACLASSES_AEVENT_H_
#define DATACLASSES_AEVENT_H_

#include <iostream>
#include <fstream>
#include <iomanip>
#include <sstream>

#include "TError.h"
#include "TString.h"
#include "TTree.h"
#include "TFile.h"
20
#include "TF1.h"
21 22 23 24 25
//#include "TMath.h"


#include "RawEvent.h"

26
//#define NCELLS 1024
27 28 29 30 31 32 33 34 35

using std::cout;
using std::endl;

class AEvent {

private:

	const Int_t fNPoints;	//!
36 37 38
	TArrayD fAmpPos;	//array for raw amplitudes
	TArrayD fTime;		//array for raw times

39 40
	Double_t fAmpMax;
	Double_t fTimeAmpMax;
41
	Double_t fZeroLevel;
42
	Double_t fEdgeXi;
43 44 45
	Double_t fEdgeSlope;	//slope coefficient for the rising edge of the signal
	Double_t fTime10;		//time of 10% of rising edge amplitude in ns
	Double_t fTime90;		//time of 10% of rising edge amplitude in ns
46
	Double_t fTimeMid;		//time point between fTime90 and fTime10
47 48
	Double_t fAmpMid;		//amplitude in fTimeMid point. Used in ToT on 50% of rising edge determination
	Double_t fToT;
Muzalevsky I.A's avatar
Muzalevsky I.A committed
49
	Double_t fTimeLast;  //!
50 51

	TArrayD fAmpCFD;	//array for CFD amplitudes (attenuated, inversed and delayed)
52
	Double_t fTimeCFD;			//zero-crossing time
53
<<<<<<< HEAD
Muzalevsky I.A's avatar
Muzalevsky I.A committed
54
	Double_t fChargeCFD;
55
=======
56
	Double_t fChargeCFD;	//
57
>>>>>>> 5eb9075c10d86d66bba9b5c694fbdb722d11105d
58
	Double_t fChargeLED;	//charge of the signal in Coulomb
59
	Double_t fChargeTF;	//
60

Muzalevsky I.A's avatar
Muzalevsky I.A committed
61 62
	Double_t fTimeThresh;  // time of thresh crossing rising edge
	Double_t fTimeThreshBack;  // time of threshBack crossing
63
	Double_t fTimeLED;	//time of LED threshold crossing
64
	Double_t fTimeFront;	//time of front fit crossing zero level
65

66 67
	TGraph *fGraphSignal;
	TGraph *fGraphCFD;
68
//	TGraph *fGraphSmooth;
69 70 71

	RawEvent *fInputEvent;		//!

72
	Double_t fCFratio;		//!
73 74
	Double_t fCFtimeDelay;		//!

75 76
	Double_t fNoiseRangeMin;	//!
	Double_t fNoiseRangeMax;	//!
77
	Int_t fWinSize;			//!
78

79 80
public:
	AEvent();
81
	AEvent(const Int_t npoints);
82 83
	virtual ~AEvent();
	ClassDef(AEvent,1);
84 85
	
	Double_t GetT_10();
86 87
	//returns time of 10% of rising edge amplitude in ns

88
	Double_t GetT_90();
89 90
	//returns time of 90% of rising edge amplitude in ns

91
	Double_t GetEdgeSlope();
92 93
	//returns slope coefficient for the rising edge of the signal

94 95
	Double_t GetEdgeXi();

Muzalevsky I.A's avatar
Muzalevsky I.A committed
96 97 98 99
	Double_t GetfChargeCFD();

	Double_t GetfChargeTF();

Muzalevsky I.A's avatar
Muzalevsky I.A committed
100
	Double_t GetfCFD();
101

Muzalevsky I.A's avatar
Muzalevsky I.A committed
102
	Double_t GetfLED();
Muzalevsky I.A's avatar
Muzalevsky I.A committed
103 104 105
	
	Double_t GetfThresh();
	
Muzalevsky I.A's avatar
Muzalevsky I.A committed
106
	Double_t GetOnefTime(Int_t i);
107

Muzalevsky I.A's avatar
Muzalevsky I.A committed
108
	Double_t GetOnefAmpPos(Int_t i);
109

Vratislav Chudoba's avatar
Vratislav Chudoba committed
110
	void ProcessEvent(Bool_t bSmooth = kFALSE);
111
	void SetInputEvent(RawEvent** event);
112

113 114 115 116 117
	void SetCFratio(Double_t ratio) { fCFratio = ratio; };	
	//CFD set attenuation coefficient

	void SetCFtimeDelay(Double_t timeDelay) { fCFtimeDelay = timeDelay; };	
	//CFD set time delay (in points)
118

119 120 121
	void SetNoiseRange(Double_t min, Double_t max) { fNoiseRangeMin = min; fNoiseRangeMax = max; };
	//Set noise range to be used in FindZeroLevel()

122 123 124
	void SetSmoothPoints(Int_t numofp) {fWinSize = numofp; };
	//set number of smoothing points

125 126 127 128
	void SetToT();
	//calculate time-over-threshold. the threshold value is fTimeMid - middle point of the rising edge
	//ToT is calculated within 15 ns range in order to consider all the weirdness of the signal form

129 130 131
	void Reset();
	 //Resets arrays to zeros

132 133
	TGraph* GetGraphCFD() {

134
		return fGraphCFD;
135
	}
136 137 138 139 140 141
	//draws CFD graphs

	TGraph* GetGraphSignal() {

		return fGraphSignal;
	}
142

143
	/*TGraph* GetGraphSmooth() {
144 145

		return fGraphSmooth;
146
	}*/
147 148
	//draws signal shape graphs

149 150
	void FindFrontProperties();

151
	Double_t FindZeroLevel();
152
	//for zero level correction. one parameter fit between pmin and pmax
153
	//returns fit parameter i.e. number on which amplitude should be corrected
154

155
	void SetChargeCFD(Int_t tmin = -3, Int_t tmax = 17);
156 157 158 159
	//calculates charge of the signal (i.e. its integral 
	//in range of (tmin,tmax) in ns)
	//CFD time is taken as a start point

160 161
	void SetChargeLED(Int_t tmin = -3, Int_t tmax = 17);

162 163 164 165
	void SetChargeTF(Int_t tmin = -3, Int_t tmax = 17);
	//calculates charge of the signal (i.e. its integral 
	//in range of (tmin,tmax) in ns) 
	//time of front fit crossing zero is taken as a start point
166

Muzalevsky I.A's avatar
Muzalevsky I.A committed
167
	//void SetLED(Double_t threshold = 0.001);
168

Muzalevsky I.A's avatar
Muzalevsky I.A committed
169
	void SetLED(Double_t threshold = 0.01);
170

171
	//leading edge discriminator
Muzalevsky I.A's avatar
Muzalevsky I.A committed
172 173
	void SetThreshold(Double_t thresholdBack = 0.035, Double_t threshRise = 0.01);
	
174 175
private:
	void Init();
176
	void SetMaxAmplitudes();
177
	void SetGraphs();
178
	void SmoothGraphs();
179
	void SetCFD(); 	//constant fraction discriminator method
180 181 182
};

#endif /* DATACLASSES_AEVENT_H_ */