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

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

  ViewVC Help
Powered by ViewVC 1.1.23