/home/bes3soft/bes3soft/Boss/7.0.2/dist/7.0.2/Muc/MucGeoCreateAlg/MucGeoCreateAlg-00-01-00/src/MucStrip.cxx

Go to the documentation of this file.
00001 //------------------------------------------------------------------------------|
00002 //      [File  ]:                       MucStrip.cxx                            |
00003 //      [Brief ]:       Class MucStrip for MUC calibration                      |
00004 //      [Author]:       Xie Yuguang, <ygxie@mail.ihep.ac.cn>                    |
00005 //      [Date  ]:       Apil 6, 2005                                            |
00006 //------------------------------------------------------------------------------|
00007 
00008 #include<iostream>
00009 #include<fstream>
00010 #include<cmath>
00011 
00012 using namespace std;
00013 
00014 #include "MucGeoCreateAlg/MucGeoConst.h"
00015 #include "MucGeoCreateAlg/MucStrip.h"
00016 
00017 // Constructor
00018 MucStrip::MucStrip( int part, int segment, int layer, int id ) : MucEntity( part, segment, layer, id )
00019 {
00020         MucStrip::Init();
00021 
00022 //      m_MucPadChain = NULL;
00023 }
00024 
00025 // Copy constructor
00026 MucStrip::MucStrip( const MucStrip& other ) : MucEntity( other )
00027 {
00028         m_Type          = other.m_Type;
00029         m_CenterLine    = other.m_CenterLine;
00030         m_Head          = other.m_Head;
00031         m_Tail          = other.m_Tail;
00032         m_Phi           = other.m_Phi;
00033 
00034 //      m_MucPadChain   = other.m_MucPadChain;
00035 }
00036 
00037 // Operator =
00038 MucStrip& MucStrip::operator =( const MucStrip &other )
00039 {
00040         if( this == &other)
00041                 return *this;
00042 
00043         MucEntity::operator =(other);
00044 
00045         m_Type          = other.m_Type;
00046         m_CenterLine    = other.m_CenterLine;
00047         m_Head          = other.m_Head;
00048         m_Tail          = other.m_Tail;
00049         m_Phi           = other.m_Phi;
00050 
00051 //      m_MucPadChain   = other.m_MucPadChain;
00052 
00053         return *this;
00054 }
00055 
00056 // Destructor
00057 MucStrip::~MucStrip()
00058 {
00059 //      delete m_MucPadChain;
00060         ;
00061 }
00062 
00063 // Initialize
00064 void MucStrip::Init()
00065 {
00066         SetType();
00067         SetW();
00068         SetWu();
00069         SetWd();
00070         SetCenterLine(); // use strip width
00071         SetHead();
00072         SetTail();
00073         SetPhi();
00074         
00075         SetThin();
00076         SetH();
00077         SetL();
00078         SetPadNumber();
00079         
00080         SetLocOrgInBes();
00081         SetObjRotToMot();
00082 
00083         SetEndcapStripInBes();
00084         SetBarrelStripInLoc();
00085 
00086         SetObjOrgInBes();
00087         SetObjOrgInLoc(); 
00088 }
00089 
00090 // ---------------------------------Get methods ------------------------
00091 
00092 int    MucStrip::GetType()      {       return m_Type;          }
00093 double MucStrip::GetCenterLine(){       return m_CenterLine;    }
00094 double MucStrip::GetHead()      {       return m_Head;          }
00095 double MucStrip::GetTail()      {       return m_Tail;          }
00096 double MucStrip::GetPhi()       {       return m_Phi;           }
00097 int    MucStrip::GetPadNumber() {       return m_PadNumber;     }
00098 
00099 /*
00100 MucPadChain* MucStrip::GetPadChain( )
00101 {
00102         if( m_MucPadChain != NULL )
00103                 return m_MucPadChain;
00104         else
00105                 return ( m_MucPadChain = new MucPadChain( m_Part, m_Segment, m_Layer, m_PadNumber ) );
00106 }
00107 
00108 */
00109 
00110 //-----------------------------------Set methods-------------------------
00111 // Set strip type(readout direction) 
00112 void MucStrip::SetType()
00113 {
00114         if( m_Part == BRID )
00115         {
00116                 if( (m_Layer+1)%2 == 1 )        m_Type = ZSTR;
00117                 else                            m_Type = PHISTR;
00118         }
00119         else
00120         {
00121                 if( (m_Layer+1)%2 == 1 )        m_Type = XSTR;
00122                 else                            m_Type = YSTR;
00123         }
00124 }
00125  
00126 
00127 // Set x or y of endcap strip certerline in BES coordinate system
00128 void MucStrip::SetCenterLine()
00129 {
00130         // Base on strips width and structure correlations
00131         // Endcap only 
00132 
00133         int segFlag = 0;
00134 
00135         if( (m_Layer+1)%2 == 1 ) // 1,3,5,7
00136         {
00137                 if( m_Segment < 2 )     segFlag = 1;
00138                 else                    segFlag = -1;
00139                 
00140                 if( m_ID == 0 ) m_CenterLine = segFlag * (E_GP_DY+E_STRPLN_DA+m_W/2.0); // NO.0
00141                 else if( m_ID != E_STR_NUM-1 )                                          // NO.1~62
00142                         m_CenterLine = segFlag * ( E_XSTR_OFFSET + m_ID*E_STR_DST );
00143                 else                                                                    // NO.63 end strip
00144                         m_CenterLine = segFlag * ( E_XSTR_OFFSET + (E_STR_NUM-2)*E_STR_DST + (E_STR_DST + m_W + STR_GAP)/2);
00145         }
00146         else                    // 2,4,6,8
00147         {
00148                 if( m_Segment%3 == 0  ) segFlag = 1;
00149                 else                    segFlag = -1;
00150 
00151                 if( m_ID == 0 ) m_CenterLine = segFlag * (E_GP_DX+E_STRPLN_DA+m_W/2.0); // NO.0
00152                 else if(m_ID != E_STR_NUM-1)                                            // NO.1~62
00153                         m_CenterLine = segFlag * ( E_YSTR_OFFSET + m_ID*E_STR_DST );
00154                 else                                                                    // NO.63 end strip
00155                         m_CenterLine = segFlag * ( E_YSTR_OFFSET + (E_STR_NUM-2)*E_STR_DST + (E_STR_DST + m_W + STR_GAP)/2);
00156         }
00157 }
00158 
00159 // Set x and y of the head of endcap strip in BES coordinate system
00160 void MucStrip::SetHead()
00161 {
00162         int segFlag = 0;
00163 
00164         // base on strips width and correlations
00165         if( m_ID+1 < HEAD_TURN_STR_NUM[m_Layer][0] )
00166                 m_Head = FIRST_TURN_HEAD[m_Layer][0];
00167         else if( m_ID+1 == HEAD_TURN_STR_NUM[m_Layer][0] )
00168                 m_Head = FIRST_TURN_HEAD[m_Layer][1];
00169         else if( (m_ID+1 > HEAD_TURN_STR_NUM[m_Layer][0]) && (m_ID+1 < HEAD_TURN_STR_NUM[m_Layer][1]) )
00170                 m_Head = FIRST_TURN_HEAD[m_Layer][1] - ( m_ID + 1 - HEAD_TURN_STR_NUM[m_Layer][0] )*E_STR_DST;
00171         else if( m_ID+1 >= HEAD_TURN_STR_NUM[m_Layer][1] )
00172                 m_Head = SECOND_TURN_HEAD[m_Layer%2];
00173 
00174 
00175         if( (m_Layer+1)%2 == 1 ) // 1,3,5,7
00176         {
00177                 if( m_Segment%3 ==0 ) segFlag = 1;
00178                 else segFlag = -1;
00179         }
00180         else                    // 2,4,6,8
00181         {
00182                 if( m_Segment < 2 ) segFlag = 1;
00183                 else segFlag = -1;
00184         }
00185 
00186         m_Head *= segFlag;
00187 }
00188 
00189 // Set x and y of the tail of endcap strip in BES coordinate system
00190 void MucStrip::SetTail()
00191 {
00192         int segFlag = 0;
00193  
00194         if( (m_Layer+1)%2 == 1 ) // 1,3,5,7
00195         {
00196                 if( m_Segment%3 ==0 )   segFlag = 1;
00197                 else                    segFlag = -1;
00198 
00199                 if( m_ID+1 < TAIL_TURN_STR_NUM[0] )
00200                         m_Tail = ODD_TURN_POINT_TAIL[(m_Layer==0)?0:1][0];
00201                 else if( m_ID+1 == TAIL_TURN_STR_NUM[0] )
00202                         m_Tail = ODD_TURN_POINT_TAIL[(m_Layer==0)?0:1][1];
00203                 else if( m_ID+1 > TAIL_TURN_STR_NUM[0] )
00204                         m_Tail = ODD_TURN_POINT_TAIL[(m_Layer==0)?0:1][1]-( m_ID + 1 - TAIL_TURN_STR_NUM[0] )* E_STR_DST;
00205                 if( m_ID == E_STR_NUM - 1 )
00206                         m_Tail = ODD_TURN_POINT_TAIL[(m_Layer==0)?0:1][1]-( m_ID -TAIL_TURN_STR_NUM[0] ) * E_STR_DST - ( E_STR_DST + m_W + STR_GAP )/2;
00207         }
00208         else                    // 2,4,6,8
00209         {
00210                 if( m_Segment < 2 )     segFlag = 1;
00211                 else                    segFlag = -1;
00212 
00213                 if( m_ID+1 < TAIL_TURN_STR_NUM[1] )
00214                         m_Tail = EVEN_TURN_POINT_TAIL[0];
00215                 if( m_ID+1 == TAIL_TURN_STR_NUM[1] )
00216                         m_Tail = EVEN_TURN_POINT_TAIL[1];
00217                 if( m_ID+1 > TAIL_TURN_STR_NUM[1] )
00218                         m_Tail = EVEN_TURN_POINT_TAIL[1] - ( m_ID + 1 - TAIL_TURN_STR_NUM[1] ) * E_STR_DST;
00219                 if( m_ID == E_STR_NUM - 1 )
00220                         m_Tail = EVEN_TURN_POINT_TAIL[1]-(m_ID - TAIL_TURN_STR_NUM[1]) * E_STR_DST - ( E_STR_DST + m_W + STR_GAP )/2;
00221         }
00222 
00223         m_Tail *= segFlag;
00224 }
00225 
00226 // Set inclination angle of local coordinate x axis and global coordinate x axis
00227 void MucStrip::SetPhi()
00228 {
00229         if ( m_Part == BRID )   // barrel 
00230                 m_Phi = B_PHI[m_Segment] * (MUC_PI/4.0);      
00231         else                    // endcap , all phi is zer
00232                 m_Phi = 0.;   
00233 }
00234 
00235 // set strip thickness
00236 void MucStrip::SetThin()
00237 {
00238         m_Thin = STR_TH;
00239 }
00240 
00241 // Set strip width
00242 void MucStrip::SetW()
00243 {
00244         if( m_Part == BRID )
00245         {
00246                 // Set maximum strip 
00247                 int maxStrip;
00248                 if( (m_Layer+1)%2 == 1 )
00249                         maxStrip = B_ZSTR_NUM;          // odd layer
00250                 else if( m_Segment != B_TOP )
00251                         maxStrip = B_PHISTR_NUM;        // even layer not top segment
00252                 else
00253                         maxStrip = B_TOPSTR_NUM;        // even layer top segment
00254 
00255 
00256                 if( (m_Layer+1)%2 == 1 ) // odd layer, z
00257                 {
00258                         if( m_ID > 0 && m_ID < (maxStrip-1))                    // not marginal strip
00259                                 m_W = B_STR_DST[m_Layer] - STR_GAP;
00260                         else                                                    // marginal strip
00261                                 m_W = (B_BOX_WT[m_Layer] - 2*B_BOX_DT[SL_DOWN] - (maxStrip-2)*B_STR_DST[m_Layer] - STR_GAP)/2;
00262                 }
00263                 else                    // even layer, phi
00264                 {
00265                         if( m_ID >0 && m_ID < (maxStrip-1) )                    // not marginal strip
00266                                 m_W = B_STR_DST[m_Layer] - STR_GAP;
00267                         else                                                    // marginal strip
00268                                 m_W = B_BOX_LT/2 - B_BOX_DZ[SL_DOWN] - B_STR_DST[m_Layer]*(B_PHISTR_NUM-2)/2;
00269 
00270                         if( (maxStrip == B_TOPSTR_NUM) && (m_ID == (B_PHISTR_NUM - 1)) ) // special marginal strip
00271                                 m_W = B_BOX_LT/2 - B_BOX_DZ[SL_DOWN] - B_STR_DST[m_Layer]*(B_PHISTR_NUM-2)/2;
00272                 }
00273         }
00274         else
00275         {
00276                 // Strip0:48;
00277                 // Strip1~62: 33;
00278                 // Strip63:   L0: 34; L2/4/6: 43; L1/3/5/7: 53 
00279                 if(m_ID ==0 ) m_W = E_FIRST_STR_WT;
00280                 else if(m_ID != E_STR_NUM-1) m_W = E_STR_WT; // NO.1~62
00281                 else // NO.63, end strip
00282                 {
00283                         if((m_Layer+1)%2!=0) // 0,2,4,6
00284                         {
00285                                 if(m_Layer==0) m_W = 31;
00286                                 else m_W = 43;
00287                         }
00288                         else m_W = 53; // 1,3,5,7
00289                 }
00290         }
00291 }
00292 
00293 // Set strip Wu, no use
00294 void MucStrip::SetWu()
00295 {
00296         m_Wu = m_W;
00297 }
00298 
00299 // Set strip Wd, no use
00300 void MucStrip::SetWd()
00301 {
00302         m_Wd = m_W;
00303 }
00304 
00305 // Set strip height
00306 void MucStrip::SetH()
00307 {
00308         m_H = STR_TH;
00309 }
00310 
00311 // Set strip length 
00312 void MucStrip::SetL()
00313 {
00314         if( m_Part==BRID )      // barrel
00315         {
00316                 int ZCUT_HEAD_NUM = B_ZSTR_NUM/2 - B_ZSTR_CUT_NUM[m_Layer] - 1;
00317                 int ZCUT_TAIL_NUM = B_ZSTR_NUM/2 + B_ZSTR_CUT_NUM[m_Layer];
00318 
00319 
00320                 if( m_Segment != B_TOP ) // not top segment
00321                 {
00322                         if( (m_Layer+1)%2 == 1)                         // odd layer, Z 
00323                                 m_L = B_BOX_LT - 2*B_BOX_DZ[SL_DOWN];
00324                         else                                            // even layer, phi
00325                                 m_L = B_BOX_WT[m_Layer] - 2*B_BOX_DZ[SL_DOWN];
00326                 }
00327                 else                    // top segment
00328                 {
00329                         if((m_Layer+1)%2 == 1) // odd layer, z
00330                         {
00331                                 if( m_ID > ZCUT_HEAD_NUM && m_ID < ZCUT_TAIL_NUM )                      // be cut
00332                                 {
00333                                         if( m_Layer == 0 )
00334                                                 m_L = B_BOX_LT - 2*B_BOX_DZ[SL_DOWN] - B_ZSTR_CUT[1];
00335                                         else
00336                                                 m_L = B_BOX_LT - 2*B_BOX_DZ[SL_DOWN] - B_ZSTR_CUT[0];
00337                                 }
00338                                 else                                                                    // no cut
00339                                         m_L = B_BOX_LT - 2*B_BOX_DZ[SL_DOWN];
00340                         }
00341                         else                    // even layer, phi
00342                         {
00343                                 if( m_ID < B_PHISTR_CUT_NUM )                                           // no cut
00344                                         m_L = B_BOX_WT[m_Layer] - 2*B_BOX_DZ[SL_DOWN];
00345                                 else                                                                    // be cut
00346                                         m_L = (B_BOX_WT[m_Layer] - 2*B_BOX_DZ[SL_DOWN] - B_PHISTR_CUT)/2;
00347                         }
00348                 }
00349         }
00350         else                    // endcap
00351         {
00352                 m_L = fabs( m_Head - m_Tail );
00353         }
00354 }
00355 
00356 // Set area
00357 void MucStrip::SetArea()
00358 {
00359         m_Area = m_W*m_L/100;
00360 }
00361 
00362 // Set Pad number of strip
00363 void MucStrip::SetPadNumber()
00364 {
00365         int    n        = 0;
00366         double fn       = 0;
00367 
00368          if(m_W == 0)
00369          {
00370                 cout<<"Error, strip width = 0!"<<endl;
00371                 m_PadNumber = 0;
00372          }
00373          else
00374         {
00375                 fn = (m_L/m_W);
00376                 n  = (int)fn;
00377 
00378                 if( (fn - n) > 0.3 )
00379                         m_PadNumber = n + 1;
00380                 else
00381                         m_PadNumber = n;
00382         }
00383 }
00384 
00385 
00386 // Set local or temporary local(MucStripPlane) origin coordinates in BES
00387 void MucStrip::SetLocOrgInBes()
00388 {
00389         double x, y, z = 0 ;
00390 
00391         if( m_Part == BRID )
00392         {
00393                 x = ( B_AS_RMIN[m_Layer] - AS_GAP/2.0 ) * cos( m_Segment * ( MUC_PI/4.0 ) );
00394                 y = ( B_AS_RMIN[m_Layer] - AS_GAP/2.0 ) * sin( m_Segment * ( MUC_PI/4.0 ) );
00395                 z = 0.;
00396 
00397         } // barrel
00398         else
00399         {
00400                 //------------- set x and y --------------------
00401                 // segment 0 as reference 
00402                 x = (E_AS_RMAX - E_BOX_DR - E_STRPLN_DB[(m_Layer==0)?0:1] + E_GP_DX + E_STRPLN_DA) / 2.0;
00403                 y = (E_AS_RMAX - E_BOX_DR - E_STRPLN_DB[(m_Layer==0)?0:1] + E_GP_DY + E_STRPLN_DA) / 2.0;
00404          
00405                 // x, y signs of coordinate different by segment 
00406                 if( m_Segment == 0 )       {    ;               }
00407                 else if ( m_Segment == 1 ) {    x = -x;         }
00408                 else if ( m_Segment == 2 ) {    x = -x; y = -y; }
00409                 else                       {    y = -y;         }
00410 
00411                 //-------------- set z --------------------------
00412                 for( int i=0; i<m_Layer+1; i++ ) z += E_AS_TH[i];
00413                 
00414                 z += m_Layer * AS_GAP;
00415                 z += (E_AS_ZMAX - E_AS_TOTAL_TH) + AS_GAP/2.0; 
00416                 z *= cos( m_Part*MUC_PI/2.0 );
00417 
00418         } // else, endcap
00419        
00420         m_LocOrgInBes[0] = x;
00421         m_LocOrgInBes[1] = y;
00422         m_LocOrgInBes[2] = z;
00423 
00424         // limit cut
00425         for( int i=0; i<3; i++ ) {
00426                 if( fabs(m_LocOrgInBes[i]) < ERR_LIMIT ) m_LocOrgInBes[i] = 0;
00427         }
00428 }
00429 
00430 /*
00431 void MucStrip::SetObjRotToMot()
00432 {
00433         // The x, y and z of strip coordinate system is always parallele with those of strip plane  
00434         for( int i=0; i<3; i++ )
00435                 m_ObjRotToMot[i] = 0.0;
00436 }
00437 */
00438 
00439 // Set endcap strip origin coordinates in global
00440 void MucStrip::SetEndcapStripInBes()
00441 {       
00442         double x, y, z;
00443 
00444         // Set x 
00445         if( (m_Layer+1)%2 == 0 )        // even layer
00446                 x = m_CenterLine;
00447         else                            // odd layer
00448                 x = ( m_Head + m_Tail )/2;
00449  
00450         // Set y
00451         if( (m_Layer+1)%2 == 0 )        // even layer
00452                 y = ( m_Head + m_Tail )/2;
00453         else                            // odd layer
00454                 y = m_CenterLine;
00455 
00456         // Set z
00457         z = 0.;
00458         for(int i=0; i<m_Layer+1; i++)  z += E_AS_TH[i];
00459 
00460         z += m_Layer * AS_GAP;
00461         z = ( (E_AS_ZMAX - E_AS_TOTAL_TH + z) + AS_GAP/2.0 ) * cos( m_Part*MUC_PI/2.0 );
00462 
00463         m_ObjOrgInBes[0] = x;
00464         m_ObjOrgInBes[1] = y;   
00465         m_ObjOrgInBes[2] = z;
00466 
00467         // limit cut
00468         for( int i=0; i<3; i++ ) {
00469                 if( fabs(m_ObjOrgInBes[i]) < ERR_LIMIT ) m_ObjOrgInBes[i] = 0.;
00470         }       
00471 }
00472 
00473 // Set x, y and z of barrel strip origin in local or temparory local(MucStripPlane) coordinate
00474 void MucStrip::SetBarrelStripInLoc()
00475 {
00476         int j = m_Layer;
00477         int n = m_ID;
00478         
00479         int maxStrip = 0;
00480         double x, y, z = 0;
00481  
00482         if( m_Type == ZSTR )            maxStrip = B_ZSTR_NUM;          // odd layer
00483         else if( m_Segment != B_TOP )   maxStrip = B_PHISTR_NUM;        // even layer not top segment
00484         else                            maxStrip = B_TOPSTR_NUM;        // even layer top segment
00485 
00486         if( m_Segment != B_TOP ) // not top segment
00487         {
00488                 if( m_Type == ZSTR )    // odd layer, ZSTR
00489                 {
00490                         // Set x
00491                         if( n == 0 )
00492                                 x = ( B_BOX_WT[j] - 2*B_BOX_DT[SL_DOWN] +  (maxStrip-2)*B_STR_DST[j] + STR_GAP )/4.0;
00493                         else if( n == (maxStrip-1) )
00494                                 x = ( 2*B_BOX_DT[SL_DOWN] - B_BOX_WT[j] - (maxStrip-2)*B_STR_DST[j] - STR_GAP )/4.0;
00495                         else
00496                                 x =( ((maxStrip-1) - 2*n) * B_STR_DST[j] )/2.0;
00497 
00498                         // Set y
00499                         y = 0.;
00500 
00501                         // Set z
00502                         z = 0.;
00503 
00504                 }
00505                 else                    // even layer, phi
00506                 {
00507                         // Set x
00508                         x = 0.;
00509 
00510                         // Set y
00511                         y = 0.;
00512 
00513                         // Set Z
00514                         if( n == 0 )
00515                                 z = -B_BOX_LT/4.0 + B_BOX_DZ[SL_DOWN]/2.0 - B_STR_DST[j]*(B_PHISTR_NUM-2)/4.0;
00516                         else if( n == (B_PHISTR_NUM - 1) )
00517                                 z = B_BOX_LT/4.0 - B_BOX_DZ[SL_DOWN]/2.0 + B_STR_DST[j]*(B_PHISTR_NUM-2)/4.0;
00518                         else
00519                                 z = ( 2*n - B_PHISTR_NUM + 1 ) * B_STR_DST[j] / 2.0;
00520                 }
00521 
00522         }       // end not top segment
00523         else    // top segment
00524         {
00525                 if( m_Type == ZSTR )    // odd layer, z
00526                 {
00527                         // Set x
00528                         if( n == 0 )
00529                                 x = B_BOX_WT[j]/4.0 - B_BOX_DT[SL_DOWN]/2.0 +  (maxStrip-2)*B_STR_DST[j]/4.0 + STR_GAP/4.0;
00530                         else if( n == (maxStrip-1) )
00531                                 x = -B_BOX_WT[j]/4.0 + B_BOX_DT[SL_DOWN]/2.0 -  (maxStrip-2)*B_STR_DST[j]/4.0 - STR_GAP/4.0;
00532                         else
00533                                 x = ( (maxStrip-1) - 2*n ) * B_STR_DST[j] / 2.0;
00534 
00535                         // Set y
00536                         y = 0.;
00537 
00538                         // Set z
00539                         if( (n > (B_ZSTR_NUM/2 - 1 - B_ZSTR_CUT_NUM[j])) && (n < (B_ZSTR_NUM/2 + B_ZSTR_CUT_NUM[j])) )  // be cut
00540                                 z = -( (j==0) ? B_ZSTR_CUT[1] : B_ZSTR_CUT[0] )/2;
00541                         else                                                                                            // no cut
00542                                 z = 0.;
00543                 } 
00544                 else                    // even layer, phi
00545                 {
00546                         // Set x
00547                         if( n < B_PHISTR_CUT_NUM )      // no cut
00548                                 x = 0.; 
00549                         else                            // be cut
00550                         {
00551                                 if( n < B_PHISTR_NUM )
00552                                         x = -B_BOX_WT[j]/4.0 - B_PHISTR_CUT/4.0 + B_BOX_DZ[SL_DOWN]/2.0;
00553                                 else
00554                                         x = B_BOX_WT[j]/4.0 + B_PHISTR_CUT/4.0 - B_BOX_DZ[SL_DOWN]/2.0;
00555                         }
00556 
00557                         // Set y 
00558                         y = 0.;
00559 
00560                         // Set z
00561                         if( n < B_PHISTR_NUM )
00562                         {
00563                                 if( n == 0 )
00564                                         z = -B_BOX_LT/4.0 + B_BOX_DZ[SL_DOWN]/2.0 - B_STR_DST[j]*(B_PHISTR_NUM-2)/4.0;
00565                                 else if( n == (B_PHISTR_NUM - 1) )
00566                                         z = B_BOX_LT/4.0 - B_BOX_DZ[SL_DOWN]/2.0 + B_STR_DST[j]*(B_PHISTR_NUM-2)/4.0;
00567                                 else
00568                                         z = ( 2*n - B_PHISTR_NUM + 1 ) * B_STR_DST[j] / 2.0;
00569                         }
00570                         else
00571                         {
00572                                 if( n == (B_TOPSTR_NUM-1) )
00573                                         z = B_BOX_LT/4.0 - B_BOX_DZ[SL_DOWN]/2.0 + B_STR_DST[j]*(B_PHISTR_NUM-2)/4.0;
00574                                 else
00575                                         z = ( 2*n - 3*B_PHISTR_NUM + 2*B_PHISTR_CUT_NUM + 1 ) * B_STR_DST[j]/2.0;
00576                         }
00577                 }                       // end even             
00578         }       // end top segment
00579 
00580         m_ObjOrgInLoc[0] = x;
00581         m_ObjOrgInLoc[1] = y;
00582         m_ObjOrgInLoc[2] = z;   
00583 
00584         // limit cut
00585         for( int i=0; i<3; i++ ) {
00586                 if( fabs(m_ObjOrgInLoc[i]) < ERR_LIMIT )
00587                 m_ObjOrgInLoc[i] = 0.;
00588         }       
00589 }
00590 
00591 // Set strip origin in global coordinates
00592 void MucStrip::SetObjOrgInBes()
00593 {
00594         if( m_Part == BRID )
00595         {
00596                 MucEntity::TransLocToBes( m_ObjOrgInBes, m_ObjOrgInLoc, m_LocOrgInBes, m_Phi );
00597                 
00598                 // limit cut
00599                 for( int i=0; i<3; i++ ) {
00600                         if( fabs(m_ObjOrgInBes[i]) < ERR_LIMIT ) m_ObjOrgInBes[i] = 0.0;
00601                 }
00602         }
00603 }
00604 
00605 // Set strip local and global coordinates
00606 void MucStrip::SetObjOrgInLoc()
00607 {
00608         if( m_Part != BRID )
00609         {
00610                 MucEntity::TransBesToLoc( m_ObjOrgInLoc, m_ObjOrgInBes, m_LocOrgInBes, m_Phi );
00611                 
00612                 // limit cut
00613                 for( int i=0; i<3; i++ ) {
00614                         if( fabs(m_ObjOrgInLoc[i]) < ERR_LIMIT ) m_ObjOrgInLoc[i] = 0.;
00615                 }
00616         }
00617 }
00618 
00619 
00620 // END
00621 

Generated on Tue Nov 29 23:12:56 2016 for BOSS_7.0.2 by  doxygen 1.4.7