]>
Commit | Line | Data |
---|---|---|
5406439e | 1 | /************************************************************************** |
2 | * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * | |
3 | * * | |
4 | * Author: The ALICE Off-line Project. * | |
5 | * Contributors are mentioned in the code where appropriate. * | |
6 | * * | |
7 | * Permission to use, copy, modify and distribute this software and its * | |
8 | * documentation strictly for non-commercial purposes is hereby granted * | |
9 | * without fee, provided that the above copyright notice appears in all * | |
10 | * copies and that both the copyright notice and this permission notice * | |
11 | * appear in the supporting documentation. The authors make no claims * | |
12 | * about the suitability of this software for any purpose. It is * | |
13 | * provided "as is" without express or implied warranty. * | |
14 | **************************************************************************/ | |
0eea9d4d | 15 | |
0eea9d4d | 16 | |
da7cd221 | 17 | #include <TClass.h> |
18 | #include <TFile.h> | |
19 | #include <TSystem.h> | |
d28e407c | 20 | |
da7cd221 | 21 | #include "AliMagFCheb.h" |
22 | #include "AliMagWrapCheb.h" | |
23 | #include "AliLog.h" | |
ff66b122 | 24 | |
da7cd221 | 25 | ClassImp(AliMagFCheb) |
26 | ||
d28e407c | 27 | |
da7cd221 | 28 | //_______________________________________________________________________ |
29 | AliMagFCheb::AliMagFCheb(): | |
30 | AliMagFC(), | |
31 | fMeasuredMap(0), | |
32 | fSolenoid(5.) | |
d28e407c | 33 | { |
da7cd221 | 34 | // Default constructor |
d28e407c | 35 | // |
36 | } | |
37 | ||
da7cd221 | 38 | //_______________________________________________________________________ |
39 | AliMagFCheb::AliMagFCheb(const char *name, const char *title, Int_t integ, | |
40 | Float_t factor, Float_t fmax, Int_t map, | |
41 | Bool_t dipoleON,const char* path): | |
42 | AliMagFC(name, title, integ, factor, fmax), | |
43 | fMeasuredMap(0), | |
44 | fSolenoid(5.) | |
d28e407c | 45 | { |
d28e407c | 46 | // |
da7cd221 | 47 | fMap = map; |
48 | char* fname = gSystem->ExpandPathName(path); | |
49 | TFile* file = TFile::Open(fname); | |
50 | if (!file) { | |
51 | AliError(Form("Failed to open magnetic field data file %s\n",fname)); | |
d28e407c | 52 | return; |
53 | } | |
da7cd221 | 54 | const char* parname = 0; |
55 | if (fMap == k2kG) { | |
56 | fSolenoid = 2.; | |
57 | parname = dipoleON ? "Sol12_Dip6_Hole":"Sol12_Dip0_Hole"; | |
58 | } else if (fMap == k5kG) { | |
59 | fSolenoid = 5.; | |
60 | parname = dipoleON ? "Sol30_Dip6_Hole":"Sol30_Dip0_Hole"; | |
61 | } else { | |
62 | AliError(Form("Unknown field identifier %d is requested\n",fMap)); | |
63 | return; | |
d28e407c | 64 | } |
65 | // | |
da7cd221 | 66 | fMeasuredMap = dynamic_cast<AliMagWrapCheb*>(file->Get(parname)); |
67 | if (!fMeasuredMap) { | |
68 | AliError(Form("Did not find field %s in %s\n",parname,fname)); | |
69 | return; | |
d28e407c | 70 | } |
da7cd221 | 71 | file->Close(); |
72 | delete file; | |
d28e407c | 73 | } |
74 | ||
0eea9d4d | 75 | |
da7cd221 | 76 | //_______________________________________________________________________ |
77 | AliMagFCheb::AliMagFCheb(const AliMagFCheb &src): | |
78 | AliMagFC(src), | |
79 | fMeasuredMap(0), | |
80 | fSolenoid(src.fSolenoid) | |
0eea9d4d | 81 | { |
da7cd221 | 82 | if (src.fMeasuredMap) fMeasuredMap = new AliMagWrapCheb(*src.fMeasuredMap); |
0eea9d4d | 83 | } |
84 | ||
da7cd221 | 85 | //_______________________________________________________________________ |
86 | AliMagFCheb::~AliMagFCheb() | |
d28e407c | 87 | { |
da7cd221 | 88 | delete fMeasuredMap; |
d28e407c | 89 | } |
90 | ||
da7cd221 | 91 | //_______________________________________________________________________ |
92 | void AliMagFCheb::GetTPCInt(const Float_t *xyz, Float_t *b) const | |
0eea9d4d | 93 | { |
da7cd221 | 94 | // Method to calculate the integral of magnetic integral from xyz to nearest cathode plane |
0eea9d4d | 95 | // |
da7cd221 | 96 | b[0]=b[1]=b[2]=0.0; |
97 | if (fMeasuredMap) fMeasuredMap->GetTPCInt(xyz,b); | |
98 | for (int i=3;i--;) b[i] *= fFactor; | |
0eea9d4d | 99 | } |
100 | ||
da7cd221 | 101 | //_______________________________________________________________________ |
102 | void AliMagFCheb::GetTPCIntCyl(const Float_t *rphiz, Float_t *b) const | |
d28e407c | 103 | { |
da7cd221 | 104 | // Method to calculate the integral of magnetic integral from point to nearest cathode plane |
105 | // in cylindrical coordiates ( -pi<phi<pi convention ) | |
106 | b[0]=b[1]=b[2]=0.0; | |
107 | if (fMeasuredMap) fMeasuredMap->GetTPCIntCyl(rphiz,b); | |
108 | for (int i=3;i--;) b[i] *= fFactor; | |
d28e407c | 109 | } |
110 | ||
da7cd221 | 111 | //_______________________________________________________________________ |
112 | void AliMagFCheb::Field(const Float_t *xyz, Float_t *b) const | |
d28e407c | 113 | { |
da7cd221 | 114 | // Method to calculate the field at point xyz |
d28e407c | 115 | // |
da7cd221 | 116 | b[0]=b[1]=b[2]=0.0; |
117 | if (xyz[2] > 919. || xyz[2] < -1972.) { | |
118 | ZDCField(xyz, b); | |
119 | } else { | |
120 | if (fMeasuredMap && fFactor !=0.) { | |
121 | fMeasuredMap->Field(xyz,b); | |
122 | for (int i=3;i--;) b[i] *= fFactor; | |
d28e407c | 123 | } |
d28e407c | 124 | } |
d28e407c | 125 | } |
126 | ||
da7cd221 | 127 | //_______________________________________________________________________ |
128 | void AliMagFCheb::Field(const Double_t *xyz, Double_t *b) const | |
0eea9d4d | 129 | { |
da7cd221 | 130 | // Method to calculate the field at point xyz |
0eea9d4d | 131 | // |
da7cd221 | 132 | b[0]=b[1]=b[2]=0.0; |
133 | if (xyz[2] > 919. || xyz[2] < -1972.) { | |
134 | ZDCField(xyz, b); | |
135 | } | |
136 | else { | |
137 | if (fMeasuredMap && fFactor !=0.) { | |
138 | fMeasuredMap->Field(xyz,b); | |
139 | for (int i=3;i--;) b[i] *= fFactor; | |
0eea9d4d | 140 | } |
0eea9d4d | 141 | } |
0eea9d4d | 142 | } |
143 | ||
da7cd221 | 144 | //_______________________________________________________________________ |
145 | AliMagFCheb& AliMagFCheb::operator=(const AliMagFCheb& maps) | |
0eea9d4d | 146 | { |
da7cd221 | 147 | fSolenoid=maps.fSolenoid; |
148 | if (this != &maps && maps.fMeasuredMap) { | |
149 | if (fMeasuredMap) delete fMeasuredMap; | |
150 | fMeasuredMap = new AliMagWrapCheb(*maps.fMeasuredMap); | |
d28e407c | 151 | } |
da7cd221 | 152 | return *this; |
0eea9d4d | 153 | } |
0eea9d4d | 154 | |
da7cd221 | 155 | //_______________________________________________________________________ |
156 | void AliMagFCheb::SetMeasuredMap(AliMagWrapCheb* parm) | |
0eea9d4d | 157 | { |
da7cd221 | 158 | if (fMeasuredMap) delete fMeasuredMap; |
159 | fMeasuredMap = parm; | |
0eea9d4d | 160 | } |