/[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.6 - (show annotations) (download)
Thu Aug 6 11:24:34 2009 UTC (15 years, 5 months ago) by pamelats
Branch: MAIN
Changes since 1.5: +22 -0 lines
charge_layer_xxx_raw added

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

  ViewVC Help
Powered by ViewVC 1.1.23