1 |
//***************************************************** |
2 |
//24-feb-2009: introduced "beta_in" and "Set_Beta": |
3 |
// beta_in is set to 100 by default. If it is not overwritten |
4 |
// by "Set_Beta" (ToFNuclei.h), the code is used as before. |
5 |
// If beta_in was set by the user using "Set_Beta", this beta |
6 |
// is taken for the calculations. |
7 |
// |
8 |
//26-feb-2009: Inserted S115B calibrations from Lucia |
9 |
// |
10 |
//02-apr-2009: bug found in some "if" statements for the |
11 |
// "Layercharge" definition, but only important if ADC=4095 |
12 |
// |
13 |
//15-apr-2009: small bug found in the calculation of the PMT |
14 |
// charge, the charge for the PMTs 1,9,28.. was calculated |
15 |
// twice, but the final result was OK |
16 |
// |
17 |
//05-may-2009: bug found in the calculation of the PMT |
18 |
// charge for standalone ToF due to changes made for rev 1.4: |
19 |
// For PMTs 4,8,39,41 (counting 0..47) no charge was calculated |
20 |
// calibration arrays now including correct brackets to avoid |
21 |
// compiler warnings |
22 |
//06-aug-2009: charge_layer_trk_raw and charge_layer_std_raw |
23 |
// added: These are the "raw" values before doing the 2nd-order |
24 |
// correction |
25 |
//***************************************************** |
26 |
#include <ToFNuclei.h> |
27 |
|
28 |
//-------------------------------------- |
29 |
/** |
30 |
* Default constructor |
31 |
*/ |
32 |
ToFNuclei::ToFNuclei(){ |
33 |
Clear(); |
34 |
}; |
35 |
|
36 |
ToFNuclei::ToFNuclei(PamLevel2 *l2p){ |
37 |
// |
38 |
Clear(); |
39 |
// |
40 |
L2 = l2p; |
41 |
// |
42 |
beta_in = 100.; |
43 |
// |
44 |
if ( !L2->IsORB() ) printf(" WARNING: OrbitalInfo Tree is needed, the plugin could not work properly without it \n"); |
45 |
// |
46 |
OBT = 0; |
47 |
PKT = 0; |
48 |
atime = 0; |
49 |
// |
50 |
sntr = 0; |
51 |
debug = false; |
52 |
// |
53 |
}; |
54 |
|
55 |
void ToFNuclei::Clear(){ |
56 |
// |
57 |
ncount_trk = 0.; |
58 |
charge_trk = 0.; |
59 |
memset (charge_layer_trk,0,6*sizeof(Float_t)); // |
60 |
memset (charge_layer_trk_raw,0,6*sizeof(Float_t)); // |
61 |
memset (charge_PMT_trk,0,48*sizeof(Float_t)); // |
62 |
memset (layerinfo_trk,0,6*sizeof(Int_t)); // |
63 |
ncount_std = 0.; |
64 |
charge_std = 0.; |
65 |
memset (charge_layer_std,0,6*sizeof(Float_t)); // |
66 |
memset (charge_layer_std_raw,0,6*sizeof(Float_t)); // |
67 |
memset (charge_PMT_std,0,48*sizeof(Float_t)); // |
68 |
memset (layerinfo_std,0,6*sizeof(Int_t)); // |
69 |
}; |
70 |
|
71 |
void ToFNuclei::Print(){ |
72 |
// |
73 |
Process(); |
74 |
// |
75 |
printf("========================================================================\n"); |
76 |
printf(" OBT: %u PKT: %u ATIME: %u Track %i \n",OBT,PKT,atime,tr); |
77 |
printf(" std : charge %f ncount %d layers %f %f %f %f %f %f \n",charge_std,ncount_std,charge_layer_std[0],charge_layer_std[1],charge_layer_std[2],charge_layer_std[3],charge_layer_std[4],charge_layer_std[5]); |
78 |
printf(" std : layerinfo %d %d %d %d %d %d \n",layerinfo_std[0],layerinfo_std[1],layerinfo_std[2],layerinfo_std[3],layerinfo_std[4],layerinfo_std[5]); |
79 |
|
80 |
printf(" trk : charge %f ncount %d layers %f %f %f %f %f %f \n",charge_trk,ncount_trk,charge_layer_trk[0],charge_layer_trk[1],charge_layer_trk[2],charge_layer_trk[3],charge_layer_trk[4],charge_layer_trk[5]); |
81 |
printf(" trk : layerinfo %d %d %d %d %d %d \n",layerinfo_trk[0],layerinfo_trk[1],layerinfo_trk[2],layerinfo_trk[3],layerinfo_trk[4],layerinfo_trk[5]); |
82 |
printf("========================================================================\n"); |
83 |
// |
84 |
}; |
85 |
|
86 |
void ToFNuclei::Delete(){ |
87 |
Clear(); |
88 |
}; |
89 |
|
90 |
|
91 |
void ToFNuclei::Process(){ |
92 |
Process(0); |
93 |
}; |
94 |
|
95 |
void ToFNuclei::Process(Int_t ntr){ |
96 |
// |
97 |
if ( !L2 ){ |
98 |
printf(" ERROR: cannot find PamLevel2 object, use the correct constructor or check your program!\n"); |
99 |
printf(" ERROR: CaloExample variables not filled \n"); |
100 |
return; |
101 |
}; |
102 |
// |
103 |
Bool_t newentry = false; |
104 |
// |
105 |
if ( L2->IsORB() ){ |
106 |
if ( L2->GetOrbitalInfo()->pkt_num != PKT || L2->GetOrbitalInfo()->OBT != OBT || L2->GetOrbitalInfo()->absTime != atime || ntr != sntr ){ |
107 |
newentry = true; |
108 |
OBT = L2->GetOrbitalInfo()->OBT; |
109 |
PKT = L2->GetOrbitalInfo()->pkt_num; |
110 |
atime = L2->GetOrbitalInfo()->absTime; |
111 |
sntr = ntr; |
112 |
}; |
113 |
} else { |
114 |
newentry = true; |
115 |
}; |
116 |
// |
117 |
if ( !newentry ) { |
118 |
return; |
119 |
} |
120 |
// |
121 |
tr = ntr; |
122 |
// |
123 |
if ( debug ) printf(" Processing event at OBT %u PKT %u time %u \n",OBT,PKT,atime); |
124 |
// |
125 |
// charge_trk = 0.; |
126 |
// memset (charge_layer_trk,0,6*sizeof(Float_t)); // |
127 |
// charge_std = 0.; |
128 |
// memset (charge_layer_std,0,6*sizeof(Float_t)); // |
129 |
|
130 |
Clear(); |
131 |
|
132 |
// cout<<"beta_in = "<<beta_in<<endl; |
133 |
|
134 |
|
135 |
Double_t time = L2->GetOrbitalInfo()->absTime; |
136 |
|
137 |
//======================================================================= |
138 |
//============== Siegen version 1 ==================== |
139 |
//============== track dependent dEdx and beta ==================== |
140 |
//======================================================================= |
141 |
|
142 |
//if (L2->GetTrkLevel2()->GetNTracks()!=1) return; |
143 |
if (L2->GetTrkLevel2()->GetNTracks()==1) { |
144 |
|
145 |
/* |
146 |
Float_t PMTsat[48] = { |
147 |
3162.14, 3165.48, 3153.85, 3085.73, 3089.65, 3107.64, 3097.52, 3078.37, 3130.05, 3087.07, 3112.22, |
148 |
3102.92, 3080.58, 3092.55, 3087.94, 3125.03, 3094.09, 3143.16, |
149 |
3125.51, 3181.27, 3092.09, 3124.98, 3069.3, 3095.53, 3097.11, 3133.53, 3114.73, 3113.01, 3091.19, |
150 |
3097.99, 3033.84, 3134.98, 3081.37, 3111.04, 3066.77, 3108.17, |
151 |
3133, 3111.06, 3052.52, 3140.66, 3106.33, 3094.85, 3150.85, 3118.8, 3096.24, 3118.47,3111.36, 3117.11 |
152 |
}; |
153 |
*/ |
154 |
|
155 |
// new values from Napoli dec 2008 |
156 |
Float_t PMTsat[48] = { |
157 |
3176.35,3178.19,3167.38,3099.73,3117.00,3126.29,3111.44,3092.27, |
158 |
3146.48,3094.41,3132.13,3115.37,3099.32,3110.97,3111.80,3143.14, |
159 |
3106.72,3153.44,3136.00,3188.96,3104.73,3140.45,3073.18,3106.62, |
160 |
3112.48,3146.92,3127.24,3136.52,3109.59,3112.89,3045.15,3147.26, |
161 |
3095.92,3121.05,3083.25,3123.62,3150.92,3125.30,3067.60,3160.18, |
162 |
3119.36,3108.92,3164.77,3133.64,3111.47,3131.98,3128.87,3135.56 }; |
163 |
|
164 |
for (Int_t i=0; i<48;i++) PMTsat[i] = PMTsat[i] - 5.; // safety margin |
165 |
|
166 |
|
167 |
Float_t C0t[48][9] = { |
168 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
169 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
170 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
171 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
172 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
173 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
174 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
175 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
176 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
177 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
178 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
179 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
180 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
181 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
182 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
183 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
184 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
185 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
186 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
187 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
188 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
189 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
190 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
191 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
192 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
193 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
194 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
195 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
196 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
197 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
198 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
199 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
200 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
201 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
202 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
203 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
204 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
205 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
206 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
207 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
208 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
209 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
210 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
211 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
212 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
213 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
214 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
215 |
{0, 1, 2, 3, 4, 5, 6, 8, 92} } ; |
216 |
|
217 |
|
218 |
|
219 |
Float_t A0t[48][9] = { |
220 |
{0, 0.90472, 5.19581, 7.99982, 11, 13, 16, 18, 2000}, |
221 |
{0, 0.7774, 5.15121, 7.99976, 11, 13, 16, 18, 2000}, |
222 |
{0, 1.18414, 5.1952, 8, 11, 13, 16, 17.9999, 2000}, |
223 |
{0, 1.0189, 5.61869, 8, 11, 13.0006, 15.9998, 18.0014, 2000}, |
224 |
{0, 1.08725, 4.4728, 7.99979, 11, 13.0002, 16, 18, 2000}, |
225 |
{0, 0.946462, 4.69554, 7.99994, 11, 13.0001, 16, 18, 2000}, |
226 |
{0, 1.13176, 4.57483, 7.99999, 11, 13.0002, 15.9999, 18.0002, 2000}, |
227 |
{0, 1.00872, 4.99316, 8, 11, 13, 16, 18, 2000}, |
228 |
{0, 1.19891, 5.01355, 8, 11, 13.0003, 16, 18, 2000}, |
229 |
{0, 0.5, 2.284, 3.12, 8.795, 6.257, 7.841, 6.1743, 2000}, |
230 |
{0, 1.16961, 4.59028, 8, 11, 13.0001, 16, 18, 2000}, |
231 |
{0, 0.989643, 5.21958, 7.99998, 11, 13, 16, 17.9999, 2000}, |
232 |
{0, 0.952029, 5.19598, 7.99998, 11, 13.0005, 16.0005, 18, 2000}, |
233 |
{0, 0.736833, 4.95596, 8, 11, 13, 16, 18, 2000}, |
234 |
{0, 1.34007, 3.74275, 8, 11, 13, 16, 18, 2000}, |
235 |
{0, 1.47101, 4.31154, 8, 11, 13, 16, 18, 2000}, |
236 |
{0, 1.3754, 4.83141, 8.00002, 11, 13, 16, 18, 2000}, |
237 |
{0, 1.47712, 5.79783, 8, 11, 13, 16, 18, 2000}, |
238 |
{0, 1.19127, 5.35796, 7.99996, 11, 13, 16, 18, 2000}, |
239 |
{0, 1.25745, 5.98391, 8, 11, 13.0004, 16.0001, 18.0001, 2000}, |
240 |
{0, 1.18024, 5.40107, 7.99999, 11, 13, 16, 18.0001, 2000}, |
241 |
{0, 0.961883, 5.10846, 7.99999, 11, 13, 16, 18, 2000}, |
242 |
{0, 1.23192, 6.21098, 8, 11, 13.0005, 16, 18.0003, 2000}, |
243 |
{0, 1.15846, 5.23573, 7.99995, 11, 13, 16, 18.0002, 2000}, |
244 |
{0, 1.26163, 5.5425, 8.00001, 11, 13.0002, 16.0006, 18, 2000}, |
245 |
{0, 1.12754, 5.57064, 7.99999, 11, 13, 16, 18.0002, 2000}, |
246 |
{0, 1.22768, 6.06283, 8, 11, 13.0002, 16, 18, 2000}, |
247 |
{0, 1.83569, 5.87584, 8.00006, 11, 13.0005, 16, 18, 2000}, |
248 |
{0, 1.61434, 5.56634, 7, 7.99999, 8.99999, 14.999, 16, 2000}, |
249 |
{0, 1.61287, 5.46416, 7.99989, 10, 12, 14.9997, 16, 2000}, |
250 |
{0, 1.49053, 6.21581, 9.00001, 12, 14, 16, 22, 2000}, |
251 |
{0, 1.64579, 5.08498, 7.99989, 10, 12, 15, 16, 2000}, |
252 |
{0, 1.83474, 6.29746, 9.00001, 12, 14.0001, 16.0001, 22, 2000}, |
253 |
{0, 1.80066, 6.19725, 9, 12, 14, 16, 22, 2000}, |
254 |
{0, 1.9025, 5.83736, 8, 10, 12, 14.9999, 16, 2000}, |
255 |
{0, 1.90163, 5.62801, 7.99999, 10, 12, 15, 16, 2000}, |
256 |
{0, 2.5518, 5.97325, 9.00012, 12, 15, 18, 22, 2000}, |
257 |
{0, 2.53476, 5.75312, 9.00007, 12, 15, 18, 22, 2000}, |
258 |
{0, 2.67784, 6.9232, 9.00005, 12, 15, 18, 22, 2000}, |
259 |
{0, 2.62769, 7.22552, 9.00003, 12.0001, 15, 18, 22, 2000}, |
260 |
{0, 2.58088, 6.30413, 9.0001, 12, 15, 18, 22, 2000}, |
261 |
{0, 2.48219, 7.06085, 9.00005, 12, 15, 18, 22, 2000}, |
262 |
{0, 3.23157, 5.20668, 9.00007, 12, 15, 18, 22, 2000}, |
263 |
{0, 3.38244, 6.45172, 9.00006, 12.0001, 15, 18.0001, 22, 2000}, |
264 |
{0, 3.14595, 5.29036, 9.00008, 12, 15, 18, 22.0001, 2000}, |
265 |
{0, 3.34692, 6.17283, 9.00041, 12, 15, 18.0001, 22, 2000}, |
266 |
{0, 3.16915, 4.25973, 9.00015, 12, 15, 18, 22, 2000}, |
267 |
{0, 3.25809, 5.58971, 9.00068, 12, 15, 18, 22.0001, 2000} } ; |
268 |
|
269 |
|
270 |
Float_t A1t[48][9] = { |
271 |
{0, -0.148721, -3.39495, -4.31459, -0.929148, 3.54132, -0.781274, 1.31968, 0}, |
272 |
{0, 0.300986, -2.80331, -4.23227, 0.298916, 4.10416, -5.18516, 7.03041, 0}, |
273 |
{0, -0.590177, -3.12529, -0.44614, 0.620419, 5.19609, 9.88925, 14.9819, 0}, |
274 |
{0, -0.173358, -3.98938, -0.616916, 0.405404, 6.25045, 10.5087, 24.7055, 0}, |
275 |
{0, -0.32707, -1.1686, -3.46701, -0.284242, 4.09514, -0.561233, -0.166844, 0}, |
276 |
{0, 0.0440221, -1.5147, -2.67239, -1.08848, 5.05632, 3.92546, -0.0525454, 0}, |
277 |
{0, -0.331836, -1.25371, -1.59317, 0.654738, 4.41673, 5.99879, 14.9057, 0}, |
278 |
{0, 0.00587183, -2.17841, -1.48496, 0.477997, 6.24062, 6.19841, 11.4798, 0}, |
279 |
{0, -0.515989, -2.1195, -1.44376, 0.145546, 5.41926, 5.03587, 10.7126, 0}, |
280 |
{0, 0, 0.0682, 3.2814, -6.1989, 8.05589, 9.75967, 23.797, 0}, |
281 |
{0, -0.554732, -1.6306, -1.54677, 0.687092, 3.97612, 4.05449, 3.44324, 0}, |
282 |
{0, -0.0314164, -2.83515, -1.29946, 2.31597, 7.15645, 6.95353, 12.8573, 0}, |
283 |
{0, -0.218413, -3.04095, -1.50327, 0.291698, 5.27119, 9.06051, 18.4417, 0}, |
284 |
{0, 0.410005, -2.45452, -0.851601, 0.206665, 6.44906, 7.53132, 10.5636, 0}, |
285 |
{0, -1.29063, 0.463767, -0.720394, 1.27269, 3.66394, 4.52102, 7.33444, 0}, |
286 |
{0, -1.54073, -1.60146, -1.91721, -0.640132, 3.58881, 0.561348, 7.33444, 0}, |
287 |
{0, -0.558527, -2.43481, -1.64492, 1.51694, 6.05449, 4.67951, 5.40004, 0}, |
288 |
{0, -1.44736, -5.265, -1.28878, -0.238869, 4.13668, 4.58264, 3.28758, 0}, |
289 |
{0, -0.596315, -3.35555, -2.03624, -0.148223, 6.16332, 4.71164, 15.6531, 0}, |
290 |
{0, -0.740826, -4.79843, 0.345734, -0.210722, 6.32702, 9.76698, 19.9151, 0}, |
291 |
{0, -0.541817, -3.30557, -1.76057, -0.216039, 5.79923, 8.00931, 16.4061, 0}, |
292 |
{0, -0.0503124, -2.66635, -1.70196, -1.07446, 3.46058, 1.45824, -2.21932, 0}, |
293 |
{0, -0.495955, -5.78012, -0.174017, 0.675206, 6.30264, 8.30058, 20.3899, 0}, |
294 |
{0, -0.315843, -2.8796, -3.04323, -0.681945, 5.49248, 7.42757, 17.1667, 0}, |
295 |
{0, -0.643179, -3.5364, -0.245549, 0.694213, 5.79727, 10.2911, 9.61651, 0}, |
296 |
{0, -0.315433, -3.56856, -1.25894, 2.05501, 6.85829, 8.74895, 14.9955, 0}, |
297 |
{0, -0.478207, -4.82517, 0.688668, 1.40183, 6.78743, 8.02806, 2.65821, 0}, |
298 |
{0, -1.63072, -5.05269, -0.582789, 1.22014, 6.80023, 8.8931, 5.15517, 0}, |
299 |
{0, -1.50826, -3.68958, 0.420744, 3.25124, 4.28046, -16.9712, -12, 0}, |
300 |
{0, -1.52021, -3.37459, -2.41086, 0.547517, -0.56013, -8.59935, -3, 0}, |
301 |
{0, -0.998702, -4.7187, -2.33974, -0.0974348, 3.10138, 2.3293, -5.71135, 0}, |
302 |
{0, -1.66188, -2.39145, -2.55052, 0.29005, -0.16697, -3.97018, -1.5, 0}, |
303 |
{0, -2.04431, -4.95214, -1.51889, 1.92081, 5.92476, 8.94417, -0.172422, 0}, |
304 |
{0, -1.94155, -4.95644, -2.47063, 0.0233995, 2.57015, 4.84173, -0.555407, 0}, |
305 |
{0, -2.22045, -4.21875, -1.23892, 0.911188, -0.705415, -11.5648, -7, 0}, |
306 |
{0, -2.25418, -3.71067, -1.87307, 0.560423, 0.206679, -4.27293, -3, 0}, |
307 |
{0, -3.90179, -5.14354, -4.08454, -3.13545, -3.57868, -5.13198, -1.0019, 0}, |
308 |
{0, -3.78789, -4.50313, -5.24307, -3.24931, -0.319336, -1.407, -3.77821, 0}, |
309 |
{0, -4.16337, -7.12861, -2.29639, -0.786276, 2.58494, 4.16162, 7.22747, 0}, |
310 |
{0, -4.04189, -7.82707, -1.34893, -1.05519, 4.33166, 4.87264, 12.3328, 0}, |
311 |
{0, -3.85946, -5.71064, -4.43564, -1.53025, 1.42505, -0.0695653, 4.33418, 0}, |
312 |
{0, -3.65794, -8.19828, -3.32738, -1.25785, -1.13124, -6.79745, -8.37113, 0}, |
313 |
{0, -5.571, -2.49596, -2.8623, -2.74219, -1.43215, -0.359863, 0.25062, 0}, |
314 |
{0, -6.00932, -5.60393, -2.33967, -1.53792, 3.67721, 5.49137, 8.34507, 0}, |
315 |
{0, -5.36442, -3.19657, -2.9975, -1.73078, 0.0558693, -0.179221, 9.45231, 0}, |
316 |
{0, -5.91858, -5.04606, -2.88549, -0.953526, 1.17816, 5.43427, 0.871257, 0}, |
317 |
{0, -5.53832, -0.498886, -3.85789, -2.61557, -2.45863, -1.44554, -7.21927, 0}, |
318 |
{0, -5.70059, -3.94476, -3.23927, 0.15573, 1.85295, 3.96162, 8.70362, 0} }; |
319 |
|
320 |
|
321 |
Float_t A2t[48][9] = { |
322 |
{0, 0.447567, 2.19777, 4.56362, 2.7416, 2.05411, 10.11, 19.0312, 0}, |
323 |
{0, 0.11417, 1.62292, 5.00684, 3, 3.00006, 17.3401, 17.8502, 0}, |
324 |
{0, 0.613665, 1.84729, 0.717669, 3, 2.53701, 1.23897, 10.2529, 0}, |
325 |
{0, 0.318447, 2.30647, 0.936633, 3, 3, 2.95973, 3, 0}, |
326 |
{0, 0.398201, 0.701095, 3.91236, 3, 3, 11.5693, 17.9749, 0}, |
327 |
{0, 0.202853, 0.806934, 3.11779, 3.57657, 1.59933, 6.71492, 23.6721, 0}, |
328 |
{0, 0.378081, 0.60131, 1.91722, 1.97014, 3, 5.08036, 9.64776, 0}, |
329 |
{0, 0.185602, 1.13243, 1.95726, 2.25608, 1.31382, 6.06097, 15.9104, 0}, |
330 |
{0, 0.519026, 1.16139, 1.92471, 3, 3, 6.24901, 15.0465, 0}, |
331 |
{0, 0, 0, -1.972, 4.7828, -3.1154, -2.11319, -4.7497, 0}, |
332 |
{0, 0.584808, 1.01299, 1.55521, 1.3038, 3, 7.23646, 20.977, 0}, |
333 |
{0, 0.252569, 1.60163, 1.83587, 0.630466, 0.777058, 6.0142, 15.4738, 0}, |
334 |
{0, 0.434331, 1.84922, 1.83168, 3, 3, 3, 6.44375, 0}, |
335 |
{0, 0.0330463, 1.50249, 1.15961, 3, 0.810556, 4.20175, 16.0172, 0}, |
336 |
{0, 1.15272, -0.461141, 0.6358, 0.566375, 3.20343, 5.26698, 14.6336, 0}, |
337 |
{0, 1.24677, 1.12736, 1.76074, 3, 3.77723, 10.7814, 14.6336, 0}, |
338 |
{0, 0.551726, 1.59633, 1.18411, 0.119382, 0.843864, 6.67491, 20.4289, 0}, |
339 |
{0, 1.17008, 3.53223, 1.7298, 3, 3.51043, 7.10543, 22.3253, 0}, |
340 |
{0, 0.612142, 1.96606, 2.64693, 3.25016, 1.25888, 7.04821, 11.7283, 0}, |
341 |
{0, 0.69148, 2.84536, 0.249509, 4.29848, 3, 3.58229, 9.01681, 0}, |
342 |
{0, 0.565678, 1.96366, 2.32387, 3.15843, 1.66386, 3.07223, 7.67847, 0}, |
343 |
{0, 0.286252, 1.61749, 2.08437, 3.96745, 3.46972, 9.29207, 23.9444, 0}, |
344 |
{0, 0.427677, 3.58328, 0.303785, 3, 3, 4.66547, 6.77271, 0}, |
345 |
{0, 0.367136, 1.62323, 3.53394, 3.22174, 1.19152, 2.67962, 7.37085, 0}, |
346 |
{0, 0.571177, 2.03267, 0.714761, 2.31548, 3, 3, 23.2035, 0}, |
347 |
{0, 0.410871, 2.02075, 2.01824, 1.2684, 1.18522, 3.21976, 12.8378, 0}, |
348 |
{0, 0.463877, 2.86112, 0.170916, 3, 3, 5.97413, 28.4085, 0}, |
349 |
{0, 1.30088, 3.26557, 2, 3, 3, 4.77584, 22.8794, 0}, |
350 |
{0, 1.02941, 2.12558, 0.872765, 2.23727, 4.7981, 24.6338, 24.6338, 0}, |
351 |
{0, 1.05783, 1.89525, 2.85289, 3.0898, 7.83407, 17.8466, 20, 0}, |
352 |
{0, 0.87851, 2.49044, 1.91387, 2.41541, 3.8418, 9.41288, 24.0375, 0}, |
353 |
{0, 1.18188, 1.273, 2.9275, 3.06704, 7.12642, 12.7629, 15, 0}, |
354 |
{0, 1.53682, 2.57011, 1.06205, 0.506326, 1.68314, 3.58498, 23.1595, 0}, |
355 |
{0, 1.46302, 2.68515, 1.99381, 2.17816, 4.41356, 6.53634, 20.7136, 0}, |
356 |
{0, 1.4731, 2.3654, 1.53025, 2.96327, 8.70277, 21.6253, 25, 0}, |
357 |
{0, 1.53808, 2.07089, 2.22662, 3.14766, 7.57131, 14.2471, 20, 0}, |
358 |
{0, 2.54185, 2.94079, 2.66362, 3.52374, 6.80629, 11.3325, 14.5186, 0}, |
359 |
{0, 2.43664, 2.49436, 4.17446, 3.77162, 3.31898, 7.43896, 18.2548, 0}, |
360 |
{0, 2.66465, 3.9858, 1.0855, 1.91916, 1.82719, 3.62289, 11.3872, 0}, |
361 |
{0, 2.59071, 4.39003, 0.0757547, 3, 0.158868, 3.55454, 5.71387, 0}, |
362 |
{0, 2.48014, 3.16071, 3.1975, 1.7259, 1.53532, 6.33812, 11.2325, 0}, |
363 |
{0, 2.35236, 4.94998, 1.78836, 1.9115, 4.74233, 13.6973, 21.965, 0}, |
364 |
{0, 3.52215, 0.812087, 1.1768, 2.95239, 4.3202, 6.04614, 13.6556, 0}, |
365 |
{0, 3.79446, 2.80606, 0.88371, 3, 0.614106, 2.52782, 12.4441, 0}, |
366 |
{0, 3.41363, 1.57296, 1.59021, 2.47593, 3.41146, 6.76304, 5.59471, 0}, |
367 |
{0, 3.72529, 2.50889, 2, 3, 4.06815, 2.78676, 19.6427, 0}, |
368 |
{0, 3.54713, -0.296079, 2.10851, 2.42037, 5.37573, 6.78065, 22.298, 0}, |
369 |
{0, 3.61517, 1.96909, 2, 0.249865, 2.46639, 3.42483, 8.1652, 0} } ; |
370 |
|
371 |
|
372 |
// S115B failure: 1158700000 // 2006-09-19 21:06:40 UTC |
373 |
|
374 |
if (time < 1158700000.) { // first workaround: just use calibration of PMT S115A |
375 |
for ( Int_t jj=0; jj<9; jj++ ){ |
376 |
A0t[9][jj] = A0t[8][jj] ; |
377 |
A1t[9][jj] = A1t[8][jj] ; |
378 |
A2t[9][jj] = A2t[8][jj] ; |
379 |
} |
380 |
} // if time... |
381 |
|
382 |
//============================================================================ |
383 |
|
384 |
// 2nd-order correction |
385 |
Float_t corr_a[6][4] = { |
386 |
{0.977261, 0.353729, -0.83314, 0.452883}, |
387 |
{1.27649, 3.53459, -5.41948, 2.67854}, |
388 |
{2.21926, 4.32797, -7.24001, 3.77247}, |
389 |
{2.4202, 7.99552,-12.4371, 6.08982}, |
390 |
{2.04984, 13.3375, -19.178, 8.86101}, |
391 |
{2.63322, 14.8072, -20.911,9.57905} }; |
392 |
|
393 |
//--------------------------------------------------------------------- |
394 |
|
395 |
Float_t xv[6],yv[6]; |
396 |
Int_t iz; |
397 |
Float_t x1[9],y1[9]; |
398 |
Int_t n1 = 9; |
399 |
|
400 |
Float_t Layercharge[6] = {1005., 1005., 1005., 1005., 1005., 1005. }; |
401 |
|
402 |
Int_t Layerinfo[6] = {0, 0, 0, 0, 0, 0 }; |
403 |
|
404 |
Float_t adc[48],adc_c[48],PMTcharge_arr[48]; |
405 |
|
406 |
//------------------------------------------------------------------ |
407 |
|
408 |
PamTrack *track = L2->GetTrack(0); |
409 |
|
410 |
Float_t beta_mean = fabs(track->GetToFTrack()->beta[12]); |
411 |
|
412 |
// New!! If "beta_in" != 100. then overwrite beta_mean with beta_in |
413 |
if (beta_in != 100.) beta_mean=beta_in; |
414 |
|
415 |
Float_t def = track->GetTrkTrack()->al[4]; |
416 |
Float_t rig = 1./def; |
417 |
|
418 |
Int_t ncount=0; |
419 |
Float_t charge_chi=1000.; |
420 |
|
421 |
//------------------------------------------------------------- |
422 |
//------------------ ToF Charge ------------------------------ |
423 |
//------------------------------------------------------------- |
424 |
|
425 |
// fill adc and tdc |
426 |
|
427 |
Int_t ich,jj,kk; |
428 |
|
429 |
for (ich=0; ich<48; ich++) adc[ich] = 4095.; |
430 |
for (ich=0; ich<48; ich++) adc_c[ich] = 1000.; |
431 |
for (ich=0; ich<48; ich++) PMTcharge_arr[ich] = 1000.; |
432 |
|
433 |
|
434 |
|
435 |
if ((beta_mean < 0.05) || (beta_mean > 2.0)) { |
436 |
for (Int_t jj=0; jj<48;jj++) charge_PMT_trk[jj] = 1001.; |
437 |
for (Int_t jj=0; jj<6;jj++) charge_layer_trk[jj] = 1001.; |
438 |
for (Int_t jj=0; jj<6;jj++) charge_layer_trk_raw[jj] = 1001.; |
439 |
for (Int_t jj=0; jj<6;jj++) layerinfo_trk[jj] = 1001.; |
440 |
charge_trk = 1001.; |
441 |
ncount_trk = 0; |
442 |
} |
443 |
|
444 |
|
445 |
if ((beta_mean > 0.05) && (beta_mean < 2.0)) { |
446 |
|
447 |
Float_t betahelp = pow(beta_mean, 1.2); |
448 |
|
449 |
//======================================================================= |
450 |
|
451 |
for (Int_t ipmt=0; ipmt<L2->GetToFLevel2()->npmt() ; ipmt++){ |
452 |
ToFPMT *tofpmt = L2->GetToFLevel2()->GetToFPMT(ipmt); |
453 |
Int_t pmt_id = tofpmt->pmt_id; |
454 |
adc[pmt_id] = tofpmt->adc ; |
455 |
} |
456 |
|
457 |
//======================================================================= |
458 |
Float_t yl, yh, ym, m, b, chelp, charge; |
459 |
|
460 |
for (Int_t ipmt=0; ipmt<track->GetToFTrack()->npmtadc; ipmt++){ |
461 |
Float_t dEdx = track->GetToFTrack()->dedx[ipmt]; |
462 |
ym = dEdx*betahelp; |
463 |
Int_t pmtadc = track->GetToFTrack()->pmtadc[ipmt]; |
464 |
Int_t adcflag = track->GetToFTrack()->adcflag[ipmt]; |
465 |
L2->GetToFLevel2()->GetPMTIndex(pmtadc,jj,kk); |
466 |
if (adcflag==0) adc_c[pmtadc] = dEdx; |
467 |
|
468 |
|
469 |
if (adc[pmtadc] == 4095) adc_c[pmtadc] = 0.; |
470 |
if (adc[pmtadc] == 4095) PMTcharge_arr[pmtadc] = 0.; |
471 |
|
472 |
if ((adc[pmtadc]>PMTsat[pmtadc]) && (adc[pmtadc]<4095)) adc_c[pmtadc] = 1000.; |
473 |
|
474 |
if (adc[pmtadc] < PMTsat[pmtadc]) { |
475 |
//---------------------------------------------------------------------------------------- |
476 |
if ((pmtadc!=1) && (pmtadc!=9) && (pmtadc!=28) && (pmtadc!=29) && (pmtadc!=34)) { |
477 |
|
478 |
for ( Int_t jj=0; jj<9; jj++ ){ |
479 |
x1[jj] = A0t[pmtadc][jj]+A1t[pmtadc][jj]*beta_mean+A2t[pmtadc][jj]*beta_mean*beta_mean; |
480 |
y1[jj] = C0t[pmtadc][jj]*C0t[pmtadc][jj] ; |
481 |
} |
482 |
|
483 |
TGraph *gr2 = new TGraph(n1,x1,y1); |
484 |
TSpline3 *spl2 = new TSpline3("grs",gr2); // use a cubic spline |
485 |
chelp = spl2->Eval(ym); |
486 |
if (chelp<0.) chelp=0.0001; //WM new |
487 |
charge = TMath::Sqrt(chelp); |
488 |
gr2->Delete(); |
489 |
spl2->Delete(); |
490 |
PMTcharge_arr[pmtadc] = charge; |
491 |
} // pmtadc != ... |
492 |
|
493 |
//---------------------------------------------------------------------------------------- |
494 |
|
495 |
if ((pmtadc==1) || (pmtadc==9) || (pmtadc==28) || (pmtadc==29) || (pmtadc==34)) { |
496 |
for ( Int_t jj=0; jj<8; jj++ ){ |
497 |
yl = A0t[pmtadc][jj]+A1t[pmtadc][jj]*beta_mean+A2t[pmtadc][jj]*beta_mean*beta_mean; |
498 |
yh = A0t[pmtadc][jj+1]+A1t[pmtadc][jj+1]*beta_mean+A2t[pmtadc][jj+1]*beta_mean*beta_mean; |
499 |
if ((yl<ym)&&(ym<yh)){ |
500 |
m = (C0t[pmtadc][jj+1]*C0t[pmtadc][jj+1] - C0t[pmtadc][jj]*C0t[pmtadc][jj]) / (yh - yl); |
501 |
b = (C0t[pmtadc][jj]*C0t[pmtadc][jj]) - m*yl; |
502 |
chelp = m*ym + b; |
503 |
if (chelp<0.) chelp=0.0001; //WM new |
504 |
charge= TMath::Sqrt(chelp); |
505 |
PMTcharge_arr[pmtadc] = charge; |
506 |
} |
507 |
} // jj=0..8 |
508 |
} // if pmtadc ==.... |
509 |
//---------------------------------------------------------------------------------------- |
510 |
} // adc < sat |
511 |
|
512 |
} // ipmt... |
513 |
|
514 |
//==================================================================== |
515 |
//================ Find out the hitted ToF paddles =============== |
516 |
//==================================================================== |
517 |
|
518 |
for (Int_t jj=0; jj<6; jj++){ |
519 |
xv[jj]=track->GetToFTrack()->xtr_tof[jj]; |
520 |
yv[jj]=track->GetToFTrack()->ytr_tof[jj]; |
521 |
} |
522 |
|
523 |
Int_t PaddleIdOfTrack[6]; |
524 |
|
525 |
PaddleIdOfTrack[0] = L2->GetToFLevel2()->GetPaddleIdOfTrack(xv[0], yv[0], 0, 0.) ; |
526 |
PaddleIdOfTrack[1] = L2->GetToFLevel2()->GetPaddleIdOfTrack(xv[1], yv[1], 1, 0.) ; |
527 |
PaddleIdOfTrack[2] = L2->GetToFLevel2()->GetPaddleIdOfTrack(xv[2], yv[2], 2, 0.) ; |
528 |
PaddleIdOfTrack[3] = L2->GetToFLevel2()->GetPaddleIdOfTrack(xv[3], yv[3], 3, 0.) ; |
529 |
PaddleIdOfTrack[4] = L2->GetToFLevel2()->GetPaddleIdOfTrack(xv[4], yv[4], 4, 0.) ; |
530 |
PaddleIdOfTrack[5] = L2->GetToFLevel2()->GetPaddleIdOfTrack(xv[5], yv[5], 5, 0.) ; |
531 |
|
532 |
//============================================================== |
533 |
|
534 |
|
535 |
Int_t ihelp_a[6] = {0,16,28,32,36,42}; |
536 |
|
537 |
for (Int_t ilay=0; ilay<6; ilay ++) { |
538 |
Int_t jj = PaddleIdOfTrack[ilay] ; |
539 |
//Float_t xhelp = 1000.; |
540 |
Float_t xhelp = 1005.; |
541 |
|
542 |
if (jj == -1) Layerinfo[ilay] = -1; |
543 |
|
544 |
if (jj != -1) { |
545 |
Int_t ih = ihelp_a[ilay] + 2*jj; |
546 |
|
547 |
// New WM |
548 |
Int_t igood1=0; |
549 |
Int_t igood2=0; |
550 |
if ((PMTcharge_arr[ih] < 1000.) && (PMTcharge_arr[ih] > 0.)) igood1=1; |
551 |
if ((PMTcharge_arr[ih+1] < 1000.) && (PMTcharge_arr[ih+1] > 0.)) igood2=1; |
552 |
|
553 |
if ((PMTcharge_arr[ih]==0.) && (PMTcharge_arr[ih+1]==0.)) xhelp = 0.; |
554 |
if ((igood1==1)&&(igood2==1)) xhelp = 0.5*(PMTcharge_arr[ih]+PMTcharge_arr[ih+1]) ; |
555 |
if ((igood1==1)&&(igood2==0)) xhelp = PMTcharge_arr[ih]; |
556 |
if ((igood2==1)&&(igood1==0)) xhelp = PMTcharge_arr[ih+1]; |
557 |
|
558 |
|
559 |
/* |
560 |
if ((PMTcharge_arr[ih] < 1000.) && (PMTcharge_arr[ih+1] < 1000.)) xhelp = 0.5*(PMTcharge_arr[ih]+PMTcharge_arr[ih+1]) ; |
561 |
if ((PMTcharge_arr[ih] < 1000.) && (PMTcharge_arr[ih+1]==1000.)) xhelp = PMTcharge_arr[ih] ; |
562 |
if ((PMTcharge_arr[ih]==1000.) && (PMTcharge_arr[ih+1] < 1000.)) xhelp = PMTcharge_arr[ih+1] ; |
563 |
*/ |
564 |
if (adc[ih] == 4095) Layerinfo[ilay] = Layerinfo[ilay] + 1; |
565 |
if (adc[ih+1] == 4095) Layerinfo[ilay] = Layerinfo[ilay] + 1; |
566 |
if ((adc[ih] > PMTsat[ih]) && (adc[ih] < 4095)) Layerinfo[ilay] = Layerinfo[ilay] + 10; |
567 |
if ((adc[ih+1] > PMTsat[ih+1]) && (adc[ih+1] < 4095)) Layerinfo[ilay] = Layerinfo[ilay] + 10; |
568 |
} |
569 |
Layercharge[ilay] = xhelp; |
570 |
} // ilay ... |
571 |
|
572 |
|
573 |
|
574 |
//========================================================================== |
575 |
//============= Layercharge without 2nd-order correction ================= |
576 |
//========================================================================== |
577 |
|
578 |
for (Int_t jj=0; jj<6;jj++) charge_layer_trk_raw[jj] = Layercharge[jj]; |
579 |
|
580 |
//========================================================================== |
581 |
//========================= 2nd-order correction ======================= |
582 |
//========================================================================== |
583 |
|
584 |
Float_t xb = beta_mean; |
585 |
|
586 |
for (Int_t ii=0; ii<6; ii++) { |
587 |
Int_t ic = 0; |
588 |
Float_t corr[4] = {1., 0., 0., 0.}; |
589 |
for (Int_t iii=1; iii<9; iii++) if (fabs(Layercharge[ii] - iii)<0.50) ic = iii; |
590 |
if ((ic>0)&&(ic<=5)) for (Int_t iii=0; iii<4; iii++) corr[iii] = corr_a[ic-1][iii]; |
591 |
if (ic >5) for (Int_t iii=0; iii<4; iii++) corr[iii] = corr_a[5][iii]; |
592 |
|
593 |
Float_t c_corr = corr[0]+corr[1]*xb+corr[2]*xb*xb+corr[3]*xb*xb*xb; |
594 |
|
595 |
if ((ic>0)&&(ic<=5)) c_corr = c_corr/(1.*ic) ; |
596 |
if (ic>5) c_corr = c_corr/6. ; |
597 |
|
598 |
//cout<<"beta "<<xb<<" layer "<<ii<<" ic "<<ic<<" => "<<c_corr<<endl; |
599 |
//cout<<xb<<" "<<ic<<" "<<c_corr<<endl; |
600 |
|
601 |
Layercharge[ii] = Layercharge[ii]/c_corr; |
602 |
|
603 |
} |
604 |
|
605 |
//========================================================================== |
606 |
//========================================================================== |
607 |
|
608 |
|
609 |
Int_t icount=0; |
610 |
Float_t charge_mean = 0.; |
611 |
for (Int_t ii=0; ii<6; ii++) { |
612 |
if (Layercharge[ii] < 1000) charge_mean = charge_mean + Layercharge[ii] ; |
613 |
if (Layercharge[ii] < 1000) icount++; |
614 |
} |
615 |
if (icount>0) charge_mean = charge_mean/(1.*icount) ; |
616 |
|
617 |
if (icount>0) { |
618 |
|
619 |
//for (Int_t ii=0; ii<6; ii++) cout<<Layercharge[ii]<<" "; |
620 |
//cout<<endl; |
621 |
|
622 |
|
623 |
vector<float> charge_v; |
624 |
Float_t charge_median = 0.; |
625 |
|
626 |
//////// get the median charge //////////// |
627 |
for(Int_t ii=0;ii<6;ii++) { |
628 |
if (Layercharge[ii] < 1000) charge_v.push_back(Layercharge[ii]); |
629 |
} |
630 |
|
631 |
std::sort(charge_v.begin(),charge_v.end()); |
632 |
charge_median = charge_v[(int)(charge_v.size()/2+charge_v.size()%2)-1]; |
633 |
|
634 |
//cout<<charge_mean<<" "<<charge_median<<endl; |
635 |
|
636 |
charge_mean = charge_median; |
637 |
|
638 |
} // icount>0 |
639 |
|
640 |
|
641 |
//--- Calculate charge for the second time, use residuals of the single |
642 |
//--- measurements to get a chi2 value |
643 |
|
644 |
Float_t w_i_arr[8] = {0.1, 0.15, 0.2, 0.25, 0.30, 0.35, 0.45, 0.50}; |
645 |
|
646 |
icount=0; |
647 |
Float_t sw=0.; |
648 |
Float_t sxw=0.; |
649 |
Float_t w_i = 1./0.5; |
650 |
Float_t resmax= 3.0; |
651 |
|
652 |
iz=1; |
653 |
if ((0.0<charge_mean) & (charge_mean<1.5)) iz=1; |
654 |
if ((1.5<charge_mean) & (charge_mean<2.5)) iz=2; |
655 |
if ((2.5<charge_mean) & (charge_mean<3.5)) iz=3; |
656 |
if ((3.5<charge_mean) & (charge_mean<4.5)) iz=4; |
657 |
if ((4.5<charge_mean) & (charge_mean<5.5)) iz=5; |
658 |
if ((5.5<charge_mean) & (charge_mean<6.5)) iz=6; |
659 |
if ((6.5<charge_mean) & (charge_mean<7.5)) iz=7; |
660 |
if ((7.5<charge_mean) & (charge_mean<90.)) iz=8; |
661 |
|
662 |
w_i = 1./w_i_arr[iz-1]; |
663 |
|
664 |
for (Int_t jj=0; jj<6;jj++){ |
665 |
if (Layercharge[jj] < 1000) { |
666 |
Float_t res = charge_mean - Layercharge[jj] ; |
667 |
if (fabs(res*w_i)<resmax) { |
668 |
icount= icount+1; |
669 |
sxw=sxw + Layercharge[jj]*w_i*w_i ; |
670 |
sw =sw + w_i*w_i ; |
671 |
} |
672 |
} |
673 |
} |
674 |
|
675 |
|
676 |
ncount = icount; |
677 |
if (icount>0) charge_chi=sxw/sw; |
678 |
|
679 |
// cout<<" => "<<icount<<" "<<charge_chi<<endl; |
680 |
|
681 |
//============================================================= |
682 |
// changed 30-01-2009 WM |
683 |
|
684 |
for (Int_t jj=0; jj<48;jj++) charge_PMT_trk[jj] = PMTcharge_arr[jj]; |
685 |
for (Int_t jj=0; jj<6;jj++) charge_layer_trk[jj] = Layercharge[jj]; |
686 |
for (Int_t jj=0; jj<6;jj++) layerinfo_trk[jj] = Layerinfo[jj]; |
687 |
charge_trk = charge_chi; |
688 |
ncount_trk = ncount; |
689 |
|
690 |
} // 0.05 < beta < 2.0 |
691 |
|
692 |
} // if ntrk == 1 |
693 |
|
694 |
//================================================================ |
695 |
//============== Siegen version 1 ============= |
696 |
//============== standalone dEdx and beta ============= |
697 |
//================================================================ |
698 |
|
699 |
// ToF track |
700 |
ToFTrkVar *track = L2->GetToFStoredTrack(-1); |
701 |
// if(!track)return; |
702 |
if(track) { |
703 |
|
704 |
/* |
705 |
Float_t PMTsat[48] = { |
706 |
3162.14, 3165.48, 3153.85, 3085.73, 3089.65, 3107.64, 3097.52, 3078.37, 3130.05, 3087.07, 3112.22, |
707 |
3102.92, 3080.58, 3092.55, 3087.94, 3125.03, 3094.09, 3143.16, |
708 |
3125.51, 3181.27, 3092.09, 3124.98, 3069.3, 3095.53, 3097.11, 3133.53, 3114.73, 3113.01, 3091.19, |
709 |
3097.99, 3033.84, 3134.98, 3081.37, 3111.04, 3066.77, 3108.17, |
710 |
3133, 3111.06, 3052.52, 3140.66, 3106.33, 3094.85, 3150.85, 3118.8, 3096.24, 3118.47,3111.36, 3117.11 |
711 |
}; |
712 |
*/ |
713 |
|
714 |
// new values from Napoli dec 2008 |
715 |
Float_t PMTsat[48] = { |
716 |
3176.35,3178.19,3167.38,3099.73,3117.00,3126.29,3111.44,3092.27, |
717 |
3146.48,3094.41,3132.13,3115.37,3099.32,3110.97,3111.80,3143.14, |
718 |
3106.72,3153.44,3136.00,3188.96,3104.73,3140.45,3073.18,3106.62, |
719 |
3112.48,3146.92,3127.24,3136.52,3109.59,3112.89,3045.15,3147.26, |
720 |
3095.92,3121.05,3083.25,3123.62,3150.92,3125.30,3067.60,3160.18, |
721 |
3119.36,3108.92,3164.77,3133.64,3111.47,3131.98,3128.87,3135.56 }; |
722 |
|
723 |
for (Int_t i=0; i<48;i++) PMTsat[i] = PMTsat[i] - 5.; // safety margin |
724 |
|
725 |
// calibration file "charge_fits_new_std_2.dat" |
726 |
|
727 |
Float_t C0t[48][9] = { |
728 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
729 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
730 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
731 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
732 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
733 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
734 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
735 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
736 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
737 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
738 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
739 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
740 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
741 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
742 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
743 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
744 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
745 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
746 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
747 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
748 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
749 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
750 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
751 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
752 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
753 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
754 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
755 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
756 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
757 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
758 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
759 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
760 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
761 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
762 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
763 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
764 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
765 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
766 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
767 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
768 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
769 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
770 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
771 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
772 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
773 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
774 |
{0, 1, 2, 3, 4, 5, 6, 8, 92}, |
775 |
{0, 1, 2, 3, 4, 5, 6, 8, 92} } ; |
776 |
|
777 |
Float_t A0t[48][9] = { |
778 |
{0, 0.707632, 5.09223, 7.99994, 11, 13, 16, 18, 2000}, |
779 |
{0, 0.636707, 6.37524, 8, 11, 13.0002, 16.0001, 18, 2000}, |
780 |
{0, 0.952117, 6.04188, 7.99999, 11, 13, 16, 18, 2000}, |
781 |
{0, 0.880805, 5.80883, 8.00003, 11.0001, 13.0005, 16.0011, 18.0027, 2000}, |
782 |
{0, 0.834937, 5.12617, 8, 11, 13, 16, 17.9998, 2000}, |
783 |
{0, 0.772954, 5.17221, 8, 11, 13, 16, 18.0006, 2000}, |
784 |
{0, 0.911496, 5.04755, 8, 11, 13, 16, 18, 2000}, |
785 |
{0, 0.86523, 5.55215, 8, 11, 13, 16, 17.9999, 2000}, |
786 |
{0, 1.06061, 5.49757, 12, 15, 20, 25, 25, 2000}, |
787 |
{0, 0.5, 1.8, 3, 3.8, 6.49999, 7.99996, 8.99998, 2000}, |
788 |
{0, 1.06974, 4.86153, 7.99999, 11, 13, 16, 18, 2000}, |
789 |
{0, 1.0465, 6.00778, 8, 11, 13, 16, 17.9999, 2000}, |
790 |
{0, 1.18132, 5.48741, 8, 11, 13, 16, 17.9999, 2000}, |
791 |
{0, 1.10823, 5.43611, 8, 11, 13, 16, 18.0001, 2000}, |
792 |
{0, 1.19621, 5.27647, 7.99994, 11, 13, 16, 18, 2000}, |
793 |
{0, 1.72505, 5.14873, 8.00006, 11, 13, 16, 17.9999, 2000}, |
794 |
{0, 1.48515, 6.07123, 8.00006, 11, 13.0003, 16, 17.9999, 2000}, |
795 |
{0, 1.17628, 6.63392, 8.00011, 11, 13, 16, 17.9999, 2000}, |
796 |
{0, 1.11301, 5.94317, 7.99999, 11, 13, 16, 18, 2000}, |
797 |
{0, 1.04361, 6.40789, 8.00002, 11.0002, 13.0015, 16, 17.9996, 2000}, |
798 |
{0, 1.12658, 5.69828, 8, 11, 13, 16, 18.0001, 2000}, |
799 |
{0, 0.840188, 5.44945, 8.00005, 11, 13, 16, 18, 2000}, |
800 |
{0, 1.16985, 6.21385, 8.00012, 11, 13.0002, 16, 17.9999, 2000}, |
801 |
{0, 0.977696, 5.70252, 8.00004, 11, 13, 16, 17.9999, 2000}, |
802 |
{0, 1.26298, 6.03137, 8.00003, 11, 13, 16.0009, 17.9998, 2000}, |
803 |
{0, 0.988707, 5.98453, 8, 11, 13, 16, 18.0001, 2000}, |
804 |
{0, 1.22109, 6.76385, 8.00002, 11, 13.0005, 16.0001, 18.0006, 2000}, |
805 |
{0, 1.65541, 6.01998, 8.00006, 11.0057, 13, 16, 18, 2000}, |
806 |
{0, 1.59779, 6.00152, 7.00005, 7.99997, 8.99997, 14.9991, 18, 2000}, |
807 |
{0, 1.6515, 5.95297, 7.99999, 10, 12, 14.9995, 18, 2000}, |
808 |
{0, 1.70339, 6.43684, 9, 12, 14, 16, 21.9999, 2000}, |
809 |
{0, 1.64867, 5.6503, 8, 10, 12, 14.9999, 18, 2000}, |
810 |
{0, 1.83955, 6.64378, 9, 12, 14, 16, 22, 2000}, |
811 |
{0, 1.71975, 6.42585, 9, 12, 14, 16, 22, 2000}, |
812 |
{0, 1.88735, 6.12987, 8, 10, 12, 15.0001, 18, 2000}, |
813 |
{0, 1.86719, 5.94227, 8, 10, 12, 14.9999, 20,2000}, |
814 |
{0, 2.55127, 5.83621, 8.99997, 12, 15, 17.9999, 21.9998, 2000}, |
815 |
{0, 2.59328, 5.90275, 8.99999, 12, 15, 18, 22, 2000}, |
816 |
{0, 2.63523, 6.56428, 9.00004, 12, 15.0003, 18.001, 22.0029, 2000}, |
817 |
{0, 2.63114, 6.77412, 8.99995, 11.9998, 14.9997, 17.9996, 21.9998, 2000}, |
818 |
{0, 2.48986, 6.43372, 8.99996, 11.9998, 14.9995, 17.9997, 21.9995, 2000}, |
819 |
{0, 2.43724, 6.51911, 9.00012, 12, 15, 18, 21.9999, 2000}, |
820 |
{0, 3.21403, 5.7, 9, 12, 15, 18, 22, 2000}, |
821 |
{0, 3.3517, 6.30461, 8.99997, 12, 15, 18, 22, 2000}, |
822 |
{0, 3.0843, 5.90189, 8.99993, 12, 15, 18, 22, 2000}, |
823 |
{0, 3.35806, 6.20792, 8.99998, 12.0001, 15, 18, 22, 2000}, |
824 |
{0, 3.13525, 5.60432, 8.99997, 12, 15.0001, 18, 22, 2000}, |
825 |
{0, 3.26271, 6.38934, 9, 12, 15, 18, 22.0001, 2000} }; |
826 |
|
827 |
|
828 |
Float_t A1t[48][9] = { |
829 |
{ 0, 0.182202, -3.48762, -4.67241, -5.61872, 2.35336, -2.4112, -0.7861, 0 }, |
830 |
{ 0, 0.528581, -6.33244, 0.176685, -3.3272, 5.47434, 7.62771, 18.9223, 0 }, |
831 |
{ 0, -0.148985, -5.31035, -3.1044, -1.84685, -0.678725, -0.00713058, 11.2127, 0 }, |
832 |
{ 0, 0.01113, -4.6759, -0.669811, 1.69435, 7.44019, 12.2231, 26.9653, 0 }, |
833 |
{ 0, 0.0567585, -3.05564, -2.57264, -0.0868904, 4.88938, 2.64699, -10, 0 }, |
834 |
{ 0, 0.331112, -3.06987, -0.451796, -0.660912, 4.49088, 6.43095, 16.7904, 0 }, |
835 |
{ 0, 0.0779621, -2.64271, -2.29896, -1.95824, 1.8888, 1.02257, 10.5746, 0 }, |
836 |
{ 0, 0.257346, -3.93191, 0.564894, 2.04068, 4.12823, 5.87416, 16.2268, 0 }, |
837 |
{ 0, -0.332593, -3.65149, 0, 10, 20, 30, 40, 0 }, |
838 |
{ 0, 0, 0, -0.5, 0, -6.80247, -9.43463, -8.44329, 0 }, |
839 |
{ 0, -0.25099, -2.53532, -2.43846, -2.94008, -1.01258, -1.10502, 5.16068, 0 }, |
840 |
{ 0, -0.101144, -4.98664, -0.369916, 2.2648, 4.2727, 3.1653, 19.8617, 0 }, |
841 |
{ 0, -0.5074, -3.98429, -0.306633, 0.562595, 5.05787, 4.70127, 14.2399, 0 }, |
842 |
{ 0, -0.326603, -3.83632, -1.75409, -1.86815, 0.84194, 1.32718, 14.4304, 0 }, |
843 |
{ 0, -0.597543, -3.82759, -6.9094, -2.88583, 5.50573, 4.30943, 18.0664, 0 }, |
844 |
{ 0, -1.86862, -3.80777, -2.69084, -4.09258, 1.59904, 4.61543, 13.8186, 0 }, |
845 |
{ 0, -0.932447, -6.02195, -0.891975, 0.870346, 7.22131, 6.03928, 20.5102, 0 }, |
846 |
{ 0, -0.439221, -7.66335, -2.7363, -3.29581, 3.74263, 3.2571, 15.8539, 0 }, |
847 |
{ 0, -0.487944, -5.05733, -2.61662, -2.86336, 2.65017, -0.919043, 7.10535, 0 }, |
848 |
{ 0, -0.0329559, -6.07396, -0.0044396, 2.75593, 8.87808, 14.9627, 28.8783, 0 }, |
849 |
{ 0, -0.573054, -4.15302, -2.15074, -1.83499, 0.969726, 1.36361, 17.6185, 0 }, |
850 |
{ 0, 0.238198, -3.75628, -1.02674, 1.12711, 3.06917, 2.61956, 11.2723, 0 }, |
851 |
{ 0, -0.473325, -5.88165, -2.10476, -0.508963, 4.24835, 6.41943, 14.9346, 0 }, |
852 |
{ 0, 0.0585487, -4.40372, -1.45949, 1.31992, 4.7115, 5.03433, 11.968, 0 }, |
853 |
{ 0, -0.836615, -5.05945, -0.644868, 2.3894, 9.40413, 11.4195, 25.3239, 0 }, |
854 |
{ 0, 0.026064, -4.78872, -0.819969, -0.57223, 1.84866, 0.29272, 15.1362, 0 }, |
855 |
{ 0, -0.659228, -6.61715, 0.371846, 4.36719, 10.657, 17.8551, 29.3359, 0 }, |
856 |
{ 0, -1.27483, -4.52966, -1.85458, -0.9634, 3.65819, 2.89211, 13.508, 0 }, |
857 |
{ 0, -1.49858, -5.08299, 0.103222, 3.84545, 3.46523, -13.6535, -20, 0 }, |
858 |
{ 0, -1.70043, -4.92192, -2.46523, -0.681845, -2.80632, -8.55159, -20, 0 }, |
859 |
{ 0, -1.85437, -5.65787, -1.56314, 0.372468, 4.54151, 2.97956, -7.90681, 0 }, |
860 |
{ 0, -1.78092, -4.19601, -1.84397, -0.175657, -2.0339, -5.64021, -20, 0 }, |
861 |
{ 0, -2.08786, -6.05197, -1.81875, -0.423923, 5.86772, 7.50042, 4.22714, 0 }, |
862 |
{ 0, -1.78679, -5.6835, -1.22858, -0.764359, 2.71007, 4.16034, 4.49981, 0 }, |
863 |
{ 0, -2.21623, -5.39176, -0.174751, 0.19786, -1.93316, -7.45927, -20, 0 }, |
864 |
{ 0, -2.2076, -4.93708, -1.49415, 0.576195, 0.552502, -5.02466, -18, 0 }, |
865 |
{ 0, -3.95472, -4.97236, -5.73642, -7.17611, -8.40014, -10.7071, -13.5198, 0 }, |
866 |
{ 0, -3.98713, -4.90269, -4.51467, -4.74549, -5.13124, -6.02539, -4.36386, 0 }, |
867 |
{ 0, -4.09193, -6.36148, -1.92129, 0.535293, 4.36379, 8.09335, 21.4513, 0 }, |
868 |
{ 0, -4.09301, -6.86077, -8.51634, -10.7671, -15.4194, -19.8748, -18.2532, 0 }, |
869 |
{ 0, -3.66083, -6.39249, -8.20002, -12.5867, -18.523, -21.1403, -22.5493, 0 }, |
870 |
{ 0, -3.66449, -6.84751, -3.49245, -4.82854, 0.21682, 0.54105, -16.1417, 0 }, |
871 |
{ 0, -5.55283, -4.22, -4.20093, -2.0392, -1.493, 0.481244, 6.28662, 0 }, |
872 |
{ 0, -5.93701, -5.45729, -6.95403, -6.68625, -5.13187, -5.10613, -2.64945, 0 }, |
873 |
{ 0, -5.25381, -4.94071, -7.72978, -4.67849, -4.74316, -3.91651, 1.17451, 0 }, |
874 |
{ 0, -6.01523, -5.33454, -6.26672, -5.88745, -8.91118, -11.1342, -7.91073, 0 }, |
875 |
{ 0, -5.53583, -4.3686, -8.88023, -6.36106, -4.70941, -3.2139, -0.381882, 0 }, |
876 |
{ 0, -5.7646, -6.25807, -5.12981, -1.5055, -1.11425, -0.388791, 8.42188, 0 } }; |
877 |
|
878 |
|
879 |
Float_t A2t[48][9] = { |
880 |
{ 0, 0.317852, 2.46394, 4.35287, 6.69993, 1.37704, 9.38636, 22.3426, 0 }, |
881 |
{ 0, 0.0270999, 4.03858, 0.614142, 7.64715, 3, 4.55046, 9.46688, 0 }, |
882 |
{ 0, 0.422802, 3.25444, 2.83067, 3.78916, 7.15528, 9.61404, 9.53181, 0 }, |
883 |
{ 0, 0.27719, 2.81849, 2, 3, 3, 3, 3, 0 }, |
884 |
{ 0, 0.257138, 1.96682, 2.66388, 2.02686, 0.981737, 7.07876, 32, 0 }, |
885 |
{ 0, 0.0777448, 1.95238, 0.591915, 3.36314, 1.71777, 3.1121, 3, 0 }, |
886 |
{ 0, 0.201297, 1.54333, 2.06343, 3.81529, 3.47056, 7.66122, 10.2165, 0 }, |
887 |
{ 0, 0.090275, 2.35456, 0.150419, 1.48979, 4.43331, 6.09798, 9.59925, 0 }, |
888 |
{ 0, 0.472466, 2.2568, 0, 0, 0, 0, 0, 0 }, |
889 |
{ 0, 0, 0, 0, 0, 5.8114, 8.76464, 11.718, 0 }, |
890 |
{ 0, 0.369669, 1.66502, 2.21937, 4.8545, 6.71778, 9.52608, 13.5645, 0 }, |
891 |
{ 0, 0.278447, 3.03196, 0.562358, 0.978803, 4.19387, 9.26949, 4.33973, 0 }, |
892 |
{ 0, 0.488781, 2.52383, 0.674871, 2.54554, 2.33603, 6.75428, 10.7769, 0 }, |
893 |
{ 0, 0.396462, 2.42949, 1.33035, 3.9579, 4.98889, 7.41728, 8.78462, 0 }, |
894 |
{ 0, 0.616543, 2.39152, 7.13157, 4.52173, 0.795959, 5.05895, 3.58876, 0 }, |
895 |
{ 0, 1.3407, 2.54098, 2, 7.35567, 6.08494, 6.47321, 6.60084, 0 }, |
896 |
{ 0, 0.855061, 3.97328, 2, 3, 3, 10.1946, 7.06782, 0 }, |
897 |
{ 0, 0.492265, 5.11681, 2, 2.24085, 0.00142742, 3.12852, 1.94308, 0 }, |
898 |
{ 0, 0.594536, 3.10529, 2.07652, 4.86122, 2.7748, 10.0368, 14.8149, 0 }, |
899 |
{ 0, 0.220041, 3.69287, 2, 3, 3, 0.0668348, 0.124322, 0 }, |
900 |
{ 0, 0.652342, 2.52474, 1.92129, 3.97957, 5.4076, 8.66393, 5.53485, 0 }, |
901 |
{ 0, 0.109911, 2.37426, 2, 2.09403, 4.25338, 7.64627, 8.96803, 0 }, |
902 |
{ 0, 0.503317, 3.66579, 2, 3, 3, 3.95553, 7.79201, 0 }, |
903 |
{ 0, 0.18358, 2.71524, 2, 1.64493, 2.67235, 6.00813, 13.3661, 0 }, |
904 |
{ 0, 0.762639, 3.10968, 2, 1.79493, 0.0228019, 3, 6.68329, 0 }, |
905 |
{ 0, 0.218363, 2.87712, 0.218535, 3, 4.57375, 9.68986, 4.89219, 0 }, |
906 |
{ 0, 0.675406, 4.00709, 2, 1.07325, 3, 0.182969, 8.20433, 0 }, |
907 |
{ 0, 0.991549, 2.68269, 2, 3.876, 2.94015, 6.72011, 7.03988, 0 }, |
908 |
{ 0, 1.02743, 3.12518, 2, 2.20294, 6.63646, 22.0153, 35, 0 }, |
909 |
{ 0, 1.18885, 3.01461, 2.30242, 3.46316, 8.98077, 16.6101, 35, 0 }, |
910 |
{ 0, 1.47119, 3.24004, 1.07333, 2.31147, 2.98418, 9.99881, 28.0778, 0 }, |
911 |
{ 0, 1.28408, 2.55246, 1.49292, 3.01143, 8.45419, 13.2062, 35, 0 }, |
912 |
{ 0, 1.56497, 3.35834, 0.73553, 3, 2.13162, 5.84836, 18.6428, 0 }, |
913 |
{ 0, 1.39782, 3.19843, 0.593735, 3.34643, 4.22204, 6.78619, 12.8529, 0 }, |
914 |
{ 0, 1.46182, 3.30186, 0.0348858, 3.87061, 9.87769, 16.8741, 35, 0 }, |
915 |
{ 0, 1.50597, 3.03838, 1.62411, 2.96043, 7.1428, 15.4035, 35, 0 }, |
916 |
{ 0, 2.6053, 2.92019, 3.8816, 7.13833, 9.84022, 13.4445, 22.2018, 0 }, |
917 |
{ 0, 2.58901, 2.74623, 2.66245, 5.37385, 8.40354, 11.6502, 17.4423, 0 }, |
918 |
{ 0, 2.65151, 3.592, 2, 3, 3, 3, 3, 0 }, |
919 |
{ 0, 2.65586, 3.87903, 6.12175, 9.92231, 16.1427, 21.4766, 21.4604, 0 }, |
920 |
{ 0, 2.38768, 3.77375, 5.67703, 11.8596, 18.8674, 20.8655, 24.5083, 0 }, |
921 |
{ 0, 2.40258, 4.1273, 2, 5.81564, 2.29756, 4.40615, 32.3639, 0 }, |
922 |
{ 0, 3.54156, 2.13, 2.79762, 2.76993, 4.67104, 5.20053, 8.36394, 0 }, |
923 |
{ 0, 3.76292, 2.83393, 5.30926, 6.67988, 7.35393, 9.46522, 14.8599, 0 }, |
924 |
{ 0, 3.37723, 2.74166, 6.71253, 5.63259, 8.42885, 9.99872, 14.8742, 0 }, |
925 |
{ 0, 3.83378, 2.79501, 4.78642, 5.94201, 11.4635, 14.7442, 16.5806, 0 }, |
926 |
{ 0, 3.59181, 2.3773, 7.14813, 5.60101, 6.47122, 6.64957, 14.2374, 0 }, |
927 |
{ 0, 3.68523, 3.54382, 3.92867, 2.18506, 5.56025, 7.75895, 7.448, 0 } }; |
928 |
|
929 |
|
930 |
// S115B failure: 1158700000 // 2006-09-19 21:06:40 UTC |
931 |
|
932 |
if (time < 1158700000.) { // first workaround: just use calibration of PMT S115A |
933 |
for ( Int_t jj=0; jj<9; jj++ ){ |
934 |
A0t[9][jj] = A0t[8][jj] ; |
935 |
A1t[9][jj] = A1t[8][jj] ; |
936 |
A2t[9][jj] = A2t[8][jj] ; |
937 |
} |
938 |
} // if time... |
939 |
|
940 |
|
941 |
// 2nd-order correction |
942 |
Float_t corr_a[6][4] = { |
943 |
{0.551894 , 2.24353 , -3.35885 , 1.51401} , |
944 |
{0.915691 , 4.83967 , -6.85389 , 3.13679} , |
945 |
{1.84338 , 5.63517 , -8.41577 , 4.04055} , |
946 |
{1.51216 , 11.3233 , -16.2119 , 7.45008} , |
947 |
{1.50481 , 15.2538 , -21.2003 , 9.51127} , |
948 |
{1.82038 , 17.5336 , -23.5512 , 10.3036} }; |
949 |
|
950 |
//--------------------------------------------------------------------- |
951 |
|
952 |
Float_t xv[6],yv[6]; |
953 |
Int_t iz; |
954 |
|
955 |
Float_t x1[9],y1[9]; |
956 |
Int_t n1 = 9; |
957 |
|
958 |
Float_t Layercharge[6] = {1005., 1005., 1005., 1005., 1005., 1005. }; |
959 |
|
960 |
Int_t Layerinfo[6] = {0, 0, 0, 0, 0, 0 }; |
961 |
|
962 |
Float_t adc[48],adc_c[48],PMTcharge_arr[48]; |
963 |
|
964 |
Float_t beta_mean = fabs(track->beta[12]); |
965 |
|
966 |
// New!! If "beta_in" != 100. then overwrite beta_mean with beta_in |
967 |
if (beta_in != 100.) beta_mean=beta_in; |
968 |
|
969 |
Int_t ncount=0; |
970 |
Float_t charge_chi=1000.; |
971 |
|
972 |
|
973 |
//------------------------------------------------------------- |
974 |
|
975 |
// fill adc and tdc |
976 |
|
977 |
Int_t ich,jj,kk; |
978 |
|
979 |
for (ich=0; ich<48; ich++) adc[ich] = 4095.; |
980 |
for (ich=0; ich<48; ich++) adc_c[ich] = 1000.; |
981 |
for (ich=0; ich<48; ich++) PMTcharge_arr[ich] = 1000.; |
982 |
|
983 |
|
984 |
if ((beta_mean < 0.05) || (beta_mean > 2.0)) { |
985 |
for (Int_t jj=0; jj<48;jj++) charge_PMT_std[jj] = 1001.; |
986 |
for (Int_t jj=0; jj<6;jj++) charge_layer_std[jj] = 1001.; |
987 |
for (Int_t jj=0; jj<6;jj++) charge_layer_std_raw[jj] = 1001.; |
988 |
for (Int_t jj=0; jj<6;jj++) layerinfo_std[jj] = 1001.; |
989 |
charge_std = 1001.; |
990 |
ncount_std = 0; |
991 |
} |
992 |
|
993 |
|
994 |
if ((beta_mean > 0.05) && (beta_mean < 2.0)) { |
995 |
|
996 |
Float_t betahelp = pow(beta_mean, 1.2); |
997 |
|
998 |
//======================================================================= |
999 |
|
1000 |
for (Int_t ipmt=0; ipmt<L2->GetToFLevel2()->npmt() ; ipmt++){ |
1001 |
ToFPMT *tofpmt = L2->GetToFLevel2()->GetToFPMT(ipmt); |
1002 |
Int_t pmt_id = tofpmt->pmt_id; |
1003 |
adc[pmt_id] = tofpmt->adc ; |
1004 |
} |
1005 |
|
1006 |
//======================================================================= |
1007 |
|
1008 |
Float_t yl, yh, ym, m, b, chelp, charge; |
1009 |
|
1010 |
|
1011 |
for (Int_t ipmt=0; ipmt<track->npmtadc; ipmt++){ |
1012 |
Float_t dEdx = track->dedx[ipmt]; |
1013 |
ym = dEdx*betahelp; |
1014 |
Int_t pmtadc = track->pmtadc[ipmt]; |
1015 |
Int_t adcflag = track->adcflag[ipmt]; |
1016 |
L2->GetToFLevel2()->GetPMTIndex(pmtadc,jj,kk); |
1017 |
if (adcflag==0) adc_c[pmtadc] = dEdx; |
1018 |
|
1019 |
if (adc[pmtadc] == 4095) adc_c[pmtadc] = 0.; |
1020 |
if (adc[pmtadc] == 4095) PMTcharge_arr[pmtadc] = 0.; |
1021 |
|
1022 |
if ((adc[pmtadc]>PMTsat[pmtadc]) && (adc[pmtadc]<4095)) adc_c[pmtadc] = 1000.; |
1023 |
|
1024 |
if (adc[pmtadc] < PMTsat[pmtadc]) { |
1025 |
|
1026 |
if ((pmtadc!=4) && (pmtadc!=8) && (pmtadc!=28) && (pmtadc!=31) && (pmtadc!=34) && (pmtadc!=39) && (pmtadc!=41) && (pmtadc!=46)) { |
1027 |
|
1028 |
for ( Int_t jj=0; jj<9; jj++ ){ |
1029 |
x1[jj] = A0t[pmtadc][jj]+A1t[pmtadc][jj]*beta_mean+A2t[pmtadc][jj]*beta_mean*beta_mean; |
1030 |
y1[jj] = C0t[pmtadc][jj]*C0t[pmtadc][jj] ; |
1031 |
// cout<<x1[jj]<<" "<<y1[jj]<<" "; |
1032 |
} |
1033 |
// cout<<endl; |
1034 |
|
1035 |
|
1036 |
TGraph *gr2 = new TGraph(n1,x1,y1); |
1037 |
TSpline3 *spl2 = new TSpline3("grs",gr2); // use a cubic spline |
1038 |
chelp = spl2->Eval(ym); |
1039 |
if (chelp<0.) chelp=0.0001; //WM new |
1040 |
charge = TMath::Sqrt(chelp); |
1041 |
|
1042 |
gr2->Delete(); |
1043 |
spl2->Delete(); |
1044 |
PMTcharge_arr[pmtadc] = charge; |
1045 |
} // pmtadc != ... |
1046 |
|
1047 |
if ((pmtadc==4) || (pmtadc==8) || (pmtadc==28) || (pmtadc==31) || (pmtadc==34) || (pmtadc==39) || (pmtadc==41) || (pmtadc==46)) { |
1048 |
for ( Int_t jj=0; jj<8; jj++ ){ |
1049 |
yl = A0t[pmtadc][jj]+A1t[pmtadc][jj]*beta_mean+A2t[pmtadc][jj]*beta_mean*beta_mean; |
1050 |
yh = A0t[pmtadc][jj+1]+A1t[pmtadc][jj+1]*beta_mean+A2t[pmtadc][jj+1]*beta_mean*beta_mean; |
1051 |
if ((yl<ym)&&(ym<yh)){ |
1052 |
m = (C0t[pmtadc][jj+1]*C0t[pmtadc][jj+1] - C0t[pmtadc][jj]*C0t[pmtadc][jj]) / (yh - yl); |
1053 |
b = (C0t[pmtadc][jj]*C0t[pmtadc][jj]) - m*yl; |
1054 |
chelp = m*ym + b; |
1055 |
if (chelp<0.) chelp=0.0001; //WM new |
1056 |
charge= TMath::Sqrt(chelp); |
1057 |
PMTcharge_arr[pmtadc] = charge; |
1058 |
} |
1059 |
} // jj=0..8 |
1060 |
} // if pmtadc ==.... |
1061 |
|
1062 |
} // adc < sat |
1063 |
} // ipmt... |
1064 |
|
1065 |
|
1066 |
//==================================================================== |
1067 |
//============= Check ToF standalone using HitPaddle =================== |
1068 |
//==================================================================== |
1069 |
|
1070 |
Int_t PaddleIdOfTrack[6] = {-1, -1, -1, -1, -1, -1};; |
1071 |
|
1072 |
for(jj=0; jj<8; jj++){ |
1073 |
Int_t HitPad = L2->GetToFLevel2()->HitPaddle(0,jj); |
1074 |
if (HitPad==1) PaddleIdOfTrack[0] = jj; |
1075 |
} |
1076 |
for(jj=0; jj<6; jj++){ |
1077 |
Int_t HitPad = L2->GetToFLevel2()->HitPaddle(1,jj); |
1078 |
if (HitPad==1) PaddleIdOfTrack[1] = jj; |
1079 |
} |
1080 |
|
1081 |
|
1082 |
for(jj=0; jj<2; jj++){ |
1083 |
Int_t HitPad = L2->GetToFLevel2()->HitPaddle(2,jj); |
1084 |
if (HitPad==1) PaddleIdOfTrack[2] = jj; |
1085 |
} |
1086 |
for(jj=0; jj<2; jj++){ |
1087 |
Int_t HitPad = L2->GetToFLevel2()->HitPaddle(3,jj); |
1088 |
if (HitPad==1) PaddleIdOfTrack[3] = jj; |
1089 |
} |
1090 |
|
1091 |
for(jj=0; jj<3; jj++){ |
1092 |
Int_t HitPad = L2->GetToFLevel2()->HitPaddle(4,jj); |
1093 |
if (HitPad==1) PaddleIdOfTrack[4] = jj; |
1094 |
} |
1095 |
for(jj=0; jj<3; jj++){ |
1096 |
Int_t HitPad = L2->GetToFLevel2()->HitPaddle(5,jj); |
1097 |
if (HitPad==1) PaddleIdOfTrack[5] = jj; |
1098 |
} |
1099 |
|
1100 |
//============================================================== |
1101 |
|
1102 |
|
1103 |
Int_t ihelp_a[6] = {0,16,28,32,36,42}; |
1104 |
|
1105 |
for (Int_t ilay=0; ilay<6; ilay ++) { |
1106 |
Int_t jj = PaddleIdOfTrack[ilay] ; |
1107 |
//Float_t xhelp = 1000.; |
1108 |
Float_t xhelp = 1005.; |
1109 |
|
1110 |
if (jj == -1) Layerinfo[ilay] = -1; |
1111 |
|
1112 |
if (jj != -1) { |
1113 |
Int_t ih = ihelp_a[ilay] + 2*jj; |
1114 |
|
1115 |
// New WM |
1116 |
Int_t igood1=0; |
1117 |
Int_t igood2=0; |
1118 |
if ((PMTcharge_arr[ih] < 1000.) && (PMTcharge_arr[ih] > 0.)) igood1=1; |
1119 |
if ((PMTcharge_arr[ih+1] < 1000.) && (PMTcharge_arr[ih+1] > 0.)) igood2=1; |
1120 |
|
1121 |
if ((PMTcharge_arr[ih]==0.) && (PMTcharge_arr[ih+1]==0.)) xhelp = 0.; |
1122 |
if ((igood1==1)&&(igood2==1)) xhelp = 0.5*(PMTcharge_arr[ih]+PMTcharge_arr[ih+1]) ; |
1123 |
if ((igood1==1)&&(igood2==0)) xhelp = PMTcharge_arr[ih]; |
1124 |
if ((igood2==1)&&(igood1==0)) xhelp = PMTcharge_arr[ih+1]; |
1125 |
|
1126 |
|
1127 |
/* |
1128 |
if ((PMTcharge_arr[ih] < 1000.) && (PMTcharge_arr[ih+1] < 1000.)) xhelp = 0.5*(PMTcharge_arr[ih]+PMTcharge_arr[ih+1]) ; |
1129 |
if ((PMTcharge_arr[ih] < 1000.) && (PMTcharge_arr[ih+1]==1000.)) xhelp = PMTcharge_arr[ih] ; |
1130 |
if ((PMTcharge_arr[ih]==1000.) && (PMTcharge_arr[ih+1] < 1000.)) xhelp = PMTcharge_arr[ih+1] ; |
1131 |
*/ |
1132 |
|
1133 |
if (adc[ih] == 4095) Layerinfo[ilay] = Layerinfo[ilay] + 1; |
1134 |
if (adc[ih+1] == 4095) Layerinfo[ilay] = Layerinfo[ilay] + 1; |
1135 |
if ((adc[ih] > PMTsat[ih]) && (adc[ih] < 4095)) Layerinfo[ilay] = Layerinfo[ilay] + 10; |
1136 |
if ((adc[ih+1] > PMTsat[ih+1]) && (adc[ih+1] < 4095)) Layerinfo[ilay] = Layerinfo[ilay] + 10; |
1137 |
|
1138 |
|
1139 |
} |
1140 |
Layercharge[ilay] = xhelp; |
1141 |
} // ilay ... |
1142 |
|
1143 |
|
1144 |
//cout<<"Std: "; |
1145 |
//for (Int_t ilay=0; ilay<6; ilay ++) cout<<Layercharge[ilay]<<" "; |
1146 |
|
1147 |
//========================================================================== |
1148 |
//============= Layercharge without 2nd-order correction ================= |
1149 |
//========================================================================== |
1150 |
|
1151 |
for (Int_t jj=0; jj<6;jj++) charge_layer_std_raw[jj] = Layercharge[jj]; |
1152 |
|
1153 |
//========================================================================== |
1154 |
//========================= 2nd-order correction ======================= |
1155 |
//========================================================================== |
1156 |
|
1157 |
Float_t xb = beta_mean; |
1158 |
|
1159 |
for (Int_t ii=0; ii<6; ii++) { |
1160 |
Int_t ic = 0; |
1161 |
Float_t corr[4] = {1., 0., 0., 0.}; |
1162 |
//for (Int_t iii=1; iii<9; iii++) if (fabs(Layercharge[ii] - iii)<0.50) ic = iii; |
1163 |
for (Int_t iii=1; iii<10; iii++) if (fabs(Layercharge[ii] - iii)<0.50) ic = iii; |
1164 |
if ((ic>0)&&(ic<=5)) for (Int_t iii=0; iii<4; iii++) corr[iii] = corr_a[ic-1][iii]; |
1165 |
if (ic >5) for (Int_t iii=0; iii<4; iii++) corr[iii] = corr_a[5][iii]; |
1166 |
|
1167 |
Float_t c_corr = corr[0]+corr[1]*xb+corr[2]*xb*xb+corr[3]*xb*xb*xb; |
1168 |
|
1169 |
if ((ic>0)&&(ic<=5)) c_corr = c_corr/(1.*ic) ; |
1170 |
if (ic>5) c_corr = c_corr/6. ; |
1171 |
|
1172 |
//cout<<Layercharge[ii]<<" "<<ic<<" "<<c_corr<<" => "; |
1173 |
Layercharge[ii] = Layercharge[ii]/c_corr; |
1174 |
//cout<<Layercharge[ii]<<endl; |
1175 |
|
1176 |
} |
1177 |
|
1178 |
|
1179 |
//========================================================================== |
1180 |
//cout<<"In ToFNuclei Std: "; |
1181 |
//for (Int_t ilay=0; ilay<6; ilay ++) cout<<Layercharge[ilay]<<" "; |
1182 |
//cout<<endl; |
1183 |
//========================================================================== |
1184 |
|
1185 |
|
1186 |
Int_t icount=0; |
1187 |
Float_t charge_mean = 0.; |
1188 |
for (Int_t ii=0; ii<6; ii++) { |
1189 |
if (Layercharge[ii] < 1000) charge_mean = charge_mean + Layercharge[ii] ; |
1190 |
if (Layercharge[ii] < 1000) icount++; |
1191 |
} |
1192 |
if (icount>0) charge_mean = charge_mean/(1.*icount) ; |
1193 |
|
1194 |
if (icount>0) { |
1195 |
|
1196 |
//for (Int_t ii=0; ii<6; ii++) cout<<Layercharge[ii]<<" "; |
1197 |
//cout<<endl; |
1198 |
|
1199 |
|
1200 |
vector<float> charge_v; |
1201 |
Float_t charge_median = 0.; |
1202 |
|
1203 |
//////// get the median charge //////////// |
1204 |
for(Int_t ii=0;ii<6;ii++) { |
1205 |
if (Layercharge[ii] < 1000) charge_v.push_back(Layercharge[ii]); |
1206 |
} |
1207 |
|
1208 |
std::sort(charge_v.begin(),charge_v.end()); |
1209 |
charge_median = charge_v[(int)(charge_v.size()/2+charge_v.size()%2)-1]; |
1210 |
|
1211 |
//cout<<charge_mean<<" "<<charge_median<<endl; |
1212 |
|
1213 |
charge_mean = charge_median; |
1214 |
|
1215 |
} // icount>0 |
1216 |
|
1217 |
//--- Calculate charge for the second time, use residuals of the single |
1218 |
//--- measurements to get a chi2 value |
1219 |
|
1220 |
// Float_t w_i_arr[8] = {0.1, 0.15, 0.2, 0.25, 0.30, 0.35, 0.45, 0.50}; |
1221 |
Float_t w_i_arr[8] = {0.1, 0.15, 0.2, 0.25, 0.35, 0.40, 0.50, 0.55}; |
1222 |
|
1223 |
icount=0; |
1224 |
Float_t sw=0.; |
1225 |
Float_t sxw=0.; |
1226 |
Float_t w_i = 1./0.5; |
1227 |
Float_t resmax= 3.0; |
1228 |
|
1229 |
iz=1; |
1230 |
if ((0.0<charge_mean) & (charge_mean<1.5)) iz=1; |
1231 |
if ((1.5<charge_mean) & (charge_mean<2.5)) iz=2; |
1232 |
if ((2.5<charge_mean) & (charge_mean<3.5)) iz=3; |
1233 |
if ((3.5<charge_mean) & (charge_mean<4.5)) iz=4; |
1234 |
if ((4.5<charge_mean) & (charge_mean<5.5)) iz=5; |
1235 |
if ((5.5<charge_mean) & (charge_mean<6.5)) iz=6; |
1236 |
if ((6.5<charge_mean) & (charge_mean<7.5)) iz=7; |
1237 |
if ((7.5<charge_mean) & (charge_mean<90.)) iz=8; |
1238 |
|
1239 |
w_i = 1./w_i_arr[iz-1]; |
1240 |
|
1241 |
|
1242 |
for (Int_t jj=0; jj<6;jj++){ |
1243 |
if (Layercharge[jj] < 1000) { |
1244 |
Float_t res = charge_mean - Layercharge[jj] ; |
1245 |
if (fabs(res*w_i)<resmax) {; |
1246 |
icount= icount+1; |
1247 |
sxw=sxw + Layercharge[jj]*w_i*w_i ; |
1248 |
sw =sw + w_i*w_i ; |
1249 |
} |
1250 |
} |
1251 |
} |
1252 |
|
1253 |
if (icount>0) charge_chi=sxw/sw; |
1254 |
|
1255 |
ncount = icount; |
1256 |
|
1257 |
//cout<<" => "<<icount<<" "<<charge_chi<<endl; |
1258 |
|
1259 |
|
1260 |
// charge_tof = charge_chi; |
1261 |
|
1262 |
// changed 30-01-2009 WM |
1263 |
|
1264 |
for (Int_t jj=0; jj<48;jj++) charge_PMT_std[jj] = PMTcharge_arr[jj]; |
1265 |
for (Int_t jj=0; jj<6;jj++) charge_layer_std[jj] = Layercharge[jj]; |
1266 |
for (Int_t jj=0; jj<6;jj++) layerinfo_std[jj] = Layerinfo[jj]; |
1267 |
charge_std = charge_chi; |
1268 |
ncount_std = ncount; |
1269 |
|
1270 |
} // 0.05 < fabs( beta) < 2.0 |
1271 |
|
1272 |
|
1273 |
} // standalone track found |
1274 |
|
1275 |
} |