X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=STEER%2FAliMagFCM.cxx;h=8d808d4c52e28d02376947e9a860a3b75a197161;hb=c73a9bf3a9baa6ad28678e07276210a92b54b70b;hp=d145de1bbbb00df2757d7a7c6ece0b19acb5b88c;hpb=d95ea23f1ad52b19edfc70f1ffd756b0157f5ba7;p=u%2Fmrichter%2FAliRoot.git diff --git a/STEER/AliMagFCM.cxx b/STEER/AliMagFCM.cxx index d145de1bbbb..8d808d4c52e 100644 --- a/STEER/AliMagFCM.cxx +++ b/STEER/AliMagFCM.cxx @@ -13,36 +13,96 @@ * provided "as is" without express or implied warranty. * **************************************************************************/ -/* -$Log$ -Revision 1.2 2000/07/12 08:56:25 fca -Coding convention correction and warning removal +/* $Id$ */ -Revision 1.1 2000/07/11 18:24:59 fca -Coding convention corrections + few minor bug fixes +//----------------------------------------------------------------------- +// Class for Alice magnetic field with constant mesh +// Used in the configuration macros (macros/Config.C, etc.) +// Author: +//----------------------------------------------------------------------- -*/ +#include "TSystem.h" + +#include "TVector.h" +#include "AliLog.h" #include "AliMagFCM.h" -#include "TSystem.h" ClassImp(AliMagFCM) -//________________________________________ -AliMagFCM::AliMagFCM(const char *name, const char *title, const Int_t integ, - const Int_t map, const Float_t factor, const Float_t fmax) - : AliMagF(name,title,integ,map,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; + SetSolenoidField(); +} + +//_______________________________________________________________________ +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; - printf("Constant Mesh Field %s created: map= %d, factor= %f, file= %s\n", - fName.Data(),map,factor,fTitle.Data()); + fMap = 2; + SetSolenoidField(); + + AliDebug(1, Form( + "Constant Mesh Field %s created: map= %d, factor= %f, file= %s", + fName.Data(), fMap, factor,fTitle.Data())); } -//________________________________________ -AliMagFCM::AliMagFCM(const AliMagFCM &magf) +//_______________________________________________________________________ +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 @@ -50,8 +110,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 @@ -64,16 +124,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 @@ -121,70 +189,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); + AliError(Form("Invalid field map for constant mesh %d",fMap)); } } else { //This is the ZDC part - Float_t rad2=x[0]*x[0]+x[1]*x[1]; - if(x[2]>kCORBEG1 && 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); + AliDebug(2,Form("fXn %d, fYn %d, fZn %d, fXdel %f, fYdel %f, fZdel %f, fXbeg %f, fYbeg %f, fZbeg %f", + fXn, fYn, fZn, fXdel, fYdel, fZdel, fXbeg, fYbeg, fZbeg)); fXdeli=1./fXdel; fYdeli=1./fYdel; fZdeli=1./fZdel; @@ -221,23 +247,16 @@ void AliMagFCM::ReadField() } } } else { - printf("File %s not found !\n",fTitle.Data()); - exit(1); + AliFatal(Form("File %s not found !",fTitle.Data())); } } -//________________________________________ -void AliMagFCM::Copy(AliMagFCM & /* magf */) const +//_______________________________________________________________________ +void AliMagFCM::Copy(TObject & /* magf */) const { // // Copy *this onto magf -- Not implemented // - Fatal("Copy","Not implemented!\n"); + AliFatal("Not implemented!"); } -//________________________________________ -AliMagFCM & AliMagFCM::operator =(const AliMagFCM &magf) -{ - magf.Copy(*this); - return *this; -}