1 |
#ifndef caloelectron_h |
2 |
#define caloelectron_h |
3 |
|
4 |
|
5 |
#if !defined(__CINT__) || defined(__MAKECINT__) |
6 |
|
7 |
#include <PamLevel2.h> |
8 |
|
9 |
//#include <TMinuit.h> |
10 |
#include <TPaveStats.h> |
11 |
#include <TStyle.h> |
12 |
#include <TSystem.h> |
13 |
#include <TCanvas.h> |
14 |
#include <TGraphErrors.h> |
15 |
#include <TH1F.h> |
16 |
#include <TF2.h> |
17 |
#include <TH2F.h> |
18 |
#include <TProfile.h> |
19 |
#include <TBenchmark.h> |
20 |
|
21 |
#include <iostream> |
22 |
#include <iomanip> |
23 |
using namespace std; |
24 |
|
25 |
#endif |
26 |
|
27 |
//CaloLevel1* cl1; |
28 |
|
29 |
#define NTAUBINMAX 100 |
30 |
|
31 |
#define WX0 0.350 //cm |
32 |
#define WTICK 0.26 //cm |
33 |
#define PITCH 0.244 //cm |
34 |
#define DEAD 0.096 //cm |
35 |
#define GLUE 0.05 //cm |
36 |
|
37 |
#define CALIBNBIN 600 |
38 |
#define CALIBRANGE 15.//cm |
39 |
|
40 |
double fradpro(Double_t *xi, Double_t *parmin); |
41 |
|
42 |
/////////////////////////////////////////////////// |
43 |
/// |
44 |
/// |
45 |
/// CLASS FOR INITIALIZATIONS & PARAMETERS |
46 |
/// |
47 |
/// |
48 |
/////////////////////////////////////////////////// |
49 |
|
50 |
class CaloElectron_parameters : public TObject{ |
51 |
|
52 |
private: |
53 |
|
54 |
CaloElectron_parameters(){ SetDefault(); }; |
55 |
|
56 |
static CaloElectron_parameters * _parameters; |
57 |
|
58 |
public: |
59 |
|
60 |
static CaloElectron_parameters *Get(){ |
61 |
if(_parameters==0) { |
62 |
// cout << "**NEW**"<<endl; |
63 |
_parameters = new CaloElectron_parameters(); |
64 |
} |
65 |
return _parameters; |
66 |
} |
67 |
|
68 |
// ------ |
69 |
//general |
70 |
// ------ |
71 |
|
72 |
bool debug; |
73 |
|
74 |
int isimu; //simulation flag |
75 |
int dolongfit; //longitudinal-fit flag |
76 |
int dolatcorr; //lateral-correction flag |
77 |
int calibmode; //calibration flag |
78 |
|
79 |
float TAUMAX; // max longitudinal depth to evaluate qtot (TAU=t/T) |
80 |
float RMAX; // max radius around the track to evaluate qtot |
81 |
|
82 |
float RMAXsp; // radius around the track to integrate the profile |
83 |
|
84 |
int ipmin; // first plane (0-21) |
85 |
int ipmax; // last plane (0-21) |
86 |
|
87 |
bool maskpl[22][2]; // plane masks |
88 |
|
89 |
CaloLevel1* cl1; |
90 |
|
91 |
// ----------------------- |
92 |
// plots of energy deposit |
93 |
// ----------------------- |
94 |
TH2F *h_qtot[2]; //matrix of energy deposits (measured) 192x22 |
95 |
TH2F *h_qfit[2]; //matrix of energy deposits (fit) 192x22 |
96 |
|
97 |
// -------------------------------------- |
98 |
// parameters for lateral profile (fixed) |
99 |
// -------------------------------------- |
100 |
|
101 |
float file_rt[12][3]; |
102 |
float file_rc[12][3]; |
103 |
float file_p[12][3]; |
104 |
float file_tau[12]; |
105 |
|
106 |
void Dump(); |
107 |
|
108 |
void SetCalo(int icalo,int notused); |
109 |
void SetPar(); |
110 |
void SetPar(TString pathx,TString pathyd,TString pathyp); |
111 |
void SetRMAX(float setRMAX) {RMAX = setRMAX;}; |
112 |
void SetRMAXsp(float setRMAX) {RMAXsp = setRMAX;}; |
113 |
void SetTAUMAX(float setTAUMAX){TAUMAX = setTAUMAX;}; |
114 |
void Setsimu(int isetsimu) {isimu=isetsimu; SetPar();}; |
115 |
void SetLongitudinalFit(int isetdolongfit) {dolongfit = isetdolongfit;}; |
116 |
void SetLateralCorrection(int isetdolatcorr) {dolatcorr = isetdolatcorr;}; |
117 |
void SetCalibrationMode(int icalibmode){calibmode=icalibmode;}; |
118 |
void SetDebug(bool isetdebug) {debug = isetdebug;}; |
119 |
// |
120 |
void SetCaloLevel1(CaloLevel1 *cl1in) {cl1 = cl1in; }; |
121 |
|
122 |
void SetDefault(); |
123 |
|
124 |
|
125 |
// -------------------------------------- |
126 |
// tools for calibration (NTAUBINMAX) |
127 |
// -------------------------------------- |
128 |
// |
129 |
TH2F *h_qtot_tau[100][3];///< profile histos for x,yodd,yeven |
130 |
TH1F *h_qtot_tau_wav[100][3];///< profile histos for x,yodd,yeven (weighted average) |
131 |
double summW[100][3][1000]; |
132 |
double summWF[100][3][1000]; |
133 |
// |
134 |
float par_rt[100][3]; |
135 |
float par_rc[100][3]; |
136 |
float par_p[100][3]; |
137 |
int par_ntau; |
138 |
float par_taubin[101]; |
139 |
// |
140 |
void Calibration_SetTools(); |
141 |
void Calibration_SetTools(int ntau, float* taubin); |
142 |
void Calibration_Fit(); |
143 |
void Calibration_Save(TFile* file); |
144 |
void Calibration_Load(TFile* file); |
145 |
|
146 |
ClassDef(CaloElectron_parameters,2); |
147 |
|
148 |
}; |
149 |
|
150 |
/////////////////////////////////////////////////// |
151 |
/// |
152 |
/// |
153 |
/// CLASS INPLEMENTATION |
154 |
/// |
155 |
/// |
156 |
/////////////////////////////////////////////////// |
157 |
class CaloElectron : public TObject{ |
158 |
|
159 |
private: |
160 |
|
161 |
public: |
162 |
|
163 |
|
164 |
// ----------- |
165 |
// shower axis |
166 |
// ----------- |
167 |
float trkcoordx[22][2]; ///< track coordinates (PAMELA r.s.) |
168 |
float trkcoordy[22][2]; ///< track coordinates (PAMELA r.s.) |
169 |
float trkstrip[22][2]; ///< strip traversed by the track |
170 |
float tgx,tgy,tg; |
171 |
// -------------- |
172 |
// energy deposit |
173 |
// -------------- |
174 |
float qtot; ///< total collected charge |
175 |
float qplane0[22][2]; ///< collected charge (within RMAX & TAUMAX) |
176 |
float qplane1[22][2]; ///< corrected charge (lateral leakage & gaps) |
177 |
float qplanefit[22][2]; ///< fitted values |
178 |
float tplane[22][2]; ///< shower depth (in units of radiation lenth) |
179 |
// -------------------------------- |
180 |
// parameters from longitudinal fit |
181 |
// -------------------------------- |
182 |
float chi2__l; // output longitudinal fit (chi2) |
183 |
float par__l[4]; // parameters (E,alpha,T,t0) |
184 |
int err__l; // minuit flag (0=ok ecc...) |
185 |
float corr__l; // longitudinal correction factor |
186 |
|
187 |
float chi2; ///< global chi2 (lateral+longitudinal) |
188 |
|
189 |
// -------------- |
190 |
// new variables |
191 |
// -------------- |
192 |
float RMS[22][2]; |
193 |
float SKEW[22][2]; |
194 |
float KURT[22][2]; |
195 |
float TAU[22][2]; |
196 |
|
197 |
|
198 |
CaloElectron(){ Reset(); }; |
199 |
CaloElectron(PamLevel2 *l2, int ntr){ Reset(); Set(l2,ntr); }; |
200 |
|
201 |
/* CaloElectron(){ Reset(); SetDefault(); SetPar(); }; */ |
202 |
/* CaloElectron(PamLevel2 *l2, int ntr){ Reset(); SetPar(); Set(l2,ntr); SetDefault();}; */ |
203 |
/* CaloElectron(PamLevel2 *l2){ Reset(); SetPar(); Set(l2); SetDefault();}; */ |
204 |
|
205 |
~CaloElectron(){ Reset(); }; |
206 |
|
207 |
void Reset(); |
208 |
void Clear(){ Reset(); }; |
209 |
void Delete(){ Reset(); }; |
210 |
|
211 |
bool Set(CaloLevel1*,float tracoo[][2]);//main set |
212 |
bool Set(CaloLevel1*,CaloTrkVar*); |
213 |
bool Set(PamLevel2*,int); |
214 |
|
215 |
// bool Set(PamLevel2* l2){ return Set(l2,0); }; |
216 |
// bool Set(CaloLevel1*,float tracoo[][2]); |
217 |
// bool Set(CaloLevel1*,CaloLevel2*); |
218 |
|
219 |
// ------------------------------------- |
220 |
// methods to perform lateral correction |
221 |
// ------------------------------------- |
222 |
double GetLateralCorrection(double,double,int,int); |
223 |
double GetLateralCorrection(double,double,TF2*,int); |
224 |
float ApplyLateralCorrection(float); |
225 |
void GetProfile(int,int,float xx[],float qq[],float errxx[],float errqq[]); |
226 |
// float GetLateralFactor(){return corr;}; |
227 |
TGraphErrors* GetGraph_Lateral(int, int); |
228 |
TGraphErrors* GetFunc_Lateral(int,int); |
229 |
// ------------------------------------------ |
230 |
// methods to perform longitudinal correction |
231 |
// ------------------------------------------ |
232 |
int ApplyLongitudinalFit(int longto);//return the ierflg value of gminuit minimization |
233 |
float GetLongitudinalCorrection(); |
234 |
// float GetLongitudinalFactor(){return corr__l;}; |
235 |
// float GetLongitudinalFcnout(){return chi2__l;}; |
236 |
float GetIerflg(){return err__l;}; |
237 |
TGraphErrors* GetGraph_Longitudinal(); |
238 |
TGraphErrors* GetGraph_Longitudinal_Fit(); |
239 |
TGraphErrors* GetGraph_Longitudinal_Integral(); |
240 |
TGraphErrors* GetGraph_Longitudinal_Integral_Fit(); |
241 |
TF1* GetFunc_Longitudinal(); |
242 |
float GetMaxResidual(); |
243 |
int GetNRun(); |
244 |
float GetMaxRun(); |
245 |
// ------------------------------------ |
246 |
// other methods |
247 |
// ------------------------------------ |
248 |
float ProfileTest(); |
249 |
void GetCornerCoord(int,int,float&,float&); |
250 |
void Print(); |
251 |
int GetNWLayers(int ip,int iv){ return ip+(1-iv);}; ///< n.W-layers above an active layer |
252 |
// ------------------------------------ |
253 |
// methods to get some shower variables |
254 |
// ------------------------------------ |
255 |
float GetQ(int icorr); ///< shower charge (within RMAX and TAUMAX) |
256 |
float GetQ(){ return GetQ(1); }; ///< shower charge (within RMAX and TAUMAX) |
257 |
float GetQView(int icorr,int iv);///< shower charge on x or y view |
258 |
/* float GetQW(int icorr,int iw); */ |
259 |
/* float GetQW(int icorr,int iw,int iv); */ |
260 |
/* float GetQipiv(int icorr,int ip,int iv); */ |
261 |
float GetEnergy(int icorr); ///< shower energy |
262 |
float GetEnergy(){ return GetEnergy(1); };///< shower energy |
263 |
float GetShowerMaximum(float qplane[][2]); |
264 |
float GetShowerMaximum(int icorr);///< shower maximum (in units of W-layers) |
265 |
float GetShowerMaximumX0(int icorr);///< shower maximum (in units of X0) |
266 |
float GetShowerMaximumView(int view,float qplane[][2]); |
267 |
float GetShowerMaximumView(int view,int icorr);///< shower maximum (in units of W-layers) |
268 |
float GetShowerMaximumViewX0(int view,int icorr);///< shower maximum (in units of X0) |
269 |
/* float GetStripMaximum(int iv,int icorr);///< strip traversed by track on maximum plane */ |
270 |
/* float GetCoordMaximum(int iv,int icorr);///< coordinate traversed by track on maximum plane */ |
271 |
/* float GetStripW(int iw,int iv);///< coordinate traversed by track after iw tungsten planes */ |
272 |
/* float GetCoordW(int iw,int iv,int ixy);///< coordinate traversed by track after iw tungsten planes */ |
273 |
/* float GetmaxStrip(int ip,int iv); */ |
274 |
|
275 |
|
276 |
bool IsInsideFiducial(int level); |
277 |
|
278 |
// ------------------------------------ |
279 |
// methods to perform calibration |
280 |
// ------------------------------------ |
281 |
void Calibration_Fill(); |
282 |
|
283 |
|
284 |
ClassDef(CaloElectron,4); |
285 |
|
286 |
}; |
287 |
|
288 |
|
289 |
|
290 |
#endif |