/[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.1 - (hide annotations) (download)
Mon Oct 13 13:41:39 2008 UTC (16 years, 3 months ago) by pamela
Branch: MAIN
Initial revision

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

  ViewVC Help
Powered by ViewVC 1.1.23