/[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.3 - (show annotations) (download)
Thu Apr 2 11:59:16 2009 UTC (15 years, 9 months ago) by pamelats
Branch: MAIN
Changes since 1.2: +38 -2 lines
bug found in the Layer_charge definition

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

  ViewVC Help
Powered by ViewVC 1.1.23