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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.5 - (hide annotations) (download)
Wed May 6 09:21:42 2009 UTC (15 years, 8 months ago) by pamelats
Branch: MAIN
Changes since 1.4: +408 -318 lines
bug found in standalone part due to changes made in rev. 1.4 / calibration arrays updated

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

  ViewVC Help
Powered by ViewVC 1.1.23