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 | } |