X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=STEER%2FAliMagFCM.cxx;h=903cc454bcaa29b694158b4449c608272ecffc40;hb=9622226e244576c2ed7b1cea39e6d33cbdf80294;hp=3810a0b080898a02be26a7caae824dadbfc71c83;hpb=d8408e768ac2e9da27b286f8cb2c3e705b46e543;p=u%2Fmrichter%2FAliRoot.git diff --git a/STEER/AliMagFCM.cxx b/STEER/AliMagFCM.cxx index 3810a0b0808..903cc454bca 100644 --- a/STEER/AliMagFCM.cxx +++ b/STEER/AliMagFCM.cxx @@ -13,48 +13,95 @@ * provided "as is" without express or implied warranty. * **************************************************************************/ -/* -$Log$ -Revision 1.5 2000/12/01 11:20:27 alibrary -Corrector dipole removed from ZDC +/* $Id$ */ -Revision 1.4 2000/11/30 07:12:49 alibrary -Introducing new Rndm and QA classes +//----------------------------------------------------------------------- +// Class for Alice magnetic field with constant mesh +// Used in the configuration macros (macros/Config.C, etc.) +// Author: +//----------------------------------------------------------------------- -Revision 1.3 2000/11/10 18:09:55 fca -New field map for the ZDC - -Revision 1.2 2000/07/12 08:56:25 fca -Coding convention correction and warning removal - -Revision 1.1 2000/07/11 18:24:59 fca -Coding convention corrections + few minor bug fixes +#include "TSystem.h" -*/ #include "TVector.h" #include "AliMagFCM.h" -#include "TSystem.h" ClassImp(AliMagFCM) -//________________________________________ -AliMagFCM::AliMagFCM(const char *name, const char *title, const Int_t integ, - const Float_t factor, const Float_t fmax) - : AliMagF(name,title,integ,factor,fmax) +//_______________________________________________________________________ +AliMagFCM::AliMagFCM(): + fXbeg(0), + fYbeg(0), + fZbeg(0), + fXdel(0), + fYdel(0), + fZdel(0), + fSolenoid(0), + fXdeli(0), + fYdeli(0), + fZdeli(0), + fXn(0), + fYn(0), + fZn(0), + fB(0) { // // Standard constructor // fType = kConMesh; fMap = 2; - - printf("Constant Mesh Field %s created: map= %d, factor= %f, file= %s\n", - fName.Data(), fMap, factor,fTitle.Data()); + SetSolenoidField(); } -//________________________________________ -AliMagFCM::AliMagFCM(const AliMagFCM &magf) +//_______________________________________________________________________ +AliMagFCM::AliMagFCM(const char *name, const char *title, Int_t integ, + Float_t factor, Float_t fmax): + AliMagFC(name,title,integ,factor,fmax), + fXbeg(0), + fYbeg(0), + fZbeg(0), + fXdel(0), + fYdel(0), + fZdel(0), + fSolenoid(0), + fXdeli(0), + fYdeli(0), + fZdeli(0), + fXn(0), + fYn(0), + fZn(0), + fB(0) +{ + // + // Standard constructor + // + fType = kConMesh; + fMap = 2; + SetSolenoidField(); + + if(fDebug>-1) Info("ctor", + "%s: Constant Mesh Field %s created: map= %d, factor= %f, file= %s\n", + ClassName(),fName.Data(), fMap, factor,fTitle.Data()); +} + +//_______________________________________________________________________ +AliMagFCM::AliMagFCM(const AliMagFCM &magf): + AliMagFC(magf), + fXbeg(0), + fYbeg(0), + fZbeg(0), + fXdel(0), + fYdel(0), + fZdel(0), + fSolenoid(0), + fXdeli(0), + fYdeli(0), + fZdeli(0), + fXn(0), + fYn(0), + fZn(0), + fB(0) { // // Copy constructor @@ -62,8 +109,8 @@ AliMagFCM::AliMagFCM(const AliMagFCM &magf) magf.Copy(*this); } -//________________________________________ -void AliMagFCM::Field(Float_t *x, Float_t *b) +//_______________________________________________________________________ +void AliMagFCM::Field(Float_t *x, Float_t *b) const { // // Method to calculate the magnetic field @@ -76,16 +123,24 @@ void AliMagFCM::Field(Float_t *x, Float_t *b) // --- find the position in the grid --- b[0]=b[1]=b[2]=0; - if(-700 0 + // Transfom x -> -x and z -> -z + Float_t xm = - x[0]; + Float_t ym = x[1]; + Float_t zm = - x[2]; + + Bool_t infield=(fZbeg <= zm && zm < fZbeg+fZdel*(fZn-1) + && ( fXbeg <= TMath::Abs(xm) && TMath::Abs(xm) < fXbeg+fXdel*(fXn-1) ) + && ( fYbeg <= TMath::Abs(ym) && TMath::Abs(ym) < fYbeg+fYdel*(fYn-1) )); if(infield) { - xl[0]=TMath::Abs(x[0])-fXbeg; - xl[1]=TMath::Abs(x[1])-fYbeg; - xl[2]=x[2]-fZbeg; + xl[0]=TMath::Abs(xm)-fXbeg; + xl[1]=TMath::Abs(ym)-fYbeg; + xl[2]=zm-fZbeg; // --- start with x @@ -133,65 +188,28 @@ void AliMagFCM::Field(Float_t *x, Float_t *b) //ratx,raty,ratz,b[0],b[1],b[2]); // // ... use the dipole symmetry - if (x[0]*x[1] < 0) b[1]=-b[1]; - if (x[0]<0) b[2]=-b[2]; + if (xm*ym < 0) b[1]=-b[1]; + if (xm<0) b[2]=-b[2]; + b[0] = -b[0]; + b[2] = -b[2]; + } else { printf("Invalid field map for constant mesh %d\n",fMap); } } else { //This is the ZDC part - Float_t rad2=x[0]*x[0]+x[1]*x[1]; - if(x[2]>kCORBEG2 && x[2]kZ1BEG && x[2]kZ2BEG && x[2]kZ3BEG && x[2]kZ4BEG && x[2]kD1BEG && x[2]kD2BEG && x[2]ExpandPathName(fTitle.Data()); magfile=fopen(fname,"r"); delete [] fname; if (magfile) { fscanf(magfile,"%d %d %d %f %f %f %f %f %f", &fXn, &fYn, &fZn, &fXdel, &fYdel, &fZdel, &fXbeg, &fYbeg, &fZbeg); - printf("fXn %d, fYn %d, fZn %d, fXdel %f, fYdel %f, fZdel %f, fXbeg %f, fYbeg %f, fZbeg %f\n", - fXn, fYn, fZn, fXdel, fYdel, fZdel, fXbeg, fYbeg, fZbeg); + if(fDebug>1) printf("%s: fXn %d, fYn %d, fZn %d, fXdel %f, fYdel %f, fZdel %f, fXbeg %f, fYbeg %f, fZbeg %f\n", + ClassName(),fXn, fYn, fZn, fXdel, fYdel, fZdel, fXbeg, fYbeg, fZbeg); fXdeli=1./fXdel; fYdeli=1./fYdel; fZdeli=1./fZdel; @@ -228,13 +246,13 @@ void AliMagFCM::ReadField() } } } else { - printf("File %s not found !\n",fTitle.Data()); + printf("%s: File %s not found !\n",ClassName(),fTitle.Data()); exit(1); } } -//________________________________________ -void AliMagFCM::Copy(AliMagFCM & /* magf */) const +//_______________________________________________________________________ +void AliMagFCM::Copy(TObject & /* magf */) const { // // Copy *this onto magf -- Not implemented @@ -242,9 +260,3 @@ void AliMagFCM::Copy(AliMagFCM & /* magf */) const Fatal("Copy","Not implemented!\n"); } -//________________________________________ -AliMagFCM & AliMagFCM::operator =(const AliMagFCM &magf) -{ - magf.Copy(*this); - return *this; -}