/[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.4 - (show annotations) (download)
Thu Apr 16 13:43:40 2009 UTC (15 years, 9 months ago) by pamelats
Branch: MAIN
Changes since 1.3: +8 -3 lines
small bug found in the calculation of the PMT-charge, result is not influenced

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

  ViewVC Help
Powered by ViewVC 1.1.23