ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

#include "AliMagWrapCheb.h"
#include "AliLog.h"
#include <TSystem.h>
#include <TArrayF.h>
#include <TArrayI.h>

ClassImp(AliMagWrapCheb)

//__________________________________________________________________________________________
AliMagWrapCheb::AliMagWrapCheb() : 
fNParamsSol(0),fNZSegSol(0),fNPSegSol(0),fNRSegSol(0),
  fSegZSol(0),fSegPSol(0),fSegRSol(0),
  fBegSegPSol(0),fNSegPSol(0),fBegSegRSol(0),fNSegRSol(0),fSegIDSol(0),fMinZSol(1.e6),fMaxZSol(-1.e6),fParamsSol(0),fMaxRSol(0),
//
  fNParamsTPC(0),fNZSegTPC(0),fNPSegTPC(0),fNRSegTPC(0),
  fSegZTPC(0),fSegPTPC(0),fSegRTPC(0),
  fBegSegPTPC(0),fNSegPTPC(0),fBegSegRTPC(0),fNSegRTPC(0),fSegIDTPC(0),fMinZTPC(1.e6),fMaxZTPC(-1.e6),fParamsTPC(0),fMaxRTPC(0),
//
  fNParamsTPCRat(0),fNZSegTPCRat(0),fNPSegTPCRat(0),fNRSegTPCRat(0),
  fSegZTPCRat(0),fSegPTPCRat(0),fSegRTPCRat(0),
  fBegSegPTPCRat(0),fNSegPTPCRat(0),fBegSegRTPCRat(0),fNSegRTPCRat(0),fSegIDTPCRat(0),fMinZTPCRat(1.e6),fMaxZTPCRat(-1.e6),fParamsTPCRat(0),fMaxRTPCRat(0),
//
  fNParamsDip(0),fNZSegDip(0),fNYSegDip(0),fNXSegDip(0),
  fSegZDip(0),fSegYDip(0),fSegXDip(0),
  fBegSegYDip(0),fNSegYDip(0),fBegSegXDip(0),fNSegXDip(0),fSegIDDip(0),fMinZDip(1.e6),fMaxZDip(-1.e6),fParamsDip(0)
//
#ifdef _MAGCHEB_CACHE_
  ,fCacheSol(0),fCacheDip(0),fCacheTPCInt(0),fCacheTPCRat(0)
#endif
//
{
  // default constructor
}

//__________________________________________________________________________________________
AliMagWrapCheb::AliMagWrapCheb(const AliMagWrapCheb& src) : 
  TNamed(src),
  fNParamsSol(0),fNZSegSol(0),fNPSegSol(0),fNRSegSol(0),
  fSegZSol(0),fSegPSol(0),fSegRSol(0),
  fBegSegPSol(0),fNSegPSol(0),fBegSegRSol(0),fNSegRSol(0),fSegIDSol(0),fMinZSol(1.e6),fMaxZSol(-1.e6),fParamsSol(0),fMaxRSol(0),
//
  fNParamsTPC(0),fNZSegTPC(0),fNPSegTPC(0),fNRSegTPC(0),
  fSegZTPC(0),fSegPTPC(0),fSegRTPC(0),
  fBegSegPTPC(0),fNSegPTPC(0),fBegSegRTPC(0),fNSegRTPC(0),fSegIDTPC(0),fMinZTPC(1.e6),fMaxZTPC(-1.e6),fParamsTPC(0),fMaxRTPC(0),
//
  fNParamsTPCRat(0),fNZSegTPCRat(0),fNPSegTPCRat(0),fNRSegTPCRat(0),
  fSegZTPCRat(0),fSegPTPCRat(0),fSegRTPCRat(0),
  fBegSegPTPCRat(0),fNSegPTPCRat(0),fBegSegRTPCRat(0),fNSegRTPCRat(0),fSegIDTPCRat(0),fMinZTPCRat(1.e6),fMaxZTPCRat(-1.e6),fParamsTPCRat(0),fMaxRTPCRat(0),
//
  fNParamsDip(0),fNZSegDip(0),fNYSegDip(0),fNXSegDip(0),
  fSegZDip(0),fSegYDip(0),fSegXDip(0),
  fBegSegYDip(0),fNSegYDip(0),fBegSegXDip(0),fNSegXDip(0),fSegIDDip(0),fMinZDip(1.e6),fMaxZDip(-1.e6),fParamsDip(0)
//
#ifdef _MAGCHEB_CACHE_
  ,fCacheSol(0),fCacheDip(0),fCacheTPCInt(0),fCacheTPCRat(0)
#endif
{
  // copy constructor
  CopyFrom(src);
  //
}

//__________________________________________________________________________________________
void AliMagWrapCheb::CopyFrom(const AliMagWrapCheb& src) 
{ 
  // copy method
  Clear();
  SetName(src.GetName());
  SetTitle(src.GetTitle());
  //
  fNParamsSol    = src.fNParamsSol;
  fNZSegSol      = src.fNZSegSol;
  fNPSegSol      = src.fNPSegSol;
  fNRSegSol      = src.fNRSegSol;  
  fMinZSol       = src.fMinZSol;
  fMaxZSol       = src.fMaxZSol;
  fMaxRSol       = src.fMaxRSol;
  if (src.fNParamsSol) {
    memcpy(fSegZSol   = new Float_t[fNZSegSol], src.fSegZSol, sizeof(Float_t)*fNZSegSol);
    memcpy(fSegPSol   = new Float_t[fNPSegSol], src.fSegPSol, sizeof(Float_t)*fNPSegSol);
    memcpy(fSegRSol   = new Float_t[fNRSegSol], src.fSegRSol, sizeof(Float_t)*fNRSegSol);
    memcpy(fBegSegPSol= new Int_t[fNZSegSol], src.fBegSegPSol, sizeof(Int_t)*fNZSegSol);
    memcpy(fNSegPSol  = new Int_t[fNZSegSol], src.fNSegPSol, sizeof(Int_t)*fNZSegSol);
    memcpy(fBegSegRSol= new Int_t[fNPSegSol], src.fBegSegRSol, sizeof(Int_t)*fNPSegSol);
    memcpy(fNSegRSol  = new Int_t[fNPSegSol], src.fNSegRSol, sizeof(Int_t)*fNPSegSol);
    memcpy(fSegIDSol  = new Int_t[fNRSegSol], src.fSegIDSol, sizeof(Int_t)*fNRSegSol);
    fParamsSol        = new TObjArray(fNParamsSol);
    for (int i=0;i<fNParamsSol;i++) fParamsSol->AddAtAndExpand(new AliCheb3D(*src.GetParamSol(i)),i);
  }
  //
  fNParamsTPC    = src.fNParamsTPC;
  fNZSegTPC      = src.fNZSegTPC;
  fNPSegTPC      = src.fNPSegTPC;
  fNRSegTPC      = src.fNRSegTPC;  
  fMinZTPC       = src.fMinZTPC;
  fMaxZTPC       = src.fMaxZTPC;
  fMaxRTPC       = src.fMaxRTPC;
  if (src.fNParamsTPC) {
    memcpy(fSegZTPC   = new Float_t[fNZSegTPC], src.fSegZTPC, sizeof(Float_t)*fNZSegTPC);
    memcpy(fSegPTPC   = new Float_t[fNPSegTPC], src.fSegPTPC, sizeof(Float_t)*fNPSegTPC);
    memcpy(fSegRTPC   = new Float_t[fNRSegTPC], src.fSegRTPC, sizeof(Float_t)*fNRSegTPC);
    memcpy(fBegSegPTPC= new Int_t[fNZSegTPC], src.fBegSegPTPC, sizeof(Int_t)*fNZSegTPC);
    memcpy(fNSegPTPC  = new Int_t[fNZSegTPC], src.fNSegPTPC, sizeof(Int_t)*fNZSegTPC);
    memcpy(fBegSegRTPC= new Int_t[fNPSegTPC], src.fBegSegRTPC, sizeof(Int_t)*fNPSegTPC);
    memcpy(fNSegRTPC  = new Int_t[fNPSegTPC], src.fNSegRTPC, sizeof(Int_t)*fNPSegTPC);
    memcpy(fSegIDTPC  = new Int_t[fNRSegTPC], src.fSegIDTPC, sizeof(Int_t)*fNRSegTPC);
    fParamsTPC        = new TObjArray(fNParamsTPC);
    for (int i=0;i<fNParamsTPC;i++) fParamsTPC->AddAtAndExpand(new AliCheb3D(*src.GetParamTPCInt(i)),i);
  }
  //
  fNParamsTPCRat    = src.fNParamsTPCRat;
  fNZSegTPCRat      = src.fNZSegTPCRat;
  fNPSegTPCRat      = src.fNPSegTPCRat;
  fNRSegTPCRat      = src.fNRSegTPCRat;  
  fMinZTPCRat       = src.fMinZTPCRat;
  fMaxZTPCRat       = src.fMaxZTPCRat;
  fMaxRTPCRat       = src.fMaxRTPCRat;
  if (src.fNParamsTPCRat) {
    memcpy(fSegZTPCRat   = new Float_t[fNZSegTPCRat], src.fSegZTPCRat, sizeof(Float_t)*fNZSegTPCRat);
    memcpy(fSegPTPCRat   = new Float_t[fNPSegTPCRat], src.fSegPTPCRat, sizeof(Float_t)*fNPSegTPCRat);
    memcpy(fSegRTPCRat   = new Float_t[fNRSegTPCRat], src.fSegRTPCRat, sizeof(Float_t)*fNRSegTPCRat);
    memcpy(fBegSegPTPCRat= new Int_t[fNZSegTPCRat], src.fBegSegPTPCRat, sizeof(Int_t)*fNZSegTPCRat);
    memcpy(fNSegPTPCRat  = new Int_t[fNZSegTPCRat], src.fNSegPTPCRat, sizeof(Int_t)*fNZSegTPCRat);
    memcpy(fBegSegRTPCRat= new Int_t[fNPSegTPCRat], src.fBegSegRTPCRat, sizeof(Int_t)*fNPSegTPCRat);
    memcpy(fNSegRTPCRat  = new Int_t[fNPSegTPCRat], src.fNSegRTPCRat, sizeof(Int_t)*fNPSegTPCRat);
    memcpy(fSegIDTPCRat  = new Int_t[fNRSegTPCRat], src.fSegIDTPCRat, sizeof(Int_t)*fNRSegTPCRat);
    fParamsTPCRat        = new TObjArray(fNParamsTPCRat);
    for (int i=0;i<fNParamsTPCRat;i++) fParamsTPCRat->AddAtAndExpand(new AliCheb3D(*src.GetParamTPCRatInt(i)),i);
  }
  //
  fNParamsDip    = src.fNParamsDip;
  fNZSegDip      = src.fNZSegDip;
  fNYSegDip      = src.fNYSegDip;
  fNXSegDip      = src.fNXSegDip;  
  fMinZDip       = src.fMinZDip;
  fMaxZDip       = src.fMaxZDip;
  if (src.fNParamsDip) {
    memcpy(fSegZDip   = new Float_t[fNZSegDip], src.fSegZDip, sizeof(Float_t)*fNZSegDip);
    memcpy(fSegYDip   = new Float_t[fNYSegDip], src.fSegYDip, sizeof(Float_t)*fNYSegDip);
    memcpy(fSegXDip   = new Float_t[fNXSegDip], src.fSegXDip, sizeof(Float_t)*fNXSegDip);
    memcpy(fBegSegYDip= new Int_t[fNZSegDip], src.fBegSegYDip, sizeof(Int_t)*fNZSegDip);
    memcpy(fNSegYDip  = new Int_t[fNZSegDip], src.fNSegYDip, sizeof(Int_t)*fNZSegDip);
    memcpy(fBegSegXDip= new Int_t[fNYSegDip], src.fBegSegXDip, sizeof(Int_t)*fNYSegDip);
    memcpy(fNSegXDip  = new Int_t[fNYSegDip], src.fNSegXDip, sizeof(Int_t)*fNYSegDip);
    memcpy(fSegIDDip  = new Int_t[fNXSegDip], src.fSegIDDip, sizeof(Int_t)*fNXSegDip);
    fParamsDip        = new TObjArray(fNParamsDip);
    for (int i=0;i<fNParamsDip;i++) fParamsDip->AddAtAndExpand(new AliCheb3D(*src.GetParamDip(i)),i);
  }
  //
}

//__________________________________________________________________________________________
AliMagWrapCheb& AliMagWrapCheb::operator=(const AliMagWrapCheb& rhs)
{
  // assignment
  if (this != &rhs) {  
    Clear();
    CopyFrom(rhs);
  }
  return *this;  
  //
}

//__________________________________________________________________________________________
void AliMagWrapCheb::Clear(const Option_t *)
{
  // clear all dynamic parts
  if (fNParamsSol) {
    fParamsSol->SetOwner(kTRUE);
    delete   fParamsSol;  fParamsSol = 0;
    delete[] fSegZSol;    fSegZSol   = 0;
    delete[] fSegPSol;    fSegPSol   = 0;
    delete[] fSegRSol;    fSegRSol   = 0;
    delete[] fBegSegPSol; fBegSegPSol = 0;
    delete[] fNSegPSol;   fNSegPSol   = 0;
    delete[] fBegSegRSol; fBegSegRSol = 0;
    delete[] fNSegRSol;   fNSegRSol   = 0;
    delete[] fSegIDSol;   fSegIDSol   = 0;   
  }
  fNParamsSol = fNZSegSol = fNPSegSol = fNRSegSol = 0;
  fMinZSol = 1e6;
  fMaxZSol = -1e6;
  fMaxRSol = 0;
  //
  if (fNParamsTPC) {
    fParamsTPC->SetOwner(kTRUE);
    delete   fParamsTPC;  fParamsTPC = 0;
    delete[] fSegZTPC;    fSegZTPC   = 0;
    delete[] fSegPTPC;    fSegPTPC   = 0;
    delete[] fSegRTPC;    fSegRTPC   = 0;
    delete[] fBegSegPTPC; fBegSegPTPC = 0;
    delete[] fNSegPTPC;   fNSegPTPC   = 0;
    delete[] fBegSegRTPC; fBegSegRTPC = 0;
    delete[] fNSegRTPC;   fNSegRTPC   = 0;
    delete[] fSegIDTPC;   fSegIDTPC   = 0;   
  }
  fNParamsTPC = fNZSegTPC = fNPSegTPC = fNRSegTPC = 0;
  fMinZTPC = 1e6;
  fMaxZTPC = -1e6;
  fMaxRTPC = 0;
  //
  if (fNParamsTPCRat) {
    fParamsTPCRat->SetOwner(kTRUE);
    delete   fParamsTPCRat;  fParamsTPCRat = 0;
    delete[] fSegZTPCRat;    fSegZTPCRat   = 0;
    delete[] fSegPTPCRat;    fSegPTPCRat   = 0;
    delete[] fSegRTPCRat;    fSegRTPCRat   = 0;
    delete[] fBegSegPTPCRat; fBegSegPTPCRat = 0;
    delete[] fNSegPTPCRat;   fNSegPTPCRat   = 0;
    delete[] fBegSegRTPCRat; fBegSegRTPCRat = 0;
    delete[] fNSegRTPCRat;   fNSegRTPCRat   = 0;
    delete[] fSegIDTPCRat;   fSegIDTPCRat   = 0;   
  }
  fNParamsTPCRat = fNZSegTPCRat = fNPSegTPCRat = fNRSegTPCRat = 0;
  fMinZTPCRat = 1e6;
  fMaxZTPCRat = -1e6;
  fMaxRTPCRat = 0;
  //
  if (fNParamsDip) {
    fParamsDip->SetOwner(kTRUE);
    delete   fParamsDip;  fParamsDip = 0;
    delete[] fSegZDip;    fSegZDip   = 0;
    delete[] fSegYDip;    fSegYDip   = 0; 
    delete[] fSegXDip;    fSegXDip   = 0;
    delete[] fBegSegYDip; fBegSegYDip = 0;
    delete[] fNSegYDip;   fNSegYDip   = 0;
    delete[] fBegSegXDip; fBegSegXDip = 0; 
    delete[] fNSegXDip;   fNSegXDip   = 0;
    delete[] fSegIDDip;   fSegIDDip   = 0;
  }
  fNParamsDip = fNZSegDip = fNYSegDip = fNXSegDip = 0;
  fMinZDip = 1e6;
  fMaxZDip = -1e6;
  //
#ifdef _MAGCHEB_CACHE_
  fCacheSol = 0;
  fCacheDip = 0;
  fCacheTPCInt = 0;
  fCacheTPCRat = 0;
#endif
  //
}

//__________________________________________________________________________________________
void AliMagWrapCheb::Field(const Double_t *xyz, Double_t *b) const
{
  // compute field in cartesian coordinates. If point is outside of the parameterized region
  // get it at closest valid point
  Double_t rphiz[3];
  //
#ifndef _BRING_TO_BOUNDARY_  // exact matching to fitted volume is requested
  b[0] = b[1] = b[2] = 0;
#endif 
  //
  if (xyz[2]>fMinZSol) {
    CartToCyl(xyz,rphiz);
    //
#ifdef _MAGCHEB_CACHE_
    if (fCacheSol && fCacheSol->IsInside(rphiz)) 
      fCacheSol->Eval(rphiz,b);
    else
#endif //_MAGCHEB_CACHE_
      FieldCylSol(rphiz,b);
    // convert field to cartesian system
    CylToCartCylB(rphiz, b,b);
    return;
  }
  //
#ifdef _MAGCHEB_CACHE_
  if (fCacheDip && fCacheDip->IsInside(xyz)) {
    fCacheDip->Eval(xyz,b); // check the cache first
    return;
  }
#else //_MAGCHEB_CACHE_
  AliCheb3D* fCacheDip = 0;
#endif //_MAGCHEB_CACHE_
  int iddip = FindDipSegment(xyz);
  if (iddip>=0) {
    fCacheDip = GetParamDip(iddip);
    //
#ifndef _BRING_TO_BOUNDARY_
    if (!fCacheDip->IsInside(xyz)) return;
#endif //_BRING_TO_BOUNDARY_
    //
    fCacheDip->Eval(xyz,b); 
  }
  //
}

//__________________________________________________________________________________________
Double_t AliMagWrapCheb::GetBz(const Double_t *xyz) const
{
  // compute Bz for the point in cartesian coordinates. If point is outside of the parameterized region
  // get it at closest valid point
  Double_t rphiz[3];
  //
  if (xyz[2]>fMinZSol) {
    //
    CartToCyl(xyz,rphiz);
    //
#ifdef _MAGCHEB_CACHE_
    if (fCacheSol && fCacheSol->IsInside(rphiz)) return fCacheSol->Eval(rphiz,2);
#endif //_MAGCHEB_CACHE_
    return FieldCylSolBz(rphiz);
  }
  //
#ifdef _MAGCHEB_CACHE_
  if (fCacheDip && fCacheDip->IsInside(xyz)) return fCacheDip->Eval(xyz,2); // check the cache first
  //
#else //_MAGCHEB_CACHE_
  AliCheb3D* fCacheDip = 0;
#endif //_MAGCHEB_CACHE_
  //
  int iddip = FindDipSegment(xyz);
  if (iddip>=0) {
    fCacheDip = GetParamDip(iddip);
    //
#ifndef _BRING_TO_BOUNDARY_
    if (!fCacheDip->IsInside(xyz)) return 0.;
#endif // _BRING_TO_BOUNDARY_
    //
    return fCacheDip->Eval(xyz,2);
  //
  }
  //
  return 0;
  //
}


//__________________________________________________________________________________________
void AliMagWrapCheb::Print(Option_t *) const
{
  // print info
  printf("Alice magnetic field parameterized by Chebyshev polynomials\n");
  printf("Segmentation for Solenoid (%+.2f<Z<%+.2f cm | R<%.2f cm)\n",fMinZSol,fMaxZSol,fMaxRSol);
  //
  if (fParamsSol) {
    for (int i=0;i<fNParamsSol;i++) {
      printf("SOL%4d ",i);
      GetParamSol(i)->Print();
    }
  }
  //
  printf("Segmentation for TPC field integral (%+.2f<Z<%+.2f cm | R<%.2f cm)\n",fMinZTPC,fMaxZTPC,fMaxRTPC);
  //
  if (fParamsTPC) {
    for (int i=0;i<fNParamsTPC;i++) {
      printf("TPC%4d ",i);
      GetParamTPCInt(i)->Print();
    }
  }
  //
  printf("Segmentation for TPC field ratios integral (%+.2f<Z<%+.2f cm | R<%.2f cm)\n",fMinZTPCRat,fMaxZTPCRat,fMaxRTPCRat);
  //
  if (fParamsTPCRat) {
    for (int i=0;i<fNParamsTPCRat;i++) {
      printf("TPCRat%4d ",i);
      GetParamTPCRatInt(i)->Print();
    }
  }
  //
  printf("Segmentation for Dipole (%+.2f<Z<%+.2f cm)\n",fMinZDip,fMaxZDip);
  if (fParamsDip) {
    for (int i=0;i<fNParamsDip;i++) {
      printf("DIP%4d ",i);
      GetParamDip(i)->Print();
    }
  }
  //
}

//__________________________________________________________________________________________________
Int_t AliMagWrapCheb::FindDipSegment(const Double_t *xyz) const 
{
  // find the segment containing point xyz. If it is outside find the closest segment 
  if (!fNParamsDip) return -1;
  int xid,yid,zid = TMath::BinarySearch(fNZSegDip,fSegZDip,(Float_t)xyz[2]); // find zsegment
  //
  Bool_t reCheck = kFALSE;
  while(1) {
    int ysegBeg = fBegSegYDip[zid];
    //
    for (yid=0;yid<fNSegYDip[zid];yid++) if (xyz[1]<fSegYDip[ysegBeg+yid]) break;
    if ( --yid < 0 ) yid = 0;
    yid +=  ysegBeg;
    //
    int xsegBeg = fBegSegXDip[yid];
    for (xid=0;xid<fNSegXDip[yid];xid++) if (xyz[0]<fSegXDip[xsegBeg+xid]) break;
    //
    if ( --xid < 0) xid = 0;
    xid +=  xsegBeg;
    //
    // to make sure that due to the precision problems we did not pick the next Zbin    
    if (!reCheck && (xyz[2] - fSegZDip[zid] < 3.e-5) && zid &&
	!GetParamDip(fSegIDDip[xid])->IsInside(xyz)) {  // check the previous Z bin
      zid--;
      reCheck = kTRUE;
      continue;
    } 
    break;
  }
  //  AliInfo(Form("%+.2f %+.2f %+.2f %d %d %d %4d",xyz[0],xyz[1],xyz[2],xid,yid,zid,fSegIDDip[xid]));
  return fSegIDDip[xid];
}

//__________________________________________________________________________________________________
Int_t AliMagWrapCheb::FindSolSegment(const Double_t *rpz) const 
{
  // find the segment containing point xyz. If it is outside find the closest segment 
  if (!fNParamsSol) return -1;
  int rid,pid,zid = TMath::BinarySearch(fNZSegSol,fSegZSol,(Float_t)rpz[2]); // find zsegment
  //
  Bool_t reCheck = kFALSE;
  while(1) {
    int psegBeg = fBegSegPSol[zid];
    for (pid=0;pid<fNSegPSol[zid];pid++) if (rpz[1]<fSegPSol[psegBeg+pid]) break;
    if ( --pid < 0 ) pid = 0;
    pid +=  psegBeg;
    //
    int rsegBeg = fBegSegRSol[pid];
    for (rid=0;rid<fNSegRSol[pid];rid++) if (rpz[0]<fSegRSol[rsegBeg+rid]) break;
    if ( --rid < 0) rid = 0;
    rid +=  rsegBeg;
    //
    // to make sure that due to the precision problems we did not pick the next Zbin    
    if (!reCheck && (rpz[2] - fSegZSol[zid] < 3.e-5) && zid &&
	!GetParamSol(fSegIDSol[rid])->IsInside(rpz)) {  // check the previous Z bin
      zid--;
      reCheck = kTRUE;
      continue;
    } 
    break;
  }
  //  AliInfo(Form("%+.2f %+.4f %+.2f %d %d %d %4d",rpz[0],rpz[1],rpz[2],rid,pid,zid,fSegIDSol[rid]));
  return fSegIDSol[rid];
}

//__________________________________________________________________________________________________
Int_t AliMagWrapCheb::FindTPCSegment(const Double_t *rpz) const 
{
  // find the segment containing point xyz. If it is outside find the closest segment 
  if (!fNParamsTPC) return -1;
  int rid,pid,zid = TMath::BinarySearch(fNZSegTPC,fSegZTPC,(Float_t)rpz[2]); // find zsegment
  //
  Bool_t reCheck = kFALSE;
  while(1) {
    int psegBeg = fBegSegPTPC[zid];
    //
    for (pid=0;pid<fNSegPTPC[zid];pid++) if (rpz[1]<fSegPTPC[psegBeg+pid]) break;
    if ( --pid < 0 ) pid = 0;
    pid +=  psegBeg;
    //
    int rsegBeg = fBegSegRTPC[pid];
    for (rid=0;rid<fNSegRTPC[pid];rid++) if (rpz[0]<fSegRTPC[rsegBeg+rid]) break;
    if ( --rid < 0) rid = 0;
    rid +=  rsegBeg;
    //
    // to make sure that due to the precision problems we did not pick the next Zbin    
    if (!reCheck && (rpz[2] - fSegZTPC[zid] < 3.e-5) && zid &&
	!GetParamTPCInt(fSegIDTPC[rid])->IsInside(rpz)) {  // check the previous Z bin
      zid--;
      reCheck = kTRUE;
      continue;
    } 
    break;
  }
  //  AliInfo(Form("%+.2f %+.4f %+.2f %d %d %d %4d",rpz[0],rpz[1],rpz[2],rid,pid,zid,fSegIDTPC[rid]));
  return fSegIDTPC[rid];
}

//__________________________________________________________________________________________________
Int_t AliMagWrapCheb::FindTPCRatSegment(const Double_t *rpz) const 
{
  // find the segment containing point xyz. If it is outside find the closest segment 
  if (!fNParamsTPCRat) return -1;
  int rid,pid,zid = TMath::BinarySearch(fNZSegTPCRat,fSegZTPCRat,(Float_t)rpz[2]); // find zsegment
  //
  Bool_t reCheck = kFALSE;
  while(1) {
    int psegBeg = fBegSegPTPCRat[zid];
    //
    for (pid=0;pid<fNSegPTPCRat[zid];pid++) if (rpz[1]<fSegPTPCRat[psegBeg+pid]) break;
    if ( --pid < 0 ) pid = 0;
    pid +=  psegBeg;
    //
    int rsegBeg = fBegSegRTPCRat[pid];
    for (rid=0;rid<fNSegRTPCRat[pid];rid++) if (rpz[0]<fSegRTPCRat[rsegBeg+rid]) break;
    if ( --rid < 0) rid = 0;
    rid +=  rsegBeg;
    //
    // to make sure that due to the precision problems we did not pick the next Zbin    
    if (!reCheck && (rpz[2] - fSegZTPCRat[zid] < 3.e-5) && zid &&
	!GetParamTPCRatInt(fSegIDTPCRat[rid])->IsInside(rpz)) {  // check the previous Z bin
      zid--;
      reCheck = kTRUE;
      continue;
    } 
    break;
  }
  //  AliInfo(Form("%+.2f %+.4f %+.2f %d %d %d %4d",rpz[0],rpz[1],rpz[2],rid,pid,zid,fSegIDTPCRat[rid]));
  return fSegIDTPCRat[rid];
}


//__________________________________________________________________________________________
void AliMagWrapCheb::GetTPCInt(const Double_t *xyz, Double_t *b) const
{
  // compute TPC region field integral in cartesian coordinates.
  // If point is outside of the parameterized region get it at closeset valid point
  static Double_t rphiz[3];
  //
  // TPCInt region
  // convert coordinates to cyl system
  CartToCyl(xyz,rphiz);
#ifndef _BRING_TO_BOUNDARY_
  if ( (rphiz[2]>GetMaxZTPCInt()||rphiz[2]<GetMinZTPCInt()) ||
       rphiz[0]>GetMaxRTPCInt()) {for (int i=3;i--;) b[i]=0; return;}
#endif
  //
  GetTPCIntCyl(rphiz,b);
  //
  // convert field to cartesian system
  CylToCartCylB(rphiz, b,b);
  //
}

//__________________________________________________________________________________________
void AliMagWrapCheb::GetTPCRatInt(const Double_t *xyz, Double_t *b) const
{
  // compute TPCRat region field integral in cartesian coordinates.
  // If point is outside of the parameterized region get it at closeset valid point
  static Double_t rphiz[3];
  //
  // TPCRatInt region
  // convert coordinates to cyl system
  CartToCyl(xyz,rphiz);
#ifndef _BRING_TO_BOUNDARY_
  if ( (rphiz[2]>GetMaxZTPCRatInt()||rphiz[2]<GetMinZTPCRatInt()) ||
       rphiz[0]>GetMaxRTPCRatInt()) {for (int i=3;i--;) b[i]=0; return;}
#endif
  //
  GetTPCRatIntCyl(rphiz,b);
  //
  // convert field to cartesian system
  CylToCartCylB(rphiz, b,b);
  //
}

//__________________________________________________________________________________________
void AliMagWrapCheb::FieldCylSol(const Double_t *rphiz, Double_t *b) const
{
  // compute Solenoid field in Cylindircal coordinates
  // note: if the point is outside the volume get the field in closest parameterized point
  int id = FindSolSegment(rphiz);
  if (id>=0) {
#ifndef _MAGCHEB_CACHE_
    AliCheb3D* fCacheSol = 0;
#endif
    fCacheSol = GetParamSol(id);
    //
#ifndef _BRING_TO_BOUNDARY_  // exact matching to fitted volume is requested  
    if (!fCacheSol->IsInside(rphiz)) return;
#endif
    fCacheSol->Eval(rphiz,b);
  }
  //
}

//__________________________________________________________________________________________
Double_t AliMagWrapCheb::FieldCylSolBz(const Double_t *rphiz) const
{
  // compute Solenoid field in Cylindircal coordinates
  // note: if the point is outside the volume get the field in closest parameterized point
  int id = FindSolSegment(rphiz);
  if (id<0) return 0.;
  //
#ifndef _MAGCHEB_CACHE_
  AliCheb3D* fCacheSol = 0;
#endif
  //
  fCacheSol = GetParamSol(id);
#ifndef _BRING_TO_BOUNDARY_  
  return fCacheSol->IsInside(rphiz) ? fCacheSol->Eval(rphiz,2) : 0;
#else
  return fCacheSol->Eval(rphiz,2);
#endif
  //
}

//__________________________________________________________________________________________
void AliMagWrapCheb::GetTPCIntCyl(const Double_t *rphiz, Double_t *b) const
{
  // compute field integral in TPC region in Cylindircal coordinates
  // note: the check for the point being inside the parameterized region is done outside
  //
#ifdef _MAGCHEB_CACHE_
  //  
  if (fCacheTPCInt && fCacheTPCInt->IsInside(rphiz)) {
    fCacheTPCInt->Eval(rphiz,b);
    return;
  }
#else //_MAGCHEB_CACHE_
  AliCheb3D* fCacheTPCInt = 0; 
#endif //_MAGCHEB_CACHE_
  //
  int id = FindTPCSegment(rphiz);
  if (id>=0) {
    //    if (id>=fNParamsTPC) {
    //      b[0] = b[1] = b[2] = 0;
    //      AliError(Form("Wrong TPCParam segment %d",id));
    //      b[0] = b[1] = b[2] = 0;
    //      return;
    //    }
    fCacheTPCInt = GetParamTPCInt(id);
    if (fCacheTPCInt->IsInside(rphiz)) {
      fCacheTPCInt->Eval(rphiz,b); 
      return;
    }
  }
  //
  b[0] = b[1] = b[2] = 0;
  //
}

//__________________________________________________________________________________________
void AliMagWrapCheb::GetTPCRatIntCyl(const Double_t *rphiz, Double_t *b) const
{
  // compute field integral in TPCRat region in Cylindircal coordinates
  // note: the check for the point being inside the parameterized region is done outside
  //
#ifdef _MAGCHEB_CACHE_
  if (fCacheTPCRat && fCacheTPCRat->IsInside(rphiz)) {
    fCacheTPCRat->Eval(rphiz,b);
    return;
  }
#else 
  AliCheb3D* fCacheTPCRat = 0;
#endif //_MAGCHEB_CACHE_
  //
  int id = FindTPCRatSegment(rphiz);
  if (id>=0) {
    //    if (id>=fNParamsTPCRat) {
    //      AliError(Form("Wrong TPCRatParam segment %d",id));
    //      b[0] = b[1] = b[2] = 0;
    //      return;
    //    }
    fCacheTPCRat = GetParamTPCRatInt(id);
    if (fCacheTPCRat->IsInside(rphiz)) {
      fCacheTPCRat->Eval(rphiz,b); 
      return;
    }
  }
  //
  b[0] = b[1] = b[2] = 0;
  //
}


#ifdef  _INC_CREATION_ALICHEB3D_
//_______________________________________________
void AliMagWrapCheb::LoadData(const char* inpfile)
{
  // read coefficients data from the text file
  //
  TString strf = inpfile;
  gSystem->ExpandPathName(strf);
  FILE* stream = fopen(strf,"r");
  if (!stream) {
    printf("Did not find input file %s\n",strf.Data());
    return;
  }
  //
  TString buffs;
  AliCheb3DCalc::ReadLine(buffs,stream);
  if (!buffs.BeginsWith("START")) AliFatalF("Expected: \"START <name>\", found \"%s\"",buffs.Data());
  if (buffs.First(' ')>0) SetName(buffs.Data()+buffs.First(' ')+1);
  //
  // Solenoid part    -----------------------------------------------------------
  AliCheb3DCalc::ReadLine(buffs,stream);
  if (!buffs.BeginsWith("START SOLENOID")) AliFatalF("Expected: \"START SOLENOID\", found \"%s\"",buffs.Data());
  AliCheb3DCalc::ReadLine(buffs,stream); // nparam
  int nparSol = buffs.Atoi(); 
  //
  for (int ip=0;ip<nparSol;ip++) {
    AliCheb3D* cheb = new AliCheb3D();
    cheb->LoadData(stream);
    AddParamSol(cheb);
  }
  //
  AliCheb3DCalc::ReadLine(buffs,stream);
  if (!buffs.BeginsWith("END SOLENOID")) AliFatalF("Expected \"END SOLENOID\", found \"%s\"",buffs.Data());
  //
  // TPCInt part     -----------------------------------------------------------
  AliCheb3DCalc::ReadLine(buffs,stream);
  if (!buffs.BeginsWith("START TPCINT")) AliFatalF("Expected: \"START TPCINT\", found \"%s\"",buffs.Data());
  //
  AliCheb3DCalc::ReadLine(buffs,stream); // nparam
  int nparTPCInt = buffs.Atoi(); 
  //
  for (int ip=0;ip<nparTPCInt;ip++) {
    AliCheb3D* cheb = new AliCheb3D();
    cheb->LoadData(stream);
    AddParamTPCInt(cheb);
  }
  //
  AliCheb3DCalc::ReadLine(buffs,stream);
  if (!buffs.BeginsWith("END TPCINT")) AliFatalF("Expected \"END TPCINT\", found \"%s\"",buffs.Data());
  //
  // TPCRatInt part     -----------------------------------------------------------
  AliCheb3DCalc::ReadLine(buffs,stream);
  if (!buffs.BeginsWith("START TPCRatINT")) AliFatalF("Expected: \"START TPCRatINT\", found \"%s\"",buffs.Data());
  AliCheb3DCalc::ReadLine(buffs,stream); // nparam
  int nparTPCRatInt = buffs.Atoi(); 
  //
  for (int ip=0;ip<nparTPCRatInt;ip++) {
    AliCheb3D* cheb = new AliCheb3D();
    cheb->LoadData(stream);
    AddParamTPCRatInt(cheb);
  }
  //
  AliCheb3DCalc::ReadLine(buffs,stream);
  if (!buffs.BeginsWith("END TPCRatINT")) AliFatalF("Expected \"END TPCRatINT\", found \"%s\"",buffs.Data());
  //
  // Dipole part    -----------------------------------------------------------
  AliCheb3DCalc::ReadLine(buffs,stream);
  if (!buffs.BeginsWith("START DIPOLE")) AliFatalF("Expected: \"START DIPOLE\", found \"%s\"",buffs.Data());
  //
  AliCheb3DCalc::ReadLine(buffs,stream); // nparam
  int nparDip = buffs.Atoi();  
  //
  for (int ip=0;ip<nparDip;ip++) {
    AliCheb3D* cheb = new AliCheb3D();
    cheb->LoadData(stream);
    AddParamDip(cheb);
  }
  //
  AliCheb3DCalc::ReadLine(buffs,stream);
  if (!buffs.BeginsWith("END DIPOLE")) AliFatalF("Expected \"END DIPOLE\", found \"%s\"",buffs.Data());
  //
  AliCheb3DCalc::ReadLine(buffs,stream);
  if (!buffs.BeginsWith("END ") && !buffs.Contains(GetName())) AliFatalF("Expected: \"END %s\", found \"%s\"",GetName(),buffs.Data());
  //
  // ---------------------------------------------------------------------------
  fclose(stream);
  BuildTableSol();
  BuildTableDip();
  BuildTableTPCInt();
  BuildTableTPCRatInt();
  //
  printf("Loaded magnetic field \"%s\" from %s\n",GetName(),strf.Data());
  //
}

//__________________________________________________________________________________________
void AliMagWrapCheb::BuildTableSol()
{
  // build lookup table
  BuildTable(fNParamsSol,fParamsSol,
	     fNZSegSol,fNPSegSol,fNRSegSol,
	     fMinZSol,fMaxZSol, 
	     &fSegZSol,&fSegPSol,&fSegRSol,
	     &fBegSegPSol,&fNSegPSol,
	     &fBegSegRSol,&fNSegRSol, 
	     &fSegIDSol);
}

//__________________________________________________________________________________________
void AliMagWrapCheb::BuildTableDip()
{
  // build lookup table
  BuildTable(fNParamsDip,fParamsDip,
	     fNZSegDip,fNYSegDip,fNXSegDip,
	     fMinZDip,fMaxZDip, 
	     &fSegZDip,&fSegYDip,&fSegXDip,
	     &fBegSegYDip,&fNSegYDip,
	     &fBegSegXDip,&fNSegXDip, 
	     &fSegIDDip);
}

//__________________________________________________________________________________________
void AliMagWrapCheb::BuildTableTPCInt()
{
  // build lookup table
  BuildTable(fNParamsTPC,fParamsTPC,
	     fNZSegTPC,fNPSegTPC,fNRSegTPC,
	     fMinZTPC,fMaxZTPC, 
	     &fSegZTPC,&fSegPTPC,&fSegRTPC,
	     &fBegSegPTPC,&fNSegPTPC,
	     &fBegSegRTPC,&fNSegRTPC, 
	     &fSegIDTPC);
}

//__________________________________________________________________________________________
void AliMagWrapCheb::BuildTableTPCRatInt()
{
  // build lookup table
  BuildTable(fNParamsTPCRat,fParamsTPCRat,
	     fNZSegTPCRat,fNPSegTPCRat,fNRSegTPCRat,
	     fMinZTPCRat,fMaxZTPCRat, 
	     &fSegZTPCRat,&fSegPTPCRat,&fSegRTPCRat,
	     &fBegSegPTPCRat,&fNSegPTPCRat,
	     &fBegSegRTPCRat,&fNSegRTPCRat, 
	     &fSegIDTPCRat);
}

#endif

//_______________________________________________
#ifdef  _INC_CREATION_ALICHEB3D_

//__________________________________________________________________________________________
AliMagWrapCheb::AliMagWrapCheb(const char* inputFile) : 
  fNParamsSol(0),fNZSegSol(0),fNPSegSol(0),fNRSegSol(0),
  fSegZSol(0),fSegPSol(0),fSegRSol(0),
  fBegSegPSol(0),fNSegPSol(0),fBegSegRSol(0),fNSegRSol(0),fSegIDSol(0),fMinZSol(1.e6),fMaxZSol(-1.e6),fParamsSol(0),fMaxRSol(0),
//
  fNParamsTPC(0),fNZSegTPC(0),fNPSegTPC(0),fNRSegTPC(0),
  fSegZTPC(0),fSegPTPC(0),fSegRTPC(0),
  fBegSegPTPC(0),fNSegPTPC(0),fBegSegRTPC(0),fNSegRTPC(0),fSegIDTPC(0),fMinZTPC(1.e6),fMaxZTPC(-1.e6),fParamsTPC(0),fMaxRTPC(0),
//
  fNParamsTPCRat(0),fNZSegTPCRat(0),fNPSegTPCRat(0),fNRSegTPCRat(0),
  fSegZTPCRat(0),fSegPTPCRat(0),fSegRTPCRat(0),
  fBegSegPTPCRat(0),fNSegPTPCRat(0),fBegSegRTPCRat(0),fNSegRTPCRat(0),fSegIDTPCRat(0),fMinZTPCRat(1.e6),fMaxZTPCRat(-1.e6),fParamsTPCRat(0),fMaxRTPCRat(0),
//
  fNParamsDip(0),fNZSegDip(0),fNYSegDip(0),fNXSegDip(0),
  fSegZDip(0),fSegYDip(0),fSegXDip(0),
  fBegSegYDip(0),fNSegYDip(0),fBegSegXDip(0),fNSegXDip(0),fSegIDDip(0),fMinZDip(1.e6),fMaxZDip(-1.e6),fParamsDip(0)
#ifdef _MAGCHEB_CACHE_
  ,fCacheSol(0),fCacheDip(0),fCacheTPCInt(0),fCacheTPCRat(0)
#endif
//
{
  // construct from coeffs from the text file
  LoadData(inputFile);
}

//__________________________________________________________________________________________
void AliMagWrapCheb::AddParamSol(const AliCheb3D* param)
{
  // adds new parameterization piece for Sol
  // NOTE: pieces must be added strictly in increasing R then increasing Z order
  //
  if (!fParamsSol) fParamsSol = new TObjArray();
  fParamsSol->Add( (AliCheb3D*)param );
  fNParamsSol++;
  if (fMaxRSol<param->GetBoundMax(0)) fMaxRSol = param->GetBoundMax(0);
  //
}

//__________________________________________________________________________________________
void AliMagWrapCheb::AddParamTPCInt(const AliCheb3D* param)
{
  // adds new parameterization piece for TPCInt
  // NOTE: pieces must be added strictly in increasing R then increasing Z order
  //
  if (!fParamsTPC) fParamsTPC = new TObjArray();
  fParamsTPC->Add( (AliCheb3D*)param);
  fNParamsTPC++;
  if (fMaxRTPC<param->GetBoundMax(0)) fMaxRTPC = param->GetBoundMax(0);
  //
}

//__________________________________________________________________________________________
void AliMagWrapCheb::AddParamTPCRatInt(const AliCheb3D* param)
{
  // adds new parameterization piece for TPCRatInt
  // NOTE: pieces must be added strictly in increasing R then increasing Z order
  //
  if (!fParamsTPCRat) fParamsTPCRat = new TObjArray();
  fParamsTPCRat->Add( (AliCheb3D*)param);
  fNParamsTPCRat++;
  if (fMaxRTPCRat<param->GetBoundMax(0)) fMaxRTPCRat = param->GetBoundMax(0);
  //
}

//__________________________________________________________________________________________
void AliMagWrapCheb::AddParamDip(const AliCheb3D* param)
{
  // adds new parameterization piece for Dipole
  //
  if (!fParamsDip) fParamsDip = new TObjArray();
  fParamsDip->Add( (AliCheb3D*)param);
  fNParamsDip++;
  //
}

//__________________________________________________________________________________________
void AliMagWrapCheb::ResetDip()
{
  // clean Dip field (used for update)
  if (fNParamsDip) {
    delete   fParamsDip;  fParamsDip = 0;
    delete[] fSegZDip;    fSegZDip   = 0;
    delete[] fSegXDip;    fSegXDip   = 0;
    delete[] fSegYDip;    fSegYDip   = 0;
    delete[] fBegSegYDip; fBegSegYDip = 0;
    delete[] fNSegYDip;   fNSegYDip   = 0;
    delete[] fBegSegXDip; fBegSegXDip = 0;
    delete[] fNSegXDip;   fNSegXDip   = 0;
    delete[] fSegIDDip;   fSegIDDip   = 0;   
  }
  fNParamsDip = fNZSegDip = fNXSegDip = fNYSegDip = 0;
  fMinZDip = 1e6;
  fMaxZDip = -1e6;
  //
}

//__________________________________________________________________________________________
void AliMagWrapCheb::ResetSol()
{
  // clean Sol field (used for update)
  if (fNParamsSol) {
    delete   fParamsSol;  fParamsSol = 0;
    delete[] fSegZSol;    fSegZSol   = 0;
    delete[] fSegPSol;    fSegPSol   = 0;
    delete[] fSegRSol;    fSegRSol   = 0;
    delete[] fBegSegPSol; fBegSegPSol = 0;
    delete[] fNSegPSol;   fNSegPSol   = 0;
    delete[] fBegSegRSol; fBegSegRSol = 0;
    delete[] fNSegRSol;   fNSegRSol   = 0;
    delete[] fSegIDSol;   fSegIDSol   = 0;   
  }
  fNParamsSol = fNZSegSol = fNPSegSol = fNRSegSol = 0;
  fMinZSol = 1e6;
  fMaxZSol = -1e6;
  fMaxRSol = 0;
  //
}

//__________________________________________________________________________________________
void AliMagWrapCheb::ResetTPCInt()
{
  // clean TPC field integral (used for update)
  if (fNParamsTPC) {
    delete   fParamsTPC;  fParamsTPC = 0;
    delete[] fSegZTPC;    fSegZTPC   = 0;
    delete[] fSegPTPC;    fSegPTPC   = 0;
    delete[] fSegRTPC;    fSegRTPC   = 0;
    delete[] fBegSegPTPC; fBegSegPTPC = 0;
    delete[] fNSegPTPC;   fNSegPTPC   = 0;
    delete[] fBegSegRTPC; fBegSegRTPC = 0;
    delete[] fNSegRTPC;   fNSegRTPC   = 0;
    delete[] fSegIDTPC;   fSegIDTPC   = 0;   
  }
  fNParamsTPC = fNZSegTPC = fNPSegTPC = fNRSegTPC = 0;
  fMinZTPC = 1e6;
  fMaxZTPC = -1e6;
  fMaxRTPC = 0;
  //
}

//__________________________________________________________________________________________
void AliMagWrapCheb::ResetTPCRatInt()
{
  // clean TPCRat field integral (used for update)
  if (fNParamsTPCRat) {
    delete   fParamsTPCRat;  fParamsTPCRat = 0;
    delete[] fSegZTPCRat;    fSegZTPCRat   = 0;
    delete[] fSegPTPCRat;    fSegPTPCRat   = 0;
    delete[] fSegRTPCRat;    fSegRTPCRat   = 0;
    delete[] fBegSegPTPCRat; fBegSegPTPCRat = 0;
    delete[] fNSegPTPCRat;   fNSegPTPCRat   = 0;
    delete[] fBegSegRTPCRat; fBegSegRTPCRat = 0;
    delete[] fNSegRTPCRat;   fNSegRTPCRat   = 0;
    delete[] fSegIDTPCRat;   fSegIDTPCRat   = 0;   
  }
  fNParamsTPCRat = fNZSegTPCRat = fNPSegTPCRat = fNRSegTPCRat = 0;
  fMinZTPCRat = 1e6;
  fMaxZTPCRat = -1e6;
  fMaxRTPCRat = 0;
  //
}


//__________________________________________________
void AliMagWrapCheb::BuildTable(Int_t npar,TObjArray *parArr, Int_t &nZSeg, Int_t &nYSeg, Int_t &nXSeg,
				Float_t &minZ,Float_t &maxZ,
				Float_t **segZ,Float_t **segY,Float_t **segX,
				Int_t **begSegY,Int_t **nSegY,
				Int_t **begSegX,Int_t **nSegX,
				Int_t **segID)
{
  // build lookup table for dipole
  //
  if (npar<1) return;
  TArrayF segYArr,segXArr;
  TArrayI begSegYDipArr,begSegXDipArr;
  TArrayI nSegYDipArr,nSegXDipArr;
  TArrayI segIDArr;
  float *tmpSegZ,*tmpSegY,*tmpSegX;
  //
  // create segmentation in Z
  nZSeg = SegmentDimension(&tmpSegZ, parArr, npar, 2, 1,-1, 1,-1, 1,-1) - 1;
  nYSeg = 0;
  nXSeg = 0;
  //
  // for each Z slice create segmentation in Y
  begSegYDipArr.Set(nZSeg);
  nSegYDipArr.Set(nZSeg);
  float xyz[3];
  for (int iz=0;iz<nZSeg;iz++) {
    printf("\nZSegment#%d  %+e : %+e\n",iz,tmpSegZ[iz],tmpSegZ[iz+1]);
    int ny = SegmentDimension(&tmpSegY, parArr, npar, 1, 
			      1,-1, 1,-1, tmpSegZ[iz],tmpSegZ[iz+1]) - 1;
    segYArr.Set(ny + nYSeg);
    for (int iy=0;iy<ny;iy++) segYArr[nYSeg+iy] = tmpSegY[iy];
    begSegYDipArr[iz] = nYSeg;
    nSegYDipArr[iz] = ny;
    printf(" Found %d YSegments, to start from %d\n",ny, begSegYDipArr[iz]);
    //
    // for each slice in Z and Y create segmentation in X
    begSegXDipArr.Set(nYSeg+ny);
    nSegXDipArr.Set(nYSeg+ny);
    xyz[2] = (tmpSegZ[iz]+tmpSegZ[iz+1])/2.; // mean Z of this segment
    //
    for (int iy=0;iy<ny;iy++) {
      int isg = nYSeg+iy;
      printf("\n   YSegment#%d  %+e : %+e\n",iy, tmpSegY[iy],tmpSegY[iy+1]);
      int nx = SegmentDimension(&tmpSegX, parArr, npar, 0, 
				1,-1, tmpSegY[iy],tmpSegY[iy+1], tmpSegZ[iz],tmpSegZ[iz+1]) - 1;
      //
      segXArr.Set(nx + nXSeg);
      for (int ix=0;ix<nx;ix++) segXArr[nXSeg+ix] = tmpSegX[ix];
      begSegXDipArr[isg] = nXSeg;
      nSegXDipArr[isg] = nx;
      printf("   Found %d XSegments, to start from %d\n",nx, begSegXDipArr[isg]);
      //
      segIDArr.Set(nXSeg+nx);
      //
      // find corresponding params
      xyz[1] = (tmpSegY[iy]+tmpSegY[iy+1])/2.; // mean Y of this segment
      //
      for (int ix=0;ix<nx;ix++) {
	xyz[0] = (tmpSegX[ix]+tmpSegX[ix+1])/2.; // mean X of this segment
	for (int ipar=0;ipar<npar;ipar++) {
	  AliCheb3D* cheb = (AliCheb3D*) parArr->At(ipar);
	  if (!cheb->IsInside(xyz)) continue;
	  segIDArr[nXSeg+ix] = ipar;
	  break;
	}
      }
      nXSeg += nx;
      //
      delete[] tmpSegX;
    }
    delete[] tmpSegY;
    nYSeg += ny;
  }
  //
  minZ = tmpSegZ[0];
  maxZ = tmpSegZ[nZSeg];
  (*segZ)  = new Float_t[nZSeg];
  for (int i=nZSeg;i--;) (*segZ)[i] = tmpSegZ[i];
  delete[] tmpSegZ;
  //
  (*segY)    = new Float_t[nYSeg];
  (*segX)    = new Float_t[nXSeg];
  (*begSegY) = new Int_t[nZSeg];
  (*nSegY)   = new Int_t[nZSeg];
  (*begSegX) = new Int_t[nYSeg];
  (*nSegX)   = new Int_t[nYSeg];
  (*segID)   = new Int_t[nXSeg];
  //
  for (int i=nYSeg;i--;) (*segY)[i] = segYArr[i];
  for (int i=nXSeg;i--;) (*segX)[i] = segXArr[i];
  for (int i=nZSeg;i--;) {(*begSegY)[i] = begSegYDipArr[i]; (*nSegY)[i] = nSegYDipArr[i];}
  for (int i=nYSeg;i--;) {(*begSegX)[i] = begSegXDipArr[i]; (*nSegX)[i] = nSegXDipArr[i];}
  for (int i=nXSeg;i--;) {(*segID)[i]   = segIDArr[i];}
  //
}

/*
//__________________________________________________
void AliMagWrapCheb::BuildTableDip()
{
  // build lookup table for dipole
  //
  if (fNParamsDip<1) return;
  TArrayF segY,segX;
  TArrayI begSegYDip,begSegXDip;
  TArrayI nsegYDip,nsegXDip;
  TArrayI segID;
  float *tmpSegZ,*tmpSegY,*tmpSegX;
  //
  // create segmentation in Z
  fNZSegDip = SegmentDimension(&tmpSegZ, fParamsDip, fNParamsDip, 2, 1,-1, 1,-1, 1,-1) - 1;
  fNYSegDip = 0;
  fNXSegDip = 0;
  //
  // for each Z slice create segmentation in Y
  begSegYDip.Set(fNZSegDip);
  nsegYDip.Set(fNZSegDip);
  float xyz[3];
  for (int iz=0;iz<fNZSegDip;iz++) {
    printf("\nZSegment#%d  %+e : %+e\n",iz,tmpSegZ[iz],tmpSegZ[iz+1]);
    int ny = SegmentDimension(&tmpSegY, fParamsDip, fNParamsDip, 1, 
				 1,-1, 1,-1, tmpSegZ[iz],tmpSegZ[iz+1]) - 1;
    segY.Set(ny + fNYSegDip);
    for (int iy=0;iy<ny;iy++) segY[fNYSegDip+iy] = tmpSegY[iy];
    begSegYDip[iz] = fNYSegDip;
    nsegYDip[iz] = ny;
    printf(" Found %d YSegments, to start from %d\n",ny, begSegYDip[iz]);
    //
    // for each slice in Z and Y create segmentation in X
    begSegXDip.Set(fNYSegDip+ny);
    nsegXDip.Set(fNYSegDip+ny);
    xyz[2] = (tmpSegZ[iz]+tmpSegZ[iz+1])/2.; // mean Z of this segment
    //
    for (int iy=0;iy<ny;iy++) {
      int isg = fNYSegDip+iy;
      printf("\n   YSegment#%d  %+e : %+e\n",iy, tmpSegY[iy],tmpSegY[iy+1]);
      int nx = SegmentDimension(&tmpSegX, fParamsDip, fNParamsDip, 0, 
				1,-1, tmpSegY[iy],tmpSegY[iy+1], tmpSegZ[iz],tmpSegZ[iz+1]) - 1;
      //
      segX.Set(nx + fNXSegDip);
      for (int ix=0;ix<nx;ix++) segX[fNXSegDip+ix] = tmpSegX[ix];
      begSegXDip[isg] = fNXSegDip;
      nsegXDip[isg] = nx;
      printf("   Found %d XSegments, to start from %d\n",nx, begSegXDip[isg]);
      //
      segID.Set(fNXSegDip+nx);
      //
      // find corresponding params
      xyz[1] = (tmpSegY[iy]+tmpSegY[iy+1])/2.; // mean Y of this segment
      //
      for (int ix=0;ix<nx;ix++) {
	xyz[0] = (tmpSegX[ix]+tmpSegX[ix+1])/2.; // mean X of this segment
	for (int ipar=0;ipar<fNParamsDip;ipar++) {
	  AliCheb3D* cheb = (AliCheb3D*) fParamsDip->At(ipar);
	  if (!cheb->IsInside(xyz)) continue;
	  segID[fNXSegDip+ix] = ipar;
	  break;
	}
      }
      fNXSegDip += nx;
      //
      delete[] tmpSegX;
    }
    delete[] tmpSegY;
    fNYSegDip += ny;
  }
  //
  fMinZDip = tmpSegZ[0];
  fMaxZDip = tmpSegZ[fNZSegDip];
  fSegZDip    = new Float_t[fNZSegDip];
  for (int i=fNZSegDip;i--;) fSegZDip[i] = tmpSegZ[i];
  delete[] tmpSegZ;
  //
  fSegYDip    = new Float_t[fNYSegDip];
  fSegXDip    = new Float_t[fNXSegDip];
  fBegSegYDip = new Int_t[fNZSegDip];
  fNSegYDip   = new Int_t[fNZSegDip];
  fBegSegXDip = new Int_t[fNYSegDip];
  fNSegXDip   = new Int_t[fNYSegDip];
  fSegIDDip   = new Int_t[fNXSegDip];
  //
  for (int i=fNYSegDip;i--;) fSegYDip[i] = segY[i];
  for (int i=fNXSegDip;i--;) fSegXDip[i] = segX[i];
  for (int i=fNZSegDip;i--;) {fBegSegYDip[i] = begSegYDip[i]; fNSegYDip[i] = nsegYDip[i];}
  for (int i=fNYSegDip;i--;) {fBegSegXDip[i] = begSegXDip[i]; fNSegXDip[i] = nsegXDip[i];}
  for (int i=fNXSegDip;i--;) {fSegIDDip[i]   = segID[i];}
  //
}
*/

//________________________________________________________________
void AliMagWrapCheb::SaveData(const char* outfile) const
{
  // writes coefficients data to output text file
  TString strf = outfile;
  gSystem->ExpandPathName(strf);
  FILE* stream = fopen(strf,"w+");
  //
  // Sol part    ---------------------------------------------------------
  fprintf(stream,"# Set of Chebyshev parameterizations for ALICE magnetic field\nSTART %s\n",GetName());
  fprintf(stream,"START SOLENOID\n#Number of pieces\n%d\n",fNParamsSol);
  for (int ip=0;ip<fNParamsSol;ip++) GetParamSol(ip)->SaveData(stream);
  fprintf(stream,"#\nEND SOLENOID\n");
  //
  // TPCInt part ---------------------------------------------------------
  //  fprintf(stream,"# Set of Chebyshev parameterizations for ALICE magnetic field\nSTART %s\n",GetName());
  fprintf(stream,"START TPCINT\n#Number of pieces\n%d\n",fNParamsTPC);
  for (int ip=0;ip<fNParamsTPC;ip++) GetParamTPCInt(ip)->SaveData(stream);
  fprintf(stream,"#\nEND TPCINT\n");
  //
  // TPCRatInt part ---------------------------------------------------------
  //  fprintf(stream,"# Set of Chebyshev parameterizations for ALICE magnetic field\nSTART %s\n",GetName());
  fprintf(stream,"START TPCRatINT\n#Number of pieces\n%d\n",fNParamsTPCRat);
  for (int ip=0;ip<fNParamsTPCRat;ip++) GetParamTPCRatInt(ip)->SaveData(stream);
  fprintf(stream,"#\nEND TPCRatINT\n");
  //
  // Dip part   ---------------------------------------------------------
  fprintf(stream,"START DIPOLE\n#Number of pieces\n%d\n",fNParamsDip);
  for (int ip=0;ip<fNParamsDip;ip++) GetParamDip(ip)->SaveData(stream);
  fprintf(stream,"#\nEND DIPOLE\n");
  //
  fprintf(stream,"#\nEND %s\n",GetName());
  //
  fclose(stream);
  //
}

Int_t AliMagWrapCheb::SegmentDimension(float** seg,const TObjArray* par,int npar, int dim, 
				       float xmn,float xmx,float ymn,float ymx,float zmn,float zmx)
{
  // find all boundaries in deimension dim for boxes in given region.
  // if mn>mx for given projection the check is not done for it.
  float *tmpC = new float[2*npar];
  int *tmpInd = new int[2*npar];
  int nseg0 = 0;
  for (int ip=0;ip<npar;ip++) {
    AliCheb3D* cheb = (AliCheb3D*) par->At(ip);
    if (xmn<xmx && (cheb->GetBoundMin(0)>(xmx+xmn)/2 || cheb->GetBoundMax(0)<(xmn+xmx)/2)) continue;
    if (ymn<ymx && (cheb->GetBoundMin(1)>(ymx+ymn)/2 || cheb->GetBoundMax(1)<(ymn+ymx)/2)) continue;
    if (zmn<zmx && (cheb->GetBoundMin(2)>(zmx+zmn)/2 || cheb->GetBoundMax(2)<(zmn+zmx)/2)) continue;
    //
    tmpC[nseg0++] = cheb->GetBoundMin(dim);
    tmpC[nseg0++] = cheb->GetBoundMax(dim);    
  }
  // range Dim's boundaries in increasing order
  TMath::Sort(nseg0,tmpC,tmpInd,kFALSE);
  // count number of really different Z's
  int nseg = 0;
  float cprev = -1e6;
  for (int ip=0;ip<nseg0;ip++) {
    if (TMath::Abs(cprev-tmpC[ tmpInd[ip] ])>1e-4) {
      cprev = tmpC[ tmpInd[ip] ];
      nseg++;
    }
    else tmpInd[ip] = -1; // supress redundant Z
  }
  // 
  *seg  = new float[nseg]; // create final Z segmenations
  nseg = 0;
  for (int ip=0;ip<nseg0;ip++) if (tmpInd[ip]>=0) (*seg)[nseg++] = tmpC[ tmpInd[ip] ];
  //
  delete[] tmpC;
  delete[] tmpInd;
  return nseg;
}

#endif

 AliMagWrapCheb.cxx:1
 AliMagWrapCheb.cxx:2
 AliMagWrapCheb.cxx:3
 AliMagWrapCheb.cxx:4
 AliMagWrapCheb.cxx:5
 AliMagWrapCheb.cxx:6
 AliMagWrapCheb.cxx:7
 AliMagWrapCheb.cxx:8
 AliMagWrapCheb.cxx:9
 AliMagWrapCheb.cxx:10
 AliMagWrapCheb.cxx:11
 AliMagWrapCheb.cxx:12
 AliMagWrapCheb.cxx:13
 AliMagWrapCheb.cxx:14
 AliMagWrapCheb.cxx:15
 AliMagWrapCheb.cxx:16
 AliMagWrapCheb.cxx:17
 AliMagWrapCheb.cxx:18
 AliMagWrapCheb.cxx:19
 AliMagWrapCheb.cxx:20
 AliMagWrapCheb.cxx:21
 AliMagWrapCheb.cxx:22
 AliMagWrapCheb.cxx:23
 AliMagWrapCheb.cxx:24
 AliMagWrapCheb.cxx:25
 AliMagWrapCheb.cxx:26
 AliMagWrapCheb.cxx:27
 AliMagWrapCheb.cxx:28
 AliMagWrapCheb.cxx:29
 AliMagWrapCheb.cxx:30
 AliMagWrapCheb.cxx:31
 AliMagWrapCheb.cxx:32
 AliMagWrapCheb.cxx:33
 AliMagWrapCheb.cxx:34
 AliMagWrapCheb.cxx:35
 AliMagWrapCheb.cxx:36
 AliMagWrapCheb.cxx:37
 AliMagWrapCheb.cxx:38
 AliMagWrapCheb.cxx:39
 AliMagWrapCheb.cxx:40
 AliMagWrapCheb.cxx:41
 AliMagWrapCheb.cxx:42
 AliMagWrapCheb.cxx:43
 AliMagWrapCheb.cxx:44
 AliMagWrapCheb.cxx:45
 AliMagWrapCheb.cxx:46
 AliMagWrapCheb.cxx:47
 AliMagWrapCheb.cxx:48
 AliMagWrapCheb.cxx:49
 AliMagWrapCheb.cxx:50
 AliMagWrapCheb.cxx:51
 AliMagWrapCheb.cxx:52
 AliMagWrapCheb.cxx:53
 AliMagWrapCheb.cxx:54
 AliMagWrapCheb.cxx:55
 AliMagWrapCheb.cxx:56
 AliMagWrapCheb.cxx:57
 AliMagWrapCheb.cxx:58
 AliMagWrapCheb.cxx:59
 AliMagWrapCheb.cxx:60
 AliMagWrapCheb.cxx:61
 AliMagWrapCheb.cxx:62
 AliMagWrapCheb.cxx:63
 AliMagWrapCheb.cxx:64
 AliMagWrapCheb.cxx:65
 AliMagWrapCheb.cxx:66
 AliMagWrapCheb.cxx:67
 AliMagWrapCheb.cxx:68
 AliMagWrapCheb.cxx:69
 AliMagWrapCheb.cxx:70
 AliMagWrapCheb.cxx:71
 AliMagWrapCheb.cxx:72
 AliMagWrapCheb.cxx:73
 AliMagWrapCheb.cxx:74
 AliMagWrapCheb.cxx:75
 AliMagWrapCheb.cxx:76
 AliMagWrapCheb.cxx:77
 AliMagWrapCheb.cxx:78
 AliMagWrapCheb.cxx:79
 AliMagWrapCheb.cxx:80
 AliMagWrapCheb.cxx:81
 AliMagWrapCheb.cxx:82
 AliMagWrapCheb.cxx:83
 AliMagWrapCheb.cxx:84
 AliMagWrapCheb.cxx:85
 AliMagWrapCheb.cxx:86
 AliMagWrapCheb.cxx:87
 AliMagWrapCheb.cxx:88
 AliMagWrapCheb.cxx:89
 AliMagWrapCheb.cxx:90
 AliMagWrapCheb.cxx:91
 AliMagWrapCheb.cxx:92
 AliMagWrapCheb.cxx:93
 AliMagWrapCheb.cxx:94
 AliMagWrapCheb.cxx:95
 AliMagWrapCheb.cxx:96
 AliMagWrapCheb.cxx:97
 AliMagWrapCheb.cxx:98
 AliMagWrapCheb.cxx:99
 AliMagWrapCheb.cxx:100
 AliMagWrapCheb.cxx:101
 AliMagWrapCheb.cxx:102
 AliMagWrapCheb.cxx:103
 AliMagWrapCheb.cxx:104
 AliMagWrapCheb.cxx:105
 AliMagWrapCheb.cxx:106
 AliMagWrapCheb.cxx:107
 AliMagWrapCheb.cxx:108
 AliMagWrapCheb.cxx:109
 AliMagWrapCheb.cxx:110
 AliMagWrapCheb.cxx:111
 AliMagWrapCheb.cxx:112
 AliMagWrapCheb.cxx:113
 AliMagWrapCheb.cxx:114
 AliMagWrapCheb.cxx:115
 AliMagWrapCheb.cxx:116
 AliMagWrapCheb.cxx:117
 AliMagWrapCheb.cxx:118
 AliMagWrapCheb.cxx:119
 AliMagWrapCheb.cxx:120
 AliMagWrapCheb.cxx:121
 AliMagWrapCheb.cxx:122
 AliMagWrapCheb.cxx:123
 AliMagWrapCheb.cxx:124
 AliMagWrapCheb.cxx:125
 AliMagWrapCheb.cxx:126
 AliMagWrapCheb.cxx:127
 AliMagWrapCheb.cxx:128
 AliMagWrapCheb.cxx:129
 AliMagWrapCheb.cxx:130
 AliMagWrapCheb.cxx:131
 AliMagWrapCheb.cxx:132
 AliMagWrapCheb.cxx:133
 AliMagWrapCheb.cxx:134
 AliMagWrapCheb.cxx:135
 AliMagWrapCheb.cxx:136
 AliMagWrapCheb.cxx:137
 AliMagWrapCheb.cxx:138
 AliMagWrapCheb.cxx:139
 AliMagWrapCheb.cxx:140
 AliMagWrapCheb.cxx:141
 AliMagWrapCheb.cxx:142
 AliMagWrapCheb.cxx:143
 AliMagWrapCheb.cxx:144
 AliMagWrapCheb.cxx:145
 AliMagWrapCheb.cxx:146
 AliMagWrapCheb.cxx:147
 AliMagWrapCheb.cxx:148
 AliMagWrapCheb.cxx:149
 AliMagWrapCheb.cxx:150
 AliMagWrapCheb.cxx:151
 AliMagWrapCheb.cxx:152
 AliMagWrapCheb.cxx:153
 AliMagWrapCheb.cxx:154
 AliMagWrapCheb.cxx:155
 AliMagWrapCheb.cxx:156
 AliMagWrapCheb.cxx:157
 AliMagWrapCheb.cxx:158
 AliMagWrapCheb.cxx:159
 AliMagWrapCheb.cxx:160
 AliMagWrapCheb.cxx:161
 AliMagWrapCheb.cxx:162
 AliMagWrapCheb.cxx:163
 AliMagWrapCheb.cxx:164
 AliMagWrapCheb.cxx:165
 AliMagWrapCheb.cxx:166
 AliMagWrapCheb.cxx:167
 AliMagWrapCheb.cxx:168
 AliMagWrapCheb.cxx:169
 AliMagWrapCheb.cxx:170
 AliMagWrapCheb.cxx:171
 AliMagWrapCheb.cxx:172
 AliMagWrapCheb.cxx:173
 AliMagWrapCheb.cxx:174
 AliMagWrapCheb.cxx:175
 AliMagWrapCheb.cxx:176
 AliMagWrapCheb.cxx:177
 AliMagWrapCheb.cxx:178
 AliMagWrapCheb.cxx:179
 AliMagWrapCheb.cxx:180
 AliMagWrapCheb.cxx:181
 AliMagWrapCheb.cxx:182
 AliMagWrapCheb.cxx:183
 AliMagWrapCheb.cxx:184
 AliMagWrapCheb.cxx:185
 AliMagWrapCheb.cxx:186
 AliMagWrapCheb.cxx:187
 AliMagWrapCheb.cxx:188
 AliMagWrapCheb.cxx:189
 AliMagWrapCheb.cxx:190
 AliMagWrapCheb.cxx:191
 AliMagWrapCheb.cxx:192
 AliMagWrapCheb.cxx:193
 AliMagWrapCheb.cxx:194
 AliMagWrapCheb.cxx:195
 AliMagWrapCheb.cxx:196
 AliMagWrapCheb.cxx:197
 AliMagWrapCheb.cxx:198
 AliMagWrapCheb.cxx:199
 AliMagWrapCheb.cxx:200
 AliMagWrapCheb.cxx:201
 AliMagWrapCheb.cxx:202
 AliMagWrapCheb.cxx:203
 AliMagWrapCheb.cxx:204
 AliMagWrapCheb.cxx:205
 AliMagWrapCheb.cxx:206
 AliMagWrapCheb.cxx:207
 AliMagWrapCheb.cxx:208
 AliMagWrapCheb.cxx:209
 AliMagWrapCheb.cxx:210
 AliMagWrapCheb.cxx:211
 AliMagWrapCheb.cxx:212
 AliMagWrapCheb.cxx:213
 AliMagWrapCheb.cxx:214
 AliMagWrapCheb.cxx:215
 AliMagWrapCheb.cxx:216
 AliMagWrapCheb.cxx:217
 AliMagWrapCheb.cxx:218
 AliMagWrapCheb.cxx:219
 AliMagWrapCheb.cxx:220
 AliMagWrapCheb.cxx:221
 AliMagWrapCheb.cxx:222
 AliMagWrapCheb.cxx:223
 AliMagWrapCheb.cxx:224
 AliMagWrapCheb.cxx:225
 AliMagWrapCheb.cxx:226
 AliMagWrapCheb.cxx:227
 AliMagWrapCheb.cxx:228
 AliMagWrapCheb.cxx:229
 AliMagWrapCheb.cxx:230
 AliMagWrapCheb.cxx:231
 AliMagWrapCheb.cxx:232
 AliMagWrapCheb.cxx:233
 AliMagWrapCheb.cxx:234
 AliMagWrapCheb.cxx:235
 AliMagWrapCheb.cxx:236
 AliMagWrapCheb.cxx:237
 AliMagWrapCheb.cxx:238
 AliMagWrapCheb.cxx:239
 AliMagWrapCheb.cxx:240
 AliMagWrapCheb.cxx:241
 AliMagWrapCheb.cxx:242
 AliMagWrapCheb.cxx:243
 AliMagWrapCheb.cxx:244
 AliMagWrapCheb.cxx:245
 AliMagWrapCheb.cxx:246
 AliMagWrapCheb.cxx:247
 AliMagWrapCheb.cxx:248
 AliMagWrapCheb.cxx:249
 AliMagWrapCheb.cxx:250
 AliMagWrapCheb.cxx:251
 AliMagWrapCheb.cxx:252
 AliMagWrapCheb.cxx:253
 AliMagWrapCheb.cxx:254
 AliMagWrapCheb.cxx:255
 AliMagWrapCheb.cxx:256
 AliMagWrapCheb.cxx:257
 AliMagWrapCheb.cxx:258
 AliMagWrapCheb.cxx:259
 AliMagWrapCheb.cxx:260
 AliMagWrapCheb.cxx:261
 AliMagWrapCheb.cxx:262
 AliMagWrapCheb.cxx:263
 AliMagWrapCheb.cxx:264
 AliMagWrapCheb.cxx:265
 AliMagWrapCheb.cxx:266
 AliMagWrapCheb.cxx:267
 AliMagWrapCheb.cxx:268
 AliMagWrapCheb.cxx:269
 AliMagWrapCheb.cxx:270
 AliMagWrapCheb.cxx:271
 AliMagWrapCheb.cxx:272
 AliMagWrapCheb.cxx:273
 AliMagWrapCheb.cxx:274
 AliMagWrapCheb.cxx:275
 AliMagWrapCheb.cxx:276
 AliMagWrapCheb.cxx:277
 AliMagWrapCheb.cxx:278
 AliMagWrapCheb.cxx:279
 AliMagWrapCheb.cxx:280
 AliMagWrapCheb.cxx:281
 AliMagWrapCheb.cxx:282
 AliMagWrapCheb.cxx:283
 AliMagWrapCheb.cxx:284
 AliMagWrapCheb.cxx:285
 AliMagWrapCheb.cxx:286
 AliMagWrapCheb.cxx:287
 AliMagWrapCheb.cxx:288
 AliMagWrapCheb.cxx:289
 AliMagWrapCheb.cxx:290
 AliMagWrapCheb.cxx:291
 AliMagWrapCheb.cxx:292
 AliMagWrapCheb.cxx:293
 AliMagWrapCheb.cxx:294
 AliMagWrapCheb.cxx:295
 AliMagWrapCheb.cxx:296
 AliMagWrapCheb.cxx:297
 AliMagWrapCheb.cxx:298
 AliMagWrapCheb.cxx:299
 AliMagWrapCheb.cxx:300
 AliMagWrapCheb.cxx:301
 AliMagWrapCheb.cxx:302
 AliMagWrapCheb.cxx:303
 AliMagWrapCheb.cxx:304
 AliMagWrapCheb.cxx:305
 AliMagWrapCheb.cxx:306
 AliMagWrapCheb.cxx:307
 AliMagWrapCheb.cxx:308
 AliMagWrapCheb.cxx:309
 AliMagWrapCheb.cxx:310
 AliMagWrapCheb.cxx:311
 AliMagWrapCheb.cxx:312
 AliMagWrapCheb.cxx:313
 AliMagWrapCheb.cxx:314
 AliMagWrapCheb.cxx:315
 AliMagWrapCheb.cxx:316
 AliMagWrapCheb.cxx:317
 AliMagWrapCheb.cxx:318
 AliMagWrapCheb.cxx:319
 AliMagWrapCheb.cxx:320
 AliMagWrapCheb.cxx:321
 AliMagWrapCheb.cxx:322
 AliMagWrapCheb.cxx:323
 AliMagWrapCheb.cxx:324
 AliMagWrapCheb.cxx:325
 AliMagWrapCheb.cxx:326
 AliMagWrapCheb.cxx:327
 AliMagWrapCheb.cxx:328
 AliMagWrapCheb.cxx:329
 AliMagWrapCheb.cxx:330
 AliMagWrapCheb.cxx:331
 AliMagWrapCheb.cxx:332
 AliMagWrapCheb.cxx:333
 AliMagWrapCheb.cxx:334
 AliMagWrapCheb.cxx:335
 AliMagWrapCheb.cxx:336
 AliMagWrapCheb.cxx:337
 AliMagWrapCheb.cxx:338
 AliMagWrapCheb.cxx:339
 AliMagWrapCheb.cxx:340
 AliMagWrapCheb.cxx:341
 AliMagWrapCheb.cxx:342
 AliMagWrapCheb.cxx:343
 AliMagWrapCheb.cxx:344
 AliMagWrapCheb.cxx:345
 AliMagWrapCheb.cxx:346
 AliMagWrapCheb.cxx:347
 AliMagWrapCheb.cxx:348
 AliMagWrapCheb.cxx:349
 AliMagWrapCheb.cxx:350
 AliMagWrapCheb.cxx:351
 AliMagWrapCheb.cxx:352
 AliMagWrapCheb.cxx:353
 AliMagWrapCheb.cxx:354
 AliMagWrapCheb.cxx:355
 AliMagWrapCheb.cxx:356
 AliMagWrapCheb.cxx:357
 AliMagWrapCheb.cxx:358
 AliMagWrapCheb.cxx:359
 AliMagWrapCheb.cxx:360
 AliMagWrapCheb.cxx:361
 AliMagWrapCheb.cxx:362
 AliMagWrapCheb.cxx:363
 AliMagWrapCheb.cxx:364
 AliMagWrapCheb.cxx:365
 AliMagWrapCheb.cxx:366
 AliMagWrapCheb.cxx:367
 AliMagWrapCheb.cxx:368
 AliMagWrapCheb.cxx:369
 AliMagWrapCheb.cxx:370
 AliMagWrapCheb.cxx:371
 AliMagWrapCheb.cxx:372
 AliMagWrapCheb.cxx:373
 AliMagWrapCheb.cxx:374
 AliMagWrapCheb.cxx:375
 AliMagWrapCheb.cxx:376
 AliMagWrapCheb.cxx:377
 AliMagWrapCheb.cxx:378
 AliMagWrapCheb.cxx:379
 AliMagWrapCheb.cxx:380
 AliMagWrapCheb.cxx:381
 AliMagWrapCheb.cxx:382
 AliMagWrapCheb.cxx:383
 AliMagWrapCheb.cxx:384
 AliMagWrapCheb.cxx:385
 AliMagWrapCheb.cxx:386
 AliMagWrapCheb.cxx:387
 AliMagWrapCheb.cxx:388
 AliMagWrapCheb.cxx:389
 AliMagWrapCheb.cxx:390
 AliMagWrapCheb.cxx:391
 AliMagWrapCheb.cxx:392
 AliMagWrapCheb.cxx:393
 AliMagWrapCheb.cxx:394
 AliMagWrapCheb.cxx:395
 AliMagWrapCheb.cxx:396
 AliMagWrapCheb.cxx:397
 AliMagWrapCheb.cxx:398
 AliMagWrapCheb.cxx:399
 AliMagWrapCheb.cxx:400
 AliMagWrapCheb.cxx:401
 AliMagWrapCheb.cxx:402
 AliMagWrapCheb.cxx:403
 AliMagWrapCheb.cxx:404
 AliMagWrapCheb.cxx:405
 AliMagWrapCheb.cxx:406
 AliMagWrapCheb.cxx:407
 AliMagWrapCheb.cxx:408
 AliMagWrapCheb.cxx:409
 AliMagWrapCheb.cxx:410
 AliMagWrapCheb.cxx:411
 AliMagWrapCheb.cxx:412
 AliMagWrapCheb.cxx:413
 AliMagWrapCheb.cxx:414
 AliMagWrapCheb.cxx:415
 AliMagWrapCheb.cxx:416
 AliMagWrapCheb.cxx:417
 AliMagWrapCheb.cxx:418
 AliMagWrapCheb.cxx:419
 AliMagWrapCheb.cxx:420
 AliMagWrapCheb.cxx:421
 AliMagWrapCheb.cxx:422
 AliMagWrapCheb.cxx:423
 AliMagWrapCheb.cxx:424
 AliMagWrapCheb.cxx:425
 AliMagWrapCheb.cxx:426
 AliMagWrapCheb.cxx:427
 AliMagWrapCheb.cxx:428
 AliMagWrapCheb.cxx:429
 AliMagWrapCheb.cxx:430
 AliMagWrapCheb.cxx:431
 AliMagWrapCheb.cxx:432
 AliMagWrapCheb.cxx:433
 AliMagWrapCheb.cxx:434
 AliMagWrapCheb.cxx:435
 AliMagWrapCheb.cxx:436
 AliMagWrapCheb.cxx:437
 AliMagWrapCheb.cxx:438
 AliMagWrapCheb.cxx:439
 AliMagWrapCheb.cxx:440
 AliMagWrapCheb.cxx:441
 AliMagWrapCheb.cxx:442
 AliMagWrapCheb.cxx:443
 AliMagWrapCheb.cxx:444
 AliMagWrapCheb.cxx:445
 AliMagWrapCheb.cxx:446
 AliMagWrapCheb.cxx:447
 AliMagWrapCheb.cxx:448
 AliMagWrapCheb.cxx:449
 AliMagWrapCheb.cxx:450
 AliMagWrapCheb.cxx:451
 AliMagWrapCheb.cxx:452
 AliMagWrapCheb.cxx:453
 AliMagWrapCheb.cxx:454
 AliMagWrapCheb.cxx:455
 AliMagWrapCheb.cxx:456
 AliMagWrapCheb.cxx:457
 AliMagWrapCheb.cxx:458
 AliMagWrapCheb.cxx:459
 AliMagWrapCheb.cxx:460
 AliMagWrapCheb.cxx:461
 AliMagWrapCheb.cxx:462
 AliMagWrapCheb.cxx:463
 AliMagWrapCheb.cxx:464
 AliMagWrapCheb.cxx:465
 AliMagWrapCheb.cxx:466
 AliMagWrapCheb.cxx:467
 AliMagWrapCheb.cxx:468
 AliMagWrapCheb.cxx:469
 AliMagWrapCheb.cxx:470
 AliMagWrapCheb.cxx:471
 AliMagWrapCheb.cxx:472
 AliMagWrapCheb.cxx:473
 AliMagWrapCheb.cxx:474
 AliMagWrapCheb.cxx:475
 AliMagWrapCheb.cxx:476
 AliMagWrapCheb.cxx:477
 AliMagWrapCheb.cxx:478
 AliMagWrapCheb.cxx:479
 AliMagWrapCheb.cxx:480
 AliMagWrapCheb.cxx:481
 AliMagWrapCheb.cxx:482
 AliMagWrapCheb.cxx:483
 AliMagWrapCheb.cxx:484
 AliMagWrapCheb.cxx:485
 AliMagWrapCheb.cxx:486
 AliMagWrapCheb.cxx:487
 AliMagWrapCheb.cxx:488
 AliMagWrapCheb.cxx:489
 AliMagWrapCheb.cxx:490
 AliMagWrapCheb.cxx:491
 AliMagWrapCheb.cxx:492
 AliMagWrapCheb.cxx:493
 AliMagWrapCheb.cxx:494
 AliMagWrapCheb.cxx:495
 AliMagWrapCheb.cxx:496
 AliMagWrapCheb.cxx:497
 AliMagWrapCheb.cxx:498
 AliMagWrapCheb.cxx:499
 AliMagWrapCheb.cxx:500
 AliMagWrapCheb.cxx:501
 AliMagWrapCheb.cxx:502
 AliMagWrapCheb.cxx:503
 AliMagWrapCheb.cxx:504
 AliMagWrapCheb.cxx:505
 AliMagWrapCheb.cxx:506
 AliMagWrapCheb.cxx:507
 AliMagWrapCheb.cxx:508
 AliMagWrapCheb.cxx:509
 AliMagWrapCheb.cxx:510
 AliMagWrapCheb.cxx:511
 AliMagWrapCheb.cxx:512
 AliMagWrapCheb.cxx:513
 AliMagWrapCheb.cxx:514
 AliMagWrapCheb.cxx:515
 AliMagWrapCheb.cxx:516
 AliMagWrapCheb.cxx:517
 AliMagWrapCheb.cxx:518
 AliMagWrapCheb.cxx:519
 AliMagWrapCheb.cxx:520
 AliMagWrapCheb.cxx:521
 AliMagWrapCheb.cxx:522
 AliMagWrapCheb.cxx:523
 AliMagWrapCheb.cxx:524
 AliMagWrapCheb.cxx:525
 AliMagWrapCheb.cxx:526
 AliMagWrapCheb.cxx:527
 AliMagWrapCheb.cxx:528
 AliMagWrapCheb.cxx:529
 AliMagWrapCheb.cxx:530
 AliMagWrapCheb.cxx:531
 AliMagWrapCheb.cxx:532
 AliMagWrapCheb.cxx:533
 AliMagWrapCheb.cxx:534
 AliMagWrapCheb.cxx:535
 AliMagWrapCheb.cxx:536
 AliMagWrapCheb.cxx:537
 AliMagWrapCheb.cxx:538
 AliMagWrapCheb.cxx:539
 AliMagWrapCheb.cxx:540
 AliMagWrapCheb.cxx:541
 AliMagWrapCheb.cxx:542
 AliMagWrapCheb.cxx:543
 AliMagWrapCheb.cxx:544
 AliMagWrapCheb.cxx:545
 AliMagWrapCheb.cxx:546
 AliMagWrapCheb.cxx:547
 AliMagWrapCheb.cxx:548
 AliMagWrapCheb.cxx:549
 AliMagWrapCheb.cxx:550
 AliMagWrapCheb.cxx:551
 AliMagWrapCheb.cxx:552
 AliMagWrapCheb.cxx:553
 AliMagWrapCheb.cxx:554
 AliMagWrapCheb.cxx:555
 AliMagWrapCheb.cxx:556
 AliMagWrapCheb.cxx:557
 AliMagWrapCheb.cxx:558
 AliMagWrapCheb.cxx:559
 AliMagWrapCheb.cxx:560
 AliMagWrapCheb.cxx:561
 AliMagWrapCheb.cxx:562
 AliMagWrapCheb.cxx:563
 AliMagWrapCheb.cxx:564
 AliMagWrapCheb.cxx:565
 AliMagWrapCheb.cxx:566
 AliMagWrapCheb.cxx:567
 AliMagWrapCheb.cxx:568
 AliMagWrapCheb.cxx:569
 AliMagWrapCheb.cxx:570
 AliMagWrapCheb.cxx:571
 AliMagWrapCheb.cxx:572
 AliMagWrapCheb.cxx:573
 AliMagWrapCheb.cxx:574
 AliMagWrapCheb.cxx:575
 AliMagWrapCheb.cxx:576
 AliMagWrapCheb.cxx:577
 AliMagWrapCheb.cxx:578
 AliMagWrapCheb.cxx:579
 AliMagWrapCheb.cxx:580
 AliMagWrapCheb.cxx:581
 AliMagWrapCheb.cxx:582
 AliMagWrapCheb.cxx:583
 AliMagWrapCheb.cxx:584
 AliMagWrapCheb.cxx:585
 AliMagWrapCheb.cxx:586
 AliMagWrapCheb.cxx:587
 AliMagWrapCheb.cxx:588
 AliMagWrapCheb.cxx:589
 AliMagWrapCheb.cxx:590
 AliMagWrapCheb.cxx:591
 AliMagWrapCheb.cxx:592
 AliMagWrapCheb.cxx:593
 AliMagWrapCheb.cxx:594
 AliMagWrapCheb.cxx:595
 AliMagWrapCheb.cxx:596
 AliMagWrapCheb.cxx:597
 AliMagWrapCheb.cxx:598
 AliMagWrapCheb.cxx:599
 AliMagWrapCheb.cxx:600
 AliMagWrapCheb.cxx:601
 AliMagWrapCheb.cxx:602
 AliMagWrapCheb.cxx:603
 AliMagWrapCheb.cxx:604
 AliMagWrapCheb.cxx:605
 AliMagWrapCheb.cxx:606
 AliMagWrapCheb.cxx:607
 AliMagWrapCheb.cxx:608
 AliMagWrapCheb.cxx:609
 AliMagWrapCheb.cxx:610
 AliMagWrapCheb.cxx:611
 AliMagWrapCheb.cxx:612
 AliMagWrapCheb.cxx:613
 AliMagWrapCheb.cxx:614
 AliMagWrapCheb.cxx:615
 AliMagWrapCheb.cxx:616
 AliMagWrapCheb.cxx:617
 AliMagWrapCheb.cxx:618
 AliMagWrapCheb.cxx:619
 AliMagWrapCheb.cxx:620
 AliMagWrapCheb.cxx:621
 AliMagWrapCheb.cxx:622
 AliMagWrapCheb.cxx:623
 AliMagWrapCheb.cxx:624
 AliMagWrapCheb.cxx:625
 AliMagWrapCheb.cxx:626
 AliMagWrapCheb.cxx:627
 AliMagWrapCheb.cxx:628
 AliMagWrapCheb.cxx:629
 AliMagWrapCheb.cxx:630
 AliMagWrapCheb.cxx:631
 AliMagWrapCheb.cxx:632
 AliMagWrapCheb.cxx:633
 AliMagWrapCheb.cxx:634
 AliMagWrapCheb.cxx:635
 AliMagWrapCheb.cxx:636
 AliMagWrapCheb.cxx:637
 AliMagWrapCheb.cxx:638
 AliMagWrapCheb.cxx:639
 AliMagWrapCheb.cxx:640
 AliMagWrapCheb.cxx:641
 AliMagWrapCheb.cxx:642
 AliMagWrapCheb.cxx:643
 AliMagWrapCheb.cxx:644
 AliMagWrapCheb.cxx:645
 AliMagWrapCheb.cxx:646
 AliMagWrapCheb.cxx:647
 AliMagWrapCheb.cxx:648
 AliMagWrapCheb.cxx:649
 AliMagWrapCheb.cxx:650
 AliMagWrapCheb.cxx:651
 AliMagWrapCheb.cxx:652
 AliMagWrapCheb.cxx:653
 AliMagWrapCheb.cxx:654
 AliMagWrapCheb.cxx:655
 AliMagWrapCheb.cxx:656
 AliMagWrapCheb.cxx:657
 AliMagWrapCheb.cxx:658
 AliMagWrapCheb.cxx:659
 AliMagWrapCheb.cxx:660
 AliMagWrapCheb.cxx:661
 AliMagWrapCheb.cxx:662
 AliMagWrapCheb.cxx:663
 AliMagWrapCheb.cxx:664
 AliMagWrapCheb.cxx:665
 AliMagWrapCheb.cxx:666
 AliMagWrapCheb.cxx:667
 AliMagWrapCheb.cxx:668
 AliMagWrapCheb.cxx:669
 AliMagWrapCheb.cxx:670
 AliMagWrapCheb.cxx:671
 AliMagWrapCheb.cxx:672
 AliMagWrapCheb.cxx:673
 AliMagWrapCheb.cxx:674
 AliMagWrapCheb.cxx:675
 AliMagWrapCheb.cxx:676
 AliMagWrapCheb.cxx:677
 AliMagWrapCheb.cxx:678
 AliMagWrapCheb.cxx:679
 AliMagWrapCheb.cxx:680
 AliMagWrapCheb.cxx:681
 AliMagWrapCheb.cxx:682
 AliMagWrapCheb.cxx:683
 AliMagWrapCheb.cxx:684
 AliMagWrapCheb.cxx:685
 AliMagWrapCheb.cxx:686
 AliMagWrapCheb.cxx:687
 AliMagWrapCheb.cxx:688
 AliMagWrapCheb.cxx:689
 AliMagWrapCheb.cxx:690
 AliMagWrapCheb.cxx:691
 AliMagWrapCheb.cxx:692
 AliMagWrapCheb.cxx:693
 AliMagWrapCheb.cxx:694
 AliMagWrapCheb.cxx:695
 AliMagWrapCheb.cxx:696
 AliMagWrapCheb.cxx:697
 AliMagWrapCheb.cxx:698
 AliMagWrapCheb.cxx:699
 AliMagWrapCheb.cxx:700
 AliMagWrapCheb.cxx:701
 AliMagWrapCheb.cxx:702
 AliMagWrapCheb.cxx:703
 AliMagWrapCheb.cxx:704
 AliMagWrapCheb.cxx:705
 AliMagWrapCheb.cxx:706
 AliMagWrapCheb.cxx:707
 AliMagWrapCheb.cxx:708
 AliMagWrapCheb.cxx:709
 AliMagWrapCheb.cxx:710
 AliMagWrapCheb.cxx:711
 AliMagWrapCheb.cxx:712
 AliMagWrapCheb.cxx:713
 AliMagWrapCheb.cxx:714
 AliMagWrapCheb.cxx:715
 AliMagWrapCheb.cxx:716
 AliMagWrapCheb.cxx:717
 AliMagWrapCheb.cxx:718
 AliMagWrapCheb.cxx:719
 AliMagWrapCheb.cxx:720
 AliMagWrapCheb.cxx:721
 AliMagWrapCheb.cxx:722
 AliMagWrapCheb.cxx:723
 AliMagWrapCheb.cxx:724
 AliMagWrapCheb.cxx:725
 AliMagWrapCheb.cxx:726
 AliMagWrapCheb.cxx:727
 AliMagWrapCheb.cxx:728
 AliMagWrapCheb.cxx:729
 AliMagWrapCheb.cxx:730
 AliMagWrapCheb.cxx:731
 AliMagWrapCheb.cxx:732
 AliMagWrapCheb.cxx:733
 AliMagWrapCheb.cxx:734
 AliMagWrapCheb.cxx:735
 AliMagWrapCheb.cxx:736
 AliMagWrapCheb.cxx:737
 AliMagWrapCheb.cxx:738
 AliMagWrapCheb.cxx:739
 AliMagWrapCheb.cxx:740
 AliMagWrapCheb.cxx:741
 AliMagWrapCheb.cxx:742
 AliMagWrapCheb.cxx:743
 AliMagWrapCheb.cxx:744
 AliMagWrapCheb.cxx:745
 AliMagWrapCheb.cxx:746
 AliMagWrapCheb.cxx:747
 AliMagWrapCheb.cxx:748
 AliMagWrapCheb.cxx:749
 AliMagWrapCheb.cxx:750
 AliMagWrapCheb.cxx:751
 AliMagWrapCheb.cxx:752
 AliMagWrapCheb.cxx:753
 AliMagWrapCheb.cxx:754
 AliMagWrapCheb.cxx:755
 AliMagWrapCheb.cxx:756
 AliMagWrapCheb.cxx:757
 AliMagWrapCheb.cxx:758
 AliMagWrapCheb.cxx:759
 AliMagWrapCheb.cxx:760
 AliMagWrapCheb.cxx:761
 AliMagWrapCheb.cxx:762
 AliMagWrapCheb.cxx:763
 AliMagWrapCheb.cxx:764
 AliMagWrapCheb.cxx:765
 AliMagWrapCheb.cxx:766
 AliMagWrapCheb.cxx:767
 AliMagWrapCheb.cxx:768
 AliMagWrapCheb.cxx:769
 AliMagWrapCheb.cxx:770
 AliMagWrapCheb.cxx:771
 AliMagWrapCheb.cxx:772
 AliMagWrapCheb.cxx:773
 AliMagWrapCheb.cxx:774
 AliMagWrapCheb.cxx:775
 AliMagWrapCheb.cxx:776
 AliMagWrapCheb.cxx:777
 AliMagWrapCheb.cxx:778
 AliMagWrapCheb.cxx:779
 AliMagWrapCheb.cxx:780
 AliMagWrapCheb.cxx:781
 AliMagWrapCheb.cxx:782
 AliMagWrapCheb.cxx:783
 AliMagWrapCheb.cxx:784
 AliMagWrapCheb.cxx:785
 AliMagWrapCheb.cxx:786
 AliMagWrapCheb.cxx:787
 AliMagWrapCheb.cxx:788
 AliMagWrapCheb.cxx:789
 AliMagWrapCheb.cxx:790
 AliMagWrapCheb.cxx:791
 AliMagWrapCheb.cxx:792
 AliMagWrapCheb.cxx:793
 AliMagWrapCheb.cxx:794
 AliMagWrapCheb.cxx:795
 AliMagWrapCheb.cxx:796
 AliMagWrapCheb.cxx:797
 AliMagWrapCheb.cxx:798
 AliMagWrapCheb.cxx:799
 AliMagWrapCheb.cxx:800
 AliMagWrapCheb.cxx:801
 AliMagWrapCheb.cxx:802
 AliMagWrapCheb.cxx:803
 AliMagWrapCheb.cxx:804
 AliMagWrapCheb.cxx:805
 AliMagWrapCheb.cxx:806
 AliMagWrapCheb.cxx:807
 AliMagWrapCheb.cxx:808
 AliMagWrapCheb.cxx:809
 AliMagWrapCheb.cxx:810
 AliMagWrapCheb.cxx:811
 AliMagWrapCheb.cxx:812
 AliMagWrapCheb.cxx:813
 AliMagWrapCheb.cxx:814
 AliMagWrapCheb.cxx:815
 AliMagWrapCheb.cxx:816
 AliMagWrapCheb.cxx:817
 AliMagWrapCheb.cxx:818
 AliMagWrapCheb.cxx:819
 AliMagWrapCheb.cxx:820
 AliMagWrapCheb.cxx:821
 AliMagWrapCheb.cxx:822
 AliMagWrapCheb.cxx:823
 AliMagWrapCheb.cxx:824
 AliMagWrapCheb.cxx:825
 AliMagWrapCheb.cxx:826
 AliMagWrapCheb.cxx:827
 AliMagWrapCheb.cxx:828
 AliMagWrapCheb.cxx:829
 AliMagWrapCheb.cxx:830
 AliMagWrapCheb.cxx:831
 AliMagWrapCheb.cxx:832
 AliMagWrapCheb.cxx:833
 AliMagWrapCheb.cxx:834
 AliMagWrapCheb.cxx:835
 AliMagWrapCheb.cxx:836
 AliMagWrapCheb.cxx:837
 AliMagWrapCheb.cxx:838
 AliMagWrapCheb.cxx:839
 AliMagWrapCheb.cxx:840
 AliMagWrapCheb.cxx:841
 AliMagWrapCheb.cxx:842
 AliMagWrapCheb.cxx:843
 AliMagWrapCheb.cxx:844
 AliMagWrapCheb.cxx:845
 AliMagWrapCheb.cxx:846
 AliMagWrapCheb.cxx:847
 AliMagWrapCheb.cxx:848
 AliMagWrapCheb.cxx:849
 AliMagWrapCheb.cxx:850
 AliMagWrapCheb.cxx:851
 AliMagWrapCheb.cxx:852
 AliMagWrapCheb.cxx:853
 AliMagWrapCheb.cxx:854
 AliMagWrapCheb.cxx:855
 AliMagWrapCheb.cxx:856
 AliMagWrapCheb.cxx:857
 AliMagWrapCheb.cxx:858
 AliMagWrapCheb.cxx:859
 AliMagWrapCheb.cxx:860
 AliMagWrapCheb.cxx:861
 AliMagWrapCheb.cxx:862
 AliMagWrapCheb.cxx:863
 AliMagWrapCheb.cxx:864
 AliMagWrapCheb.cxx:865
 AliMagWrapCheb.cxx:866
 AliMagWrapCheb.cxx:867
 AliMagWrapCheb.cxx:868
 AliMagWrapCheb.cxx:869
 AliMagWrapCheb.cxx:870
 AliMagWrapCheb.cxx:871
 AliMagWrapCheb.cxx:872
 AliMagWrapCheb.cxx:873
 AliMagWrapCheb.cxx:874
 AliMagWrapCheb.cxx:875
 AliMagWrapCheb.cxx:876
 AliMagWrapCheb.cxx:877
 AliMagWrapCheb.cxx:878
 AliMagWrapCheb.cxx:879
 AliMagWrapCheb.cxx:880
 AliMagWrapCheb.cxx:881
 AliMagWrapCheb.cxx:882
 AliMagWrapCheb.cxx:883
 AliMagWrapCheb.cxx:884
 AliMagWrapCheb.cxx:885
 AliMagWrapCheb.cxx:886
 AliMagWrapCheb.cxx:887
 AliMagWrapCheb.cxx:888
 AliMagWrapCheb.cxx:889
 AliMagWrapCheb.cxx:890
 AliMagWrapCheb.cxx:891
 AliMagWrapCheb.cxx:892
 AliMagWrapCheb.cxx:893
 AliMagWrapCheb.cxx:894
 AliMagWrapCheb.cxx:895
 AliMagWrapCheb.cxx:896
 AliMagWrapCheb.cxx:897
 AliMagWrapCheb.cxx:898
 AliMagWrapCheb.cxx:899
 AliMagWrapCheb.cxx:900
 AliMagWrapCheb.cxx:901
 AliMagWrapCheb.cxx:902
 AliMagWrapCheb.cxx:903
 AliMagWrapCheb.cxx:904
 AliMagWrapCheb.cxx:905
 AliMagWrapCheb.cxx:906
 AliMagWrapCheb.cxx:907
 AliMagWrapCheb.cxx:908
 AliMagWrapCheb.cxx:909
 AliMagWrapCheb.cxx:910
 AliMagWrapCheb.cxx:911
 AliMagWrapCheb.cxx:912
 AliMagWrapCheb.cxx:913
 AliMagWrapCheb.cxx:914
 AliMagWrapCheb.cxx:915
 AliMagWrapCheb.cxx:916
 AliMagWrapCheb.cxx:917
 AliMagWrapCheb.cxx:918
 AliMagWrapCheb.cxx:919
 AliMagWrapCheb.cxx:920
 AliMagWrapCheb.cxx:921
 AliMagWrapCheb.cxx:922
 AliMagWrapCheb.cxx:923
 AliMagWrapCheb.cxx:924
 AliMagWrapCheb.cxx:925
 AliMagWrapCheb.cxx:926
 AliMagWrapCheb.cxx:927
 AliMagWrapCheb.cxx:928
 AliMagWrapCheb.cxx:929
 AliMagWrapCheb.cxx:930
 AliMagWrapCheb.cxx:931
 AliMagWrapCheb.cxx:932
 AliMagWrapCheb.cxx:933
 AliMagWrapCheb.cxx:934
 AliMagWrapCheb.cxx:935
 AliMagWrapCheb.cxx:936
 AliMagWrapCheb.cxx:937
 AliMagWrapCheb.cxx:938
 AliMagWrapCheb.cxx:939
 AliMagWrapCheb.cxx:940
 AliMagWrapCheb.cxx:941
 AliMagWrapCheb.cxx:942
 AliMagWrapCheb.cxx:943
 AliMagWrapCheb.cxx:944
 AliMagWrapCheb.cxx:945
 AliMagWrapCheb.cxx:946
 AliMagWrapCheb.cxx:947
 AliMagWrapCheb.cxx:948
 AliMagWrapCheb.cxx:949
 AliMagWrapCheb.cxx:950
 AliMagWrapCheb.cxx:951
 AliMagWrapCheb.cxx:952
 AliMagWrapCheb.cxx:953
 AliMagWrapCheb.cxx:954
 AliMagWrapCheb.cxx:955
 AliMagWrapCheb.cxx:956
 AliMagWrapCheb.cxx:957
 AliMagWrapCheb.cxx:958
 AliMagWrapCheb.cxx:959
 AliMagWrapCheb.cxx:960
 AliMagWrapCheb.cxx:961
 AliMagWrapCheb.cxx:962
 AliMagWrapCheb.cxx:963
 AliMagWrapCheb.cxx:964
 AliMagWrapCheb.cxx:965
 AliMagWrapCheb.cxx:966
 AliMagWrapCheb.cxx:967
 AliMagWrapCheb.cxx:968
 AliMagWrapCheb.cxx:969
 AliMagWrapCheb.cxx:970
 AliMagWrapCheb.cxx:971
 AliMagWrapCheb.cxx:972
 AliMagWrapCheb.cxx:973
 AliMagWrapCheb.cxx:974
 AliMagWrapCheb.cxx:975
 AliMagWrapCheb.cxx:976
 AliMagWrapCheb.cxx:977
 AliMagWrapCheb.cxx:978
 AliMagWrapCheb.cxx:979
 AliMagWrapCheb.cxx:980
 AliMagWrapCheb.cxx:981
 AliMagWrapCheb.cxx:982
 AliMagWrapCheb.cxx:983
 AliMagWrapCheb.cxx:984
 AliMagWrapCheb.cxx:985
 AliMagWrapCheb.cxx:986
 AliMagWrapCheb.cxx:987
 AliMagWrapCheb.cxx:988
 AliMagWrapCheb.cxx:989
 AliMagWrapCheb.cxx:990
 AliMagWrapCheb.cxx:991
 AliMagWrapCheb.cxx:992
 AliMagWrapCheb.cxx:993
 AliMagWrapCheb.cxx:994
 AliMagWrapCheb.cxx:995
 AliMagWrapCheb.cxx:996
 AliMagWrapCheb.cxx:997
 AliMagWrapCheb.cxx:998
 AliMagWrapCheb.cxx:999
 AliMagWrapCheb.cxx:1000
 AliMagWrapCheb.cxx:1001
 AliMagWrapCheb.cxx:1002
 AliMagWrapCheb.cxx:1003
 AliMagWrapCheb.cxx:1004
 AliMagWrapCheb.cxx:1005
 AliMagWrapCheb.cxx:1006
 AliMagWrapCheb.cxx:1007
 AliMagWrapCheb.cxx:1008
 AliMagWrapCheb.cxx:1009
 AliMagWrapCheb.cxx:1010
 AliMagWrapCheb.cxx:1011
 AliMagWrapCheb.cxx:1012
 AliMagWrapCheb.cxx:1013
 AliMagWrapCheb.cxx:1014
 AliMagWrapCheb.cxx:1015
 AliMagWrapCheb.cxx:1016
 AliMagWrapCheb.cxx:1017
 AliMagWrapCheb.cxx:1018
 AliMagWrapCheb.cxx:1019
 AliMagWrapCheb.cxx:1020
 AliMagWrapCheb.cxx:1021
 AliMagWrapCheb.cxx:1022
 AliMagWrapCheb.cxx:1023
 AliMagWrapCheb.cxx:1024
 AliMagWrapCheb.cxx:1025
 AliMagWrapCheb.cxx:1026
 AliMagWrapCheb.cxx:1027
 AliMagWrapCheb.cxx:1028
 AliMagWrapCheb.cxx:1029
 AliMagWrapCheb.cxx:1030
 AliMagWrapCheb.cxx:1031
 AliMagWrapCheb.cxx:1032
 AliMagWrapCheb.cxx:1033
 AliMagWrapCheb.cxx:1034
 AliMagWrapCheb.cxx:1035
 AliMagWrapCheb.cxx:1036
 AliMagWrapCheb.cxx:1037
 AliMagWrapCheb.cxx:1038
 AliMagWrapCheb.cxx:1039
 AliMagWrapCheb.cxx:1040
 AliMagWrapCheb.cxx:1041
 AliMagWrapCheb.cxx:1042
 AliMagWrapCheb.cxx:1043
 AliMagWrapCheb.cxx:1044
 AliMagWrapCheb.cxx:1045
 AliMagWrapCheb.cxx:1046
 AliMagWrapCheb.cxx:1047
 AliMagWrapCheb.cxx:1048
 AliMagWrapCheb.cxx:1049
 AliMagWrapCheb.cxx:1050
 AliMagWrapCheb.cxx:1051
 AliMagWrapCheb.cxx:1052
 AliMagWrapCheb.cxx:1053
 AliMagWrapCheb.cxx:1054
 AliMagWrapCheb.cxx:1055
 AliMagWrapCheb.cxx:1056
 AliMagWrapCheb.cxx:1057
 AliMagWrapCheb.cxx:1058
 AliMagWrapCheb.cxx:1059
 AliMagWrapCheb.cxx:1060
 AliMagWrapCheb.cxx:1061
 AliMagWrapCheb.cxx:1062
 AliMagWrapCheb.cxx:1063
 AliMagWrapCheb.cxx:1064
 AliMagWrapCheb.cxx:1065
 AliMagWrapCheb.cxx:1066
 AliMagWrapCheb.cxx:1067
 AliMagWrapCheb.cxx:1068
 AliMagWrapCheb.cxx:1069
 AliMagWrapCheb.cxx:1070
 AliMagWrapCheb.cxx:1071
 AliMagWrapCheb.cxx:1072
 AliMagWrapCheb.cxx:1073
 AliMagWrapCheb.cxx:1074
 AliMagWrapCheb.cxx:1075
 AliMagWrapCheb.cxx:1076
 AliMagWrapCheb.cxx:1077
 AliMagWrapCheb.cxx:1078
 AliMagWrapCheb.cxx:1079
 AliMagWrapCheb.cxx:1080
 AliMagWrapCheb.cxx:1081
 AliMagWrapCheb.cxx:1082
 AliMagWrapCheb.cxx:1083
 AliMagWrapCheb.cxx:1084
 AliMagWrapCheb.cxx:1085
 AliMagWrapCheb.cxx:1086
 AliMagWrapCheb.cxx:1087
 AliMagWrapCheb.cxx:1088
 AliMagWrapCheb.cxx:1089
 AliMagWrapCheb.cxx:1090
 AliMagWrapCheb.cxx:1091
 AliMagWrapCheb.cxx:1092
 AliMagWrapCheb.cxx:1093
 AliMagWrapCheb.cxx:1094
 AliMagWrapCheb.cxx:1095
 AliMagWrapCheb.cxx:1096
 AliMagWrapCheb.cxx:1097
 AliMagWrapCheb.cxx:1098
 AliMagWrapCheb.cxx:1099
 AliMagWrapCheb.cxx:1100
 AliMagWrapCheb.cxx:1101
 AliMagWrapCheb.cxx:1102
 AliMagWrapCheb.cxx:1103
 AliMagWrapCheb.cxx:1104
 AliMagWrapCheb.cxx:1105
 AliMagWrapCheb.cxx:1106
 AliMagWrapCheb.cxx:1107
 AliMagWrapCheb.cxx:1108
 AliMagWrapCheb.cxx:1109
 AliMagWrapCheb.cxx:1110
 AliMagWrapCheb.cxx:1111
 AliMagWrapCheb.cxx:1112
 AliMagWrapCheb.cxx:1113
 AliMagWrapCheb.cxx:1114
 AliMagWrapCheb.cxx:1115
 AliMagWrapCheb.cxx:1116
 AliMagWrapCheb.cxx:1117
 AliMagWrapCheb.cxx:1118
 AliMagWrapCheb.cxx:1119
 AliMagWrapCheb.cxx:1120
 AliMagWrapCheb.cxx:1121
 AliMagWrapCheb.cxx:1122
 AliMagWrapCheb.cxx:1123
 AliMagWrapCheb.cxx:1124
 AliMagWrapCheb.cxx:1125
 AliMagWrapCheb.cxx:1126
 AliMagWrapCheb.cxx:1127
 AliMagWrapCheb.cxx:1128
 AliMagWrapCheb.cxx:1129
 AliMagWrapCheb.cxx:1130
 AliMagWrapCheb.cxx:1131
 AliMagWrapCheb.cxx:1132
 AliMagWrapCheb.cxx:1133
 AliMagWrapCheb.cxx:1134
 AliMagWrapCheb.cxx:1135
 AliMagWrapCheb.cxx:1136
 AliMagWrapCheb.cxx:1137
 AliMagWrapCheb.cxx:1138
 AliMagWrapCheb.cxx:1139
 AliMagWrapCheb.cxx:1140
 AliMagWrapCheb.cxx:1141
 AliMagWrapCheb.cxx:1142
 AliMagWrapCheb.cxx:1143
 AliMagWrapCheb.cxx:1144
 AliMagWrapCheb.cxx:1145
 AliMagWrapCheb.cxx:1146
 AliMagWrapCheb.cxx:1147
 AliMagWrapCheb.cxx:1148
 AliMagWrapCheb.cxx:1149
 AliMagWrapCheb.cxx:1150
 AliMagWrapCheb.cxx:1151
 AliMagWrapCheb.cxx:1152
 AliMagWrapCheb.cxx:1153
 AliMagWrapCheb.cxx:1154
 AliMagWrapCheb.cxx:1155
 AliMagWrapCheb.cxx:1156
 AliMagWrapCheb.cxx:1157
 AliMagWrapCheb.cxx:1158
 AliMagWrapCheb.cxx:1159
 AliMagWrapCheb.cxx:1160
 AliMagWrapCheb.cxx:1161
 AliMagWrapCheb.cxx:1162
 AliMagWrapCheb.cxx:1163
 AliMagWrapCheb.cxx:1164
 AliMagWrapCheb.cxx:1165
 AliMagWrapCheb.cxx:1166
 AliMagWrapCheb.cxx:1167
 AliMagWrapCheb.cxx:1168
 AliMagWrapCheb.cxx:1169
 AliMagWrapCheb.cxx:1170
 AliMagWrapCheb.cxx:1171
 AliMagWrapCheb.cxx:1172
 AliMagWrapCheb.cxx:1173
 AliMagWrapCheb.cxx:1174
 AliMagWrapCheb.cxx:1175
 AliMagWrapCheb.cxx:1176
 AliMagWrapCheb.cxx:1177
 AliMagWrapCheb.cxx:1178
 AliMagWrapCheb.cxx:1179
 AliMagWrapCheb.cxx:1180
 AliMagWrapCheb.cxx:1181
 AliMagWrapCheb.cxx:1182
 AliMagWrapCheb.cxx:1183
 AliMagWrapCheb.cxx:1184
 AliMagWrapCheb.cxx:1185
 AliMagWrapCheb.cxx:1186
 AliMagWrapCheb.cxx:1187
 AliMagWrapCheb.cxx:1188
 AliMagWrapCheb.cxx:1189
 AliMagWrapCheb.cxx:1190
 AliMagWrapCheb.cxx:1191
 AliMagWrapCheb.cxx:1192
 AliMagWrapCheb.cxx:1193
 AliMagWrapCheb.cxx:1194
 AliMagWrapCheb.cxx:1195
 AliMagWrapCheb.cxx:1196
 AliMagWrapCheb.cxx:1197
 AliMagWrapCheb.cxx:1198
 AliMagWrapCheb.cxx:1199
 AliMagWrapCheb.cxx:1200
 AliMagWrapCheb.cxx:1201
 AliMagWrapCheb.cxx:1202
 AliMagWrapCheb.cxx:1203
 AliMagWrapCheb.cxx:1204
 AliMagWrapCheb.cxx:1205
 AliMagWrapCheb.cxx:1206
 AliMagWrapCheb.cxx:1207
 AliMagWrapCheb.cxx:1208
 AliMagWrapCheb.cxx:1209
 AliMagWrapCheb.cxx:1210
 AliMagWrapCheb.cxx:1211
 AliMagWrapCheb.cxx:1212
 AliMagWrapCheb.cxx:1213
 AliMagWrapCheb.cxx:1214
 AliMagWrapCheb.cxx:1215
 AliMagWrapCheb.cxx:1216
 AliMagWrapCheb.cxx:1217
 AliMagWrapCheb.cxx:1218
 AliMagWrapCheb.cxx:1219
 AliMagWrapCheb.cxx:1220
 AliMagWrapCheb.cxx:1221
 AliMagWrapCheb.cxx:1222
 AliMagWrapCheb.cxx:1223
 AliMagWrapCheb.cxx:1224
 AliMagWrapCheb.cxx:1225
 AliMagWrapCheb.cxx:1226
 AliMagWrapCheb.cxx:1227
 AliMagWrapCheb.cxx:1228
 AliMagWrapCheb.cxx:1229
 AliMagWrapCheb.cxx:1230
 AliMagWrapCheb.cxx:1231
 AliMagWrapCheb.cxx:1232
 AliMagWrapCheb.cxx:1233
 AliMagWrapCheb.cxx:1234
 AliMagWrapCheb.cxx:1235
 AliMagWrapCheb.cxx:1236
 AliMagWrapCheb.cxx:1237
 AliMagWrapCheb.cxx:1238
 AliMagWrapCheb.cxx:1239
 AliMagWrapCheb.cxx:1240
 AliMagWrapCheb.cxx:1241
 AliMagWrapCheb.cxx:1242
 AliMagWrapCheb.cxx:1243
 AliMagWrapCheb.cxx:1244
 AliMagWrapCheb.cxx:1245
 AliMagWrapCheb.cxx:1246
 AliMagWrapCheb.cxx:1247
 AliMagWrapCheb.cxx:1248
 AliMagWrapCheb.cxx:1249
 AliMagWrapCheb.cxx:1250
 AliMagWrapCheb.cxx:1251
 AliMagWrapCheb.cxx:1252
 AliMagWrapCheb.cxx:1253
 AliMagWrapCheb.cxx:1254
 AliMagWrapCheb.cxx:1255
 AliMagWrapCheb.cxx:1256
 AliMagWrapCheb.cxx:1257
 AliMagWrapCheb.cxx:1258
 AliMagWrapCheb.cxx:1259