108 int i = fSignalLayer[signalLayerNo];
109 int wireNoInLayer = 2 *
wireNo + 1 - fLayer[i].FirstWire();
110 double phi = fLayer[i].Phi();
111 double shiftPhi = fLayer[i].ShiftPhi();
113 wirePhi = wireNoInLayer * shiftPhi + phi;
115 BesMdcWire temp( fLayer[i].Length(), fWirePhi[fLayer[i].BeginWireNo() + wireNoInLayer],
116 fLayer[i].R(), fLayer[i].RotateAngle() );
134 double length, phi, r, rotateCell, rotateAngle;
135 double innerR, outR, z;
141 G4cout <<
"BOOST environment not set!" << G4endl;
144 geoPath +=
"/dat/Mdc.txt";
146 ifstream inFile( geoPath );
147 if ( !inFile.good() )
149 cout <<
"Error, mdc parameters file not exist" << endl;
153 getline( inFile, line );
154 inFile >> fLayerNo >> fWireNo >> fSignalLayerNo >> fSignalWireR >> fFieldWireR;
156 inFile.seekg( 1, ios::cur );
157 getline( inFile, line );
159 for ( i = 0; i < fSignalLayerNo; i++ )
161 inFile >> signalLayer;
162 fSignalLayer[i] = signalLayer - 1;
165 inFile.seekg( 1, ios::cur );
166 getline( inFile, line );
167 getline( inFile, line );
168 for ( i = 0; i < fLayerNo; i++ )
170 inFile >> name >>
wireNo >> length >> r >> phi >> firstWire >> rotateCell;
171 getline( inFile, line );
173 rotateAngle = 2 *
pi * rotateCell /
wireNo;
175 fLayer[i].SetName( name );
176 fLayer[i].SetRadius( r );
177 fLayer[i].SetLength( length );
178 fLayer[i].SetRotateCell( rotateCell );
179 fLayer[i].SetRotateAngle( rotateAngle );
180 fLayer[i].SetWireNo(
wireNo );
181 fLayer[i].SetShiftPhi( twopi /
wireNo );
182 fLayer[i].SetFirstWire( firstWire );
185 if ( phi < 0 ) phi += fLayer[i].ShiftPhi();
186 fLayer[i].SetPhi( phi );
190 fLayer[i].SetSumWireNo(
wireNo );
191 fLayer[i].SetBeginWireNo( 0 );
195 fLayer[i].SetBeginWireNo( fLayer[i - 1].SumWireNo() );
196 fLayer[i].SetSumWireNo( fLayer[i - 1].SumWireNo() +
wireNo );
199 for (
int j = 0; j <
wireNo; j++ )
200 { fWirePhi[fLayer[i].BeginWireNo() + j] = j * fLayer[i].ShiftPhi() + phi; }
203 if ( fLayer[fLayerNo - 1].SumWireNo() != fWireNo )
204 { cout <<
"Total wire number is not consistant!" << endl; }
206 getline( inFile, line );
207 inFile >> fSegmentNo;
208 inFile.seekg( 1, ios::cur );
209 getline( inFile, line );
210 getline( inFile, line );
212 for ( i = 0; i < fSegmentNo; i++ )
214 inFile >> length >> innerR >> outR >> z >> name;
215 getline( inFile, line );
217 fMdcSegment[i].SetLength( length );
218 fMdcSegment[i].SetInnerR( innerR );
219 fMdcSegment[i].SetOutR( outR );
220 fMdcSegment[i].SetZ( z );
221 fMdcSegment[i].SetName( name );
227 ISvcLocator* svcLocator = Gaudi::svcLocator();
229 StatusCode sc = svcLocator->service(
"MdcGeomSvc", mdcGeomSvc );
230 if ( !sc.isSuccess() )
231 std::cout <<
"BesMdcGeoParameter::Could not open Geometry Service" << std::endl;
240 for ( i = 0; i < fSignalLayerNo; i++ )
243 fSignalLayer[i] = signalLayer - 1;
248 double length, r, phi, rotateCell, rotateAngle;
249 for ( i = 0; i < fLayerNo; i++ )
259 rotateAngle = 2 *
pi * rotateCell /
wireNo;
261 fLayer[i].SetName( name );
262 fLayer[i].SetRadius( r );
263 fLayer[i].SetLength( length );
264 fLayer[i].SetRotateCell( rotateCell );
265 fLayer[i].SetRotateAngle( rotateAngle );
266 fLayer[i].SetWireNo(
wireNo );
267 fLayer[i].SetShiftPhi( twopi /
wireNo );
268 fLayer[i].SetFirstWire( firstWire );
269 fLayer[i].SetPhi( phi );
273 fLayer[i].SetSumWireNo(
wireNo );
274 fLayer[i].SetBeginWireNo( 0 );
278 fLayer[i].SetBeginWireNo( fLayer[i - 1].SumWireNo() );
279 fLayer[i].SetSumWireNo( fLayer[i - 1].SumWireNo() +
wireNo );
282 for (
int j = 0; j <
wireNo; j++ )
283 { fWirePhi[fLayer[i].BeginWireNo() + j] = j * fLayer[i].ShiftPhi() + phi; }
286 if ( fLayer[fLayerNo - 1].SumWireNo() != fWireNo )
287 { cout <<
"Total wire number is not consistant!" << endl; }
289 double innerR, outR, z;
291 for ( i = 0; i < fSegmentNo; i++ )
295 outR = mdcGeomSvc->
End( i )->
OutR();
296 z = mdcGeomSvc->
End( i )->
Z();
297 name = mdcGeomSvc->
End( i )->
Name();
299 fMdcSegment[i].SetLength( length );
300 fMdcSegment[i].SetInnerR( innerR );
301 fMdcSegment[i].SetOutR( outR );
302 fMdcSegment[i].SetZ( z );
303 fMdcSegment[i].SetName( name );
309 cout <<
" fLayerNo: " << fLayerNo << endl;
310 cout <<
" fWireNo: " << fWireNo << endl;
311 cout <<
" fSignalLayerNo: " << fSignalLayerNo << endl;
312 cout <<
" fSignalWireR: " << fSignalWireR << endl;
313 cout <<
" fFieldWireR: " << fFieldWireR << endl;
315 cout <<
"fSingalLayer:" << endl;
316 for (
int i = 0; i < fSignalLayerNo; i++ ) { cout << fSignalLayer[i] + 1 <<
' '; }
319 for (
int i = 0; i < fLayerNo; i++ )
321 cout <<
"Layer[" << i <<
"]: "
322 <<
" name:" << fLayer[i].Name() <<
" wireNo:" << fLayer[i].WireNo()
323 <<
" length: " << fLayer[i].Length() <<
" r: " << fLayer[i].R();
324 if ( i < 75 ) cout <<
" phi:" << fLayer[i].Phi() * 180 /
pi;
325 else cout <<
" phi:" << ( fLayer[i].Phi() - fLayer[i].ShiftPhi() ) * 180 /
pi;
326 cout <<
" firstWire: " << fLayer[i].FirstWire()
327 <<
" rotateCell: " << fLayer[i].RotateCell() << endl;
330 cout <<
"fSegmentNo:" << fSegmentNo << endl;
331 for (
int j = 0; j < fSegmentNo; j++ )
333 cout <<
"length:" << fMdcSegment[j].Length() <<
" innerR:" << fMdcSegment[j].InnerR()
334 <<
" outR:" << fMdcSegment[j].OutR() <<
" z:" << fMdcSegment[j].Z()
335 <<
" name:" << fMdcSegment[j].Name() << endl;