]>
Commit | Line | Data |
---|---|---|
aee8290b | 1 | #ifndef ALIMAGF_H |
2 | #define ALIMAGF_H | |
3da30618 | 3 | /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * |
4 | * See cxx source for full Copyright notice */ | |
5 | ||
db83d72f | 6 | // |
7 | // Interface between the TVirtualMagField and AliMagWrapCheb: wrapper to | |
8 | // the set of magnetic field data + Tosca parameterization by | |
9 | // Chebyshev polynomials | |
10 | // | |
11 | // Author: ruben.shahoyan@cern.ch | |
12 | // | |
fe4da5cc | 13 | |
db83d72f | 14 | //#include <TGeoGlobalMagField.h> |
15 | #include <TVirtualMagField.h> | |
16 | class AliMagWrapCheb; | |
0742d588 | 17 | |
db83d72f | 18 | class AliMagF : public TVirtualMagField |
19 | { | |
20 | public: | |
21 | enum BMap_t {k2kG, k5kG, k5kGUniform}; | |
33fe5eb1 | 22 | enum BeamType_t {kNoBeamField, kBeamTypepp, kBeamTypeAA}; |
99c7d495 | 23 | enum PolarityConvention_t {kConvLHC,kConvDCS2008,kConvMap2005}; |
5a004fb4 | 24 | enum {kOverrideGRP=BIT(14)}; // don't recreate from GRP if set |
db83d72f | 25 | // |
e2afb3b6 | 26 | AliMagF(); |
02233f2b | 27 | AliMagF(const char *name, const char* title,Double_t factorSol=1., Double_t factorDip=1., |
28 | BMap_t maptype = k5kG, BeamType_t btype=kBeamTypepp, Double_t benergy=-1, | |
513a98b8 | 29 | Int_t integ=2, Double_t fmax=15,const char* path="$(ALICE_ROOT)/data/maps/mfchebKGI_sym.root"); |
db83d72f | 30 | AliMagF(const AliMagF& src); |
31 | AliMagF& operator=(const AliMagF& src); | |
32 | virtual ~AliMagF(); | |
33 | // | |
34 | virtual void Field(const Double_t *x, Double_t *b); | |
47c3d315 | 35 | void GetTPCInt(const Double_t *xyz, Double_t *b) const; |
36 | void GetTPCRatInt(const Double_t *xyz, Double_t *b) const; | |
37 | void GetTPCIntCyl(const Double_t *rphiz, Double_t *b) const; | |
38 | void GetTPCRatIntCyl(const Double_t *rphiz, Double_t *b) const; | |
39 | Double_t GetBz(const Double_t *xyz) const; | |
db83d72f | 40 | // |
41 | AliMagWrapCheb* GetMeasuredMap() const {return fMeasuredMap;} | |
42 | // | |
43 | // former AliMagF methods or their aliases | |
1dd3d90e | 44 | void SetFactorSol(Float_t fc=1.); |
45 | void SetFactorDip(Float_t fc=1.); | |
46 | Double_t GetFactorSol() const; | |
47 | Double_t GetFactorDip() const; | |
db83d72f | 48 | Double_t Factor() const {return GetFactorSol();} |
33fe5eb1 | 49 | Double_t GetCurrentSol() const {return GetFactorSol()*(fMapType==k2kG ? 12000:30000);} |
50 | Double_t GetCurrentDip() const {return GetFactorDip()*6000;} | |
db83d72f | 51 | Bool_t IsUniform() const {return fMapType == k5kGUniform;} |
52 | // | |
53 | void MachineField(const Double_t *x, Double_t *b) const; | |
54 | BMap_t GetMapType() const {return fMapType;} | |
db83d72f | 55 | BeamType_t GetBeamType() const {return fBeamType;} |
33fe5eb1 | 56 | const char* GetBeamTypeText() const; |
db83d72f | 57 | Double_t GetBeamEnergy() const {return fBeamEnergy;} |
58 | Double_t Max() const {return fMax;} | |
59 | Int_t Integ() const {return fInteg;} | |
60 | Int_t PrecInteg() const {return fPrecInteg;} | |
f04e7f5f | 61 | Double_t SolenoidField() const {return fFactorSol*fSolenoid;} |
db83d72f | 62 | // |
63 | Char_t* GetDataFileName() const {return (Char_t*)fParNames.GetName();} | |
64 | Char_t* GetParamName() const {return (Char_t*)fParNames.GetTitle();} | |
65 | void SetDataFileName(const Char_t* nm) {fParNames.SetName(nm);} | |
66 | void SetParamName(const Char_t* nm) {fParNames.SetTitle(nm);} | |
77c9a262 | 67 | virtual void Print(Option_t *opt) const; |
db83d72f | 68 | // |
69 | Bool_t LoadParameterization(); | |
1dd3d90e | 70 | static Int_t GetPolarityConvention() {return Int_t(fgkPolarityConvention);} |
33fe5eb1 | 71 | static AliMagF* CreateFieldMap(Float_t l3Current=-30000., Float_t diCurrent=-6000., |
72 | Int_t convention=0, Bool_t uniform = kFALSE, | |
5cf76849 | 73 | Float_t beamenergy=7000, const Char_t* btype="pp", |
33fe5eb1 | 74 | const Char_t* path="$(ALICE_ROOT)/data/maps/mfchebKGI_sym.root"); |
db83d72f | 75 | // |
a0201063 | 76 | protected: |
db83d72f | 77 | // not supposed to be changed during the run, set only at the initialization via constructor |
78 | void InitMachineField(BeamType_t btype, Double_t benergy); | |
79 | void SetBeamType(BeamType_t type) {fBeamType = type;} | |
80 | void SetBeamEnergy(Float_t energy) {fBeamEnergy = energy;} | |
db83d72f | 81 | // |
82 | protected: | |
83 | AliMagWrapCheb* fMeasuredMap; //! Measured part of the field map | |
84 | BMap_t fMapType; // field map type | |
85 | Double_t fSolenoid; // Solenoid field setting | |
86 | BeamType_t fBeamType; // Beam type: A-A (fBeamType=0) or p-p (fBeamType=1) | |
87 | Double_t fBeamEnergy; // Beam energy in GeV | |
db83d72f | 88 | // |
89 | Int_t fInteg; // Default integration method as indicated in Geant | |
90 | Int_t fPrecInteg; // Alternative integration method, e.g. for higher precision | |
91 | Double_t fFactorSol; // Multiplicative factor for solenoid | |
92 | Double_t fFactorDip; // Multiplicative factor for dipole | |
93 | Double_t fMax; // Max Field as indicated in Geant | |
94 | Bool_t fDipoleOFF; // Dipole ON/OFF flag | |
95 | // | |
96 | Double_t fQuadGradient; // Gradient field for inner triplet quadrupoles | |
97 | Double_t fDipoleField; // Field value for D1 and D2 dipoles | |
98 | Double_t fCCorrField; // Side C 2nd compensator field | |
99 | Double_t fACorr1Field; // Side A 1st compensator field | |
100 | Double_t fACorr2Field; // Side A 2nd compensator field | |
101 | // | |
102 | TNamed fParNames; // file and parameterization loadad | |
103 | // | |
1dd3d90e | 104 | static const Double_t fgkSol2DipZ; // conventional Z of transition from L3 to Dipole field |
105 | static const UShort_t fgkPolarityConvention; // convention for the mapping of the curr.sign on main component sign | |
db83d72f | 106 | // |
9251fceb | 107 | ClassDef(AliMagF, 2) // Class for all Alice MagField wrapper for measured data + Tosca parameterization |
fe4da5cc | 108 | }; |
7a15f6b8 | 109 | |
db83d72f | 110 | |
fe4da5cc | 111 | #endif |