/[PAMELA software]/tof/flight/ToFNuclei/src/ToFNuclei.cpp
ViewVC logotype

Contents of /tof/flight/ToFNuclei/src/ToFNuclei.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.8 - (show annotations) (download)
Fri Jan 17 15:12:38 2014 UTC (11 years ago) by mocchiut
Branch: MAIN
Changes since 1.7: +14 -12 lines
Compilation warnings using GCC4.7 fixed

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 Float_t adc[48],PMTcharge_arr[48];
406
407 //------------------------------------------------------------------
408
409 PamTrack *track = L2->GetTrack(0);
410
411 Float_t beta_mean = fabs(track->GetToFTrack()->beta[12]);
412
413 // New!! If "beta_in" != 100. then overwrite beta_mean with beta_in
414 if (beta_in != 100.) beta_mean=beta_in;
415
416 //Float_t def = track->GetTrkTrack()->al[4];
417 //Float_t rig = 1./def;
418
419 Int_t ncount=0;
420 Float_t charge_chi=1000.;
421
422 //-------------------------------------------------------------
423 //------------------ ToF Charge ------------------------------
424 //-------------------------------------------------------------
425
426 // fill adc and tdc
427
428 Int_t ich,jj,kk;
429
430 for (ich=0; ich<48; ich++) adc[ich] = 4095.;
431 // for (ich=0; ich<48; ich++) adc_c[ich] = 1000.;
432 for (ich=0; ich<48; ich++) PMTcharge_arr[ich] = 1000.;
433
434
435
436 if ((beta_mean < 0.05) || (beta_mean > 2.0)) {
437 for (Int_t jj=0; jj<48;jj++) charge_PMT_trk[jj] = 1001.;
438 for (Int_t jj=0; jj<6;jj++) charge_layer_trk[jj] = 1001.;
439 for (Int_t jj=0; jj<6;jj++) charge_layer_trk_raw[jj] = 1001.;
440 for (Int_t jj=0; jj<6;jj++) layerinfo_trk[jj] = 1001;
441 charge_trk = 1001.;
442 ncount_trk = 0;
443 }
444
445
446 if ((beta_mean > 0.05) && (beta_mean < 2.0)) {
447
448 Float_t betahelp = pow(beta_mean, 1.2);
449
450 //=======================================================================
451
452 for (Int_t ipmt=0; ipmt<L2->GetToFLevel2()->npmt() ; ipmt++){
453 ToFPMT *tofpmt = L2->GetToFLevel2()->GetToFPMT(ipmt);
454 Int_t pmt_id = tofpmt->pmt_id;
455 adc[pmt_id] = tofpmt->adc ;
456 }
457
458 //=======================================================================
459 Float_t yl, yh, ym, m, b, chelp, charge;
460
461 for (Int_t ipmt=0; ipmt<track->GetToFTrack()->npmtadc; ipmt++){
462 Float_t dEdx = track->GetToFTrack()->dedx[ipmt];
463 ym = dEdx*betahelp;
464 Int_t pmtadc = track->GetToFTrack()->pmtadc[ipmt];
465 // Int_t adcflag = track->GetToFTrack()->adcflag[ipmt];
466 L2->GetToFLevel2()->GetPMTIndex(pmtadc,jj,kk);
467 // if (adcflag==0) adc_c[pmtadc] = dEdx;
468
469
470 // if (adc[pmtadc] == 4095) adc_c[pmtadc] = 0.;
471 if (adc[pmtadc] == 4095) PMTcharge_arr[pmtadc] = 0.;
472
473 // if ((adc[pmtadc]>PMTsat[pmtadc]) && (adc[pmtadc]<4095)) adc_c[pmtadc] = 1000.;
474
475 if (adc[pmtadc] < PMTsat[pmtadc]) {
476 //----------------------------------------------------------------------------------------
477 if ((pmtadc!=1) && (pmtadc!=9) && (pmtadc!=28) && (pmtadc!=29) && (pmtadc!=34)) {
478
479 for ( Int_t jj=0; jj<9; jj++ ){
480 x1[jj] = A0t[pmtadc][jj]+A1t[pmtadc][jj]*beta_mean+A2t[pmtadc][jj]*beta_mean*beta_mean;
481 y1[jj] = C0t[pmtadc][jj]*C0t[pmtadc][jj] ;
482 }
483
484 TGraph *gr2 = new TGraph(n1,x1,y1);
485 TSpline3 *spl2 = new TSpline3("grs",gr2); // use a cubic spline
486 chelp = spl2->Eval(ym);
487 if (chelp<0.) chelp=0.0001; //WM new
488 charge = TMath::Sqrt(chelp);
489 gr2->Delete();
490 spl2->Delete();
491 PMTcharge_arr[pmtadc] = charge;
492 } // pmtadc != ...
493
494 //----------------------------------------------------------------------------------------
495
496 if ((pmtadc==1) || (pmtadc==9) || (pmtadc==28) || (pmtadc==29) || (pmtadc==34)) {
497 for ( Int_t jj=0; jj<8; jj++ ){
498 yl = A0t[pmtadc][jj]+A1t[pmtadc][jj]*beta_mean+A2t[pmtadc][jj]*beta_mean*beta_mean;
499 yh = A0t[pmtadc][jj+1]+A1t[pmtadc][jj+1]*beta_mean+A2t[pmtadc][jj+1]*beta_mean*beta_mean;
500 if ((yl<ym)&&(ym<yh)){
501 m = (C0t[pmtadc][jj+1]*C0t[pmtadc][jj+1] - C0t[pmtadc][jj]*C0t[pmtadc][jj]) / (yh - yl);
502 b = (C0t[pmtadc][jj]*C0t[pmtadc][jj]) - m*yl;
503 chelp = m*ym + b;
504 if (chelp<0.) chelp=0.0001; //WM new
505 charge= TMath::Sqrt(chelp);
506 PMTcharge_arr[pmtadc] = charge;
507 }
508 } // jj=0..8
509 } // if pmtadc ==....
510 //----------------------------------------------------------------------------------------
511 } // adc < sat
512
513 } // ipmt...
514
515 //====================================================================
516 //================ Find out the hitted ToF paddles ===============
517 //====================================================================
518
519 for (Int_t jj=0; jj<6; jj++){
520 xv[jj]=track->GetToFTrack()->xtr_tof[jj];
521 yv[jj]=track->GetToFTrack()->ytr_tof[jj];
522 }
523
524 Int_t PaddleIdOfTrack[6];
525
526 PaddleIdOfTrack[0] = L2->GetToFLevel2()->GetPaddleIdOfTrack(xv[0], yv[0], 0, 0.) ;
527 PaddleIdOfTrack[1] = L2->GetToFLevel2()->GetPaddleIdOfTrack(xv[1], yv[1], 1, 0.) ;
528 PaddleIdOfTrack[2] = L2->GetToFLevel2()->GetPaddleIdOfTrack(xv[2], yv[2], 2, 0.) ;
529 PaddleIdOfTrack[3] = L2->GetToFLevel2()->GetPaddleIdOfTrack(xv[3], yv[3], 3, 0.) ;
530 PaddleIdOfTrack[4] = L2->GetToFLevel2()->GetPaddleIdOfTrack(xv[4], yv[4], 4, 0.) ;
531 PaddleIdOfTrack[5] = L2->GetToFLevel2()->GetPaddleIdOfTrack(xv[5], yv[5], 5, 0.) ;
532
533 //==============================================================
534
535
536 Int_t ihelp_a[6] = {0,16,28,32,36,42};
537
538 for (Int_t ilay=0; ilay<6; ilay ++) {
539 Int_t jj = PaddleIdOfTrack[ilay] ;
540 //Float_t xhelp = 1000.;
541 Float_t xhelp = 1005.;
542
543 if (jj == -1) Layerinfo[ilay] = -1;
544
545 if (jj != -1) {
546 Int_t ih = ihelp_a[ilay] + 2*jj;
547
548 // New WM
549 Int_t igood1=0;
550 Int_t igood2=0;
551 if ((PMTcharge_arr[ih] < 1000.) && (PMTcharge_arr[ih] > 0.)) igood1=1;
552 if ((PMTcharge_arr[ih+1] < 1000.) && (PMTcharge_arr[ih+1] > 0.)) igood2=1;
553
554 if ((PMTcharge_arr[ih]==0.) && (PMTcharge_arr[ih+1]==0.)) xhelp = 0.;
555 if ((igood1==1)&&(igood2==1)) xhelp = 0.5*(PMTcharge_arr[ih]+PMTcharge_arr[ih+1]) ;
556 if ((igood1==1)&&(igood2==0)) xhelp = PMTcharge_arr[ih];
557 if ((igood2==1)&&(igood1==0)) xhelp = PMTcharge_arr[ih+1];
558
559
560 /*
561 if ((PMTcharge_arr[ih] < 1000.) && (PMTcharge_arr[ih+1] < 1000.)) xhelp = 0.5*(PMTcharge_arr[ih]+PMTcharge_arr[ih+1]) ;
562 if ((PMTcharge_arr[ih] < 1000.) && (PMTcharge_arr[ih+1]==1000.)) xhelp = PMTcharge_arr[ih] ;
563 if ((PMTcharge_arr[ih]==1000.) && (PMTcharge_arr[ih+1] < 1000.)) xhelp = PMTcharge_arr[ih+1] ;
564 */
565 if (adc[ih] == 4095) Layerinfo[ilay] = Layerinfo[ilay] + 1;
566 if (adc[ih+1] == 4095) Layerinfo[ilay] = Layerinfo[ilay] + 1;
567 if ((adc[ih] > PMTsat[ih]) && (adc[ih] < 4095)) Layerinfo[ilay] = Layerinfo[ilay] + 10;
568 if ((adc[ih+1] > PMTsat[ih+1]) && (adc[ih+1] < 4095)) Layerinfo[ilay] = Layerinfo[ilay] + 10;
569 }
570 Layercharge[ilay] = xhelp;
571 } // ilay ...
572
573
574
575 //==========================================================================
576 //============= Layercharge without 2nd-order correction =================
577 //==========================================================================
578
579 for (Int_t jj=0; jj<6;jj++) charge_layer_trk_raw[jj] = Layercharge[jj];
580
581 //==========================================================================
582 //========================= 2nd-order correction =======================
583 //==========================================================================
584
585 Float_t xb = beta_mean;
586
587 for (Int_t ii=0; ii<6; ii++) {
588 Int_t ic = 0;
589 Float_t corr[4] = {1., 0., 0., 0.};
590 for (Int_t iii=1; iii<9; iii++) if (fabs(Layercharge[ii] - iii)<0.50) ic = iii;
591 if ((ic>0)&&(ic<=5)) for (Int_t iii=0; iii<4; iii++) corr[iii] = corr_a[ic-1][iii];
592 if (ic >5) for (Int_t iii=0; iii<4; iii++) corr[iii] = corr_a[5][iii];
593
594 Float_t c_corr = corr[0]+corr[1]*xb+corr[2]*xb*xb+corr[3]*xb*xb*xb;
595
596 if ((ic>0)&&(ic<=5)) c_corr = c_corr/(1.*ic) ;
597 if (ic>5) c_corr = c_corr/6. ;
598
599 //cout<<"beta "<<xb<<" layer "<<ii<<" ic "<<ic<<" => "<<c_corr<<endl;
600 //cout<<xb<<" "<<ic<<" "<<c_corr<<endl;
601
602 Layercharge[ii] = Layercharge[ii]/c_corr;
603
604 }
605
606 //==========================================================================
607 //==========================================================================
608
609
610 Int_t icount=0;
611 Float_t charge_mean = 0.;
612 for (Int_t ii=0; ii<6; ii++) {
613 if (Layercharge[ii] < 1000) charge_mean = charge_mean + Layercharge[ii] ;
614 if (Layercharge[ii] < 1000) icount++;
615 }
616 if (icount>0) charge_mean = charge_mean/(1.*icount) ;
617
618 if (icount>0) {
619
620 //for (Int_t ii=0; ii<6; ii++) cout<<Layercharge[ii]<<" ";
621 //cout<<endl;
622
623
624 vector<float> charge_v;
625 Float_t charge_median = 0.;
626
627 //////// get the median charge ////////////
628 for(Int_t ii=0;ii<6;ii++) {
629 if (Layercharge[ii] < 1000) charge_v.push_back(Layercharge[ii]);
630 }
631
632 std::sort(charge_v.begin(),charge_v.end());
633 charge_median = charge_v[(int)(charge_v.size()/2+charge_v.size()%2)-1];
634
635 //cout<<charge_mean<<" "<<charge_median<<endl;
636
637 charge_mean = charge_median;
638
639 } // icount>0
640
641
642 //--- Calculate charge for the second time, use residuals of the single
643 //--- measurements to get a chi2 value
644
645 Float_t w_i_arr[8] = {0.1, 0.15, 0.2, 0.25, 0.30, 0.35, 0.45, 0.50};
646
647 icount=0;
648 Float_t sw=0.;
649 Float_t sxw=0.;
650 Float_t w_i = 1./0.5;
651 Float_t resmax= 3.0;
652
653 iz=1;
654 if ((0.0<charge_mean) & (charge_mean<1.5)) iz=1;
655 if ((1.5<charge_mean) & (charge_mean<2.5)) iz=2;
656 if ((2.5<charge_mean) & (charge_mean<3.5)) iz=3;
657 if ((3.5<charge_mean) & (charge_mean<4.5)) iz=4;
658 if ((4.5<charge_mean) & (charge_mean<5.5)) iz=5;
659 if ((5.5<charge_mean) & (charge_mean<6.5)) iz=6;
660 if ((6.5<charge_mean) & (charge_mean<7.5)) iz=7;
661 if ((7.5<charge_mean) & (charge_mean<90.)) iz=8;
662
663 w_i = 1./w_i_arr[iz-1];
664
665 for (Int_t jj=0; jj<6;jj++){
666 if (Layercharge[jj] < 1000) {
667 Float_t res = charge_mean - Layercharge[jj] ;
668 if (fabs(res*w_i)<resmax) {
669 icount= icount+1;
670 sxw=sxw + Layercharge[jj]*w_i*w_i ;
671 sw =sw + w_i*w_i ;
672 }
673 }
674 }
675
676
677 ncount = icount;
678 if (icount>0) charge_chi=sxw/sw;
679
680 // cout<<" => "<<icount<<" "<<charge_chi<<endl;
681
682 //=============================================================
683 // changed 30-01-2009 WM
684
685 for (Int_t jj=0; jj<48;jj++) charge_PMT_trk[jj] = PMTcharge_arr[jj];
686 for (Int_t jj=0; jj<6;jj++) charge_layer_trk[jj] = Layercharge[jj];
687 for (Int_t jj=0; jj<6;jj++) layerinfo_trk[jj] = Layerinfo[jj];
688 charge_trk = charge_chi;
689 ncount_trk = ncount;
690
691 } // 0.05 < beta < 2.0
692
693 } // if ntrk == 1
694
695 //================================================================
696 //============== Siegen version 1 =============
697 //============== standalone dEdx and beta =============
698 //================================================================
699
700 // ToF track
701 ToFTrkVar *track = L2->GetToFStoredTrack(-1);
702 // if(!track)return;
703 if(track) {
704
705 /*
706 Float_t PMTsat[48] = {
707 3162.14, 3165.48, 3153.85, 3085.73, 3089.65, 3107.64, 3097.52, 3078.37, 3130.05, 3087.07, 3112.22,
708 3102.92, 3080.58, 3092.55, 3087.94, 3125.03, 3094.09, 3143.16,
709 3125.51, 3181.27, 3092.09, 3124.98, 3069.3, 3095.53, 3097.11, 3133.53, 3114.73, 3113.01, 3091.19,
710 3097.99, 3033.84, 3134.98, 3081.37, 3111.04, 3066.77, 3108.17,
711 3133, 3111.06, 3052.52, 3140.66, 3106.33, 3094.85, 3150.85, 3118.8, 3096.24, 3118.47,3111.36, 3117.11
712 };
713 */
714
715 // new values from Napoli dec 2008
716 Float_t PMTsat[48] = {
717 3176.35,3178.19,3167.38,3099.73,3117.00,3126.29,3111.44,3092.27,
718 3146.48,3094.41,3132.13,3115.37,3099.32,3110.97,3111.80,3143.14,
719 3106.72,3153.44,3136.00,3188.96,3104.73,3140.45,3073.18,3106.62,
720 3112.48,3146.92,3127.24,3136.52,3109.59,3112.89,3045.15,3147.26,
721 3095.92,3121.05,3083.25,3123.62,3150.92,3125.30,3067.60,3160.18,
722 3119.36,3108.92,3164.77,3133.64,3111.47,3131.98,3128.87,3135.56 };
723
724 for (Int_t i=0; i<48;i++) PMTsat[i] = PMTsat[i] - 5.; // safety margin
725
726 // calibration file "charge_fits_new_std_2.dat"
727
728 Float_t C0t[48][9] = {
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 {0, 1, 2, 3, 4, 5, 6, 8, 92} } ;
777
778 Float_t A0t[48][9] = {
779 {0, 0.707632, 5.09223, 7.99994, 11, 13, 16, 18, 2000},
780 {0, 0.636707, 6.37524, 8, 11, 13.0002, 16.0001, 18, 2000},
781 {0, 0.952117, 6.04188, 7.99999, 11, 13, 16, 18, 2000},
782 {0, 0.880805, 5.80883, 8.00003, 11.0001, 13.0005, 16.0011, 18.0027, 2000},
783 {0, 0.834937, 5.12617, 8, 11, 13, 16, 17.9998, 2000},
784 {0, 0.772954, 5.17221, 8, 11, 13, 16, 18.0006, 2000},
785 {0, 0.911496, 5.04755, 8, 11, 13, 16, 18, 2000},
786 {0, 0.86523, 5.55215, 8, 11, 13, 16, 17.9999, 2000},
787 {0, 1.06061, 5.49757, 12, 15, 20, 25, 25, 2000},
788 {0, 0.5, 1.8, 3, 3.8, 6.49999, 7.99996, 8.99998, 2000},
789 {0, 1.06974, 4.86153, 7.99999, 11, 13, 16, 18, 2000},
790 {0, 1.0465, 6.00778, 8, 11, 13, 16, 17.9999, 2000},
791 {0, 1.18132, 5.48741, 8, 11, 13, 16, 17.9999, 2000},
792 {0, 1.10823, 5.43611, 8, 11, 13, 16, 18.0001, 2000},
793 {0, 1.19621, 5.27647, 7.99994, 11, 13, 16, 18, 2000},
794 {0, 1.72505, 5.14873, 8.00006, 11, 13, 16, 17.9999, 2000},
795 {0, 1.48515, 6.07123, 8.00006, 11, 13.0003, 16, 17.9999, 2000},
796 {0, 1.17628, 6.63392, 8.00011, 11, 13, 16, 17.9999, 2000},
797 {0, 1.11301, 5.94317, 7.99999, 11, 13, 16, 18, 2000},
798 {0, 1.04361, 6.40789, 8.00002, 11.0002, 13.0015, 16, 17.9996, 2000},
799 {0, 1.12658, 5.69828, 8, 11, 13, 16, 18.0001, 2000},
800 {0, 0.840188, 5.44945, 8.00005, 11, 13, 16, 18, 2000},
801 {0, 1.16985, 6.21385, 8.00012, 11, 13.0002, 16, 17.9999, 2000},
802 {0, 0.977696, 5.70252, 8.00004, 11, 13, 16, 17.9999, 2000},
803 {0, 1.26298, 6.03137, 8.00003, 11, 13, 16.0009, 17.9998, 2000},
804 {0, 0.988707, 5.98453, 8, 11, 13, 16, 18.0001, 2000},
805 {0, 1.22109, 6.76385, 8.00002, 11, 13.0005, 16.0001, 18.0006, 2000},
806 {0, 1.65541, 6.01998, 8.00006, 11.0057, 13, 16, 18, 2000},
807 {0, 1.59779, 6.00152, 7.00005, 7.99997, 8.99997, 14.9991, 18, 2000},
808 {0, 1.6515, 5.95297, 7.99999, 10, 12, 14.9995, 18, 2000},
809 {0, 1.70339, 6.43684, 9, 12, 14, 16, 21.9999, 2000},
810 {0, 1.64867, 5.6503, 8, 10, 12, 14.9999, 18, 2000},
811 {0, 1.83955, 6.64378, 9, 12, 14, 16, 22, 2000},
812 {0, 1.71975, 6.42585, 9, 12, 14, 16, 22, 2000},
813 {0, 1.88735, 6.12987, 8, 10, 12, 15.0001, 18, 2000},
814 {0, 1.86719, 5.94227, 8, 10, 12, 14.9999, 20,2000},
815 {0, 2.55127, 5.83621, 8.99997, 12, 15, 17.9999, 21.9998, 2000},
816 {0, 2.59328, 5.90275, 8.99999, 12, 15, 18, 22, 2000},
817 {0, 2.63523, 6.56428, 9.00004, 12, 15.0003, 18.001, 22.0029, 2000},
818 {0, 2.63114, 6.77412, 8.99995, 11.9998, 14.9997, 17.9996, 21.9998, 2000},
819 {0, 2.48986, 6.43372, 8.99996, 11.9998, 14.9995, 17.9997, 21.9995, 2000},
820 {0, 2.43724, 6.51911, 9.00012, 12, 15, 18, 21.9999, 2000},
821 {0, 3.21403, 5.7, 9, 12, 15, 18, 22, 2000},
822 {0, 3.3517, 6.30461, 8.99997, 12, 15, 18, 22, 2000},
823 {0, 3.0843, 5.90189, 8.99993, 12, 15, 18, 22, 2000},
824 {0, 3.35806, 6.20792, 8.99998, 12.0001, 15, 18, 22, 2000},
825 {0, 3.13525, 5.60432, 8.99997, 12, 15.0001, 18, 22, 2000},
826 {0, 3.26271, 6.38934, 9, 12, 15, 18, 22.0001, 2000} };
827
828
829 Float_t A1t[48][9] = {
830 { 0, 0.182202, -3.48762, -4.67241, -5.61872, 2.35336, -2.4112, -0.7861, 0 },
831 { 0, 0.528581, -6.33244, 0.176685, -3.3272, 5.47434, 7.62771, 18.9223, 0 },
832 { 0, -0.148985, -5.31035, -3.1044, -1.84685, -0.678725, -0.00713058, 11.2127, 0 },
833 { 0, 0.01113, -4.6759, -0.669811, 1.69435, 7.44019, 12.2231, 26.9653, 0 },
834 { 0, 0.0567585, -3.05564, -2.57264, -0.0868904, 4.88938, 2.64699, -10, 0 },
835 { 0, 0.331112, -3.06987, -0.451796, -0.660912, 4.49088, 6.43095, 16.7904, 0 },
836 { 0, 0.0779621, -2.64271, -2.29896, -1.95824, 1.8888, 1.02257, 10.5746, 0 },
837 { 0, 0.257346, -3.93191, 0.564894, 2.04068, 4.12823, 5.87416, 16.2268, 0 },
838 { 0, -0.332593, -3.65149, 0, 10, 20, 30, 40, 0 },
839 { 0, 0, 0, -0.5, 0, -6.80247, -9.43463, -8.44329, 0 },
840 { 0, -0.25099, -2.53532, -2.43846, -2.94008, -1.01258, -1.10502, 5.16068, 0 },
841 { 0, -0.101144, -4.98664, -0.369916, 2.2648, 4.2727, 3.1653, 19.8617, 0 },
842 { 0, -0.5074, -3.98429, -0.306633, 0.562595, 5.05787, 4.70127, 14.2399, 0 },
843 { 0, -0.326603, -3.83632, -1.75409, -1.86815, 0.84194, 1.32718, 14.4304, 0 },
844 { 0, -0.597543, -3.82759, -6.9094, -2.88583, 5.50573, 4.30943, 18.0664, 0 },
845 { 0, -1.86862, -3.80777, -2.69084, -4.09258, 1.59904, 4.61543, 13.8186, 0 },
846 { 0, -0.932447, -6.02195, -0.891975, 0.870346, 7.22131, 6.03928, 20.5102, 0 },
847 { 0, -0.439221, -7.66335, -2.7363, -3.29581, 3.74263, 3.2571, 15.8539, 0 },
848 { 0, -0.487944, -5.05733, -2.61662, -2.86336, 2.65017, -0.919043, 7.10535, 0 },
849 { 0, -0.0329559, -6.07396, -0.0044396, 2.75593, 8.87808, 14.9627, 28.8783, 0 },
850 { 0, -0.573054, -4.15302, -2.15074, -1.83499, 0.969726, 1.36361, 17.6185, 0 },
851 { 0, 0.238198, -3.75628, -1.02674, 1.12711, 3.06917, 2.61956, 11.2723, 0 },
852 { 0, -0.473325, -5.88165, -2.10476, -0.508963, 4.24835, 6.41943, 14.9346, 0 },
853 { 0, 0.0585487, -4.40372, -1.45949, 1.31992, 4.7115, 5.03433, 11.968, 0 },
854 { 0, -0.836615, -5.05945, -0.644868, 2.3894, 9.40413, 11.4195, 25.3239, 0 },
855 { 0, 0.026064, -4.78872, -0.819969, -0.57223, 1.84866, 0.29272, 15.1362, 0 },
856 { 0, -0.659228, -6.61715, 0.371846, 4.36719, 10.657, 17.8551, 29.3359, 0 },
857 { 0, -1.27483, -4.52966, -1.85458, -0.9634, 3.65819, 2.89211, 13.508, 0 },
858 { 0, -1.49858, -5.08299, 0.103222, 3.84545, 3.46523, -13.6535, -20, 0 },
859 { 0, -1.70043, -4.92192, -2.46523, -0.681845, -2.80632, -8.55159, -20, 0 },
860 { 0, -1.85437, -5.65787, -1.56314, 0.372468, 4.54151, 2.97956, -7.90681, 0 },
861 { 0, -1.78092, -4.19601, -1.84397, -0.175657, -2.0339, -5.64021, -20, 0 },
862 { 0, -2.08786, -6.05197, -1.81875, -0.423923, 5.86772, 7.50042, 4.22714, 0 },
863 { 0, -1.78679, -5.6835, -1.22858, -0.764359, 2.71007, 4.16034, 4.49981, 0 },
864 { 0, -2.21623, -5.39176, -0.174751, 0.19786, -1.93316, -7.45927, -20, 0 },
865 { 0, -2.2076, -4.93708, -1.49415, 0.576195, 0.552502, -5.02466, -18, 0 },
866 { 0, -3.95472, -4.97236, -5.73642, -7.17611, -8.40014, -10.7071, -13.5198, 0 },
867 { 0, -3.98713, -4.90269, -4.51467, -4.74549, -5.13124, -6.02539, -4.36386, 0 },
868 { 0, -4.09193, -6.36148, -1.92129, 0.535293, 4.36379, 8.09335, 21.4513, 0 },
869 { 0, -4.09301, -6.86077, -8.51634, -10.7671, -15.4194, -19.8748, -18.2532, 0 },
870 { 0, -3.66083, -6.39249, -8.20002, -12.5867, -18.523, -21.1403, -22.5493, 0 },
871 { 0, -3.66449, -6.84751, -3.49245, -4.82854, 0.21682, 0.54105, -16.1417, 0 },
872 { 0, -5.55283, -4.22, -4.20093, -2.0392, -1.493, 0.481244, 6.28662, 0 },
873 { 0, -5.93701, -5.45729, -6.95403, -6.68625, -5.13187, -5.10613, -2.64945, 0 },
874 { 0, -5.25381, -4.94071, -7.72978, -4.67849, -4.74316, -3.91651, 1.17451, 0 },
875 { 0, -6.01523, -5.33454, -6.26672, -5.88745, -8.91118, -11.1342, -7.91073, 0 },
876 { 0, -5.53583, -4.3686, -8.88023, -6.36106, -4.70941, -3.2139, -0.381882, 0 },
877 { 0, -5.7646, -6.25807, -5.12981, -1.5055, -1.11425, -0.388791, 8.42188, 0 } };
878
879
880 Float_t A2t[48][9] = {
881 { 0, 0.317852, 2.46394, 4.35287, 6.69993, 1.37704, 9.38636, 22.3426, 0 },
882 { 0, 0.0270999, 4.03858, 0.614142, 7.64715, 3, 4.55046, 9.46688, 0 },
883 { 0, 0.422802, 3.25444, 2.83067, 3.78916, 7.15528, 9.61404, 9.53181, 0 },
884 { 0, 0.27719, 2.81849, 2, 3, 3, 3, 3, 0 },
885 { 0, 0.257138, 1.96682, 2.66388, 2.02686, 0.981737, 7.07876, 32, 0 },
886 { 0, 0.0777448, 1.95238, 0.591915, 3.36314, 1.71777, 3.1121, 3, 0 },
887 { 0, 0.201297, 1.54333, 2.06343, 3.81529, 3.47056, 7.66122, 10.2165, 0 },
888 { 0, 0.090275, 2.35456, 0.150419, 1.48979, 4.43331, 6.09798, 9.59925, 0 },
889 { 0, 0.472466, 2.2568, 0, 0, 0, 0, 0, 0 },
890 { 0, 0, 0, 0, 0, 5.8114, 8.76464, 11.718, 0 },
891 { 0, 0.369669, 1.66502, 2.21937, 4.8545, 6.71778, 9.52608, 13.5645, 0 },
892 { 0, 0.278447, 3.03196, 0.562358, 0.978803, 4.19387, 9.26949, 4.33973, 0 },
893 { 0, 0.488781, 2.52383, 0.674871, 2.54554, 2.33603, 6.75428, 10.7769, 0 },
894 { 0, 0.396462, 2.42949, 1.33035, 3.9579, 4.98889, 7.41728, 8.78462, 0 },
895 { 0, 0.616543, 2.39152, 7.13157, 4.52173, 0.795959, 5.05895, 3.58876, 0 },
896 { 0, 1.3407, 2.54098, 2, 7.35567, 6.08494, 6.47321, 6.60084, 0 },
897 { 0, 0.855061, 3.97328, 2, 3, 3, 10.1946, 7.06782, 0 },
898 { 0, 0.492265, 5.11681, 2, 2.24085, 0.00142742, 3.12852, 1.94308, 0 },
899 { 0, 0.594536, 3.10529, 2.07652, 4.86122, 2.7748, 10.0368, 14.8149, 0 },
900 { 0, 0.220041, 3.69287, 2, 3, 3, 0.0668348, 0.124322, 0 },
901 { 0, 0.652342, 2.52474, 1.92129, 3.97957, 5.4076, 8.66393, 5.53485, 0 },
902 { 0, 0.109911, 2.37426, 2, 2.09403, 4.25338, 7.64627, 8.96803, 0 },
903 { 0, 0.503317, 3.66579, 2, 3, 3, 3.95553, 7.79201, 0 },
904 { 0, 0.18358, 2.71524, 2, 1.64493, 2.67235, 6.00813, 13.3661, 0 },
905 { 0, 0.762639, 3.10968, 2, 1.79493, 0.0228019, 3, 6.68329, 0 },
906 { 0, 0.218363, 2.87712, 0.218535, 3, 4.57375, 9.68986, 4.89219, 0 },
907 { 0, 0.675406, 4.00709, 2, 1.07325, 3, 0.182969, 8.20433, 0 },
908 { 0, 0.991549, 2.68269, 2, 3.876, 2.94015, 6.72011, 7.03988, 0 },
909 { 0, 1.02743, 3.12518, 2, 2.20294, 6.63646, 22.0153, 35, 0 },
910 { 0, 1.18885, 3.01461, 2.30242, 3.46316, 8.98077, 16.6101, 35, 0 },
911 { 0, 1.47119, 3.24004, 1.07333, 2.31147, 2.98418, 9.99881, 28.0778, 0 },
912 { 0, 1.28408, 2.55246, 1.49292, 3.01143, 8.45419, 13.2062, 35, 0 },
913 { 0, 1.56497, 3.35834, 0.73553, 3, 2.13162, 5.84836, 18.6428, 0 },
914 { 0, 1.39782, 3.19843, 0.593735, 3.34643, 4.22204, 6.78619, 12.8529, 0 },
915 { 0, 1.46182, 3.30186, 0.0348858, 3.87061, 9.87769, 16.8741, 35, 0 },
916 { 0, 1.50597, 3.03838, 1.62411, 2.96043, 7.1428, 15.4035, 35, 0 },
917 { 0, 2.6053, 2.92019, 3.8816, 7.13833, 9.84022, 13.4445, 22.2018, 0 },
918 { 0, 2.58901, 2.74623, 2.66245, 5.37385, 8.40354, 11.6502, 17.4423, 0 },
919 { 0, 2.65151, 3.592, 2, 3, 3, 3, 3, 0 },
920 { 0, 2.65586, 3.87903, 6.12175, 9.92231, 16.1427, 21.4766, 21.4604, 0 },
921 { 0, 2.38768, 3.77375, 5.67703, 11.8596, 18.8674, 20.8655, 24.5083, 0 },
922 { 0, 2.40258, 4.1273, 2, 5.81564, 2.29756, 4.40615, 32.3639, 0 },
923 { 0, 3.54156, 2.13, 2.79762, 2.76993, 4.67104, 5.20053, 8.36394, 0 },
924 { 0, 3.76292, 2.83393, 5.30926, 6.67988, 7.35393, 9.46522, 14.8599, 0 },
925 { 0, 3.37723, 2.74166, 6.71253, 5.63259, 8.42885, 9.99872, 14.8742, 0 },
926 { 0, 3.83378, 2.79501, 4.78642, 5.94201, 11.4635, 14.7442, 16.5806, 0 },
927 { 0, 3.59181, 2.3773, 7.14813, 5.60101, 6.47122, 6.64957, 14.2374, 0 },
928 { 0, 3.68523, 3.54382, 3.92867, 2.18506, 5.56025, 7.75895, 7.448, 0 } };
929
930
931 // S115B failure: 1158700000 // 2006-09-19 21:06:40 UTC
932
933 if (time < 1158700000.) { // first workaround: just use calibration of PMT S115A
934 for ( Int_t jj=0; jj<9; jj++ ){
935 A0t[9][jj] = A0t[8][jj] ;
936 A1t[9][jj] = A1t[8][jj] ;
937 A2t[9][jj] = A2t[8][jj] ;
938 }
939 } // if time...
940
941
942 // 2nd-order correction
943 Float_t corr_a[6][4] = {
944 {0.551894 , 2.24353 , -3.35885 , 1.51401} ,
945 {0.915691 , 4.83967 , -6.85389 , 3.13679} ,
946 {1.84338 , 5.63517 , -8.41577 , 4.04055} ,
947 {1.51216 , 11.3233 , -16.2119 , 7.45008} ,
948 {1.50481 , 15.2538 , -21.2003 , 9.51127} ,
949 {1.82038 , 17.5336 , -23.5512 , 10.3036} };
950
951 //---------------------------------------------------------------------
952
953 //Float_t xv[6],yv[6];
954 Int_t iz;
955
956 Float_t x1[9],y1[9];
957 Int_t n1 = 9;
958
959 Float_t Layercharge[6] = {1005., 1005., 1005., 1005., 1005., 1005. };
960
961 Int_t Layerinfo[6] = {0, 0, 0, 0, 0, 0 };
962
963 //Float_t adc[48],adc_c[48],PMTcharge_arr[48];
964 Float_t adc[48],PMTcharge_arr[48];
965
966 Float_t beta_mean = fabs(track->beta[12]);
967
968 // New!! If "beta_in" != 100. then overwrite beta_mean with beta_in
969 if (beta_in != 100.) beta_mean=beta_in;
970
971 Int_t ncount=0;
972 Float_t charge_chi=1000.;
973
974
975 //-------------------------------------------------------------
976
977 // fill adc and tdc
978
979 Int_t ich,jj,kk;
980
981 for (ich=0; ich<48; ich++) adc[ich] = 4095.;
982 // for (ich=0; ich<48; ich++) adc_c[ich] = 1000.;
983 for (ich=0; ich<48; ich++) PMTcharge_arr[ich] = 1000.;
984
985
986 if ((beta_mean < 0.05) || (beta_mean > 2.0)) {
987 for (Int_t jj=0; jj<48;jj++) charge_PMT_std[jj] = 1001.;
988 for (Int_t jj=0; jj<6;jj++) charge_layer_std[jj] = 1001.;
989 for (Int_t jj=0; jj<6;jj++) charge_layer_std_raw[jj] = 1001.;
990 for (Int_t jj=0; jj<6;jj++) layerinfo_std[jj] = 1001;
991 charge_std = 1001.;
992 ncount_std = 0;
993 }
994
995
996 if ((beta_mean > 0.05) && (beta_mean < 2.0)) {
997
998 Float_t betahelp = pow(beta_mean, 1.2);
999
1000 //=======================================================================
1001
1002 for (Int_t ipmt=0; ipmt<L2->GetToFLevel2()->npmt() ; ipmt++){
1003 ToFPMT *tofpmt = L2->GetToFLevel2()->GetToFPMT(ipmt);
1004 Int_t pmt_id = tofpmt->pmt_id;
1005 adc[pmt_id] = tofpmt->adc ;
1006 }
1007
1008 //=======================================================================
1009
1010 Float_t yl, yh, ym, m, b, chelp, charge;
1011
1012
1013 for (Int_t ipmt=0; ipmt<track->npmtadc; ipmt++){
1014 Float_t dEdx = track->dedx[ipmt];
1015 ym = dEdx*betahelp;
1016 Int_t pmtadc = track->pmtadc[ipmt];
1017 // Int_t adcflag = track->adcflag[ipmt];
1018 L2->GetToFLevel2()->GetPMTIndex(pmtadc,jj,kk);
1019 // if (adcflag==0) adc_c[pmtadc] = dEdx;
1020
1021 // if (adc[pmtadc] == 4095) adc_c[pmtadc] = 0.;
1022 if (adc[pmtadc] == 4095) PMTcharge_arr[pmtadc] = 0.;
1023
1024 // if ((adc[pmtadc]>PMTsat[pmtadc]) && (adc[pmtadc]<4095)) adc_c[pmtadc] = 1000.;
1025
1026 if (adc[pmtadc] < PMTsat[pmtadc]) {
1027
1028 if ((pmtadc!=4) && (pmtadc!=8) && (pmtadc!=28) && (pmtadc!=31) && (pmtadc!=34) && (pmtadc!=39) && (pmtadc!=41) && (pmtadc!=46)) {
1029
1030 for ( Int_t jj=0; jj<9; jj++ ){
1031 x1[jj] = A0t[pmtadc][jj]+A1t[pmtadc][jj]*beta_mean+A2t[pmtadc][jj]*beta_mean*beta_mean;
1032 y1[jj] = C0t[pmtadc][jj]*C0t[pmtadc][jj] ;
1033 // cout<<x1[jj]<<" "<<y1[jj]<<" ";
1034 }
1035 // cout<<endl;
1036
1037
1038 TGraph *gr2 = new TGraph(n1,x1,y1);
1039 TSpline3 *spl2 = new TSpline3("grs",gr2); // use a cubic spline
1040 chelp = spl2->Eval(ym);
1041 if (chelp<0.) chelp=0.0001; //WM new
1042 charge = TMath::Sqrt(chelp);
1043
1044 gr2->Delete();
1045 spl2->Delete();
1046 PMTcharge_arr[pmtadc] = charge;
1047 } // pmtadc != ...
1048
1049 if ((pmtadc==4) || (pmtadc==8) || (pmtadc==28) || (pmtadc==31) || (pmtadc==34) || (pmtadc==39) || (pmtadc==41) || (pmtadc==46)) {
1050 for ( Int_t jj=0; jj<8; jj++ ){
1051 yl = A0t[pmtadc][jj]+A1t[pmtadc][jj]*beta_mean+A2t[pmtadc][jj]*beta_mean*beta_mean;
1052 yh = A0t[pmtadc][jj+1]+A1t[pmtadc][jj+1]*beta_mean+A2t[pmtadc][jj+1]*beta_mean*beta_mean;
1053 if ((yl<ym)&&(ym<yh)){
1054 m = (C0t[pmtadc][jj+1]*C0t[pmtadc][jj+1] - C0t[pmtadc][jj]*C0t[pmtadc][jj]) / (yh - yl);
1055 b = (C0t[pmtadc][jj]*C0t[pmtadc][jj]) - m*yl;
1056 chelp = m*ym + b;
1057 if (chelp<0.) chelp=0.0001; //WM new
1058 charge= TMath::Sqrt(chelp);
1059 PMTcharge_arr[pmtadc] = charge;
1060 }
1061 } // jj=0..8
1062 } // if pmtadc ==....
1063
1064 } // adc < sat
1065 } // ipmt...
1066
1067
1068 //====================================================================
1069 //============= Check ToF standalone using HitPaddle ===================
1070 //====================================================================
1071
1072 Int_t PaddleIdOfTrack[6] = {-1, -1, -1, -1, -1, -1};;
1073
1074 for(jj=0; jj<8; jj++){
1075 Int_t HitPad = L2->GetToFLevel2()->HitPaddle(0,jj);
1076 if (HitPad==1) PaddleIdOfTrack[0] = jj;
1077 }
1078 for(jj=0; jj<6; jj++){
1079 Int_t HitPad = L2->GetToFLevel2()->HitPaddle(1,jj);
1080 if (HitPad==1) PaddleIdOfTrack[1] = jj;
1081 }
1082
1083
1084 for(jj=0; jj<2; jj++){
1085 Int_t HitPad = L2->GetToFLevel2()->HitPaddle(2,jj);
1086 if (HitPad==1) PaddleIdOfTrack[2] = jj;
1087 }
1088 for(jj=0; jj<2; jj++){
1089 Int_t HitPad = L2->GetToFLevel2()->HitPaddle(3,jj);
1090 if (HitPad==1) PaddleIdOfTrack[3] = jj;
1091 }
1092
1093 for(jj=0; jj<3; jj++){
1094 Int_t HitPad = L2->GetToFLevel2()->HitPaddle(4,jj);
1095 if (HitPad==1) PaddleIdOfTrack[4] = jj;
1096 }
1097 for(jj=0; jj<3; jj++){
1098 Int_t HitPad = L2->GetToFLevel2()->HitPaddle(5,jj);
1099 if (HitPad==1) PaddleIdOfTrack[5] = jj;
1100 }
1101
1102 //==============================================================
1103
1104
1105 Int_t ihelp_a[6] = {0,16,28,32,36,42};
1106
1107 for (Int_t ilay=0; ilay<6; ilay ++) {
1108 Int_t jj = PaddleIdOfTrack[ilay] ;
1109 //Float_t xhelp = 1000.;
1110 Float_t xhelp = 1005.;
1111
1112 if (jj == -1) Layerinfo[ilay] = -1;
1113
1114 if (jj != -1) {
1115 Int_t ih = ihelp_a[ilay] + 2*jj;
1116
1117 // New WM
1118 Int_t igood1=0;
1119 Int_t igood2=0;
1120 if ((PMTcharge_arr[ih] < 1000.) && (PMTcharge_arr[ih] > 0.)) igood1=1;
1121 if ((PMTcharge_arr[ih+1] < 1000.) && (PMTcharge_arr[ih+1] > 0.)) igood2=1;
1122
1123 if ((PMTcharge_arr[ih]==0.) && (PMTcharge_arr[ih+1]==0.)) xhelp = 0.;
1124 if ((igood1==1)&&(igood2==1)) xhelp = 0.5*(PMTcharge_arr[ih]+PMTcharge_arr[ih+1]) ;
1125 if ((igood1==1)&&(igood2==0)) xhelp = PMTcharge_arr[ih];
1126 if ((igood2==1)&&(igood1==0)) xhelp = PMTcharge_arr[ih+1];
1127
1128
1129 /*
1130 if ((PMTcharge_arr[ih] < 1000.) && (PMTcharge_arr[ih+1] < 1000.)) xhelp = 0.5*(PMTcharge_arr[ih]+PMTcharge_arr[ih+1]) ;
1131 if ((PMTcharge_arr[ih] < 1000.) && (PMTcharge_arr[ih+1]==1000.)) xhelp = PMTcharge_arr[ih] ;
1132 if ((PMTcharge_arr[ih]==1000.) && (PMTcharge_arr[ih+1] < 1000.)) xhelp = PMTcharge_arr[ih+1] ;
1133 */
1134
1135 if (adc[ih] == 4095) Layerinfo[ilay] = Layerinfo[ilay] + 1;
1136 if (adc[ih+1] == 4095) Layerinfo[ilay] = Layerinfo[ilay] + 1;
1137 if ((adc[ih] > PMTsat[ih]) && (adc[ih] < 4095)) Layerinfo[ilay] = Layerinfo[ilay] + 10;
1138 if ((adc[ih+1] > PMTsat[ih+1]) && (adc[ih+1] < 4095)) Layerinfo[ilay] = Layerinfo[ilay] + 10;
1139
1140
1141 }
1142 Layercharge[ilay] = xhelp;
1143 } // ilay ...
1144
1145
1146 //cout<<"Std: ";
1147 //for (Int_t ilay=0; ilay<6; ilay ++) cout<<Layercharge[ilay]<<" ";
1148
1149 //==========================================================================
1150 //============= Layercharge without 2nd-order correction =================
1151 //==========================================================================
1152
1153 for (Int_t jj=0; jj<6;jj++) charge_layer_std_raw[jj] = Layercharge[jj];
1154
1155 //==========================================================================
1156 //========================= 2nd-order correction =======================
1157 //==========================================================================
1158
1159 Float_t xb = beta_mean;
1160
1161 for (Int_t ii=0; ii<6; ii++) {
1162 Int_t ic = 0;
1163 Float_t corr[4] = {1., 0., 0., 0.};
1164 //for (Int_t iii=1; iii<9; iii++) if (fabs(Layercharge[ii] - iii)<0.50) ic = iii;
1165 for (Int_t iii=1; iii<10; iii++) if (fabs(Layercharge[ii] - iii)<0.50) ic = iii;
1166 if ((ic>0)&&(ic<=5)) for (Int_t iii=0; iii<4; iii++) corr[iii] = corr_a[ic-1][iii];
1167 if (ic >5) for (Int_t iii=0; iii<4; iii++) corr[iii] = corr_a[5][iii];
1168
1169 Float_t c_corr = corr[0]+corr[1]*xb+corr[2]*xb*xb+corr[3]*xb*xb*xb;
1170
1171 if ((ic>0)&&(ic<=5)) c_corr = c_corr/(1.*ic) ;
1172 if (ic>5) c_corr = c_corr/6. ;
1173
1174 //cout<<Layercharge[ii]<<" "<<ic<<" "<<c_corr<<" => ";
1175 Layercharge[ii] = Layercharge[ii]/c_corr;
1176 //cout<<Layercharge[ii]<<endl;
1177
1178 }
1179
1180
1181 //==========================================================================
1182 //cout<<"In ToFNuclei Std: ";
1183 //for (Int_t ilay=0; ilay<6; ilay ++) cout<<Layercharge[ilay]<<" ";
1184 //cout<<endl;
1185 //==========================================================================
1186
1187
1188 Int_t icount=0;
1189 Float_t charge_mean = 0.;
1190 for (Int_t ii=0; ii<6; ii++) {
1191 if (Layercharge[ii] < 1000) charge_mean = charge_mean + Layercharge[ii] ;
1192 if (Layercharge[ii] < 1000) icount++;
1193 }
1194 if (icount>0) charge_mean = charge_mean/(1.*icount) ;
1195
1196 if (icount>0) {
1197
1198 //for (Int_t ii=0; ii<6; ii++) cout<<Layercharge[ii]<<" ";
1199 //cout<<endl;
1200
1201
1202 vector<float> charge_v;
1203 Float_t charge_median = 0.;
1204
1205 //////// get the median charge ////////////
1206 for(Int_t ii=0;ii<6;ii++) {
1207 if (Layercharge[ii] < 1000) charge_v.push_back(Layercharge[ii]);
1208 }
1209
1210 std::sort(charge_v.begin(),charge_v.end());
1211 charge_median = charge_v[(int)(charge_v.size()/2+charge_v.size()%2)-1];
1212
1213 //cout<<charge_mean<<" "<<charge_median<<endl;
1214
1215 charge_mean = charge_median;
1216
1217 } // icount>0
1218
1219 //--- Calculate charge for the second time, use residuals of the single
1220 //--- measurements to get a chi2 value
1221
1222 // Float_t w_i_arr[8] = {0.1, 0.15, 0.2, 0.25, 0.30, 0.35, 0.45, 0.50};
1223 Float_t w_i_arr[8] = {0.1, 0.15, 0.2, 0.25, 0.35, 0.40, 0.50, 0.55};
1224
1225 icount=0;
1226 Float_t sw=0.;
1227 Float_t sxw=0.;
1228 Float_t w_i = 1./0.5;
1229 Float_t resmax= 3.0;
1230
1231 iz=1;
1232 if ((0.0<charge_mean) & (charge_mean<1.5)) iz=1;
1233 if ((1.5<charge_mean) & (charge_mean<2.5)) iz=2;
1234 if ((2.5<charge_mean) & (charge_mean<3.5)) iz=3;
1235 if ((3.5<charge_mean) & (charge_mean<4.5)) iz=4;
1236 if ((4.5<charge_mean) & (charge_mean<5.5)) iz=5;
1237 if ((5.5<charge_mean) & (charge_mean<6.5)) iz=6;
1238 if ((6.5<charge_mean) & (charge_mean<7.5)) iz=7;
1239 if ((7.5<charge_mean) & (charge_mean<90.)) iz=8;
1240
1241 w_i = 1./w_i_arr[iz-1];
1242
1243
1244 for (Int_t jj=0; jj<6;jj++){
1245 if (Layercharge[jj] < 1000) {
1246 Float_t res = charge_mean - Layercharge[jj] ;
1247 if (fabs(res*w_i)<resmax) {;
1248 icount= icount+1;
1249 sxw=sxw + Layercharge[jj]*w_i*w_i ;
1250 sw =sw + w_i*w_i ;
1251 }
1252 }
1253 }
1254
1255 if (icount>0) charge_chi=sxw/sw;
1256
1257 ncount = icount;
1258
1259 //cout<<" => "<<icount<<" "<<charge_chi<<endl;
1260
1261
1262 // charge_tof = charge_chi;
1263
1264 // changed 30-01-2009 WM
1265
1266 for (Int_t jj=0; jj<48;jj++) charge_PMT_std[jj] = PMTcharge_arr[jj];
1267 for (Int_t jj=0; jj<6;jj++) charge_layer_std[jj] = Layercharge[jj];
1268 for (Int_t jj=0; jj<6;jj++) layerinfo_std[jj] = Layerinfo[jj];
1269 charge_std = charge_chi;
1270 ncount_std = ncount;
1271
1272 } // 0.05 < fabs( beta) < 2.0
1273
1274
1275 } // standalone track found
1276
1277 }

  ViewVC Help
Powered by ViewVC 1.1.23