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

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

  ViewVC Help
Powered by ViewVC 1.1.23