X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=STEER%2FAliFieldMap.cxx;h=5b5e8bd53967930ee5e59849dd1cf9cb4abb7e05;hb=50d8d2cb19ceecc00565f096e3959f985ab89ae3;hp=8f4b3f3ff2e58f0f4cfd1cfed8a341b91914412f;hpb=fb17acd412e4de1f64fd41bde1684280cacc9016;p=u%2Fmrichter%2FAliRoot.git diff --git a/STEER/AliFieldMap.cxx b/STEER/AliFieldMap.cxx index 8f4b3f3ff2e..5b5e8bd5396 100644 --- a/STEER/AliFieldMap.cxx +++ b/STEER/AliFieldMap.cxx @@ -13,15 +13,24 @@ * provided "as is" without express or implied warranty. * **************************************************************************/ -/* $Header$ */ +/* $Id$ */ +//----------------------------------------------------------------------- // +// Class to handle the field +// I/O and interpolation +// of the field map to return the value +// of the magnetic field in an arbitrary position // Author: Andreas Morsch // +//----------------------------------------------------------------------- -#include +#include +#include +#include + +#include "AliLog.h" #include "AliFieldMap.h" -#include "TSystem.h" ClassImp(AliFieldMap) @@ -128,8 +137,8 @@ void AliFieldMap::ReadField() Int_t ix, iy, iz, ipx, ipy, ipz; Float_t bx, by, bz; char *fname = 0; - printf("%s: Reading Magnetic Field Map %s from file %s\n", - ClassName(),fName.Data(),fTitle.Data()); + AliInfo(Form("Reading Magnetic Field Map %s from file %s", + fName.Data(),fTitle.Data())); fname = gSystem->ExpandPathName(fTitle.Data()); magfile = fopen(fname,"r"); @@ -202,7 +211,67 @@ void AliFieldMap::ReadField() } //_______________________________________________________________________ -void AliFieldMap::Field(Float_t *x, Float_t *b) +void AliFieldMap::Field(float *x, float *b) const +{ + // + // Use simple interpolation to obtain field at point x + // + float ratx, raty, ratz, hix, hiy, hiz, ratx1, raty1, ratz1, + bhyhz, bhylz, blyhz, blylz, bhz, blz, xl[3]; + const float kone=1; + Int_t ix, iy, iz; + b[0]=b[1]=b[2]=0; + // + + xl[0] = x[0] - fXbeg; + xl[1] = x[1] - fYbeg; + xl[2] = x[2] - fZbeg; + + hix=TMath::Max(0.,TMath::Min(xl[0]*fXdeli,fXn-1.0001)); + ratx=hix-int(hix); + ix=int(hix); + + hiy=TMath::Max(0.,TMath::Min(xl[1]*fYdeli,fYn-1.0001)); + raty=hiy-int(hiy); + iy=int(hiy); + + hiz=TMath::Max(0.,TMath::Min(xl[2]*fZdeli,fZn-1.0001)); + ratz=hiz-int(hiz); + iz=int(hiz); + + ratx1=kone-ratx; + raty1=kone-raty; + ratz1=kone-ratz; + + if (!fB) return; + + bhyhz = Bx(ix ,iy+1,iz+1)*ratx1+Bx(ix+1,iy+1,iz+1)*ratx; + bhylz = Bx(ix ,iy+1,iz )*ratx1+Bx(ix+1,iy+1,iz )*ratx; + blyhz = Bx(ix ,iy ,iz+1)*ratx1+Bx(ix+1,iy ,iz+1)*ratx; + blylz = Bx(ix ,iy ,iz )*ratx1+Bx(ix+1,iy ,iz )*ratx; + bhz = blyhz *raty1+bhyhz *raty; + blz = blylz *raty1+bhylz *raty; + b[0] = blz *ratz1+bhz *ratz; + // + bhyhz = By(ix ,iy+1,iz+1)*ratx1+By(ix+1,iy+1,iz+1)*ratx; + bhylz = By(ix ,iy+1,iz )*ratx1+By(ix+1,iy+1,iz )*ratx; + blyhz = By(ix ,iy ,iz+1)*ratx1+By(ix+1,iy ,iz+1)*ratx; + blylz = By(ix ,iy ,iz )*ratx1+By(ix+1,iy ,iz )*ratx; + bhz = blyhz *raty1+bhyhz *raty; + blz = blylz *raty1+bhylz *raty; + b[1] = blz *ratz1+bhz *ratz; + // + bhyhz = Bz(ix ,iy+1,iz+1)*ratx1+Bz(ix+1,iy+1,iz+1)*ratx; + bhylz = Bz(ix ,iy+1,iz )*ratx1+Bz(ix+1,iy+1,iz )*ratx; + blyhz = Bz(ix ,iy ,iz+1)*ratx1+Bz(ix+1,iy ,iz+1)*ratx; + blylz = Bz(ix ,iy ,iz )*ratx1+Bz(ix+1,iy ,iz )*ratx; + bhz = blyhz *raty1+bhyhz *raty; + blz = blylz *raty1+bhylz *raty; + b[2] = blz *ratz1+bhz *ratz; +} + +//_______________________________________________________________________ +void AliFieldMap::Field(double *x, double *b) const { // // Use simple interpolation to obtain field at point x @@ -214,19 +283,19 @@ void AliFieldMap::Field(Float_t *x, Float_t *b) b[0]=b[1]=b[2]=0; // - xl[0]=TMath::Abs(x[0])-fXbeg; - xl[1]=TMath::Abs(x[1])-fYbeg; - xl[2]=x[2]-fZbeg; + xl[0] = x[0] - fXbeg; + xl[1] = x[1] - fYbeg; + xl[2] = x[2] - fZbeg; - hix=xl[0]*fXdeli; + hix=TMath::Max(0.,TMath::Min(xl[0]*fXdeli,fXn-1.0001)); ratx=hix-int(hix); ix=int(hix); - hiy=xl[1]*fYdeli; + hiy=TMath::Max(0.,TMath::Min(xl[1]*fYdeli,fYn-1.0001)); raty=hiy-int(hiy); iy=int(hiy); - hiz=xl[2]*fZdeli; + hiz=TMath::Max(0.,TMath::Min(xl[2]*fZdeli,fZn-1.0001)); ratz=hiz-int(hiz); iz=int(hiz); @@ -234,6 +303,8 @@ void AliFieldMap::Field(Float_t *x, Float_t *b) raty1=kone-raty; ratz1=kone-ratz; + if (!fB) return; + bhyhz = Bx(ix ,iy+1,iz+1)*ratx1+Bx(ix+1,iy+1,iz+1)*ratx; bhylz = Bx(ix ,iy+1,iz )*ratx1+Bx(ix+1,iy+1,iz )*ratx; blyhz = Bx(ix ,iy ,iz+1)*ratx1+Bx(ix+1,iy ,iz+1)*ratx; @@ -260,12 +331,12 @@ void AliFieldMap::Field(Float_t *x, Float_t *b) } //_______________________________________________________________________ -void AliFieldMap::Copy(AliFieldMap & /* magf */) const +void AliFieldMap::Copy(TObject & /* magf */) const { // // Copy *this onto magf -- Not implemented // - Fatal("Copy","Not implemented!\n"); + AliFatal("Not implemented!"); } //_______________________________________________________________________