| 5 | 
 **/ | 
 **/ | 
| 6 | 
 #include <TObject.h> | 
 #include <TObject.h> | 
| 7 | 
 #include <CaloLevel2.h> | 
 #include <CaloLevel2.h> | 
| 8 | 
  | 
  | 
| 9 | 
  | 
 // | 
| 10 | 
 ClassImp(CaloTrkVar); | 
 ClassImp(CaloTrkVar); | 
| 11 | 
 ClassImp(CaloLevel2); | 
 ClassImp(CaloLevel2); | 
| 12 | 
  | 
  | 
| 14 | 
  * CaloTrkVar constructor | 
  * CaloTrkVar constructor | 
| 15 | 
 **/ | 
 **/ | 
| 16 | 
 CaloTrkVar::CaloTrkVar() { | 
 CaloTrkVar::CaloTrkVar() { | 
| 17 | 
  | 
   this->Clear(); | 
| 18 | 
  | 
 }; | 
| 19 | 
  | 
  | 
| 20 | 
  | 
 /** | 
| 21 | 
  | 
  * Clear variables | 
| 22 | 
  | 
 **/ | 
| 23 | 
  | 
 void CaloTrkVar::Clear() { | 
| 24 | 
   trkseqno = 0; | 
   trkseqno = 0; | 
| 25 | 
   noint = 0; | 
   noint = 0; | 
| 26 | 
   ncore = 0; | 
   ncore = 0; | 
| 45 | 
   qlow = 0.; | 
   qlow = 0.; | 
| 46 | 
   nlow = 0; | 
   nlow = 0; | 
| 47 | 
   dX0l = 0.; | 
   dX0l = 0.; | 
| 48 | 
   for (Int_t i = 0; i<2 ; i++){ | 
   memset(tbar, 0, 2*22*sizeof(Float_t)); | 
| 49 | 
     for ( Int_t j = 0; j<22; j++){ | 
   memset(tibar, 0, 2*22*sizeof(Int_t)); | 
 | 
       tibar[j][i] = 0;           | 
  | 
 | 
       tbar[j][i] = 0.;     | 
  | 
 | 
     }; | 
  | 
 | 
   }; | 
  | 
| 50 | 
 } | 
 } | 
| 51 | 
  | 
  | 
| 52 | 
 /** | 
 /** | 
| 88 | 
   // | 
   // | 
| 89 | 
   CaloTrk = new TClonesArray("CaloTrkVar",1); | 
   CaloTrk = new TClonesArray("CaloTrkVar",1); | 
| 90 | 
   // | 
   // | 
| 91 | 
   nstrip = 0; | 
   this->Clear(); | 
| 92 | 
   qtot = 0.; | 
   // | 
 | 
   impx = 0.; | 
  | 
 | 
   impy = 0.; | 
  | 
 | 
   tanx = 0.; | 
  | 
 | 
   tany = 0.; | 
  | 
 | 
   qmax = 0.; | 
  | 
 | 
   nx22 = 0; | 
  | 
 | 
   qx22 = 0.; | 
  | 
 | 
   elen = 0.; | 
  | 
 | 
   selen = 0.; | 
  | 
 | 
   for (Int_t i = 0; i<4 ; i++){ | 
  | 
 | 
     qq[i] = 0.; | 
  | 
 | 
     perr[i] = 0; | 
  | 
 | 
     swerr[i] = 0; | 
  | 
 | 
     crc[i] = 0; | 
  | 
 | 
     if ( i < 2 ){ | 
  | 
 | 
       planemax[i] = 0; | 
  | 
 | 
       varcfit[i] = 0.; | 
  | 
 | 
       npcfit[i] = 0; | 
  | 
 | 
       for ( Int_t j = 0; j<22; j++){ | 
  | 
 | 
         cibar[j][i] = 0; | 
  | 
 | 
         cbar[j][i] = 0.; | 
  | 
 | 
       }; | 
  | 
 | 
     }; | 
  | 
 | 
   }; | 
  | 
 | 
   good = 0; | 
  | 
 | 
   selftrigger = 0; | 
  | 
 | 
   estrip = TArrayF(0,NULL); | 
  | 
| 93 | 
 }; | 
 }; | 
| 94 | 
  | 
  | 
| 95 | 
  | 
 /** | 
| 96 | 
  | 
  * Clear the CaloLevel2 object | 
| 97 | 
  | 
  **/ | 
| 98 | 
 void CaloLevel2::Clear() {     | 
 void CaloLevel2::Clear() {     | 
| 99 | 
   // | 
   // | 
| 100 | 
   CaloTrk->Clear(); | 
   CaloTrk->Clear(); | 
| 110 | 
   qx22 = 0.; | 
   qx22 = 0.; | 
| 111 | 
   elen = 0.; | 
   elen = 0.; | 
| 112 | 
   selen = 0.; | 
   selen = 0.; | 
| 113 | 
   for (Int_t i = 0; i<4 ; i++){ | 
   memset(perr, 0, 4*sizeof(Int_t)); | 
| 114 | 
     qq[i] = 0.; | 
   memset(swerr, 0, 4*sizeof(Int_t)); | 
| 115 | 
     perr[i] = 0; | 
   memset(crc, 0, 4*sizeof(Int_t)); | 
| 116 | 
     swerr[i] = 0; | 
   memset(qq, 0, 4*sizeof(Int_t)); | 
| 117 | 
     crc[i] = 0; | 
   memset(varcfit, 0, 2*sizeof(Float_t)); | 
| 118 | 
     if ( i < 2 ){ | 
   memset(npcfit, 0, 2*sizeof(Int_t)); | 
| 119 | 
       planemax[i] = 0; | 
   memset(planemax, 0, 2*sizeof(Int_t)); | 
| 120 | 
       varcfit[i] = 0.; | 
   memset(cibar, 0, 2*22*sizeof(Int_t)); | 
| 121 | 
       npcfit[i] = 0; | 
   memset(cbar, 0, 2*22*sizeof(Float_t)); | 
 | 
       for ( Int_t j = 0; j<22; j++){ | 
  | 
 | 
         cibar[j][i] = 0; | 
  | 
 | 
         cbar[j][i] = 0.; | 
  | 
 | 
       }; | 
  | 
 | 
     }; | 
  | 
 | 
   }; | 
  | 
| 122 | 
   good = 0; | 
   good = 0; | 
| 123 | 
   selftrigger = 0; | 
   selftrigger = 0; | 
| 124 | 
   //  estrip = TArrayF(0,NULL); | 
   // | 
 | 
   estrip.Reset(); | 
  | 
| 125 | 
 }; | 
 }; | 
| 126 | 
  | 
  | 
| 127 | 
  | 
  | 
| 183 | 
     l2->qmean[i] = ((CaloTrkVar *)CaloTrk->At(i))->qmean;    | 
     l2->qmean[i] = ((CaloTrkVar *)CaloTrk->At(i))->qmean;    | 
| 184 | 
     l2->qlow[i] = ((CaloTrkVar *)CaloTrk->At(i))->qlow;     | 
     l2->qlow[i] = ((CaloTrkVar *)CaloTrk->At(i))->qlow;     | 
| 185 | 
     l2->dX0l[i] = ((CaloTrkVar *)CaloTrk->At(i))->dX0l;   | 
     l2->dX0l[i] = ((CaloTrkVar *)CaloTrk->At(i))->dX0l;   | 
| 186 | 
  | 
     for (Int_t j=0; j<2; j++){ | 
| 187 | 
  | 
       for (Int_t k=0; k<22; k++){ | 
| 188 | 
  | 
         l2->tbar[i][k][j] = ((CaloTrkVar *)CaloTrk->At(i))->tbar[k][j]; | 
| 189 | 
  | 
       }; | 
| 190 | 
  | 
     }; | 
| 191 | 
   }   | 
   }   | 
| 192 | 
  | 
  | 
| 193 | 
 } | 
 } | 
| 194 | 
  | 
  | 
| 195 | 
 /** | 
 /** | 
| 196 | 
  * Gives the detected energy for the given strip once loaded the event | 
  * Should return the energy in GeV if the particle would be an electron | 
| 197 | 
 **/ | 
  * using a parametrization taken from Monte Carlo simulation | 
 | 
 Float_t CaloLevel2::GetEstrip(Int_t view, Int_t plane, Int_t strip){ | 
  | 
 | 
   Int_t splane = 0; | 
  | 
 | 
   Int_t sstrip = 0; | 
  | 
 | 
   // | 
  | 
 | 
   if ( nstrip == 0 ) return(0.); | 
  | 
 | 
   // | 
  | 
 | 
   for (Int_t i = 0; i<nstrip; i++ ){ | 
  | 
 | 
     if ( view == 0 ){ | 
  | 
 | 
       if ( estrip.At(i) > 0. ){ | 
  | 
 | 
         splane = (Int_t)trunc(estrip.At(i)/1000000.); | 
  | 
 | 
         sstrip = (Int_t)trunc((estrip.At(i)-((Float_t)splane*1000000.))/10000.); | 
  | 
 | 
         if ( splane == plane && sstrip == strip ) return(estrip.At(i)-(Float_t)splane*1000000.-(Float_t)sstrip*10000.); | 
  | 
 | 
       };         | 
  | 
 | 
     } else { | 
  | 
 | 
       if ( estrip.At(i) < 0. ){ | 
  | 
 | 
         splane = (Int_t)trunc(-estrip.At(i)/1000000.); | 
  | 
 | 
         sstrip = (Int_t)trunc((-estrip.At(i)-((Float_t)splane*1000000.))/10000.); | 
  | 
 | 
         if ( splane == plane && sstrip == strip ) return(-estrip.At(i)-(Float_t)splane*1000000.-(Float_t)sstrip*10000.);         | 
  | 
 | 
       };         | 
  | 
 | 
     }; | 
  | 
 | 
   }; | 
  | 
 | 
   return(0.); | 
  | 
 | 
 }; | 
  | 
 | 
  | 
  | 
 | 
 /** | 
  | 
 | 
  * Given estrip entry returns energy and strip | 
  | 
| 198 | 
 **/ | 
 **/ | 
 | 
 Float_t CaloLevel2::DecodeEstrip(Int_t entry, Int_t &view, Int_t &plane, Int_t &strip){ | 
  | 
 | 
   if ( entry>nstrip ) return(0.); | 
  | 
 | 
   // | 
  | 
 | 
   if ( estrip.At(entry) > 0. ){ | 
  | 
 | 
     view = 0; | 
  | 
 | 
     plane = (Int_t)trunc(estrip.At(entry)/1000000.); | 
  | 
 | 
     strip = (Int_t)trunc((estrip.At(entry)-((Float_t)plane*1000000.))/10000.); | 
  | 
 | 
     return(estrip.At(entry)-(Float_t)plane*1000000.-(Float_t)strip*10000.); | 
  | 
 | 
   }; | 
  | 
 | 
   if ( estrip.At(entry) < 0. ){ | 
  | 
 | 
     view = 1; | 
  | 
 | 
     plane = (Int_t)trunc(-estrip.At(entry)/1000000.); | 
  | 
 | 
     strip = (Int_t)trunc((-estrip.At(entry)-((Float_t)plane*1000000.))/10000.); | 
  | 
 | 
     return(-estrip.At(entry)-(Float_t)plane*1000000.-(Float_t)strip*10000.);     | 
  | 
 | 
   };     | 
  | 
 | 
   // | 
  | 
 | 
   printf(" WARNING: problems decoding value %f at entry %i \n",estrip.At(entry),entry); | 
  | 
 | 
   // | 
  | 
 | 
   view = -1; | 
  | 
 | 
   plane = -1; | 
  | 
 | 
   strip = -1; | 
  | 
 | 
   return(0.);   | 
  | 
 | 
 } | 
  | 
 | 
  | 
  | 
| 199 | 
 void CaloLevel2::GetElectronEnergy(Float_t &energy, Float_t &sigma){ | 
 void CaloLevel2::GetElectronEnergy(Float_t &energy, Float_t &sigma){ | 
| 200 | 
   if ( nstrip == 0 ) return; | 
   if ( nstrip == 0 ) return; | 
| 201 | 
   energy = qtot * 40.82 * 0.000106; | 
   energy = qtot * 40.82 * 0.000106; |