12#include "GaudiKernel/Bootstrap.h"
13#include "GaudiKernel/ISvcLocator.h"
14#include "GaudiKernel/MsgStream.h"
27 const std::string alignFile ) {
28 m_CreateFlag = createFlag;
29 m_AlignFlag = alignFlag;
30 m_AlignFile = alignFile;
32 Gaudi::svcLocator()->service(
"MessageSvc",
msgSvc );
40 delete[] m_StripPlaneOffset;
45 delete m_MucStripPlane;
57 MsgStream log(
msgSvc,
"MucGeoMgr" );
61 if ( m_AlignFlag ==
true )
63 log << MSG::INFO <<
"MucGeoMgr::initOffset()" << endmsg;
65 TFile* froot =
new TFile( m_AlignFile.c_str(),
"read" );
66 if ( froot->IsZombie() )
68 log << MSG::ERROR <<
"Open alignment data error!" << endmsg;
69 return StatusCode::FAILURE;
72 const char OFFSET_NAME[3][5] = {
"dx",
"dy",
"dz" };
74 double strpln_offset[3];
78 tr_Offset = (TTree*)froot->Get(
"Offset" );
79 tr_Offset->SetBranchAddress(
"box_dx", &box_offset[0] );
80 tr_Offset->SetBranchAddress(
"box_dy", &box_offset[1] );
81 tr_Offset->SetBranchAddress(
"box_dz", &box_offset[2] );
82 tr_Offset->SetBranchAddress(
"strpln_dx", &strpln_offset[0] );
83 tr_Offset->SetBranchAddress(
"strpln_dy", &strpln_offset[1] );
84 tr_Offset->SetBranchAddress(
"strpln_dz", &strpln_offset[2] );
86 int part, segment, layer;
87 part = segment = layer = 0;
89 log << MSG::INFO <<
"------------------------- offset data--------------------------"
91 log << MSG::INFO <<
"Part\tSegment\tLayer\tdx0\tdy0\tdz0\tdx1\tdy1\tdz1" << endmsg;
92 for (
int i = 0; i < BOX_MAX; i++ )
94 m_IdTr->SetBoxPos( i, &part, &segment, &layer );
95 tr_Offset->GetEntry( i );
97 log << MSG::INFO << part <<
"\t" << segment <<
"\t" << layer <<
"\t";
98 for (
int j = 0; j < 3; j++ )
100 log << MSG::INFO << box_offset[j] <<
"\t";
103 log << MSG::INFO << endmsg <<
"Box offset P" << part <<
"S" << segment <<
"L"
104 << layer <<
"_" << OFFSET_NAME[j] <<
"\tout range!" << endmsg;
105 box_offset[j] = B_X_MAX[j];
109 for (
int j = 0; j < 3; j++ )
111 log << MSG::INFO << strpln_offset[j] <<
"\t";
114 log << MSG::INFO << endmsg <<
"Strip plane offset P" << part <<
"S" << segment <<
"L"
115 << layer <<
"_" << OFFSET_NAME[j] <<
"\tout range!" << endmsg;
116 strpln_offset[j] = STR_OFFSET_MAX[j];
120 log << MSG::INFO << endmsg;
124 log << MSG::INFO <<
"---------------------------------------------------------------"
129 for (
int i = 0; i < PART_MAX; i++ )
130 for (
int j = 0; j < B_SEG_NUM; j++ )
131 for (
int k = 0; k < B_LAY_NUM; k++ )
132 for (
int m = 0; m < 3; m++ )
134 m_BoxOffset[i][j][k][m] = 0.0;
135 m_StripPlaneOffset[i][j][k][m] = 0.0;
139 return StatusCode::SUCCESS;
143 int outRangeFlag = 0;
151 if ( layer == 0 ) layerFlag = 0;
152 else if ( layer % 2 == 1 ) layerFlag = 1;
155 if ( B_X_MAX[layerFlag] - fabs( offset ) >= 0.0 )
156 m_BoxOffset[part][segment][layer][axis] = offset;
160 m_BoxOffset[part][segment][layer][axis] = B_X_MAX[layerFlag] * MAX_FRACTION;
164 if ( B_Y_MAX - fabs( offset ) >= 0.0 )
165 m_BoxOffset[part][segment][layer][axis] = offset;
169 m_BoxOffset[part][segment][layer][axis] = B_Y_MAX * MAX_FRACTION;
173 if ( B_Z_MAX - fabs( offset ) >= 0.0 )
174 m_BoxOffset[part][segment][layer][axis] = offset;
178 m_BoxOffset[part][segment][layer][axis] = B_Z_MAX * MAX_FRACTION;
186 if ( E_OFFSET_MAX[axis] - fabs( offset ) >= 0.0 )
187 m_BoxOffset[part][segment][layer][axis] = offset;
191 m_BoxOffset[part][segment][layer][axis] = E_OFFSET_MAX[axis] * MAX_FRACTION;
195 if ( outRangeFlag > 0 )
return false;
201 int outRangeFlag = 0;
203 if ( STR_OFFSET_MAX[axis] - fabs( offset ) >= 0.0 )
204 m_StripPlaneOffset[part][segment][layer][axis] = offset;
208 m_StripPlaneOffset[part][segment][layer][axis] = STR_OFFSET_MAX[axis] * MAX_FRACTION;
211 if ( outRangeFlag > 0 )
return false;
221 MsgStream log(
msgSvc,
"MucGeoMgr" );
227 for (
unsigned int i = m_CreateFlag.size(); i <
ENTITY_NUM; i++ ) m_CreateFlag +=
'0';
231 for (
unsigned int i = 0; i <
ENTITY_NUM; i++ )
232 if ( m_CreateFlag[i] ==
'1' ) entity++;
233 log << MSG::INFO << entity <<
"\tentities should be created." << endmsg << endmsg;
235 if ( m_CreateFlag[0] ==
'1' )
238 if ( sc == StatusCode::SUCCESS )
239 log << MSG::INFO <<
"Create absorber successfully!" << endmsg << endmsg;
240 else log << MSG::INFO <<
"Create absorber failure!" << endmsg << endmsg;
243 if ( m_CreateFlag[1] ==
'1' )
246 if ( sc == StatusCode::SUCCESS )
247 log << MSG::INFO <<
"Create gap successfully!" << endmsg << endmsg;
248 else log << MSG::INFO <<
"Create gap failure!" << endmsg << endmsg;
251 if ( m_CreateFlag[2] ==
'1' )
254 if ( sc == StatusCode::SUCCESS )
255 log << MSG::INFO <<
"Create box successfully!" << endmsg << endmsg;
256 else log << MSG::INFO <<
"Create box failure!" << endmsg << endmsg;
259 if ( m_CreateFlag[3] ==
'1' )
262 if ( sc == StatusCode::SUCCESS )
263 log << MSG::INFO <<
"Create strip_plane successfully!" << endmsg << endmsg;
264 else log << MSG::INFO <<
"Create strip_plane failure!" << endmsg << endmsg;
267 if ( m_CreateFlag[4] ==
'1' )
270 if ( sc == StatusCode::SUCCESS )
271 log << MSG::INFO <<
"Create strip successfully!" << endmsg << endmsg;
272 else log << MSG::INFO <<
"Create strip failure!" << endmsg << endmsg;
275 if ( m_CreateFlag[5] ==
'1' )
278 if ( sc == StatusCode::SUCCESS )
279 log << MSG::INFO <<
"Create RPC successfully!" << endmsg << endmsg;
280 else log << MSG::INFO <<
"Create RPC failure!" << endmsg << endmsg;
283 if ( m_CreateFlag[6] ==
'1' )
286 if ( sc == StatusCode::SUCCESS )
287 log << MSG::INFO <<
"Create gas mixture successfully!" << endmsg << endmsg;
288 else log << MSG::INFO <<
"Create gas mixture failure!" << endmsg << endmsg;
291 if ( m_CreateFlag[7] ==
'1' )
294 if ( sc == StatusCode::SUCCESS )
295 log << MSG::INFO <<
"Create bakelite successfully!" << endmsg << endmsg;
296 else log << MSG::INFO <<
"Create bakelite failure!" << endmsg << endmsg;
299 if ( m_CreateFlag[8] ==
'1' )
302 if ( sc == StatusCode::SUCCESS )
303 log << MSG::INFO <<
"Create box cover successfully!" << endmsg << endmsg;
304 else log << MSG::INFO <<
"Create box cover failure!" << endmsg << endmsg;
307 return StatusCode::SUCCESS;
313 MsgStream log(
msgSvc,
"MucGeoMgr" );
316 return StatusCode::SUCCESS;
322 MsgStream log(
msgSvc,
"MucGeoMgr" );
326 ofstream fEast(
"EastEndStripGeo.dat", ios::out );
327 ofstream fBarrel(
"BarrelStripGeo.dat", ios::out );
328 ofstream fWest(
"WestEndStripGeo.dat", ios::out );
330 if ( fEast.bad() || fBarrel.bad() || fWest.bad() )
332 log << MSG::INFO <<
"Strip: create ouput file error!" << endl;
333 return StatusCode::FAILURE;
336 for (
int i = 0; i < PART_MAX; i++ )
340 for (
int j = 0; j < B_SEG_NUM; j++ )
342 for (
int k = 0; k < B_LAY_NUM; k++ )
346 if ( ( k + 1 ) % 2 == 1 ) maxStrip = B_ZSTR_NUM;
347 else if ( j != B_TOP ) maxStrip = B_PHISTR_NUM;
348 else maxStrip = B_TOPSTR_NUM;
350 for (
int n = 0;
n < maxStrip;
n++ )
353 fBarrel << i <<
"\t" << j <<
"\t" << k <<
"\t" <<
n <<
"\t"
354 << aMucStrip->
GetType() - 2 <<
"\t" << aMucStrip->
GetL() <<
"\t"
355 << aMucStrip->
GetW() <<
"\t" << aMucStrip->
GetH() <<
"\t"
363 else if ( i == EEID )
365 for (
int j = 0; j < E_SEG_NUM; j++ )
367 for (
int k = 0; k < E_LAY_NUM; k++ )
369 for (
int n = 0;
n < E_STR_NUM;
n++ )
372 fEast << i <<
"\t" << j <<
"\t" << k <<
"\t" <<
n <<
"\t" << aMucStrip->
GetType()
373 <<
"\t" << aMucStrip->
GetL() <<
"\t" << aMucStrip->
GetW() <<
"\t"
384 for (
int j = 0; j < E_SEG_NUM; j++ )
386 for (
int k = 0; k < E_LAY_NUM; k++ )
388 for (
int n = 0;
n < E_STR_NUM;
n++ )
391 fWest << i <<
"\t" << j <<
"\t" << k <<
"\t" <<
n <<
"\t" << aMucStrip->
GetType()
392 <<
"\t" << aMucStrip->
GetL() <<
"\t" << aMucStrip->
GetW() <<
"\t"
408 log << MSG::INFO <<
"Online display strips created." << endmsg;
409 return StatusCode::SUCCESS;
418 MsgStream log(
msgSvc,
"MucGeoMgr" );
420 ofstream fOrigin(
"MucAbsorberOrigin.dat", ios::out );
421 ofstream fPanel(
"MucAbsorberPanel.dat", ios::out );
422 ofstream fPos(
"MucAbsorberPanelPos.dat", ios::out );
424 if ( fOrigin.bad() || fPanel.bad() || fPos.bad() )
426 log << MSG::INFO <<
"Absorber: create ouput file error!" << endmsg;
427 return StatusCode::FAILURE;
429 fOrigin <<
"part\tsegment\tlayer\tW\tH\tL\tBes_x\tBes_y\tBes_z\tRot_x\tRot_y\tRot_z" << endl;
430 fPanel <<
"part\tsegment\tlayer\tpanel\tWu\tWd\tH\tL\tLoc_x\tLoc_y\tLoc_z" << endl;
431 fPos <<
"part\tsegment\tlayer\tpanel\tLBes_x\tLBes_y\tLBes_z\tOBes_x\tOBes_y\tOBes_z\tLoc_"
437 for (
int i = 0; i < PART_MAX; i++ )
441 for (
int j = 0; j < B_SEG_NUM; j++ )
443 for (
int k = 0; k < B_LAY_NUM; k++ )
445 for (
int n = 0;
n < B_AS_NUM;
n++ )
448 fOrigin << i <<
"\t" << j <<
"\t" << k <<
"\t" << aMucAbsorber->
GetW() <<
"\t"
449 << aMucAbsorber->
GetH() <<
"\t" << aMucAbsorber->
GetL() <<
"\t"
456 fPanel << i <<
"\t" << j <<
"\t" << k <<
"\t" <<
n <<
"\t" << aMucAbsorber->
GetWu()
457 <<
"\t" << aMucAbsorber->
GetWd() <<
"\t" << aMucAbsorber->
GetH() <<
"\t"
461 fPos << i <<
"\t" << j <<
"\t" << k <<
"\t" <<
n <<
"\t"
480 for (
int j = 0; j < E_SEG_NUM; j++ )
482 for (
int k = 0; k < E_ASLAY_NUM; k++ )
484 for (
int n = -1;
n < E_PANEL_NUM;
n++ )
489 fOrigin << i <<
"\t" << j <<
"\t" << k <<
"\t" << aMucAbsorber->
GetW() <<
"\t"
490 << aMucAbsorber->
GetH() <<
"\t" << aMucAbsorber->
GetL() <<
"\t"
503 fPanel << i <<
"\t" << j <<
"\t" << k <<
"\t" <<
n <<
"\t"
504 << aMucAbsorber->
GetWu() <<
"\t" << aMucAbsorber->
GetWd() <<
"\t"
505 << aMucAbsorber->
GetH() <<
"\t" << aMucAbsorber->
GetL() <<
"\t"
510 fPos << i <<
"\t" << j <<
"\t" << k <<
"\t" <<
n <<
"\t"
532 log << MSG::INFO << totalObject <<
"\tabsorbers created." << endmsg;
534 return StatusCode::SUCCESS;
540 MsgStream log(
msgSvc,
"MucGeoMgr" );
542 ofstream fOrigin(
"MucGapOrigin.dat", ios::out );
543 ofstream fPanel(
"MucGapPanel.dat", ios::out );
544 ofstream fPos(
"MucGapPanelPos.dat", ios::out );
546 if ( fOrigin.bad() || fPanel.bad() || fPos.bad() )
548 log << MSG::INFO <<
"Gap: create ouput file error!" << endmsg;
549 return StatusCode::FAILURE;
551 fOrigin <<
"part\tsegment\tlayer\tW\tH\tL\tBes_x\tBes_y\tBes_z\tRot_x\tRot_y\tRot_z" << endl;
552 fPanel <<
"part\tsegment\tlayer\tpanel\tWu\tWd\tH\tL\tLoc_x\tLoc_y\tLoc_z" << endl;
553 fPos <<
"part\tsegment\tlayer\tpanel\tLBes_x\tLBes_y\tLBes_z\tOBes_x\tOBes_y\tOBes_z\tLoc_"
559 for (
int i = 0; i < PART_MAX; i++ )
563 for (
int j = 0; j < B_SEG_NUM; j++ )
578 for (
int k = 0; k < B_LAY_NUM; k++ )
580 for (
int n = idMin;
n < idMax;
n++ )
583 if ( j == B_TOP &&
n != -1 )
585 fPanel << i <<
"\t" << j <<
"\t" << k <<
"\t" <<
n <<
"\t" << aMucGap->
GetWu()
586 <<
"\t" << aMucGap->
GetWd() <<
"\t" << aMucGap->
GetH() <<
"\t"
592 if ( j != B_TOP ||
n == -1 )
594 fOrigin << i <<
"\t" << j <<
"\t" << k <<
"\t" << aMucGap->
GetW() <<
"\t"
595 << aMucGap->
GetH() <<
"\t" << aMucGap->
GetL() <<
"\t"
605 fPos << i <<
"\t" << j <<
"\t" << k <<
"\t" <<
n <<
"\t"
618 for (
int j = 0; j < E_SEG_NUM; j++ )
620 for (
int k = 0; k < E_LAY_NUM; k++ )
622 for (
int n = -1;
n < E_PANEL_NUM;
n++ )
627 fOrigin << i <<
"\t" << j <<
"\t" << k <<
"\t" << aMucGap->
GetW() <<
"\t"
628 << aMucGap->
GetH() <<
"\t" << aMucGap->
GetL() <<
"\t"
638 fPanel << i <<
"\t" << j <<
"\t" << k <<
"\t" <<
n <<
"\t" << aMucGap->
GetWu()
639 <<
"\t" << aMucGap->
GetWd() <<
"\t" << aMucGap->
GetH() <<
"\t"
644 fPos << i <<
"\t" << j <<
"\t" << k <<
"\t" <<
n <<
"\t"
663 log << MSG::INFO << totalObject <<
"\tgaps created." << endmsg;
664 return StatusCode::SUCCESS;
671 MsgStream log(
msgSvc,
"MucGeoMgr" );
674 ofstream fOrigin(
"MucBoxOrigin.dat", ios::out );
675 ofstream fPanel(
"MucBoxPanel.dat", ios::out );
676 ofstream fPos(
"MucBoxPanelPos.dat", ios::out );
678 if ( fOrigin.bad() || fPanel.bad() || fPos.bad() )
680 log << MSG::INFO <<
"Box: create ouput file error!" << endl;
681 return StatusCode::FAILURE;
683 fOrigin <<
"part\tsegment\tlayer\tW\tH\tL\tLoc_x\tLoc_y\tLoc_z" << endl;
684 fPanel <<
"part\tsegment\tlayer\tpanel\tWu\tWd\tH\tL\tLoc_x\tLoc_y\tLoc_z" << endl;
685 fPos <<
"part\tsegment\tlayer\tpanel\tLBes_x\tLBes_y\tLBes_z\tOBes_x\tOBes_y\tOBes_z\tLoc_"
690 for (
int i = 0; i < PART_MAX; i++ )
694 for (
int j = 0; j < B_SEG_NUM; j++ )
709 for (
int k = 0; k < B_LAY_NUM; k++ )
711 for (
int n = idMin;
n < idMax;
n++ )
714 if ( j == B_TOP &&
n != -1 )
716 fPanel << i <<
"\t" << j <<
"\t" << k <<
"\t" <<
n <<
"\t" << aMucBox->
GetWu()
717 <<
"\t" << aMucBox->
GetWd() <<
"\t" << aMucBox->
GetH() <<
"\t"
723 if ( j != B_TOP ||
n == -1 )
725 fOrigin << i <<
"\t" << j <<
"\t" << k <<
"\t" << aMucBox->
GetW() <<
"\t"
726 << aMucBox->
GetH() <<
"\t" << aMucBox->
GetL() <<
"\t"
734 fPos << i <<
"\t" << j <<
"\t" << k <<
"\t" <<
n <<
"\t"
748 for (
int j = 0; j < E_SEG_NUM; j++ )
750 for (
int k = 0; k < E_LAY_NUM; k++ )
752 for (
int n = -1;
n < E_PANEL_NUM;
n++ )
757 fOrigin << i <<
"\t" << j <<
"\t" << k <<
"\t" << aMucBox->
GetW() <<
"\t"
758 << aMucBox->
GetH() <<
"\t" << aMucBox->
GetL() <<
"\t"
767 fPanel << i <<
"\t" << j <<
"\t" << k <<
"\t" <<
n <<
"\t" << aMucBox->
GetWu()
768 <<
"\t" << aMucBox->
GetWd() <<
"\t" << aMucBox->
GetH() <<
"\t"
775 fPos << i <<
"\t" << j <<
"\t" << k <<
"\t" <<
n <<
"\t"
796 ofstream fOrgAlign(
"MucBoxOriginAligned.dat", ios::out );
797 fOrgAlign <<
"part\tsegment\tlayer\tW\tH\tL\tLoc_x\tLoc_y\tLoc_z" << endl;
799 for (
int i = 0; i < PART_MAX; i++ )
803 for (
int j = 0; j < B_SEG_NUM; j++ )
805 for (
int k = 0; k < B_LAY_NUM; k++ )
807 MucBox* aMucBox =
new MucBox( i, j, k, ( ( j == B_TOP ) ? -1 : 0 ) );
808 offset[0] = m_BoxOffset[i][j][k][0];
809 offset[1] = m_BoxOffset[i][j][k][1];
810 offset[2] = m_BoxOffset[i][j][k][2];
811 aMucBox->
SetAlignment( offset[0], offset[1], offset[2] );
813 fOrgAlign << i <<
"\t" << j <<
"\t" << k <<
"\t" << aMucBox->
GetW() <<
"\t"
814 << aMucBox->
GetH() <<
"\t" << aMucBox->
GetL() <<
"\t"
823 for (
int j = 0; j < E_SEG_NUM; j++ )
825 for (
int k = 0; k < E_LAY_NUM; k++ )
828 offset[0] = m_BoxOffset[i][j][k][0];
829 offset[1] = m_BoxOffset[i][j][k][1];
830 offset[2] = m_BoxOffset[i][j][k][2];
831 aMucBox->
SetAlignment( offset[0], offset[1], offset[2] );
833 fOrgAlign << i <<
"\t" << j <<
"\t" << k <<
"\t" << aMucBox->
GetW() <<
"\t"
834 << aMucBox->
GetH() <<
"\t" << aMucBox->
GetL() <<
"\t"
846 log << MSG::INFO << totalObject <<
"\tboxes created." << endmsg;
847 return StatusCode::SUCCESS;
854 MsgStream log(
msgSvc,
"MucGeoMgr" );
857 ofstream fOrigin(
"MucStripPlaneOrigin.dat", ios::out );
858 ofstream fPanel(
"MucStripPlanePanel.dat", ios::out );
859 ofstream fPos(
"MucStripPlanePanelPos.dat", ios::out );
861 if ( fOrigin.bad() || fPanel.bad() || fPos.bad() )
863 log << MSG::INFO <<
"StripPlane: create ouput file error!" << endl;
864 return StatusCode::FAILURE;
866 fOrigin <<
"part\tsegment\tlayer\tW\tH\tL\tLoc_x\tLoc_y\tLoc_z" << endl;
867 fPanel <<
"part\tsegment\tlayer\tpanel\tWu\tWd\tH\tL\tLoc_x\tLoc_y\tLoc_z" << endl;
868 fPos <<
"part\tsegment\tlayer\tpanel\tLBes_x\tLBes_y\tLBes_z\tOBes_x\tOBes_y\tOBes_z\tLoc_"
874 for (
int i = 0; i < PART_MAX; i++ )
878 for (
int j = 0; j < B_SEG_NUM; j++ )
880 for (
int k = 0; k < B_LAY_NUM; k++ )
884 for (
int n = -1;
n < B_STR_PANEL_NUM;
n++ )
889 fOrigin << i <<
"\t" << j <<
"\t" << k <<
"\t" << aMucStripPlane->
GetW()
890 <<
"\t" << aMucStripPlane->
GetH() <<
"\t" << aMucStripPlane->
GetL()
894 fPos << i <<
"\t" << j <<
"\t" << k <<
"\t" <<
n <<
"\t"
909 fPanel << i <<
"\t" << j <<
"\t" << k <<
"\t" <<
n <<
"\t"
910 << aMucStripPlane->
GetWu() <<
"\t" << aMucStripPlane->
GetWd() <<
"\t"
911 << aMucStripPlane->
GetH() <<
"\t" << aMucStripPlane->
GetL() <<
"\t"
916 fPos << i <<
"\t" << j <<
"\t" << k <<
"\t" <<
n <<
"\t"
933 fOrigin << i <<
"\t" << j <<
"\t" << k <<
"\t" << aMucStripPlane->
GetW() <<
"\t"
934 << aMucStripPlane->
GetH() <<
"\t" << aMucStripPlane->
GetL() <<
"\t"
938 fPos << i <<
"\t" << j <<
"\t" << k <<
"\t"
956 for (
int j = 0; j < E_SEG_NUM; j++ )
958 for (
int k = 0; k < E_LAY_NUM; k++ )
960 for (
int n = -1;
n < E_PANEL_NUM;
n++ )
965 fOrigin << i <<
"\t" << j <<
"\t" << k <<
"\t" << aMucStripPlane->
GetW() <<
"\t"
966 << aMucStripPlane->
GetH() <<
"\t" << aMucStripPlane->
GetL() <<
"\t"
971 fPos << i <<
"\t" << j <<
"\t" << k <<
"\t" <<
n <<
"\t"
986 fPanel << i <<
"\t" << j <<
"\t" << k <<
"\t" <<
n <<
"\t"
987 << aMucStripPlane->
GetWu() <<
"\t" << aMucStripPlane->
GetWd() <<
"\t"
988 << aMucStripPlane->
GetH() <<
"\t" << aMucStripPlane->
GetL() <<
"\t"
993 fPos << i <<
"\t" << j <<
"\t" << k <<
"\t" <<
n <<
"\t"
1018 ofstream fOrgAlign(
"MucStripPlaneOriginAligned.dat", ios::out );
1019 fOrgAlign <<
"part\tsegment\tlayer\tW\tH\tL\tLoc_x\tLoc_y\tLoc_z" << endl;
1021 for (
int i = 0; i < PART_MAX; i++ )
1025 for (
int j = 0; j < B_SEG_NUM; j++ )
1027 for (
int k = 0; k < B_LAY_NUM; k++ )
1030 offset[0] = m_StripPlaneOffset[i][j][k][0];
1031 offset[1] = m_StripPlaneOffset[i][j][k][1];
1032 offset[2] = m_StripPlaneOffset[i][j][k][2];
1033 aMucStripPlane->
SetAlignment( offset[0], offset[1], offset[2] );
1035 fOrgAlign << i <<
"\t" << j <<
"\t" << k <<
"\t" << aMucStripPlane->
GetW() <<
"\t"
1036 << aMucStripPlane->
GetH() <<
"\t" << aMucStripPlane->
GetL() <<
"\t"
1046 for (
int j = 0; j < E_SEG_NUM; j++ )
1048 for (
int k = 0; k < E_LAY_NUM; k++ )
1051 offset[0] = m_StripPlaneOffset[i][j][k][0];
1052 offset[1] = m_StripPlaneOffset[i][j][k][1];
1053 offset[2] = m_StripPlaneOffset[i][j][k][2];
1054 aMucStripPlane->
SetAlignment( offset[0], offset[1], offset[2] );
1056 fOrgAlign << i <<
"\t" << j <<
"\t" << k <<
"\t" << aMucStripPlane->
GetW() <<
"\t"
1057 << aMucStripPlane->
GetH() <<
"\t" << aMucStripPlane->
GetL() <<
"\t"
1070 log << MSG::INFO << totalObject <<
"\tstrip_planes created." << endmsg;
1071 return StatusCode::SUCCESS;
1077 MsgStream log(
msgSvc,
"MucGeoMgr" );
1080 ofstream fOrigin(
"MucStrip.dat", ios::out );
1081 ofstream fPos(
"MucStripPos.dat", ios::out );
1083 if ( fOrigin.bad() || fPos.bad() )
1085 log << MSG::INFO <<
"Strip: create ouput file error!" << endl;
1086 return StatusCode::FAILURE;
1089 <<
"part\tsegment\tlayer\tstrip\ttype\tW\tH\tL\tLoc_x\tLoc_y\tLoc_z\tBes_x\tBes_y\tBes_z"
1091 fPos <<
"part\tsegment\tlayer\tstrip\ttype\tLBes_x\tLBes_y\tLBes_z\tOBes_x\tOBes_y\tOBes_"
1092 "z\tLoc_x\tLoc_y\tLoc_z"
1095 int totalObject = 0;
1097 for (
int i = 0; i < PART_MAX; i++ )
1101 for (
int j = 0; j < B_SEG_NUM; j++ )
1103 for (
int k = 0; k < B_LAY_NUM; k++ )
1107 if ( ( k + 1 ) % 2 == 1 ) maxStrip = B_ZSTR_NUM;
1108 else if ( j != B_TOP ) maxStrip = B_PHISTR_NUM;
1109 else maxStrip = B_TOPSTR_NUM;
1111 for (
int n = 0;
n < maxStrip;
n++ )
1114 fOrigin << i <<
"\t" << j <<
"\t" << k <<
"\t" <<
n <<
"\t" << aMucStrip->
GetType()
1115 <<
"\t" << aMucStrip->
GetW() <<
"\t" << aMucStrip->
GetH() <<
"\t"
1122 fPos << i <<
"\t" << j <<
"\t" << k <<
"\t" <<
n <<
"\t" << aMucStrip->
GetType()
1139 for (
int j = 0; j < E_SEG_NUM; j++ )
1141 for (
int k = 0; k < E_LAY_NUM; k++ )
1143 for (
int n = 0;
n < E_STR_NUM;
n++ )
1146 fOrigin << i <<
"\t" << j <<
"\t" << k <<
"\t" <<
n <<
"\t" << aMucStrip->
GetType()
1147 <<
"\t" << aMucStrip->
GetW() <<
"\t" << aMucStrip->
GetH() <<
"\t"
1154 fPos << i <<
"\t" << j <<
"\t" << k <<
"\t" <<
n <<
"\t" << aMucStrip->
GetType()
1173 log << MSG::INFO << totalObject <<
"\tstrips created." << endmsg;
1174 return StatusCode::SUCCESS;
1180 MsgStream log(
msgSvc,
"MucGeoMgr" );
1183 ofstream fOrigin(
"MucRpc.dat", ios::out );
1184 ofstream fPos(
"MucRpcPos.dat", ios::out );
1186 if ( fOrigin.bad() || fPos.bad() )
1188 log << MSG::INFO <<
"Rpc: create ouput file error!" << endl;
1189 return StatusCode::FAILURE;
1191 fOrigin <<
"part\tsegment\tlayer\tupDown\trpc\tWu\tWd\tH\tL\tLoc_x\tLoc_y\tLoc_z\tBes_"
1194 fPos <<
"part\tsegment\tlayer\tupDown\trpc\tLBes_x\tLBes_y\tLBes_z\tOBes_x\tOBes_y\tOBes_"
1195 "z\tLoc_x\tLoc_y\tLoc_z"
1198 int totalObject = 0;
1200 for (
int i = 0; i < PART_MAX; i++ )
1204 for (
int j = 0; j < B_SEG_NUM; j++ )
1208 if ( j == B_TOP ) maxRpc = B_TOP_RPC_NUM;
1209 else maxRpc = B_RPC_NUM;
1211 for (
int k = 0; k < B_LAY_NUM; k++ )
1213 for (
int m = 0; m < SL_NUM; m++ )
1215 for (
int n = 0;
n < maxRpc;
n++ )
1218 fOrigin << i <<
"\t" << j <<
"\t" << k <<
"\t" << m <<
"\t" <<
n <<
"\t"
1219 << aMucRpc->
GetWu() <<
"\t" << aMucRpc->
GetWd() <<
"\t"
1220 << aMucRpc->
GetH() <<
"\t" << aMucRpc->
GetL() <<
"\t"
1226 fPos << i <<
"\t" << j <<
"\t" << k <<
"\t" << m <<
"\t" <<
n <<
"\t"
1243 for (
int j = 0; j < E_SEG_NUM; j++ )
1245 for (
int k = 0; k < E_LAY_NUM; k++ )
1247 for (
int m = 0; m < SL_NUM; m++ )
1249 for (
int n = 0;
n < E_RPC_NUM[m];
n++ )
1252 fOrigin << i <<
"\t" << j <<
"\t" << k <<
"\t" << m <<
"\t" <<
n <<
"\t"
1253 << aMucRpc->
GetWu() <<
"\t" << aMucRpc->
GetWd() <<
"\t"
1254 << aMucRpc->
GetH() <<
"\t" << aMucRpc->
GetL() <<
"\t"
1260 fPos << i <<
"\t" << j <<
"\t" << k <<
"\t" << m <<
"\t" <<
n <<
"\t"
1279 log << MSG::INFO << totalObject <<
"\t RPCs created." << endmsg;
1280 return StatusCode::SUCCESS;
1286 MsgStream log(
msgSvc,
"MucGeoMgr" );
1289 ofstream fOrigin(
"MucGas.dat", ios::out );
1290 ofstream fPos(
"MucGasPos.dat", ios::out );
1292 if ( fOrigin.bad() || fPos.bad() )
1294 log << MSG::INFO <<
"Gas: create ouput file error!" << endl;
1295 return StatusCode::FAILURE;
1297 fOrigin <<
"part\tsegment\tlayer\tupDown\tgas\tWu\tWd\tH\tL\tLoc_x\tLoc_y\tLoc_z\tBes_"
1300 fPos <<
"part\tsegment\tlayer\tupDown\tgas\tLBes_x\tLBes_y\tLBes_z\tOBes_x\tOBes_y\tOBes_"
1301 "z\tLoc_x\tLoc_y\tLoc_z"
1304 int totalObject = 0;
1306 for (
int i = 0; i < PART_MAX; i++ )
1310 for (
int j = 0; j < B_SEG_NUM; j++ )
1314 if ( j == B_TOP ) maxRpc = B_TOP_RPC_NUM;
1315 else maxRpc = B_RPC_NUM;
1317 for (
int k = 0; k < B_LAY_NUM; k++ )
1319 for (
int m = 0; m < SL_NUM; m++ )
1321 for (
int n = 0;
n < maxRpc;
n++ )
1324 fOrigin << i <<
"\t" << j <<
"\t" << k <<
"\t" << m <<
"\t" <<
n <<
"\t"
1325 << aMucGas->
GetWu() <<
"\t" << aMucGas->
GetWd() <<
"\t"
1326 << aMucGas->
GetH() <<
"\t" << aMucGas->
GetL() <<
"\t"
1332 fPos << i <<
"\t" << j <<
"\t" << k <<
"\t" <<
n <<
"\t"
1349 for (
int j = 0; j < E_SEG_NUM; j++ )
1351 for (
int k = 0; k < E_LAY_NUM; k++ )
1353 for (
int m = 0; m < SL_NUM; m++ )
1355 for (
int n = 0;
n < E_RPC_NUM[m];
n++ )
1358 fOrigin << i <<
"\t" << j <<
"\t" << k <<
"\t" << m <<
"\t" <<
n <<
"\t"
1359 << aMucGas->
GetWu() <<
"\t" << aMucGas->
GetWd() <<
"\t"
1360 << aMucGas->
GetH() <<
"\t" << aMucGas->
GetL() <<
"\t"
1366 fPos << i <<
"\t" << j <<
"\t" << k <<
"\t" << m <<
"\t" <<
n <<
"\t"
1385 log << MSG::INFO << totalObject <<
"\tgases created." << endmsg;
1386 return StatusCode::SUCCESS;
1392 MsgStream log(
msgSvc,
"MucGeoMgr" );
1395 ofstream fOrigin(
"MucBakelite.dat", ios::out );
1396 ofstream fPos(
"MucBakelitePos.dat", ios::out );
1398 if ( fOrigin.bad() || fPos.bad() )
1400 log << MSG::INFO <<
"Bakelite: create ouput file error!" << endl;
1401 return StatusCode::FAILURE;
1403 fOrigin <<
"part\tsegment\tlayer\tupDown\trpcId\tBKLT\t"
1404 <<
"Wu\tWd\tH\tL\tLoc_x\tLoc_y\tLoc_z\tBes_x\tBes_y\tBes_z" << endl;
1405 fPos <<
"part\tsegment\tlayer\tupDown\trpcId\tBKLT\t"
1406 <<
"LBes_x\tLBes_y\tLBes_z\tOBes_x\tOBes_y\tOBes_z\tLoc_x\tLoc_y\tLoc_z" << endl;
1408 int totalObject = 0;
1410 for (
int i = 0; i < PART_MAX; i++ )
1414 for (
int j = 0; j < B_SEG_NUM; j++ )
1418 if ( j == B_TOP ) maxRpc = B_TOP_RPC_NUM;
1419 else maxRpc = B_RPC_NUM;
1421 for (
int k = 0; k < B_LAY_NUM; k++ )
1423 for (
int m = 0; m < SL_NUM; m++ )
1425 for (
int n = 0;
n < maxRpc;
n++ )
1427 for (
int t = 0;
t < BKLT_NUM;
t++ )
1430 fOrigin << i <<
"\t" << j <<
"\t" << k <<
"\t" << m <<
"\t" <<
n <<
"\t" <<
t
1431 <<
"\t" << aMucBakelite->
GetWu() <<
"\t" << aMucBakelite->
GetWd()
1432 <<
"\t" << aMucBakelite->
GetH() <<
"\t" << aMucBakelite->
GetL() <<
"\t"
1440 fPos << i <<
"\t" << j <<
"\t" << k <<
"\t" << m <<
"\t" <<
n <<
"\t" <<
t
1461 for (
int j = 0; j < E_SEG_NUM; j++ )
1463 for (
int k = 0; k < E_LAY_NUM; k++ )
1465 for (
int m = 0; m < SL_NUM; m++ )
1467 for (
int n = 0;
n < E_RPC_NUM[m];
n++ )
1469 for (
int t = 0;
t < BKLT_NUM;
t++ )
1472 fOrigin << i <<
"\t" << j <<
"\t" << k <<
"\t" << m <<
"\t" <<
n <<
"\t" <<
t
1473 <<
"\t" << aMucBakelite->
GetWu() <<
"\t" << aMucBakelite->
GetWd()
1474 <<
"\t" << aMucBakelite->
GetH() <<
"\t" << aMucBakelite->
GetL() <<
"\t"
1482 fPos << i <<
"\t" << j <<
"\t" << k <<
"\t" << m <<
"\t" <<
n <<
"\t" <<
t
1506 log << MSG::INFO << totalObject <<
"\tbakelites created." << endmsg;
1507 return StatusCode::SUCCESS;
1513 MsgStream log(
msgSvc,
"MucGeoMgr" );
1516 ofstream fOrigin(
"MucBoxCoverOrigin.dat", ios::out );
1517 ofstream fPanel(
"MucBoxCoverPanel.dat", ios::out );
1518 ofstream fPos(
"MucBoxCoverPanelPos.dat", ios::out );
1520 if ( fOrigin.bad() || fPanel.bad() || fPos.bad() )
1522 log << MSG::INFO <<
"BoxCover: create ouput file error!" << endl;
1523 return StatusCode::FAILURE;
1525 fOrigin <<
"part\tsegment\tlayer\tU/D\tW\tH\tL\tLoc_x\tLoc_y\tLoc_z" << endl;
1526 fPanel <<
"part\tsegment\tlayer\tU/D\tpanel\tWu\tWd\tH\tL\tLoc_x\tLoc_y\tLoc_z" << endl;
1527 fPos <<
"part\tsegment\tlayer\tU/"
1528 "D\tpanel\tLBes_x\tLBes_y\tLBes_z\tOBes_x\tOBes_y\tOBes_z\tLoc_x\tLoc_y\tLoc_z"
1531 int totalObject = 0;
1533 for (
int i = 0; i < PART_MAX; i++ )
1537 for (
int j = 0; j < B_SEG_NUM; j++ )
1552 for (
int k = 0; k < B_LAY_NUM; k++ )
1554 for (
int m = 0; m < SL_NUM; m++ )
1556 for (
int n = idMin;
n < idMax;
n++ )
1559 if ( j == B_TOP ||
n != -1 )
1561 fPanel << i <<
"\t" << j <<
"\t" << k <<
"\t" << m <<
"\t" <<
n <<
"\t"
1562 << aMucBoxCover->
GetW() <<
"\t" << aMucBoxCover->
GetW() <<
"\t"
1563 << aMucBoxCover->
GetH() <<
"\t" << aMucBoxCover->
GetL() <<
"\t"
1570 if ( j != B_TOP ||
n == -1 )
1572 fOrigin << i <<
"\t" << j <<
"\t" << k <<
"\t" << m <<
"\t"
1573 << aMucBoxCover->
GetW() <<
"\t" << aMucBoxCover->
GetH() <<
"\t"
1582 fPos << i <<
"\t" << j <<
"\t" << k <<
"\t" << m <<
"\t" <<
n <<
"\t"
1600 for (
int j = 0; j < E_SEG_NUM; j++ )
1602 for (
int k = 0; k < E_LAY_NUM; k++ )
1604 for (
int m = 0; m < SL_NUM; m++ )
1606 for (
int n = -1;
n < E_PANEL_NUM;
n++ )
1611 fOrigin << i <<
"\t" << j <<
"\t" << k <<
"\t" << m <<
"\t"
1612 << aMucBoxCover->
GetW() <<
"\t" << aMucBoxCover->
GetH() <<
"\t"
1621 fPanel << i <<
"\t" << j <<
"\t" << k <<
"\t" << m <<
"\t" <<
n <<
"\t"
1622 << aMucBoxCover->
GetWu() <<
"\t" << aMucBoxCover->
GetWd() <<
"\t"
1623 << aMucBoxCover->
GetH() <<
"\t" << aMucBoxCover->
GetL() <<
"\t"
1630 fPos << i <<
"\t" << j <<
"\t" << k <<
"\t" << m <<
"\t" <<
n <<
"\t"
1652 log << MSG::INFO << totalObject <<
"\tbox_covers created." << endmsg;
1653 return StatusCode::SUCCESS;
1660 if ( m_MucAbsorber != NULL )
delete m_MucAbsorber;
1661 return ( m_MucAbsorber =
new MucAbsorber( part, segment, layer,
id ) );
1665 if ( m_MucGap != NULL )
delete m_MucGap;
1666 return ( m_MucGap =
new MucGap( part, segment, layer,
id ) );
1670 if ( m_MucBox != NULL )
delete m_MucBox;
1671 return ( m_MucBox =
new MucBox( part, segment, layer,
id ) );
1675 if ( m_MucStripPlane != NULL )
delete m_MucStripPlane;
1676 return ( m_MucStripPlane =
new MucStripPlane( part, segment, layer,
id ) );
1680 if ( m_MucStrip != NULL )
delete m_MucStrip;
1681 return ( m_MucStrip =
new MucStrip( part, segment, layer,
id ) );
1685 if ( m_MucRpc != NULL )
delete m_MucRpc;
1686 return ( m_MucRpc =
new MucRpc( part, segment, layer, upDown,
id ) );
1690 if ( m_MucGas != NULL )
delete m_MucGas;
1691 return ( m_MucGas =
new MucGas( part, segment, layer, upDown, rpcId,
id ) );
1696 if ( m_MucBakelite != NULL )
delete m_MucBakelite;
1697 return ( m_MucBakelite =
new MucBakelite( part, segment, layer, upDown, rpcId,
id ) );
1701 if ( m_MucBoxCover != NULL )
delete m_MucBoxCover;
1702 return ( m_MucBoxCover =
new MucBoxCover( part, segment, layer, upDown,
id ) );
const unsigned int ENTITY_NUM
virtual void SetAlignment(double dx, double dy, double dz)
double GetObjRotToMot(int i)
double GetObjOrgInBes(int i)
double GetLocOrgInBes(int i)
double GetObjOrgInLoc(int i)
bool CheckStripPlaneOffset(int part, int segment, int layer, int axis, double offset)
MucGap * GetGap(int part, int segment, int layer, int id)
MucAbsorber * GetAbsorber(int part, int segment, int layer, int id)
MucStripPlane * GetStripPlane(int part, int segment, int layer, int id)
MucGeoMgr(const std::string createFlag, bool alignFlag, const std::string alignFile)
MucGas * GetGas(int part, int segment, int layer, int upDown, int rpcId, int id)
StatusCode CreateAbsorber()
StatusCode CreateOnlineStripGeo()
StatusCode CreateBoxCover()
MucBoxCover * GetBoxCover(int part, int segment, int layer, int upDown, int id)
MucBakelite * GetBakelite(int part, int segment, int layer, int upDown, int rpcId, int id)
StatusCode CreateBakelite()
StatusCode CreateStripPlane()
MucStrip * GetStrip(int part, int segment, int layer, int id)
MucBox * GetBox(int part, int segment, int layer, int id)
bool CheckBoxOffset(int part, int segment, int layer, int axis, double offset)
StatusCode CreateEntities()
StatusCode CreateRootGeo()
MucRpc * GetRpc(int part, int segment, int layer, int upDown, int id)
virtual void SetAlignment(double dx, double dy, double dz)