BmnRoot 26.10.0-18-g4e3414f9
Software framework of the BM@N experiment
Loading...
Searching...
No Matches
BmnMwpcGeometrySRC.cxx
Go to the documentation of this file.
1// @(#)bmnroot/mwpc:$Id$
2// Author: Maria Patsyuk <mpatsyuk@mit.ru> 2018-02-10
3
4////////////////////////////////////////////////////////////////////////////////
5// //
6// BmnMwpcGeometrySRC //
7// //
8// A class containing geometry params. of //
9// the Multi Wire Prop. Chambers of the SRC at BM@N experiment //
10// //
11////////////////////////////////////////////////////////////////////////////////
12#include "BmnMwpcGeometrySRC.h"
13
15 : fDebug(kFALSE)
16{
17 if (periodNum == 7 && runNum <= 3588) { // SRC
18 fNChambers = 4;
19 kCh_max = 4;
20 fGlobalZdiff = -647.476; // location of SRC Z=0 relative to BM@N Z=0
21 } else if (periodNum == 6 || (periodNum == 7 && runNum > 3588)) {
22 fNChambers = 2;
23 kCh_max = 2;
24 fGlobalZdiff = -647.476;
25 } else if (periodNum == 8) { // SRC
26 fNChambers = 4;
27 kCh_max = 4;
28 fGlobalZdiff = -574.91;
29 }
30
31 fNPlanes = 6;
32
33 fX = new Double_t[fNChambers];
34 fY = new Double_t[fNChambers];
40 for (Int_t i = 0; i < fNChambers; i++) {
42 }
43
44 fTimeBin = 8;
45 fNWires = 96;
46 fAngleStep = 60 * DegToRad();
47 fWireStep = 0.25;
48 fPlaneStep = 1.0015; // According to schemes provided by M. Rumyantsev
49
50 fPlaneHeight = 43.3;
52
53 fSpaceLeft = 2.1338; // According to schemes provided by M. Rumyantsev
54 fSpaceRight = 2.1328; // According to schemes given by M. Rumyantsev
55
57
58 // MWPCs along the beam: 0, 1, 2, 3
59
60 /*
61 Reference frame is related to left side of the magnetic pole (z = 0, zC = 124.5 cm)
62 -----> Z -----> (MWPC -> GEM -> DCH)
63 MWPC1 MWPC2
64
65 fZleft[0] (fSpaceLeft | | | | | | fSpaceRight) fZright[0] fZleft[1] (fSpaceLeft | | | | | | fSpaceRight)
66 fZright[1] 1 2 3 4 5 6 1 2 3 4 5 6
67 */
68
69 if (periodNum == 6) {
70 fX[0] = 0.271;
71 fY[0] = 6.038;
72 fZright[0] = fGlobalZdiff + 287.858 - .4;
74 fX[1] = 0.234;
75 fY[1] = 6.140;
76 fZright[1] = fGlobalZdiff + 437.568 + 1.1;
78
79 } else if (periodNum == 7 && runNum > 001 && runNum <= 3588) { // shift//cm //SRC
80
81 fX[0] = -0.24 + 0.516;
82 fY[0] = -3.342 + 0.44 - 4.5;
83 fZright[0] = fGlobalZdiff - 206.042;
85
86 fX[1] = -0.109 + 0.516;
87 fY[1] = -3.601 + 0.44 - 4.5;
88 fZright[1] = fGlobalZdiff - 107.363;
90
91 fX[2] = 0.271 + 0.56;
92 fY[2] = 6.038 + 0.1 - 4.5;
93 fZright[2] = fGlobalZdiff + 287.858;
95
96 fX[3] = 0.234 + 0.56;
97 fY[3] = 6.140 + 0.1 - 4.5;
98 fZright[3] = fGlobalZdiff + 437.568;
100
101 } else if (periodNum == 8) { // shift//cm
102
103 fX[0] = .272;
104 fY[0] = .160;
105 fZleft[0] = fGlobalZdiff - 249.222;
106 fZright[0] = fZleft[0] - fChamberWidth;
107
108 fX[1] = -.113;
109 fY[1] = .060;
110 fZleft[1] = fGlobalZdiff - 175.424;
111 fZright[1] = fZleft[1] - fChamberWidth;
112
113 fX[2] = .078;
114 fY[2] = .564;
115 fZright[2] = fGlobalZdiff + 220.431;
116 fZleft[2] = fZright[2] - fChamberWidth;
117
118 fX[3] = -.030;
119 fY[3] = .390;
120 fZright[3] = fGlobalZdiff + 346.541;
121 fZleft[3] = fZright[3] - fChamberWidth;
122
123 } else if (periodNum == 7 && runNum == 0001) { // MC //SRC
124
125 fX[0] = -0.24 + 0.5;
126 fY[0] = -3.342 - 4.5;
127 fZright[0] = fGlobalZdiff - 206.042;
128 fZleft[0] = fZright[0] - fChamberWidth;
129
130 fX[1] = -0.109 + 0.5;
131 fY[1] = -3.601 - 4.5;
132 fZright[1] = fGlobalZdiff - 107.363;
133 fZleft[1] = fZright[1] - fChamberWidth;
134
135 fX[2] = 0.271 + 0.5;
136 fY[2] = 6.038 - 4.5;
137 fZright[2] = fGlobalZdiff + 287.858;
138 fZleft[2] = fZright[2] - fChamberWidth;
139
140 fX[3] = 0.234 + 0.5;
141 fY[3] = 6.140 - 4.5;
142 fZright[3] = fGlobalZdiff + 437.568;
143 fZleft[3] = fZright[3] - fChamberWidth;
144
145 } else if (periodNum == 7 && runNum > 3588) { // BMN
146
147 fX[0] = 0.271; //+ 1.09;
148 fY[0] = 6.038; //-.95;
149 fZright[0] = fGlobalZdiff + 287.858;
150 fZleft[0] = fZright[0] - fChamberWidth;
151
152 fX[1] = 0.234; //+ 1.34;
153 fY[1] = 6.140; //- .87;
154 fZright[1] = fGlobalZdiff + 437.568;
155 fZleft[1] = fZright[1] - fChamberWidth;
156 }
157
158 if (periodNum == 7 && runNum <= 3588) { // SRC
159 for (Int_t ichh = 0; ichh < 3; ichh++) {
160 for (int ii = 0; ii < fNPlanes; ii++) {
161
162 if (ichh < 2) {
163 fZPlanePos[ichh][ii] = -0.5 + ii;
164 if (ii == 4) {
165 fZPlanePos[ichh][ii] = -2.5;
166 }
167 if (ii == 5) {
168 fZPlanePos[ichh][ii] = -1.5;
169 }
170 }
171 if (ichh == 2) {
172 fZPlanePos[ichh][ii] = -1.5 + ii;
173 if (ii == 5) {
174 fZPlanePos[ichh][ii] = -2.5;
175 }
176 }
177 }
178 }
179 fZPlanePos[3][0] = -1.5;
180 fZPlanePos[3][1] = -2.5;
181 fZPlanePos[3][2] = 2.5;
182 fZPlanePos[3][3] = 1.5;
183 fZPlanePos[3][4] = 0.5;
184 fZPlanePos[3][5] = -0.5;
185 }
186 if (periodNum == 6 || (periodNum == 7 && runNum > 3588) || periodNum == 8) {
187 for (Int_t ichh = 0; ichh < 2; ichh++) {
188 for (int ii = 0; ii < fNPlanes; ii++) {
189
190 fZPlanePos[ichh][ii] = -0.5 + ii;
191 if (ii == 4) {
192 fZPlanePos[ichh][ii] = -2.5;
193 }
194 if (ii == 5) {
195 fZPlanePos[ichh][ii] = -1.5;
196 }
197 }
198 }
199 }
200 if (periodNum == 8) { //?
201 fZPlanePos[2][0] = 1.5;
202 fZPlanePos[2][1] = 0.5;
203 fZPlanePos[2][2] = -0.5;
204 fZPlanePos[2][3] = -1.5;
205 fZPlanePos[2][4] = -2.5;
206 fZPlanePos[2][5] = 2.5;
207
208 fZPlanePos[3][0] = 1.5;
209 fZPlanePos[3][1] = 2.5;
210 fZPlanePos[3][2] = -2.5;
211 fZPlanePos[3][3] = -1.5;
212 fZPlanePos[3][4] = -0.5;
213 fZPlanePos[3][5] = 0.5;
214 }
215
216 // Check built geometry
217 if (fDebug)
218 for (Int_t iChamber = 0; iChamber < fNChambers; iChamber++) {
219 cout << "MWPC" << iChamber + 1 << endl;
220 cout << "Zleft = " << fZleft[iChamber] << " Zright = " << fZright[iChamber] << endl;
221 cout << "OXprime : x = " << endl;
222 fOXprime[iChamber].Print();
223 cout << ", y = " << endl;
224 fOYprime[iChamber].Print();
225 cout << ", z = " << endl;
226 fOZprime[iChamber].Print();
227 for (Int_t iPlane = 0; iPlane < fNPlanes; iPlane++)
228 cout << "zPlanePos " << iPlane + 1 << " " << fZPlanePos[iChamber][iPlane] << endl;
229 cout << endl;
230 }
231}
232
234{
235 return TVector3(fX[chamber], fY[chamber], (fZright[chamber] + fZleft[chamber]) * 0.5);
236}
237
239{
240 if (axis == 0)
241 return fOXprime[chamber];
242 if (axis == 1)
243 return fOYprime[chamber];
244 if (axis == 2)
245 return fOZprime[chamber];
246
247 return TVector3();
248}
249// shift tgs
251{
252 TVector3 ox(1., 0., 0.);
253 Double_t shiftX[4];
254 //?
255 shiftX[0] = -.033;
256 shiftX[1] = -.048;
257 shiftX[2] = -.033;
258 shiftX[3] = -.035;
259
260 return TMath::Tan(fOXprime[chamber].Angle(ox)) + shiftX[chamber];
261}
262
264{
265 TVector3 oy(0., 1., 0.);
266 Double_t shiftY[4];
267
268 shiftY[0] = .003;
269 shiftY[1] = .008;
270 shiftY[2] = -.009;
271 shiftY[3] = -.014;
272
273 return TMath::Tan(fOYprime[chamber].Angle(oy)) + shiftY[chamber];
274}
275
277{
278 delete[] fX;
279 delete[] fY;
280 delete[] fZleft;
281 delete[] fZright;
282 delete[] fAngleX;
283 delete[] fAngleY;
284 for (Int_t i = 0; i < fNChambers; i++) {
285 delete[] fZPlanePos[i];
286 }
287 delete[] fZPlanePos;
288}
int i
Definition P4_F32vec4.h:22
int Int_t
constexpr Bool_t kFALSE
double Double_t
Double_t * fZright
[4][6];
Double_t GetTy(Int_t chamber)
Double_t GetTx(Int_t chamber)
virtual ~BmnMwpcGeometrySRC()
Destructor.
TVector3 GetChamberCenter(Int_t chamber)
TVector3 GetAxisPrime(Int_t chamber, Int_t axis)
constexpr Double_t DegToRad()
Double_t Tan(Double_t)