]>
Commit | Line | Data |
---|---|---|
aee8290b | 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 | **************************************************************************/ | |
15 | ||
acd84897 | 16 | /* $Id$ */ |
d8408e76 | 17 | |
116cbefd | 18 | //------------------------------------------------------------------------- |
116cbefd | 19 | // Constant magnetic field class |
5d8718b8 | 20 | // Used by AliRun class |
21 | // Author: | |
116cbefd | 22 | //------------------------------------------------------------------------- |
23 | ||
fb17acd4 | 24 | #include <stdlib.h> |
aee8290b | 25 | |
594d8990 | 26 | #include "AliLog.h" |
aee8290b | 27 | #include "AliMagFC.h" |
28 | ||
29 | ClassImp(AliMagFC) | |
30 | ||
60378f15 | 31 | //________________________________________ |
32 | AliMagFC::AliMagFC() | |
33 | :AliMagF(), | |
34 | fCompensator(kFALSE), | |
35 | fBeamType(kBeamTypepp), | |
36 | fBeamEnergy(0), | |
37 | fQuadGradient(0), | |
38 | fDipoleField(0), | |
39 | fCCorrField(0), | |
40 | fACorr1Field(0), | |
41 | fACorr2Field(0) | |
42 | { | |
43 | // | |
44 | // Default constructor | |
45 | // | |
46 | } | |
47 | ||
aee8290b | 48 | //________________________________________ |
d0f1ee3b | 49 | AliMagFC::AliMagFC(const char *name, const char *title, Int_t integ, |
50 | Float_t factor, Float_t fmax) | |
c28c3a0b | 51 | : AliMagF(name,title,integ,factor,fmax), |
60378f15 | 52 | fCompensator(kFALSE), |
53 | fBeamType(kBeamTypepp), | |
54 | fBeamEnergy(7000.), | |
55 | fQuadGradient(0), | |
56 | fDipoleField(0), | |
57 | fCCorrField(0), | |
58 | fACorr1Field(0), | |
59 | fACorr2Field(0) | |
60 | ||
aee8290b | 61 | { |
62 | // | |
63 | // Standard constructor | |
64 | // | |
aee8290b | 65 | fType = kConst; |
d8408e76 | 66 | fMap = 1; |
60378f15 | 67 | |
aee8290b | 68 | } |
69 | ||
70 | //________________________________________ | |
6f3038e9 | 71 | void AliMagFC::Field(Float_t *x, Float_t *b) const |
aee8290b | 72 | { |
73 | // | |
74 | // Method to return the field in a point | |
75 | // | |
76 | b[0]=b[1]=b[2]=0; | |
77 | if(fMap==1) { | |
78 | if(TMath::Abs(x[2])<700 && x[0]*x[0]+(x[1]+30)*(x[1]+30) < 560*560) { | |
79 | b[2]=2; | |
60378f15 | 80 | } |
81 | else { | |
82 | if(-725 >= x[2] && x[2] >= -1225 ){ | |
575c700d | 83 | Float_t dz = TMath::Abs(-975-x[2])*0.01; |
84 | b[0] = - (1-0.1*dz*dz)*7; | |
95d9681f | 85 | if(fFactor!=1) { |
86 | b[0]*=fFactor; | |
87 | b[1]*=fFactor; | |
88 | b[2]*=fFactor; | |
89 | } | |
aee8290b | 90 | } |
91 | else { | |
575c700d | 92 | ZDCField(x, b); |
d95ea23f | 93 | } |
94 | } | |
95d9681f | 95 | |
60378f15 | 96 | } |
97 | else { | |
594d8990 | 98 | AliFatal(Form("Invalid field map for constant field %d",fMap)); |
575c700d | 99 | } |
100 | } | |
101 | ||
60378f15 | 102 | //___________________________________________________ |
6f3038e9 | 103 | void AliMagFC::ZDCField(Float_t *x, Float_t *b) const |
575c700d | 104 | { |
60378f15 | 105 | // ---- This is the ZDC part |
106 | ||
107 | Float_t rad2 = x[0] * x[0] + x[1] * x[1]; | |
27bf203e | 108 | static Bool_t init = kFALSE; |
109 | ||
110 | if (! init) { | |
111 | init = kTRUE; | |
112 | ////////////////////////////////////////////////////////////////////// | |
113 | // ---- Magnetic field values (according to beam type and energy) ---- | |
114 | if(fBeamType==kBeamTypepp && fBeamEnergy == 5000.){ | |
115 | // p-p @ 5+5 TeV | |
116 | fQuadGradient = 15.7145; | |
117 | fDipoleField = 27.0558; | |
118 | // SIDE C | |
119 | fCCorrField = 9.7017; | |
120 | // SIDE A | |
121 | fACorr1Field = -13.2143; | |
122 | fACorr2Field = -11.9909; | |
123 | } else if (fBeamType == kBeamTypepp && fBeamEnergy == 450.) { | |
124 | // p-p 0.45+0.45 TeV | |
125 | Float_t const kEnergyRatio = fBeamEnergy / 7000.; | |
126 | ||
127 | fQuadGradient = 22.0002 * kEnergyRatio; | |
128 | fDipoleField = 37.8781 * kEnergyRatio; | |
129 | // SIDE C | |
130 | fCCorrField = 9.6908; | |
131 | // SIDE A | |
132 | fACorr1Field = -13.2014; | |
133 | fACorr2Field = -9.6908; | |
134 | } else if ((fBeamType == kBeamTypepp && fBeamEnergy == 7000.) || | |
135 | (fBeamType == kBeamTypeAA)) | |
136 | { | |
137 | // Pb-Pb @ 2.7+2.7 TeV or p-p @ 7+7 TeV | |
138 | fQuadGradient = 22.0002; | |
139 | fDipoleField = 37.8781; | |
140 | // SIDE C | |
141 | fCCorrField = 9.6908; | |
142 | // SIDE A | |
143 | fACorr1Field = -13.2014; | |
144 | fACorr2Field = -9.6908; | |
145 | } | |
146 | ||
147 | printf("Machine field %5d %13.3f %13.3f \n", fBeamType, fBeamEnergy, fDipoleField); | |
148 | } | |
149 | ||
60378f15 | 150 | |
151 | // SIDE C ************************************************** | |
152 | if(x[2]<0.){ | |
153 | if(x[2] < kCCorrBegin && x[2] > kCCorrEnd && rad2 < kCCorrSqRadius){ | |
95d9681f | 154 | if (fFactor != 0.) { |
155 | b[0] = fCCorrField; | |
156 | b[1] = 0.; | |
157 | b[2] = 0.; | |
158 | } | |
c28c3a0b | 159 | } |
60378f15 | 160 | else if(x[2] < kCQ1Begin && x[2] > kCQ1End && rad2 < kCQ1SqRadius){ |
161 | b[0] = fQuadGradient*x[1]; | |
162 | b[1] = fQuadGradient*x[0]; | |
163 | b[2] = 0.; | |
d95ea23f | 164 | } |
60378f15 | 165 | else if(x[2] < kCQ2Begin && x[2] > kCQ2End && rad2 < kCQ2SqRadius){ |
166 | b[0] = -fQuadGradient*x[1]; | |
167 | b[1] = -fQuadGradient*x[0]; | |
168 | b[2] = 0.; | |
d95ea23f | 169 | } |
60378f15 | 170 | else if(x[2] < kCQ3Begin && x[2] > kCQ3End && rad2 < kCQ3SqRadius){ |
171 | b[0] = -fQuadGradient*x[1]; | |
172 | b[1] = -fQuadGradient*x[0]; | |
173 | b[2] = 0.; | |
d95ea23f | 174 | } |
60378f15 | 175 | else if(x[2] < kCQ4Begin && x[2] > kCQ4End && rad2 < kCQ4SqRadius){ |
176 | b[0] = fQuadGradient*x[1]; | |
177 | b[1] = fQuadGradient*x[0]; | |
178 | b[2] = 0.; | |
d95ea23f | 179 | } |
60378f15 | 180 | else if(x[2] < kCD1Begin && x[2] > kCD1End && rad2 < kCD1SqRadius){ |
181 | b[1] = fDipoleField; | |
182 | b[2] = 0.; | |
183 | b[2] = 0.; | |
d95ea23f | 184 | } |
60378f15 | 185 | else if(x[2] < kCD2Begin && x[2] > kCD2End){ |
186 | if(((x[0]-kCD2XCentre1)*(x[0]-kCD2XCentre1)+(x[1]*x[1]))<kCD2SqRadius | |
187 | || ((x[0]-kCD2XCentre2)*(x[0]-kCD2XCentre2)+(x[1]*x[1]))<kCD2SqRadius){ | |
188 | b[1] = -fDipoleField; | |
189 | b[2] = 0.; | |
190 | b[2] = 0.; | |
575c700d | 191 | } |
aee8290b | 192 | } |
60378f15 | 193 | } |
194 | ||
195 | // SIDE A ************************************************** | |
196 | else{ | |
197 | if(fCompensator && (x[2] > kACorr1Begin && x[2] < kACorr1End) && rad2 < kCCorr1SqRadius) { | |
198 | // Compensator magnet at z = 1075 m | |
95d9681f | 199 | if (fFactor != 0.) { |
200 | b[0] = fACorr1Field; | |
201 | b[1] = 0.; | |
202 | b[2] = 0.; | |
203 | } | |
60378f15 | 204 | return; |
aee8290b | 205 | } |
575c700d | 206 | |
60378f15 | 207 | if(x[2] > kACorr2Begin && x[2] < kACorr2End && rad2 < kCCorr2SqRadius){ |
95d9681f | 208 | if (fFactor != 0.) { |
209 | b[0] = fACorr2Field; | |
210 | b[1] = 0.; | |
211 | b[2] = 0.; | |
212 | } | |
5ba7c883 | 213 | } |
60378f15 | 214 | else if(x[2] > kAQ1Begin && x[2] < kAQ1End && rad2 < kAQ1SqRadius){ |
5ba7c883 | 215 | // First quadrupole of inner triplet de-focussing in x-direction |
60378f15 | 216 | b[0] = -fQuadGradient*x[1]; |
217 | b[1] = -fQuadGradient*x[0]; | |
218 | b[2] = 0.; | |
5ba7c883 | 219 | } |
60378f15 | 220 | else if(x[2] > kAQ2Begin && x[2] < kAQ2End && rad2 < kAQ2SqRadius){ |
221 | b[0] = fQuadGradient*x[1]; | |
222 | b[1] = fQuadGradient*x[0]; | |
223 | b[2] = 0.; | |
5ba7c883 | 224 | } |
60378f15 | 225 | else if(x[2] > kAQ3Begin && x[2] < kAQ3End && rad2 < kAQ3SqRadius){ |
226 | b[0] = fQuadGradient*x[1]; | |
227 | b[1] = fQuadGradient*x[0]; | |
228 | b[2] = 0.; | |
5ba7c883 | 229 | } |
60378f15 | 230 | else if(x[2] > kAQ4Begin && x[2] < kAQ4End && rad2 < kAQ4SqRadius){ |
231 | b[0] = -fQuadGradient*x[1]; | |
232 | b[1] = -fQuadGradient*x[0]; | |
233 | b[2] = 0.; | |
5ba7c883 | 234 | } |
60378f15 | 235 | else if(x[2] > kAD1Begin && x[2] < kAD1End && rad2 < kAD1SqRadius){ |
236 | b[0] = 0.; | |
237 | b[1] = -fDipoleField; | |
238 | b[2] = 0.; | |
5ba7c883 | 239 | } |
60378f15 | 240 | else if(x[2] > kAD2Begin && x[2] < kAD2End){ |
241 | if(((x[0]-kAD2XCentre1)*(x[0]-kAD2XCentre1)+(x[1]*x[1])) < kAD2SqRadius | |
242 | || ((x[0]-kAD2XCentre2)*(x[0]-kAD2XCentre2)+(x[1]*x[1])) < kAD2SqRadius){ | |
243 | b[1] = fDipoleField; | |
5ba7c883 | 244 | } |
245 | } | |
60378f15 | 246 | } |
aee8290b | 247 | } |
60378f15 | 248 |