BmnRoot
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
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// //
12#include "BmnMwpcGeometrySRC.h"
13
14BmnMwpcGeometrySRC::BmnMwpcGeometrySRC(Int_t periodNum, Int_t runNum) :
15fDebug(kFALSE) {
16 if(periodNum == 7 && runNum <= 3588){//SRC
17 fNChambers = 4;
18 kCh_max = 4;
19 fGlobalZdiff = -647.476; // location of SRC Z=0 relative to BM@N Z=0
20 }else if (periodNum == 6 || (periodNum == 7 && runNum > 3588) ){
21 fNChambers = 2;
22 kCh_max = 2;
23 fGlobalZdiff = -647.476;
24 }else if (periodNum == 8){//SRC
25 fNChambers = 4;
26 kCh_max = 4;
27 fGlobalZdiff = -574.91;
28 }
29
30 fNPlanes = 6;
31
32 fX = new Double_t [fNChambers];
33 fY = new Double_t [fNChambers];
34 fZleft = new Double_t [fNChambers];
35 fZright = new Double_t [fNChambers];
36 fAngleX = new Double_t [fNChambers];
37 fAngleY = new Double_t [fNChambers];
38 fZPlanePos = new Double_t*[fNChambers];
39 for(Int_t i=0; i<fNChambers; i++){
40 fZPlanePos[i] = new Double_t[fNPlanes];
41 }
42
43 fTimeBin = 8;
44 fNWires = 96;
45 fAngleStep = 60 * DegToRad();
46 fWireStep = 0.25;
47 fPlaneStep = 1.0015; // According to schemes provided by M. Rumyantsev
48
49 fPlaneHeight = 43.3;
50 fPlaneWidth = fNWires * fWireStep;
51
52 fSpaceLeft = 2.1338; // According to schemes provided by M. Rumyantsev
53 fSpaceRight = 2.1328; // According to schemes given by M. Rumyantsev
54
55 fChamberWidth = fSpaceLeft + fSpaceLeft + (fNPlanes - 1) * fPlaneStep;
56
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) fZright[1]
66 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
159
160 if(periodNum == 7 && runNum <= 3588){//SRC
161 for(Int_t ichh = 0; ichh < 3; ichh++){
162 for(int ii = 0; ii < fNPlanes; ii++){
163
164 if ( ichh < 2){
165 fZPlanePos[ichh][ii] = -0.5 + ii;
166 if(ii == 4) { fZPlanePos[ichh][ii] = -2.5;}
167 if(ii == 5) { fZPlanePos[ichh][ii] = -1.5;}
168 }
169 if( ichh == 2){
170 fZPlanePos[ichh][ii] = -1.5 + ii;
171 if(ii == 5) { fZPlanePos[ichh][ii] = -2.5;}
172 }
173 }
174 }
175 fZPlanePos[3][0] = -1.5;
176 fZPlanePos[3][1] = -2.5;
177 fZPlanePos[3][2] = 2.5;
178 fZPlanePos[3][3] = 1.5;
179 fZPlanePos[3][4] = 0.5;
180 fZPlanePos[3][5] = -0.5;
181 }
182 if(periodNum == 6 || (periodNum == 7 && runNum > 3588) || periodNum == 8){
183 for(Int_t ichh = 0; ichh < 2; ichh++){
184 for(int ii = 0; ii < fNPlanes; ii++){
185
186 fZPlanePos[ichh][ii] = -0.5 + ii;
187 if(ii == 4) { fZPlanePos[ichh][ii] = -2.5;}
188 if(ii == 5) { fZPlanePos[ichh][ii] = -1.5;}
189
190 }
191 }
192 }
193 if(periodNum == 8){//?
194 fZPlanePos[2][0] = 1.5;
195 fZPlanePos[2][1] = 0.5;
196 fZPlanePos[2][2] = -0.5;
197 fZPlanePos[2][3] = -1.5;
198 fZPlanePos[2][4] = -2.5;
199 fZPlanePos[2][5] = 2.5;
200
201 fZPlanePos[3][0] = 1.5;
202 fZPlanePos[3][1] = 2.5;
203 fZPlanePos[3][2] = -2.5;
204 fZPlanePos[3][3] = -1.5;
205 fZPlanePos[3][4] = -0.5;
206 fZPlanePos[3][5] = 0.5;
207 }
208
209 // Check built geometry
210 if (fDebug)
211 for (Int_t iChamber = 0; iChamber < fNChambers; iChamber++) {
212 cout << "MWPC" << iChamber + 1 << endl;
213 cout << "Zleft = " << fZleft[iChamber] << " Zright = " << fZright[iChamber] << endl;
214 cout << "OXprime : x = "<< endl;
215 fOXprime[iChamber].Print() ;
216 cout <<", y = "<< endl;
217 fOYprime[iChamber].Print();
218 cout<<", z = "<< endl;
219 fOZprime[iChamber].Print();
220 for (Int_t iPlane = 0; iPlane < fNPlanes; iPlane++)
221 cout << "zPlanePos " << iPlane + 1 << " " << fZPlanePos[iChamber][iPlane] << endl;
222 cout << endl;
223 }
224}
225
227 return TVector3(fX[chamber], fY[chamber], (fZright[chamber] + fZleft[chamber]) * 0.5);
228}
229
230TVector3 BmnMwpcGeometrySRC::GetAxisPrime(Int_t chamber, Int_t axis){
231 if(axis == 0) return fOXprime[chamber];
232 if(axis == 1) return fOYprime[chamber];
233 if(axis == 2) return fOZprime[chamber];
234
235 return TVector3();
236}
237//shift tgs
238Double_t BmnMwpcGeometrySRC::GetTx(Int_t chamber){
239 TVector3 ox(1.,0.,0.);
240 Double_t shiftX[4];
241 //?
242 shiftX[0] = -.033;
243 shiftX[1] = -.048;
244 shiftX[2] = -.033;
245 shiftX[3] = -.035;
246
247
248 return TMath::Tan(fOXprime[chamber].Angle(ox)) + shiftX[chamber];
249}
250
251Double_t BmnMwpcGeometrySRC::GetTy(Int_t chamber){
252 TVector3 oy(0.,1.,0.);
253 Double_t shiftY[4];
254
255 shiftY[0] = .003;
256 shiftY[1] = .008;
257 shiftY[2] = -.009;
258 shiftY[3] = -.014;
259
260
261 return TMath::Tan(fOYprime[chamber].Angle(oy)) + shiftY[chamber];
262}
263
265 delete[] fX;
266 delete[] fY;
267 delete[] fZleft;
268 delete[] fZright;
269 delete[] fAngleX;
270 delete[] fAngleY;
271 for(Int_t i=0; i<fNChambers; i++){
272 delete[] fZPlanePos[i];
273 }
274 delete[] fZPlanePos;
275
276}
int i
Definition P4_F32vec4.h:22
Double_t GetTy(Int_t chamber)
Double_t GetTx(Int_t chamber)
TVector3 GetChamberCenter(Int_t chamber)
TVector3 GetAxisPrime(Int_t chamber, Int_t axis)