X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=STEER%2FAliMagF.h;h=d9e3250fce807ddf7c4e0710d99093c9d9942785;hb=6bcbb25b9dcad225115360010aeff1e6af4ef779;hp=7319a37fd8f24ba106f86f8925559739a9d0fd6e;hpb=3da306186bdfe9b8dedf54c4b9cdcf2bff5b132c;p=u%2Fmrichter%2FAliRoot.git diff --git a/STEER/AliMagF.h b/STEER/AliMagF.h index 7319a37fd8f..d9e3250fce8 100644 --- a/STEER/AliMagF.h +++ b/STEER/AliMagF.h @@ -1,93 +1,51 @@ -#ifndef AliMagF_H -#define AliMagF_H +#ifndef ALIMAGF_H +#define ALIMAGF_H /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * * See cxx source for full Copyright notice */ /* $Id$ */ +//---------------------------------------------------------------------- +// Basic magnetic field class +// Used in all the detectors, and also in the traking classes +// Author: +//---------------------------------------------------------------------- + #include "TNamed.h" -#include "TVector.h" -enum Field_t {Undef=1, Const=1, ConMesh=2}; +enum Field_t {kUndef=1, kConst=1, kConMesh=2, kDipoMap=3}; class AliMagF : public TNamed { -protected: - Int_t fMap; // Field Map identifier - Int_t fType; // Mag Field type - Int_t fInteg; // Integration method as indicated in Geant - Float_t fFactor; // Multiplicative factor - Float_t fMax; // Max Field as indicated in Geant - public: - AliMagF(){} - AliMagF(const char *name, const char *title, const Int_t integ, const Int_t map, - const Float_t factor, const Float_t fmax); + AliMagF(); + AliMagF(const char *name, const char *title, Int_t integ, + Float_t factor = 1., Float_t fmax = 10.); + AliMagF(const AliMagF& maps); virtual ~AliMagF() {} - virtual void Field(Float_t *x, Float_t *b); - virtual Int_t Type() {return fType;} + AliMagF& operator=(const AliMagF& rhs); + virtual void Field(Float_t *x, Float_t *b) const; + virtual void GetTPCInt(Float_t *xyz, Float_t *b) const; + virtual void GetTPCIntCyl(Float_t *rphiz, Float_t *b) const; + virtual Int_t Type() const {return fType;} virtual Float_t Max() const {return fMax;} - virtual Int_t Map() const {return fMap;} - virtual Int_t Integ() const {return fInteg;} + virtual Int_t Map() const {return fMap;} + virtual Int_t Integ() const {return fInteg;} + virtual Int_t PrecInteg() const {return fPrecInteg;} virtual Float_t Factor() const {return fFactor;} - virtual void ReadField() {} - - ClassDef(AliMagF,1) //Base class for all Alice MagField -}; - -class AliMagFC : public AliMagF -{ - //Alice Constant Magnetic Field -private: - -public: - AliMagFC(){} - AliMagFC(const char *name, const char *title, const Int_t integ, const Int_t map, - const Float_t factor, const Float_t fmax); - virtual ~AliMagFC() {} - virtual void Field(Float_t *x, Float_t *b); - virtual void ReadField() {} - - ClassDef(AliMagFC,1) //Class for all Alice Constant MagField -}; - -class AliMagFCM : public AliMagF -{ - //Alice Magnetic Field with constan mesh -protected: - - Float_t fXbeg; // Start of mesh in x - Float_t fYbeg; // Start of mesh in y - Float_t fZbeg; // Start of mesh in z - Float_t fXdel; // Mesh step in x - Float_t fYdel; // Mesh step in y - Float_t fZdel; // Mesh step in z - Double_t fXdeli; // Inverse of Mesh step in x - Double_t fYdeli; // Inverse of Mesh step in y - Double_t fZdeli; // Inverse of Mesh step in z - Int_t fXn; // Number of mesh points in x - Int_t fYn; // Number of mesh points in y - Int_t fZn; // Number of mesh points in z - TVector *fB; // Field map -public: - AliMagFCM(){} - AliMagFCM(const char *name, const char *title, const Int_t integ, const Int_t map, - const Float_t factor, const Float_t fmax); - virtual ~AliMagFCM() {delete fB;} - virtual void Field(Float_t *x, Float_t *b); - virtual void ReadField(); - - inline Float_t Bx(const Int_t ix, const Int_t iy, const Int_t iz) { - return (*fB)(3*(iz*(fXn*fYn)+iy*fXn+ix)); - } - inline Float_t By(const Int_t ix, const Int_t iy, const Int_t iz) { - return (*fB)(3*(iz*(fXn*fYn)+iy*fXn+ix)+1); - } - inline Float_t Bz(const Int_t ix, const Int_t iy, const Int_t iz) { - return (*fB)(3*(iz*(fXn*fYn)+iy*fXn+ix)+2); - } - - ClassDef(AliMagFCM,1) //Class for all Alice MagField with Constant Mesh + virtual void ReadField() {} + virtual Float_t SolenoidField() const {return 2.;} + virtual void SetPrecInteg(Int_t integ) {fPrecInteg = integ;} + virtual void SetReadField(Bool_t flag = kTRUE) {fReadField = flag;} + protected: + Int_t fMap; // Field Map identifier + Int_t fType; // Mag Field type + Int_t fInteg; // Default integration method as indicated in Geant + Int_t fPrecInteg; // Alternative integration method, e.g. for higher precision + Float_t fFactor; // Multiplicative factor + Float_t fMax; // Max Field as indicated in Geant + Bool_t fReadField; // Flag for reading the field from file (if available) + ClassDef(AliMagF,5) //Base class for all Alice MagField }; #endif