00001 #include "MyMdcGeomSvc.hh" 00002 #include <fstream> 00003 #include <iostream> 00004 #include <sstream> 00005 using namespace std; 00006 #include <stdlib.h> 00007 #include <assert.h> 00008 00009 00010 MyMdcGeomSvc::MyMdcGeomSvc(){ReadFilePar();} 00011 MyMdcGeomSvc::~MyMdcGeomSvc(){} 00012 void MyMdcGeomSvc::ReadFilePar() 00013 { 00014 std::string geometryFilePath1 = getenv("MDCSIMROOT"); 00015 geometryFilePath1 +="/dat/MdcElectronics.txt"; 00016 00017 std::ifstream in; 00018 in.open(geometryFilePath1.c_str()); 00019 assert(in); 00020 const int maxCharOneLine=255; 00021 char temp[maxCharOneLine]; 00022 int i=0; 00023 while(in.peek()!=EOF) 00024 { 00025 in.getline(temp,maxCharOneLine); 00026 i++; 00027 if (temp[0]=='#') 00028 continue; 00029 // i is the row number of MdcElectronics.dat 00030 if(i==2) {istringstream(temp)>>fTotalElecLayerNo; 00031 continue; 00032 } 00033 if(i>=4&&i<=26) 00034 { 00035 istringstream(temp)>>fLayerr[i-4]>>fElecNo[i-4]; 00036 continue; 00037 } 00038 if(i>28&&i<=51) 00039 { 00040 istringstream(temp)>>fX[i-29]>>fY[i-29]>>fZ[i-29]>>fR[i-29]; 00041 continue; 00042 } 00043 if(i==55) 00044 { 00045 istringstream(temp)>>fBoxInStep[0]>>fBoxInStep[1]>>fBoxInStep[2]; 00046 continue; 00047 } 00048 if(i==59) 00049 { 00050 istringstream(temp)>>fBoxEndcape[0]>>fBoxEndcape[1]>>fBoxEndcape[2]; 00051 continue; 00052 } 00053 if(i==63){istringstream(temp)>>fFixRing[0]>>fFixRing[1]>>fFixRing[2];} 00054 if(i>=76&&i<87) 00055 { 00056 istringstream(temp)>>fInnerRCableFrame[i-76]>>fOuterRCableFrame[i-76]>>fLengthCableFrame[i-76]>>fZCableFrame[i-76]; 00057 continue; 00058 } 00059 if(i==90) 00060 { 00061 istringstream(temp)>>fThinPlate[0]>>fThinPlate[1]>>fThinPlate[2]; 00062 continue; 00063 } 00064 00065 if(i>=93&&i<105) 00066 { 00067 istringstream(temp)>>fXCenThinPlate[i-93]>>fYCenThinPlate[i-93]>> fZCenThinPlate[i-93]>>fRotateXAngle[i-93]; 00068 continue; 00069 } 00070 00071 00072 if(i==107) 00073 { 00074 istringstream(temp)>>fLengthCableTub[0]>>fLengthCableTub[1]>>fLengthCableTub[2]>>fLengthCableTub[3]>>fLengthCableTub[4]>>fLengthCableTub[5]>>fLengthCableTub[6]>>fLengthCableTub[7]>>fLengthCableTub[8]>>fLengthCableTub[9]>>fLengthCableTub[10]>>fLengthCableTub[11]>>fLengthCableTub[12]; 00075 continue; 00076 } 00077 if (i==109) 00078 { 00079 istringstream(temp)>>fLengthCableTub[13]>>fLengthCableTub[14]>>fLengthCableTub[15]>>fLengthCableTub[16]>>fLengthCableTub[17]>>fLengthCableTub[18]>>fLengthCableTub[19]>>fLengthCableTub[20]>>fLengthCableTub[21]>>fLengthCableTub[22]>>fLengthCableTub[23]>>fLengthCableTub[24]; 00080 continue; 00081 } 00082 00083 } 00084 } 00085 00086 00087 int MyMdcGeomSvc::TotalElecLayerNo() 00088 { 00089 return fTotalElecLayerNo; 00090 } 00091 int MyMdcGeomSvc::Layerr(int n) 00092 { 00093 return fLayerr[n]; 00094 } 00095 int MyMdcGeomSvc::ElecNo(int n) 00096 { 00097 return fElecNo[n]; 00098 } 00099 double MyMdcGeomSvc::X(int n) 00100 { 00101 return fX[n]; 00102 } 00103 double MyMdcGeomSvc::Y(int n) 00104 { 00105 return fY[n]; 00106 } 00107 double MyMdcGeomSvc::Z(int n) 00108 { 00109 return fZ[n]; 00110 } 00111 double MyMdcGeomSvc::R(int n) 00112 { 00113 return fR[n]; 00114 } 00115 double MyMdcGeomSvc::BoxInStep(int n) 00116 { 00117 return fBoxInStep[n]; 00118 } 00119 double MyMdcGeomSvc::BoxEndcape(int n) 00120 { 00121 return fBoxEndcape[n]; 00122 } 00123 double MyMdcGeomSvc::LengthCableTub(int n) 00124 { 00125 return fLengthCableTub[n]; 00126 } 00127 double MyMdcGeomSvc::InnerRCableFrame(int n) 00128 { 00129 return fInnerRCableFrame[n]; 00130 } 00131 double MyMdcGeomSvc::OuterRCableFrame(int n) 00132 { 00133 return fOuterRCableFrame[n]; 00134 } 00135 double MyMdcGeomSvc::LengthCableFrame(int n) 00136 { 00137 return fLengthCableFrame[n]; 00138 00139 } 00140 double MyMdcGeomSvc::ZCableFrame(int n) 00141 { 00142 return fZCableFrame[n]; 00143 00144 } 00145 00146 double MyMdcGeomSvc::ThinPlate(int n) 00147 { 00148 return fThinPlate[n]; 00149 } 00150 double MyMdcGeomSvc::XCenThinPlate(int n) 00151 { 00152 return fXCenThinPlate[n]; 00153 } 00154 double MyMdcGeomSvc::YCenThinPlate(int n) 00155 { 00156 return fYCenThinPlate[n]; 00157 } 00158 double MyMdcGeomSvc::ZCenThinPlate(int n) 00159 { 00160 return fZCenThinPlate[n]; 00161 } 00162 double MyMdcGeomSvc::RotateXAngle(int n) 00163 { 00164 return fRotateXAngle[n]; 00165 } 00166 00167 double MyMdcGeomSvc::FixRing(int n) 00168 { 00169 return fFixRing[n]; 00170 } 00171