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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1 - (show annotations) (download)
Mon Oct 13 13:41:39 2008 UTC (16 years, 3 months ago) by pamela
Branch: MAIN
Initial revision

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