BmnRoot
26.10.0-18-g4e3414f9
Software framework of the BM@N experiment
Toggle main menu visibility
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
14
BmnMwpcGeometrySRC::BmnMwpcGeometrySRC
(
Int_t
periodNum,
Int_t
runNum)
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
];
35
fZleft
=
new
Double_t
[
fNChambers
];
36
fZright
=
new
Double_t
[
fNChambers
];
37
fAngleX
=
new
Double_t
[
fNChambers
];
38
fAngleY
=
new
Double_t
[
fNChambers
];
39
fZPlanePos
=
new
Double_t
*[
fNChambers
];
40
for
(
Int_t
i
= 0;
i
<
fNChambers
;
i
++) {
41
fZPlanePos
[
i
] =
new
Double_t
[
fNPlanes
];
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;
51
fPlaneWidth
=
fNWires
*
fWireStep
;
52
53
fSpaceLeft
= 2.1338;
// According to schemes provided by M. Rumyantsev
54
fSpaceRight
= 2.1328;
// According to schemes given by M. Rumyantsev
55
56
fChamberWidth
=
fSpaceLeft
+
fSpaceLeft
+ (
fNPlanes
- 1) *
fPlaneStep
;
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;
73
fZleft
[0] =
fZright
[2] -
fChamberWidth
;
74
fX
[1] = 0.234;
75
fY
[1] = 6.140;
76
fZright
[1] =
fGlobalZdiff
+ 437.568 + 1.1;
77
fZleft
[1] =
fZright
[3] -
fChamberWidth
;
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;
84
fZleft
[0] =
fZright
[0] -
fChamberWidth
;
85
86
fX
[1] = -0.109 + 0.516;
87
fY
[1] = -3.601 + 0.44 - 4.5;
88
fZright
[1] =
fGlobalZdiff
- 107.363;
89
fZleft
[1] =
fZright
[1] -
fChamberWidth
;
90
91
fX
[2] = 0.271 + 0.56;
92
fY
[2] = 6.038 + 0.1 - 4.5;
93
fZright
[2] =
fGlobalZdiff
+ 287.858;
94
fZleft
[2] =
fZright
[2] -
fChamberWidth
;
95
96
fX
[3] = 0.234 + 0.56;
97
fY
[3] = 6.140 + 0.1 - 4.5;
98
fZright
[3] =
fGlobalZdiff
+ 437.568;
99
fZleft
[3] =
fZright
[3] -
fChamberWidth
;
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
233
TVector3
BmnMwpcGeometrySRC::GetChamberCenter
(
Int_t
chamber)
234
{
235
return
TVector3
(
fX
[chamber],
fY
[chamber], (
fZright
[chamber] +
fZleft
[chamber]) * 0.5);
236
}
237
238
TVector3
BmnMwpcGeometrySRC::GetAxisPrime
(
Int_t
chamber,
Int_t
axis)
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
250
Double_t
BmnMwpcGeometrySRC::GetTx
(
Int_t
chamber)
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
263
Double_t
BmnMwpcGeometrySRC::GetTy
(
Int_t
chamber)
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
276
BmnMwpcGeometrySRC::~BmnMwpcGeometrySRC
()
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
}
i
int i
Definition
P4_F32vec4.h:22
Int_t
int Int_t
kFALSE
constexpr Bool_t kFALSE
Double_t
double Double_t
BmnMwpcGeometrySRC::fDebug
Bool_t fDebug
Definition
BmnMwpcGeometrySRC.h:94
BmnMwpcGeometrySRC::fSpaceLeft
Double_t fSpaceLeft
Definition
BmnMwpcGeometrySRC.h:78
BmnMwpcGeometrySRC::fOXprime
TVector3 fOXprime[4]
Definition
BmnMwpcGeometrySRC.h:96
BmnMwpcGeometrySRC::fX
Double_t * fX
Definition
BmnMwpcGeometrySRC.h:87
BmnMwpcGeometrySRC::fZright
Double_t * fZright
[4][6];
Definition
BmnMwpcGeometrySRC.h:85
BmnMwpcGeometrySRC::fTimeBin
Short_t fTimeBin
Definition
BmnMwpcGeometrySRC.h:71
BmnMwpcGeometrySRC::fSpaceRight
Double_t fSpaceRight
Definition
BmnMwpcGeometrySRC.h:79
BmnMwpcGeometrySRC::fNWires
Short_t fNWires
Definition
BmnMwpcGeometrySRC.h:72
BmnMwpcGeometrySRC::fAngleX
Double_t * fAngleX
Definition
BmnMwpcGeometrySRC.h:81
BmnMwpcGeometrySRC::fZPlanePos
Double_t ** fZPlanePos
Definition
BmnMwpcGeometrySRC.h:84
BmnMwpcGeometrySRC::fOYprime
TVector3 fOYprime[4]
Definition
BmnMwpcGeometrySRC.h:97
BmnMwpcGeometrySRC::fAngleY
Double_t * fAngleY
Definition
BmnMwpcGeometrySRC.h:82
BmnMwpcGeometrySRC::fAngleStep
Double_t fAngleStep
Definition
BmnMwpcGeometrySRC.h:73
BmnMwpcGeometrySRC::fWireStep
Double_t fWireStep
Definition
BmnMwpcGeometrySRC.h:74
BmnMwpcGeometrySRC::GetTy
Double_t GetTy(Int_t chamber)
Definition
BmnMwpcGeometrySRC.cxx:263
BmnMwpcGeometrySRC::fPlaneHeight
Double_t fPlaneHeight
Definition
BmnMwpcGeometrySRC.h:76
BmnMwpcGeometrySRC::fPlaneStep
Double_t fPlaneStep
Definition
BmnMwpcGeometrySRC.h:75
BmnMwpcGeometrySRC::fY
Double_t * fY
Definition
BmnMwpcGeometrySRC.h:88
BmnMwpcGeometrySRC::GetTx
Double_t GetTx(Int_t chamber)
Definition
BmnMwpcGeometrySRC.cxx:250
BmnMwpcGeometrySRC::~BmnMwpcGeometrySRC
virtual ~BmnMwpcGeometrySRC()
Destructor.
Definition
BmnMwpcGeometrySRC.cxx:276
BmnMwpcGeometrySRC::GetChamberCenter
TVector3 GetChamberCenter(Int_t chamber)
Definition
BmnMwpcGeometrySRC.cxx:233
BmnMwpcGeometrySRC::GetAxisPrime
TVector3 GetAxisPrime(Int_t chamber, Int_t axis)
Definition
BmnMwpcGeometrySRC.cxx:238
BmnMwpcGeometrySRC::BmnMwpcGeometrySRC
BmnMwpcGeometrySRC()
Definition
BmnMwpcGeometrySRC.h:27
BmnMwpcGeometrySRC::fZleft
Double_t * fZleft
Definition
BmnMwpcGeometrySRC.h:86
BmnMwpcGeometrySRC::fNChambers
Int_t fNChambers
Definition
BmnMwpcGeometrySRC.h:67
BmnMwpcGeometrySRC::fChamberWidth
Double_t fChamberWidth
Definition
BmnMwpcGeometrySRC.h:90
BmnMwpcGeometrySRC::fOZprime
TVector3 fOZprime[4]
Definition
BmnMwpcGeometrySRC.h:98
BmnMwpcGeometrySRC::fGlobalZdiff
Double_t fGlobalZdiff
Definition
BmnMwpcGeometrySRC.h:92
BmnMwpcGeometrySRC::fNPlanes
Int_t fNPlanes
Definition
BmnMwpcGeometrySRC.h:68
BmnMwpcGeometrySRC::fPlaneWidth
Double_t fPlaneWidth
Definition
BmnMwpcGeometrySRC.h:77
BmnMwpcGeometrySRC::kCh_max
Int_t kCh_max
Definition
BmnMwpcGeometrySRC.h:70
TVector3
BmnMwpcGeometrySRC.h
TMath::DegToRad
constexpr Double_t DegToRad()
TMath::Tan
Double_t Tan(Double_t)
detectors
mwpc
BmnMwpcGeometrySRC.cxx
Generated on
for BmnRoot by
1.17.0