/[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.5 - (show annotations) (download)
Wed May 6 09:21:42 2009 UTC (15 years, 8 months ago) by pamelats
Branch: MAIN
Changes since 1.4: +408 -318 lines
bug found in standalone part due to changes made in rev. 1.4 / calibration arrays updated

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

  ViewVC Help
Powered by ViewVC 1.1.23