| 1 | pam-fi | 1.1 | /** | 
| 2 |  |  | * \file TrkLevel1.cpp | 
| 3 |  |  | * \author Elena Vannuccini | 
| 4 |  |  | */ | 
| 5 |  |  | #include <TrkLevel1.h> | 
| 6 |  |  | #include <iostream> | 
| 7 |  |  | using namespace std; | 
| 8 | pam-fi | 1.3 | //...................................... | 
| 9 |  |  | // F77 routines | 
| 10 |  |  | //...................................... | 
| 11 |  |  | extern "C" { | 
| 12 |  |  |  | 
| 13 |  |  | //      int readetaparam_(); | 
| 14 | pam-fi | 1.11 | float cog_(int*,int*); | 
| 15 |  |  | float pfaeta_(int*,float*); | 
| 16 |  |  | float pfaeta2_(int*,float*); | 
| 17 |  |  | float pfaeta3_(int*,float*); | 
| 18 |  |  | float pfaeta4_(int*,float*); | 
| 19 | pam-fi | 1.3 |  | 
| 20 |  |  | } | 
| 21 | pam-fi | 1.1 | //-------------------------------------- | 
| 22 |  |  | // | 
| 23 |  |  | // | 
| 24 |  |  | //-------------------------------------- | 
| 25 |  |  | TrkCluster::TrkCluster(){ | 
| 26 |  |  |  | 
| 27 | pam-fi | 1.11 | //    cout << "TrkCluster::TrkCluster()"<<endl; | 
| 28 |  |  | view     = -1; | 
| 29 |  |  | maxs     = -1; | 
| 30 |  |  | indmax   = -1; | 
| 31 |  |  |  | 
| 32 |  |  | CLlength = 0; | 
| 33 |  |  | clsignal = 0; | 
| 34 |  |  | clsigma  = 0; | 
| 35 |  |  | cladc    = 0; | 
| 36 |  |  | clbad    = 0; | 
| 37 | pam-fi | 1.1 |  | 
| 38 |  |  | }; | 
| 39 |  |  | //-------------------------------------- | 
| 40 |  |  | // | 
| 41 |  |  | // | 
| 42 |  |  | //-------------------------------------- | 
| 43 |  |  | TrkCluster::TrkCluster(const TrkCluster& t){ | 
| 44 |  |  |  | 
| 45 | pam-fi | 1.11 | view     = t.view; | 
| 46 |  |  | maxs     = t.maxs; | 
| 47 |  |  | indmax   = t.indmax; | 
| 48 |  |  |  | 
| 49 |  |  | CLlength = t.CLlength; | 
| 50 |  |  | if(CLlength){ | 
| 51 |  |  | clsignal = new Float_t[CLlength]; | 
| 52 |  |  | clsigma  = new Float_t[CLlength]; | 
| 53 |  |  | cladc    = new Int_t[CLlength]; | 
| 54 |  |  | clbad    = new Bool_t[CLlength]; | 
| 55 |  |  | for(Int_t i=0; i<CLlength;i++){ | 
| 56 |  |  | clsignal[i] = t.clsignal[i]; | 
| 57 |  |  | clsigma[i]  = t.clsigma[i]; | 
| 58 |  |  | cladc[i]    = t.cladc[i]; | 
| 59 |  |  | clbad[i]    = t.clbad[i]; | 
| 60 | pam-fi | 1.1 | }; | 
| 61 | pam-fi | 1.11 | }; | 
| 62 | pam-fi | 1.10 | }; | 
| 63 |  |  | //-------------------------------------- | 
| 64 |  |  | // | 
| 65 |  |  | // | 
| 66 |  |  | //-------------------------------------- | 
| 67 |  |  | void TrkCluster::Clear(){ | 
| 68 | pam-fi | 1.11 |  | 
| 69 |  |  | //    cout << "void TrkCluster::Clear()"<<endl; | 
| 70 |  |  | if(CLlength){ | 
| 71 |  |  | delete [] clsignal; | 
| 72 |  |  | delete [] clsigma; | 
| 73 |  |  | delete [] cladc; | 
| 74 |  |  | delete [] clbad; | 
| 75 |  |  | } | 
| 76 |  |  |  | 
| 77 |  |  | view     = 0; | 
| 78 |  |  | maxs     = 0; | 
| 79 |  |  | indmax   = 0; | 
| 80 |  |  |  | 
| 81 |  |  | CLlength = 0; | 
| 82 |  |  | clsignal = 0; | 
| 83 |  |  | clsigma  = 0; | 
| 84 |  |  | cladc    = 0; | 
| 85 |  |  | clbad    = 0; | 
| 86 | pam-fi | 1.1 |  | 
| 87 |  |  | }; | 
| 88 |  |  | //-------------------------------------- | 
| 89 |  |  | // | 
| 90 |  |  | // | 
| 91 |  |  | //-------------------------------------- | 
| 92 | pam-fi | 1.2 | /** | 
| 93 | pam-fi | 1.5 | * Evaluate the cluster signal including a maximum number of adjacent | 
| 94 |  |  | * strips, around maxs, having a significant signal. | 
| 95 |  |  | * @param nstrip   Maximum number of strips. | 
| 96 |  |  | * @param cut      Inclusion cut ( s > cut*sigma ). | 
| 97 |  |  | * If nstrip<=0 only the inclusion cut is used to determine the cluster size. | 
| 98 | pam-fi | 1.2 | */ | 
| 99 | pam-fi | 1.5 | Float_t TrkCluster::GetSignal(Int_t nstrip, Float_t cut){ | 
| 100 | pam-fi | 1.11 |  | 
| 101 |  |  | if(CLlength<=0)return 0; | 
| 102 |  |  |  | 
| 103 | pam-fi | 1.5 | Float_t s = 0; | 
| 104 |  |  |  | 
| 105 |  |  | if( nstrip<=0 ){ | 
| 106 |  |  | //          for(Int_t is = 0; is < CLlength; is++){ | 
| 107 |  |  | //              Float_t scut = cut*clsigma[is]; | 
| 108 |  |  | //              if(clsignal[is] > scut) s += clsignal[is]; | 
| 109 |  |  | //          }; | 
| 110 |  |  | for(Int_t is = indmax+1; is < CLlength; is++){ | 
| 111 |  |  | Float_t scut = cut*clsigma[is]; | 
| 112 |  |  | if(clsignal[is] > scut) s += clsignal[is]; | 
| 113 |  |  | else break; | 
| 114 |  |  | }; | 
| 115 |  |  | for(Int_t is = indmax; is >=0; is--){ | 
| 116 |  |  | Float_t scut = cut*clsigma[is]; | 
| 117 |  |  | if(clsignal[is] > scut) s += clsignal[is]; | 
| 118 |  |  | else break; | 
| 119 | pam-fi | 1.2 | }; | 
| 120 |  |  | return s; | 
| 121 | pam-fi | 1.5 | }; | 
| 122 |  |  |  | 
| 123 |  |  |  | 
| 124 |  |  | Int_t il = indmax; | 
| 125 |  |  | Int_t ir = indmax; | 
| 126 |  |  | Int_t inc = 0; | 
| 127 |  |  |  | 
| 128 |  |  | if( clsignal[indmax] < cut*clsigma[indmax] ) return 0; | 
| 129 |  |  |  | 
| 130 |  |  | while ( inc < nstrip ){ | 
| 131 |  |  | Float_t sl = -100000; | 
| 132 |  |  | Float_t sr = -100000; | 
| 133 |  |  | if( il >= 0       ) sl = clsignal[il]; | 
| 134 |  |  | if( ir < CLlength ) sr = clsignal[ir]; | 
| 135 |  |  | if( sl == sr && inc == 0 ){ | 
| 136 |  |  | s += clsignal[il]; //cout << inc<<" - "<< clsignal[il]<<" "<<s<<endl; | 
| 137 |  |  | il--; | 
| 138 |  |  | ir++; | 
| 139 |  |  | }else if ( sl >= sr && sl > cut*clsigma[il] && inc !=0 ){ | 
| 140 |  |  | s += sl;//cout << inc<<" - "<< clsignal[il]<<" "<<s<<endl; | 
| 141 |  |  | il--; | 
| 142 |  |  | }else if ( sl < sr && sr > cut*clsigma[ir] ){ | 
| 143 |  |  | s += sr;//cout << inc<<" - " << clsignal[ir]<<" "<<s<<endl; | 
| 144 |  |  | ir++; | 
| 145 |  |  | }else break; | 
| 146 |  |  |  | 
| 147 |  |  | inc++; | 
| 148 |  |  | } | 
| 149 |  |  | return s; | 
| 150 | pam-fi | 1.2 | }; | 
| 151 | pam-fi | 1.5 |  | 
| 152 | pam-fi | 1.11 |  | 
| 153 | pam-fi | 1.2 | /** | 
| 154 | pam-fi | 1.11 | * Evaluate the cluster signal-to-noise, as defined by Turchetta, including a | 
| 155 |  |  | * maximum number of adjacent strips, around maxs, having a significant signal. | 
| 156 | pam-fi | 1.5 | * @param nstrip   Maximum number of strips. | 
| 157 |  |  | * @param cut      Inclusion cut ( s > cut*sigma ). | 
| 158 |  |  | * If nstrip<=0 only the inclusion cut is used to determine the cluster size. | 
| 159 | pam-fi | 1.3 | */ | 
| 160 | pam-fi | 1.5 | Float_t TrkCluster::GetSignalToNoise(Int_t nstrip, Float_t cut){ | 
| 161 | pam-fi | 1.3 |  | 
| 162 | pam-fi | 1.11 | if(CLlength<=0)return 0; | 
| 163 |  |  |  | 
| 164 | pam-fi | 1.5 | Float_t sn = 0; | 
| 165 |  |  |  | 
| 166 |  |  | if( nstrip<=0 ){ | 
| 167 |  |  | for(Int_t is = indmax+1; is < CLlength; is++){ | 
| 168 |  |  | Float_t scut = cut*clsigma[is]; | 
| 169 |  |  | if(clsignal[is] > scut) sn += clsignal[is]/clsigma[is]; | 
| 170 |  |  | else break; | 
| 171 |  |  | }; | 
| 172 |  |  | for(Int_t is = indmax; is >=0; is--){ | 
| 173 |  |  | Float_t scut = cut*clsigma[is]; | 
| 174 |  |  | if(clsignal[is] > scut) sn += clsignal[is]/clsigma[is]; | 
| 175 |  |  | else break; | 
| 176 |  |  | }; | 
| 177 | pam-fi | 1.3 | return sn; | 
| 178 | pam-fi | 1.5 | }; | 
| 179 |  |  |  | 
| 180 |  |  |  | 
| 181 |  |  | Int_t il = indmax; | 
| 182 |  |  | Int_t ir = indmax; | 
| 183 |  |  | Int_t inc = 0; | 
| 184 |  |  |  | 
| 185 |  |  | if( clsignal[indmax] < cut*clsigma[indmax] ) return 0; | 
| 186 |  |  |  | 
| 187 |  |  | while ( inc < nstrip ){ | 
| 188 |  |  | Float_t sl = -100000; | 
| 189 |  |  | Float_t sr = -100000; | 
| 190 |  |  | if( il >= 0       ) sl = clsignal[il]; | 
| 191 |  |  | if( ir < CLlength ) sr = clsignal[ir]; | 
| 192 |  |  | if( sl == sr && inc == 0 ){ | 
| 193 |  |  | sn += clsignal[il]/clsigma[il]; | 
| 194 |  |  | il--; | 
| 195 |  |  | ir++; | 
| 196 |  |  | }else if ( sl >= sr && sl > cut*clsigma[il] && inc !=0 ){ | 
| 197 |  |  | sn += sl/clsigma[il]; | 
| 198 |  |  | il--; | 
| 199 |  |  | }else if ( sl < sr && sr > cut*clsigma[ir] ){ | 
| 200 |  |  | sn += sr/clsigma[ir]; | 
| 201 |  |  | ir++; | 
| 202 |  |  | }else break; | 
| 203 |  |  |  | 
| 204 |  |  | inc++; | 
| 205 |  |  | } | 
| 206 |  |  | return sn; | 
| 207 | pam-fi | 1.3 | }; | 
| 208 |  |  | /** | 
| 209 | pam-fi | 1.2 | * Evaluate the cluster multiplicity. | 
| 210 |  |  | * @param cut Inclusion cut. | 
| 211 |  |  | */ | 
| 212 |  |  | Int_t TrkCluster::GetMultiplicity(Float_t cut){ | 
| 213 | pam-fi | 1.11 |  | 
| 214 |  |  | if(CLlength<=0)return 0; | 
| 215 |  |  |  | 
| 216 |  |  | Int_t m = 0; | 
| 217 |  |  |  | 
| 218 |  |  | for(Int_t is = indmax+1; is < CLlength; is++){ | 
| 219 |  |  | Float_t scut = cut*clsigma[is]; | 
| 220 |  |  | if(clsignal[is] > scut) m++; | 
| 221 |  |  | else break; | 
| 222 |  |  | }; | 
| 223 |  |  | for(Int_t is = indmax; is >=0; is--){ | 
| 224 |  |  | Float_t scut = cut*clsigma[is]; | 
| 225 |  |  | if(clsignal[is] > scut) m++; | 
| 226 |  |  | else break; | 
| 227 |  |  | }; | 
| 228 |  |  | return m; | 
| 229 | pam-fi | 1.2 | }; | 
| 230 |  |  | /** | 
| 231 |  |  | * True if the cluster contains bad strips. | 
| 232 |  |  | * @param nbad Number of strips around the maximum. | 
| 233 |  |  | */ | 
| 234 |  |  | Bool_t TrkCluster::IsBad(Int_t nbad){ | 
| 235 | pam-fi | 1.11 |  | 
| 236 |  |  | if(CLlength<=0)return 0; | 
| 237 |  |  |  | 
| 238 |  |  | Int_t il,ir; | 
| 239 |  |  | il = indmax; | 
| 240 |  |  | ir = indmax; | 
| 241 |  |  | for(Int_t i=1; i<nbad; i++){ | 
| 242 |  |  | if (ir == CLlength && il == 0)break; | 
| 243 |  |  | else if (ir == CLlength && il != 0)il--; | 
| 244 |  |  | else if (ir != CLlength && il == 0)ir++; | 
| 245 |  |  | else{ | 
| 246 |  |  | if(clsignal[il-1] > clsignal[ir+1])il--; | 
| 247 |  |  | else ir++; | 
| 248 | pam-fi | 1.2 | } | 
| 249 | pam-fi | 1.11 | } | 
| 250 |  |  | Int_t isbad = 0; | 
| 251 |  |  | for(Int_t i=il; i<=ir; i++)isbad += clbad[i]; | 
| 252 |  |  |  | 
| 253 |  |  | return ( isbad != nbad ); | 
| 254 | pam-fi | 1.2 | }; | 
| 255 | pam-fi | 1.11 | /** | 
| 256 |  |  | * True if the cluster contains saturated strips. | 
| 257 |  |  | * @param nbad Number of strips around the maximum. | 
| 258 |  |  | */ | 
| 259 |  |  | Bool_t TrkCluster::IsSaturated(Int_t nbad){ | 
| 260 |  |  |  | 
| 261 |  |  | if(CLlength<=0)return 0; | 
| 262 |  |  |  | 
| 263 |  |  | Int_t il,ir; | 
| 264 |  |  | il = indmax; | 
| 265 |  |  | ir = indmax; | 
| 266 |  |  | for(Int_t i=1; i<nbad; i++){ | 
| 267 |  |  | if (ir == CLlength && il == 0)break; | 
| 268 |  |  | else if (ir == CLlength && il != 0)il--; | 
| 269 |  |  | else if (ir != CLlength && il == 0)ir++; | 
| 270 |  |  | else{ | 
| 271 |  |  | if(clsignal[il-1] > clsignal[ir+1])il--; | 
| 272 |  |  | else ir++; | 
| 273 |  |  | } | 
| 274 |  |  | } | 
| 275 |  |  | Int_t isbad = 0; | 
| 276 |  |  | for(Int_t i=il; i<=ir; i++){ | 
| 277 |  |  | if( IsX() && cladc[i] > 2980 )isbad++; | 
| 278 |  |  | if( IsY() && cladc[i] <   80 )isbad++; | 
| 279 |  |  | } | 
| 280 |  |  | return ( isbad != 0 ); | 
| 281 |  |  |  | 
| 282 |  |  | } | 
| 283 | pam-fi | 1.2 | //-------------------------------------- | 
| 284 |  |  | // | 
| 285 |  |  | // | 
| 286 |  |  | //-------------------------------------- | 
| 287 | pam-fi | 1.1 | void TrkCluster::Dump(){ | 
| 288 |  |  |  | 
| 289 | pam-fi | 1.11 | cout << "----- Cluster" << endl; | 
| 290 |  |  | cout << "View "<<view << " - Ladder "<<GetLadder()<<endl; | 
| 291 |  |  | cout << "Position of maximun "<< maxs <<endl; | 
| 292 |  |  | cout << "Multiplicity        "<< GetMultiplicity() <<endl; | 
| 293 |  |  | cout << "Tot signal          "<< GetSignal() << " (ADC channels)"<<endl ; | 
| 294 |  |  | cout << "Signal/Noise        "<< GetSignalToNoise(); | 
| 295 |  |  | cout <<endl<< "Strip signals       "; | 
| 296 |  |  | for(Int_t i =0; i<CLlength; i++)cout << " " <<clsignal[i]; | 
| 297 |  |  | cout <<endl<< "Strip sigmas        "; | 
| 298 |  |  | for(Int_t i =0; i<CLlength; i++)cout << " " <<clsigma[i]; | 
| 299 |  |  | cout <<endl<< "Strip ADC           "; | 
| 300 |  |  | for(Int_t i =0; i<CLlength; i++)cout << " " <<cladc[i]; | 
| 301 |  |  | cout <<endl<< "Strip BAD           "; | 
| 302 |  |  | for(Int_t i =0; i<CLlength; i++){ | 
| 303 |  |  | if(i==indmax)cout << "  *" <<clbad[i]<<"*"; | 
| 304 |  |  | else cout << " " <<clbad[i]; | 
| 305 |  |  | } | 
| 306 |  |  | cout << endl; | 
| 307 | pam-fi | 1.1 |  | 
| 308 |  |  | } | 
| 309 |  |  | //-------------------------------------- | 
| 310 |  |  | // | 
| 311 |  |  | // | 
| 312 |  |  | //-------------------------------------- | 
| 313 | pam-fi | 1.3 | /** | 
| 314 |  |  | * Method to fill a level1 struct with only one cluster (done to use F77 p.f.a. routines on a cluster basis). | 
| 315 |  |  | */ | 
| 316 | pam-fi | 1.14 | void TrkCluster::GetLevel1Struct(cTrkLevel1* l1){ | 
| 317 | pam-fi | 1.3 |  | 
| 318 | pam-fi | 1.6 | //    cTrkLevel1* l1 = new cTrkLevel1; | 
| 319 |  |  |  | 
| 320 | pam-fi | 1.14 | //    cTrkLevel1* l1 = &level1event_ ; | 
| 321 | pam-fi | 1.3 |  | 
| 322 | pam-fi | 1.6 | l1->nclstr1 = 1; | 
| 323 |  |  | l1->view[0] = view; | 
| 324 |  |  | l1->ladder[0] = GetLadder(); | 
| 325 |  |  | l1->maxs[0] = maxs; | 
| 326 |  |  | l1->mult[0] = GetMultiplicity(); | 
| 327 |  |  | l1->dedx[0] = GetSignal(); | 
| 328 |  |  | l1->indstart[0] = 1; | 
| 329 |  |  | l1->indmax[0]   = indmax+1; | 
| 330 |  |  | l1->totCLlength = CLlength; | 
| 331 |  |  | for(Int_t i=0; i<CLlength; i++){ | 
| 332 |  |  | l1->clsignal[i] = clsignal[i]; | 
| 333 |  |  | l1->clsigma[i] = clsigma[i]; | 
| 334 |  |  | l1->cladc[i] = cladc[i]; | 
| 335 |  |  | l1->clbad[i] = clbad[i]; | 
| 336 |  |  | }; | 
| 337 |  |  |  | 
| 338 | pam-fi | 1.14 | //    return l1; | 
| 339 | pam-fi | 1.3 | }; | 
| 340 |  |  | //-------------------------------------- | 
| 341 |  |  | // | 
| 342 |  |  | // | 
| 343 |  |  | //-------------------------------------- | 
| 344 |  |  | /** | 
| 345 |  |  | * Evaluates the Center-Of-Gravity (COG) of the cluster, in strips, relative to the strip with the maximum signal (TrkCluster::maxs). | 
| 346 |  |  | *      @param ncog Number of strips to evaluate COG. | 
| 347 |  |  | * If ncog=0, the COG of the cluster is evaluated according to the cluster multiplicity (defined by the inclusion cut). | 
| 348 |  |  | * If ncog>0, the COG is evaluated using ncog strips, even if they have a negative signal (according to G.Landi) | 
| 349 |  |  | */ | 
| 350 |  |  | Float_t TrkCluster::GetCOG(Int_t ncog){ | 
| 351 |  |  |  | 
| 352 | pam-fi | 1.6 | int ic = 1; | 
| 353 |  |  | GetLevel1Struct(); | 
| 354 |  |  | return cog_(&ncog,&ic); | 
| 355 |  |  |  | 
| 356 |  |  | }; | 
| 357 |  |  | /** | 
| 358 |  |  | * Evaluates the Center-Of-Gravity (COG) of the cluster, in strips, relative to the strip with the maximum signal (TrkCluster::maxs), | 
| 359 |  |  | * choosing the number of strips according to the angle, as implemented for the eta-algorythm . | 
| 360 |  |  | *      @param angle Projected angle in degree. | 
| 361 |  |  | */ | 
| 362 |  |  | Float_t TrkCluster::GetCOG(Float_t angle){ | 
| 363 |  |  |  | 
| 364 |  |  | Int_t neta  = 0; | 
| 365 |  |  |  | 
| 366 |  |  | //     Float_t eta = GetETA(0,angle); | 
| 367 |  |  | //     for(neta=2; neta<10; neta++) if( eta == GetETA(neta,angle) ) break; | 
| 368 |  |  | //    if(eta != GetETA(neta,angle) )cout << "Attenzione!! pasticcio "<<endl; | 
| 369 |  |  |  | 
| 370 |  |  | if( view%2 ){   //Y | 
| 371 |  |  | neta=2; | 
| 372 |  |  | }else{          //X | 
| 373 | pam-fi | 1.7 | if( fabs(angle) <= 10. ){ | 
| 374 | pam-fi | 1.6 | neta = 2; | 
| 375 | pam-fi | 1.7 | }else if( fabs(angle) > 10. && fabs(angle) <= 15. ){ | 
| 376 | pam-fi | 1.6 | neta = 3; | 
| 377 |  |  | }else{ | 
| 378 |  |  | neta = 4; | 
| 379 |  |  | }; | 
| 380 |  |  | }; | 
| 381 |  |  |  | 
| 382 |  |  | return GetCOG(neta); | 
| 383 | pam-fi | 1.3 |  | 
| 384 |  |  | }; | 
| 385 |  |  | //-------------------------------------- | 
| 386 |  |  | // | 
| 387 |  |  | // | 
| 388 |  |  | //-------------------------------------- | 
| 389 |  |  | /** | 
| 390 |  |  | * Evaluates the cluster position, in strips, relative to the strip with the maximum signal (TrkCluster::maxs), by applying the non-linear ETA-algorythm. | 
| 391 |  |  | *  @param neta  Number of strips to evaluate ETA. | 
| 392 |  |  | *  @param angle Projected angle between particle track and detector plane. | 
| 393 |  |  | * Implemented values of neta are 2,3,4. If neta=0, ETA2, ETA3 and ETA4 are applied according to the angle. | 
| 394 |  |  | */ | 
| 395 |  |  | Float_t TrkCluster::GetETA(Int_t neta, float angle){ | 
| 396 |  |  |  | 
| 397 | pam-fi | 1.6 | //    cout << "GetETA(neta,angle) "<< neta << " "<< angle; | 
| 398 | pam-fi | 1.3 | //      LoadPfaParam(); | 
| 399 | pam-fi | 1.6 |  | 
| 400 | pam-fi | 1.14 | TrkParams::Load(4); | 
| 401 |  |  | if( !TrkParams::IsLoaded(4) ){ | 
| 402 |  |  | cout << "int Trajectory::DoTrack2(float* al) --- ERROR --- p.f.a. parameters  not loaded"<<endl; | 
| 403 |  |  | return 0; | 
| 404 |  |  | } | 
| 405 |  |  |  | 
| 406 | pam-fi | 1.6 | float ax = angle; | 
| 407 |  |  | int ic = 1; | 
| 408 |  |  | GetLevel1Struct(); | 
| 409 |  |  | if(neta == 0)      return pfaeta_(&ic,&ax); | 
| 410 |  |  | else if(neta == 2) return pfaeta2_(&ic,&ax); | 
| 411 |  |  | else if(neta == 3) return pfaeta3_(&ic,&ax); | 
| 412 |  |  | else if(neta == 4) return pfaeta4_(&ic,&ax); | 
| 413 |  |  | else cout << "ETA"<<neta<<" not implemented\n"; | 
| 414 |  |  | return 0; | 
| 415 |  |  |  | 
| 416 | pam-fi | 1.3 | }; | 
| 417 |  |  |  | 
| 418 |  |  | //-------------------------------------- | 
| 419 |  |  | // | 
| 420 |  |  | // | 
| 421 |  |  | //-------------------------------------- | 
| 422 | pam-fi | 1.1 | TrkLevel1::TrkLevel1(){ | 
| 423 | pam-fi | 1.6 |  | 
| 424 | pam-fi | 1.11 | //    cout << "TrkLevel1::TrkLevel1()"<<endl; | 
| 425 |  |  | //    Cluster = new TClonesArray("TrkCluster"); | 
| 426 |  |  | Cluster = 0; | 
| 427 | pam-fi | 1.6 | for(Int_t i=0; i<12 ; i++){ | 
| 428 |  |  | good[i] = -1; | 
| 429 |  |  | for(Int_t j=0; j<24 ; j++){ | 
| 430 |  |  | cn[j][i]=0; | 
| 431 |  |  | cnn[j][i]=0; | 
| 432 | pam-fi | 1.1 | }; | 
| 433 | pam-fi | 1.6 | }; | 
| 434 | pam-fi | 1.17 | TrkParams::SetTrackingMode(); | 
| 435 |  |  | TrkParams::SetPrecisionFactor(); | 
| 436 |  |  | TrkParams::SetStepMin(); | 
| 437 |  |  | TrkParams::SetPFA(); | 
| 438 | pam-fi | 1.1 | } | 
| 439 |  |  | //-------------------------------------- | 
| 440 |  |  | // | 
| 441 |  |  | // | 
| 442 |  |  | //-------------------------------------- | 
| 443 | pam-fi | 1.12 | void TrkLevel1::Set(){ | 
| 444 |  |  | if(!Cluster)Cluster = new TClonesArray("TrkCluster"); | 
| 445 |  |  | } | 
| 446 |  |  | //-------------------------------------- | 
| 447 |  |  | // | 
| 448 |  |  | // | 
| 449 |  |  | //-------------------------------------- | 
| 450 | pam-fi | 1.1 | void TrkLevel1::Dump(){ | 
| 451 |  |  |  | 
| 452 | pam-fi | 1.6 | cout<<"DSP status: "; | 
| 453 |  |  | for(Int_t i=0; i<12 ; i++)cout<<good[i]<<" "; | 
| 454 |  |  | cout<<endl; | 
| 455 | pam-fi | 1.9 | cout<<"VA1 mask : "<<endl; | 
| 456 |  |  | for(Int_t i=0; i<12 ; i++){ | 
| 457 |  |  | for(Int_t ii=0; ii<24 ; ii++){ | 
| 458 |  |  | Int_t mask = cnn[ii][i]; | 
| 459 |  |  | if(mask>0)mask=1; | 
| 460 |  |  | cout<<mask<<" "; | 
| 461 |  |  | } | 
| 462 |  |  | cout <<endl; | 
| 463 |  |  | } | 
| 464 | pam-fi | 1.6 |  | 
| 465 | pam-fi | 1.11 | if(!Cluster)return; | 
| 466 | pam-fi | 1.6 | TClonesArray &t  = *Cluster; | 
| 467 |  |  | for(int i=0; i<this->nclstr(); i++)     ((TrkCluster *)t[i])->Dump(); | 
| 468 |  |  |  | 
| 469 | pam-fi | 1.1 | } | 
| 470 |  |  | //-------------------------------------- | 
| 471 |  |  | // | 
| 472 |  |  | // | 
| 473 |  |  | //-------------------------------------- | 
| 474 |  |  | /** | 
| 475 |  |  | * Fills a TrkLevel1 object with values from a struct cTrkLevel1 (to get data from F77 common). | 
| 476 |  |  | */ | 
| 477 | pam-fi | 1.10 | void TrkLevel1::SetFromLevel1Struct(cTrkLevel1 *l1, Bool_t full){ | 
| 478 | pam-fi | 1.1 |  | 
| 479 | pam-fi | 1.15 | //    cout << "void TrkLevel1::SetFromLevel1Struct(cTrkLevel1 *l1, Bool_t full)"<<endl; | 
| 480 |  |  |  | 
| 481 |  |  | Clear(); | 
| 482 | pam-fi | 1.10 | //  --------------- | 
| 483 | pam-fi | 1.6 | //  *** CLUSTER *** | 
| 484 | pam-fi | 1.10 | //  --------------- | 
| 485 | pam-fi | 1.6 | TrkCluster* t_cl = new TrkCluster(); | 
| 486 | pam-fi | 1.11 | if(!Cluster)Cluster = new TClonesArray("TrkCluster"); | 
| 487 | pam-fi | 1.6 | TClonesArray &t = *Cluster; | 
| 488 |  |  | for(int i=0; i<l1->nclstr1; i++){ | 
| 489 | pam-fi | 1.10 |  | 
| 490 |  |  | t_cl->Clear(); | 
| 491 | pam-fi | 1.11 | //      if( full || (!full && l1->whichtrack[i]) ){ | 
| 492 |  |  |  | 
| 493 |  |  | t_cl->view     = l1->view[i]; | 
| 494 |  |  | t_cl->maxs     = l1->maxs[i]; | 
| 495 |  |  |  | 
| 496 | pam-fi | 1.10 | if( full || (!full && l1->whichtrack[i]) ){ | 
| 497 | pam-fi | 1.11 | t_cl->indmax   = l1->indmax[i] - l1->indstart[i]; | 
| 498 | pam-fi | 1.10 | Int_t from = l1->indstart[i] -1; | 
| 499 |  |  | Int_t to   = l1->totCLlength ; | 
| 500 |  |  | if(i != l1->nclstr1-1)to   = l1->indstart[i+1] -1 ; | 
| 501 |  |  | t_cl->CLlength = to - from ; | 
| 502 |  |  |  | 
| 503 |  |  | t_cl->clsignal = new Float_t[t_cl->CLlength]; | 
| 504 |  |  | t_cl->clsigma  = new Float_t[t_cl->CLlength]; | 
| 505 |  |  | t_cl->cladc    = new Int_t[t_cl->CLlength]; | 
| 506 |  |  | t_cl->clbad    = new Bool_t[t_cl->CLlength]; | 
| 507 |  |  | Int_t index = 0; | 
| 508 |  |  | for(Int_t is = from; is < to; is++ ){ | 
| 509 |  |  | t_cl->clsignal[index] = (Float_t) l1->clsignal[is]; | 
| 510 |  |  | t_cl->clsigma[index]  = (Float_t) l1->clsigma[is]; | 
| 511 |  |  | t_cl->cladc[index]    = (Int_t)   l1->cladc[is]; | 
| 512 |  |  | t_cl->clbad[index]    = (Bool_t)  l1->clbad[is]; | 
| 513 |  |  | index++; | 
| 514 |  |  | }; | 
| 515 |  |  | } | 
| 516 |  |  | new(t[i]) TrkCluster(*t_cl); // <<< store cluster | 
| 517 | pam-fi | 1.6 | }; | 
| 518 |  |  |  | 
| 519 |  |  | delete t_cl; | 
| 520 |  |  |  | 
| 521 | pam-fi | 1.10 | //  ------------------------- | 
| 522 | pam-fi | 1.6 | //  ****general variables**** | 
| 523 | pam-fi | 1.10 | //  ------------------------- | 
| 524 | pam-fi | 1.6 | for(Int_t i=0; i<12 ; i++){ | 
| 525 |  |  | good[i] = l1->good[i]; | 
| 526 |  |  | for(Int_t j=0; j<24 ; j++){ | 
| 527 |  |  | cn[j][i]     = l1->cnev[j][i]; | 
| 528 |  |  | //          cnrms[j][i]  = l1->cnrmsev[j][i]; | 
| 529 |  |  | cnn[j][i]    = l1->cnnev[j][i]; | 
| 530 | pam-fi | 1.1 | }; | 
| 531 | pam-fi | 1.6 | }; | 
| 532 |  |  |  | 
| 533 | pam-fi | 1.1 | } | 
| 534 |  |  | /** | 
| 535 |  |  | * Fills a struct cTrkLevel1 with values from a TrkLevel1 object (to put data into a F77 common). | 
| 536 |  |  | */ | 
| 537 |  |  |  | 
| 538 | pam-fi | 1.14 | void TrkLevel1::GetLevel1Struct(cTrkLevel1* l1) { | 
| 539 |  |  |  | 
| 540 |  |  | //    cTrkLevel1* l1 = &level1event_ ; | 
| 541 |  |  |  | 
| 542 | pam-fi | 1.6 | for(Int_t i=0; i<12 ; i++){ | 
| 543 |  |  | l1->good[i] = good[i]; | 
| 544 |  |  | for(Int_t j=0; j<24 ; j++){ | 
| 545 | pam-fi | 1.14 | l1->cnev[j][i]    = cn[j][i]  ; | 
| 546 |  |  | l1->cnnev[j][i]   = cnn[j][i] ; | 
| 547 |  |  | l1->cnrmsev[j][i] = 0. ; | 
| 548 | pam-fi | 1.1 | }; | 
| 549 | pam-fi | 1.14 | l1->fshower[i] = 0; | 
| 550 | pam-fi | 1.6 | }; | 
| 551 | pam-fi | 1.14 |  | 
| 552 |  |  | l1->nclstr1=0; | 
| 553 |  |  | l1->totCLlength=0; | 
| 554 |  |  | Int_t index=0; | 
| 555 | pam-fi | 1.11 | if(Cluster){ | 
| 556 | pam-fi | 1.14 | Int_t i=0; | 
| 557 |  |  | for(Int_t ii=0;ii<Cluster->GetEntries();ii++){ | 
| 558 |  |  | TrkCluster *clu = GetCluster(ii); | 
| 559 |  |  | // ---------------------------------------- | 
| 560 |  |  | // attenzione!! | 
| 561 |  |  | // se il cluster non e` salvato (view = 0) | 
| 562 |  |  | // DEVE essere escluso dal common F77 | 
| 563 |  |  | // ---------------------------------------- | 
| 564 |  |  | if(clu->view != 0 ){ | 
| 565 |  |  | l1->view[i]     = clu->view; | 
| 566 |  |  | l1->ladder[i]   = clu->GetLadder(); | 
| 567 |  |  | l1->maxs[i]     = clu->maxs; | 
| 568 |  |  | l1->mult[i]     = clu->GetMultiplicity(); | 
| 569 |  |  | l1->dedx[i]     = clu->GetSignal(); | 
| 570 |  |  | l1->indstart[i] = index+1; | 
| 571 |  |  | l1->indmax[i]   = l1->indstart[i] + clu->indmax; | 
| 572 |  |  | l1->totCLlength += clu->CLlength; | 
| 573 |  |  | for(Int_t iw=0; iw < clu->CLlength; iw++){ | 
| 574 |  |  | l1->clsignal[index] = clu->clsignal[iw]; | 
| 575 |  |  | l1->clsigma[index]  = clu->clsigma[iw]; | 
| 576 |  |  | l1->cladc[index]    = clu->cladc[iw]; | 
| 577 |  |  | l1->clbad[index]    = clu->clbad[iw]; | 
| 578 |  |  | index++; | 
| 579 |  |  | } | 
| 580 |  |  | i++; | 
| 581 |  |  | } | 
| 582 | pam-fi | 1.11 | } | 
| 583 | pam-fi | 1.14 | l1->nclstr1 =  i; | 
| 584 | pam-fi | 1.6 | } | 
| 585 | pam-fi | 1.14 |  | 
| 586 |  |  | //    return l1; | 
| 587 | pam-fi | 1.3 | } | 
| 588 |  |  | //-------------------------------------- | 
| 589 |  |  | // | 
| 590 |  |  | // | 
| 591 |  |  | //-------------------------------------- | 
| 592 |  |  | void TrkLevel1::Clear(){ | 
| 593 | pam-fi | 1.6 |  | 
| 594 |  |  | for(Int_t i=0; i<12 ; i++){ | 
| 595 |  |  | good[i] = -1; | 
| 596 |  |  | for(Int_t j=0; j<24 ; j++){ | 
| 597 |  |  | cn[j][i]    = 0; | 
| 598 |  |  | cnn[j][i]   = 0; | 
| 599 | pam-fi | 1.3 | }; | 
| 600 | pam-fi | 1.6 | }; | 
| 601 | pam-fi | 1.11 | //    if(Cluster)Cluster->Clear("C"); | 
| 602 |  |  | if(Cluster)Cluster->Delete(); | 
| 603 | pam-fi | 1.6 |  | 
| 604 | pam-fi | 1.1 | } | 
| 605 |  |  | //-------------------------------------- | 
| 606 |  |  | // | 
| 607 |  |  | // | 
| 608 |  |  | //-------------------------------------- | 
| 609 | pam-fi | 1.3 | void TrkLevel1::Delete(){ | 
| 610 | pam-fi | 1.11 |  | 
| 611 |  |  | //    Clear(); | 
| 612 |  |  | if(Cluster)Cluster->Delete(); | 
| 613 |  |  | if(Cluster)delete Cluster; | 
| 614 | pam-fi | 1.6 |  | 
| 615 | pam-fi | 1.1 | } | 
| 616 |  |  | //-------------------------------------- | 
| 617 |  |  | // | 
| 618 |  |  | // | 
| 619 |  |  | //-------------------------------------- | 
| 620 |  |  | TrkCluster *TrkLevel1::GetCluster(int is){ | 
| 621 |  |  |  | 
| 622 | pam-fi | 1.11 | if(!Cluster)return 0; | 
| 623 |  |  | if(is >= nclstr()){ | 
| 624 |  |  | cout << "** TrkLevel1::GetCluster(int) ** Cluster "<< is << " does not exits! " << endl; | 
| 625 |  |  | cout << "( Stored clusters nclstr() = "<< this->nclstr()<<" )" << endl; | 
| 626 |  |  | return 0; | 
| 627 |  |  | } | 
| 628 |  |  |  | 
| 629 |  |  | TClonesArray &t = *(Cluster); | 
| 630 |  |  | TrkCluster *cluster = (TrkCluster*)t[is]; | 
| 631 |  |  | return cluster; | 
| 632 | pam-fi | 1.1 | } | 
| 633 | pam-fi | 1.3 | //-------------------------------------- | 
| 634 |  |  | // | 
| 635 |  |  | // | 
| 636 |  |  | //-------------------------------------- | 
| 637 | pam-fi | 1.14 | // /** | 
| 638 |  |  | //  * Load Position-Finding-Algorythm parameters (call the F77 routine). | 
| 639 |  |  | //  * | 
| 640 |  |  | //  */ | 
| 641 |  |  | // int TrkLevel1::LoadPfaParam(TString path){ | 
| 642 |  |  |  | 
| 643 |  |  | //     if( path.IsNull() ){ | 
| 644 |  |  | //      path = gSystem->Getenv("PAM_CALIB"); | 
| 645 |  |  | //      if(path.IsNull()){ | 
| 646 |  |  | //          cout << " TrkLevel1::LoadPfaParam() ==> No PAMELA environment variables defined "<<endl; | 
| 647 |  |  | //          return 0; | 
| 648 |  |  | //      } | 
| 649 |  |  | //      path.Append("/trk-param/eta_param-0/"); | 
| 650 |  |  | //     } | 
| 651 |  |  |  | 
| 652 |  |  | //     strcpy(path_.path,path.Data()); | 
| 653 |  |  | //     path_.pathlen = path.Length(); | 
| 654 |  |  | //     path_.error   = 0; | 
| 655 |  |  | //     cout <<"Loading p.f.a. parameters: "<<path<<endl; | 
| 656 |  |  | //     return readetaparam_(); | 
| 657 |  |  | // } | 
| 658 |  |  |  | 
| 659 |  |  | // /** | 
| 660 |  |  | //  * Load magnetic field parameters (call the F77 routine). | 
| 661 |  |  | //  * | 
| 662 |  |  | //  */ | 
| 663 |  |  | // int TrkLevel1::LoadFieldParam(TString path){ | 
| 664 |  |  |  | 
| 665 |  |  | // //    if( strcmp(path_.path,path.Data()) ){ | 
| 666 |  |  | //     if( path.IsNull() ){ | 
| 667 |  |  | //      path = gSystem->Getenv("PAM_CALIB"); | 
| 668 |  |  | //      if(path.IsNull()){ | 
| 669 |  |  | //          cout << " TrkLevel1::LoadFieldParam() ==> No PAMELA environment variables defined "<<endl; | 
| 670 |  |  | //          return 0; | 
| 671 |  |  | //      } | 
| 672 |  |  | //      path.Append("/trk-param/field_param-0/"); | 
| 673 |  |  | //     } | 
| 674 |  |  | //     cout <<"Loading magnetic field "<<path<<endl; | 
| 675 |  |  | //     strcpy(path_.path,path.Data()); | 
| 676 |  |  | //     path_.pathlen = path.Length(); | 
| 677 |  |  | //     path_.error   = 0; | 
| 678 |  |  | //     return readb_(); | 
| 679 |  |  | // //    } | 
| 680 |  |  | // //    return 0; | 
| 681 |  |  | // } | 
| 682 |  |  | // /** | 
| 683 |  |  | //  * Load magnetic field parameters (call the F77 routine). | 
| 684 |  |  | //  * | 
| 685 |  |  | //  */ | 
| 686 |  |  | // int TrkLevel1::LoadChargeParam(TString path){ | 
| 687 |  |  |  | 
| 688 |  |  | // //    if( strcmp(path_.path,path.Data()) ){ | 
| 689 |  |  | //     if( path.IsNull() ){ | 
| 690 |  |  | //      path = gSystem->Getenv("PAM_CALIB"); | 
| 691 |  |  | //      if(path.IsNull()){ | 
| 692 |  |  | //          cout << " TrkLevel1::LoadChargeParam() ==> No PAMELA environment variables defined "<<endl; | 
| 693 |  |  | //          return 0; | 
| 694 |  |  | //      } | 
| 695 |  |  | //      path.Append("/trk-param/charge_param-1/"); | 
| 696 |  |  | //     } | 
| 697 |  |  | //     cout <<"Loading charge-correlation parameters: "<<path<<endl; | 
| 698 |  |  | //     strcpy(path_.path,path.Data()); | 
| 699 |  |  | //     path_.pathlen = path.Length(); | 
| 700 |  |  | //     path_.error   = 0; | 
| 701 |  |  | //     return readchargeparam_(); | 
| 702 |  |  | // //    } | 
| 703 |  |  | // //    return 0; | 
| 704 |  |  | // } | 
| 705 |  |  | // /** | 
| 706 |  |  | //  * Load magnetic field parameters (call the F77 routine). | 
| 707 |  |  | //  * | 
| 708 |  |  | //  */ | 
| 709 |  |  | // int TrkLevel1::LoadAlignmentParam(TString path){ | 
| 710 |  |  |  | 
| 711 |  |  | // //    if( strcmp(path_.path,path.Data()) ){ | 
| 712 |  |  | //     if( path.IsNull() ){ | 
| 713 |  |  | //      path = gSystem->Getenv("PAM_CALIB"); | 
| 714 |  |  | //      if(path.IsNull()){ | 
| 715 |  |  | //          cout << " TrkLevel1::LoadAlignmentParam() ==> No PAMELA environment variables defined "<<endl; | 
| 716 |  |  | //          return 0; | 
| 717 |  |  | //      } | 
| 718 |  |  | //      path.Append("/trk-param/align_param-0/"); | 
| 719 |  |  | //     } | 
| 720 |  |  | //     cout <<"Loading alignment parameters: "<<path<<endl; | 
| 721 |  |  | //     strcpy(path_.path,path.Data()); | 
| 722 |  |  | //     path_.pathlen = path.Length(); | 
| 723 |  |  | //     path_.error   = 0; | 
| 724 |  |  | //     return readalignparam_(); | 
| 725 |  |  | // //    } | 
| 726 |  |  | // //    return 0; | 
| 727 |  |  | // } | 
| 728 |  |  | // /** | 
| 729 |  |  | //  * Load magnetic field parameters (call the F77 routine). | 
| 730 |  |  | //  * | 
| 731 |  |  | //  */ | 
| 732 |  |  | // int TrkLevel1::LoadMipParam(TString path){ | 
| 733 |  |  |  | 
| 734 |  |  | // //    if( strcmp(path_.path,path.Data()) ){ | 
| 735 |  |  | //     if( path.IsNull() ){ | 
| 736 |  |  | //      path = gSystem->Getenv("PAM_CALIB"); | 
| 737 |  |  | //      if(path.IsNull()){ | 
| 738 |  |  | //          cout << " TrkLevel1::LoadMipParam() ==> No PAMELA environment variables defined "<<endl; | 
| 739 |  |  | //          return 0; | 
| 740 |  |  | //      } | 
| 741 |  |  | //      path.Append("/trk-param/mip_param-0/"); | 
| 742 |  |  | //     } | 
| 743 |  |  | //     cout <<"Loading ADC-to-MIP conversion parameters: "<<path<<endl; | 
| 744 |  |  | //     strcpy(path_.path,path.Data()); | 
| 745 |  |  | //     path_.pathlen = path.Length(); | 
| 746 |  |  | //     path_.error   = 0; | 
| 747 |  |  | //     return readmipparam_(); | 
| 748 |  |  | // //    } | 
| 749 |  |  | // //    return 0; | 
| 750 |  |  | // } | 
| 751 |  |  | // /** | 
| 752 |  |  | //  * Load magnetic field parameters (call the F77 routine). | 
| 753 |  |  | //  * | 
| 754 |  |  | //  */ | 
| 755 |  |  | // int TrkLevel1::LoadVKMaskParam(TString path){ | 
| 756 | pam-fi | 1.3 |  | 
| 757 | pam-fi | 1.14 | // //    if( strcmp(path_.path,path.Data()) ){ | 
| 758 |  |  | //     if( path.IsNull() ){ | 
| 759 |  |  | //      path = gSystem->Getenv("PAM_CALIB"); | 
| 760 |  |  | //      if(path.IsNull()){ | 
| 761 |  |  | //          cout << " TrkLevel1::LoadVKMaskParam() ==> No PAMELA environment variables defined "<<endl; | 
| 762 |  |  | //          return 0; | 
| 763 |  |  | //      } | 
| 764 |  |  | //      path.Append("/trk-param/mask_param-1/"); | 
| 765 |  |  | //     } | 
| 766 |  |  | //     cout <<"Loading VK-mask parameters: "<<path<<endl; | 
| 767 |  |  | //     strcpy(path_.path,path.Data()); | 
| 768 |  |  | //     path_.pathlen = path.Length(); | 
| 769 |  |  | //     path_.error   = 0; | 
| 770 |  |  | //     return readvkmask_(); | 
| 771 |  |  | // //    } | 
| 772 |  |  | // //    return 0; | 
| 773 |  |  | // } | 
| 774 |  |  |  | 
| 775 |  |  | // /** | 
| 776 |  |  | //  * Load all (default) parameters. Environment variable must be defined. | 
| 777 |  |  | //  * | 
| 778 |  |  | //  */ | 
| 779 |  |  | // int TrkLevel1::LoadParams(){ | 
| 780 |  |  |  | 
| 781 |  |  | //     int result=0; | 
| 782 |  |  |  | 
| 783 |  |  | //     result = result * LoadFieldParam(); | 
| 784 |  |  | //     result = result * LoadPfaParam(); | 
| 785 |  |  | //     result = result * LoadChargeParam(); | 
| 786 |  |  | //     result = result * LoadAlignmentParam(); | 
| 787 |  |  | //     result = result * LoadMipParam(); | 
| 788 |  |  | //     result = result * LoadVKMaskParam(); | 
| 789 |  |  |  | 
| 790 |  |  | //     return result; | 
| 791 |  |  | // } | 
| 792 |  |  |  | 
| 793 |  |  |  | 
| 794 |  |  |  | 
| 795 |  |  | int TrkLevel1::GetPfaNbinsAngle(){ | 
| 796 |  |  | TrkParams::Load(4); | 
| 797 |  |  | if( !TrkParams::IsLoaded(4) ){ | 
| 798 |  |  | cout << "int TrkLevel1::GetPfaNbinsAngle() --- ERROR --- p.f.a. parameters  not loaded"<<endl; | 
| 799 |  |  | return 0; | 
| 800 |  |  | } | 
| 801 |  |  | return pfa_.nangbin; | 
| 802 |  |  | }; | 
| 803 |  |  |  | 
| 804 |  |  | int TrkLevel1::GetPfaNbinsETA(){ | 
| 805 |  |  | TrkParams::Load(4); | 
| 806 |  |  | if( !TrkParams::IsLoaded(4) ){ | 
| 807 |  |  | cout << "int TrkLevel1::GetPfaNbinsETA() --- ERROR --- p.f.a. parameters  not loaded"<<endl; | 
| 808 |  |  | return 0; | 
| 809 |  |  | } | 
| 810 |  |  | return pfa_.netaval; | 
| 811 |  |  | }; | 
| 812 | pam-fi | 1.1 |  | 
| 813 | pam-fi | 1.13 | /** | 
| 814 |  |  | * | 
| 815 |  |  | * | 
| 816 |  |  | */ | 
| 817 |  |  | float* TrkLevel1::GetPfaCoord(TString pfa, int nview, int nladder, int nang){ | 
| 818 | pam-fi | 1.14 |  | 
| 819 |  |  | TrkParams::Load(4); | 
| 820 |  |  | if( !TrkParams::IsLoaded(4) ){ | 
| 821 |  |  | cout << "float* TrkLevel1::GetPfaCoord(TString pfa, int nview, int nladder, int nang) --- ERROR --- p.f.a. parameters  not loaded"<<endl; | 
| 822 |  |  | return 0; | 
| 823 |  |  | } | 
| 824 | pam-fi | 1.13 |  | 
| 825 |  |  | int nbins = GetPfaNbinsETA(); | 
| 826 |  |  | if(!nbins)return 0; | 
| 827 |  |  |  | 
| 828 |  |  | float *fcorr = new float [nbins]; | 
| 829 |  |  |  | 
| 830 |  |  | if(!pfa.CompareTo("ETA2",TString::kIgnoreCase)){ | 
| 831 |  |  | for(int ib=0; ib<nbins; ib++){ | 
| 832 |  |  | fcorr[ib] = pfa_.feta2[nang][nladder][nview][ib]; | 
| 833 |  |  | cout << pfa_.eta2[nang][ib] << " - " <<  pfa_.feta2[nang][nladder][nview][ib]<<endl;; | 
| 834 |  |  | } | 
| 835 |  |  | }else if (!pfa.CompareTo("ETA3",TString::kIgnoreCase)){ | 
| 836 |  |  | for(int ib=0; ib<nbins; ib++)fcorr[ib] = pfa_.feta3[nang][nladder][nview][ib]; | 
| 837 |  |  | }else if (!pfa.CompareTo("ETA4",TString::kIgnoreCase)){ | 
| 838 |  |  | for(int ib=0; ib<nbins; ib++)fcorr[ib] = pfa_.feta4[nang][nladder][nview][ib]; | 
| 839 |  |  | }else{ | 
| 840 |  |  | cout << pfa<<" pfa parameters not implemented "<<endl; | 
| 841 |  |  | return 0; | 
| 842 |  |  | } | 
| 843 |  |  |  | 
| 844 |  |  | return fcorr; | 
| 845 |  |  |  | 
| 846 |  |  | }; | 
| 847 |  |  |  | 
| 848 |  |  | float* TrkLevel1::GetPfaAbs(TString pfa, int nang){ | 
| 849 |  |  |  | 
| 850 | pam-fi | 1.14 | TrkParams::Load(4); | 
| 851 |  |  | if( !TrkParams::IsLoaded(4) ){ | 
| 852 |  |  | cout << "float* TrkLevel1::GetPfaAbs(TString pfa, int nang) --- ERROR --- p.f.a. parameters  not loaded"<<endl; | 
| 853 |  |  | return 0; | 
| 854 |  |  | } | 
| 855 |  |  |  | 
| 856 | pam-fi | 1.13 | int nbins = GetPfaNbinsETA(); | 
| 857 |  |  | if(!nbins)return 0; | 
| 858 |  |  |  | 
| 859 |  |  | float *fcorr = new float [nbins]; | 
| 860 |  |  |  | 
| 861 |  |  | if(!pfa.CompareTo("ETA2",TString::kIgnoreCase)){ | 
| 862 |  |  | for(int ib=0; ib<nbins; ib++)fcorr[ib] = pfa_.eta2[nang][ib]; | 
| 863 |  |  | }else if (!pfa.CompareTo("ETA3",TString::kIgnoreCase)){ | 
| 864 |  |  | for(int ib=0; ib<nbins; ib++)fcorr[ib] = pfa_.eta3[nang][ib]; | 
| 865 |  |  | }else if (!pfa.CompareTo("ETA4",TString::kIgnoreCase)){ | 
| 866 |  |  | for(int ib=0; ib<nbins; ib++)fcorr[ib] = pfa_.eta4[nang][ib]; | 
| 867 |  |  | }else{ | 
| 868 |  |  | cout << pfa<<" pfa parameters not implemented "<<endl; | 
| 869 |  |  | return 0; | 
| 870 |  |  | } | 
| 871 |  |  |  | 
| 872 |  |  | return fcorr; | 
| 873 |  |  |  | 
| 874 | pam-fi | 1.14 | }; | 
| 875 |  |  |  | 
| 876 |  |  | /** | 
| 877 |  |  | * Method to call the F77 routine that performs level1->level2 processing. | 
| 878 |  |  | * The level2 output is stored in a common block, which can be retrieved | 
| 879 |  |  | * by mean of the method TrkLevel2::SetFromLevel2Struct(). | 
| 880 |  |  | * NB If the TrkLevel1 object is readout from a tree, and the | 
| 881 |  |  | * TrkLevel1::ProcessEvent(int pfa) is used to reprocess the event, attention | 
| 882 |  |  | * should be payed to the fact that single clusters (clusters not associated | 
| 883 |  |  | * with any track) might not be stored. Full reprocessing should be done from | 
| 884 |  |  | * level0 data. | 
| 885 |  |  | */ | 
| 886 |  |  | int TrkLevel1::ProcessEvent(int pfa){ | 
| 887 |  |  |  | 
| 888 |  |  | //    cout << "int TrkLevel1::ProcessEvent()" << endl; | 
| 889 |  |  | TrkParams::Load( ); | 
| 890 |  |  | if( !TrkParams::IsLoaded() )return 0; | 
| 891 | pam-fi | 1.13 |  | 
| 892 | pam-fi | 1.14 | GetLevel1Struct(); | 
| 893 |  |  |  | 
| 894 | pam-fi | 1.17 | //    analysisflight_(&pfa); | 
| 895 |  |  | TrkParams::SetPFA(pfa); | 
| 896 |  |  | analysisflight_(); | 
| 897 | pam-fi | 1.14 |  | 
| 898 |  |  | return 1; | 
| 899 | pam-fi | 1.13 |  | 
| 900 | pam-fi | 1.14 | } | 
| 901 | pam-fi | 1.13 |  | 
| 902 | pam-fi | 1.1 |  | 
| 903 |  |  | ClassImp(TrkLevel1); | 
| 904 |  |  | ClassImp(TrkCluster); |