Go to the documentation of this file.00001 #include "TSTSTopology.h"
00002 #include "stdlib.h"
00003
00004 TSTSTopology::TSTSTopology()
00005 {
00006 fValidRocs.resize( kRocArrSize );
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 fValidRocs.at( 0 ) = kFALSE;
00019 fValidRocs.at( 1 ) = kTRUE;
00020 fValidRocs.at( 2 ) = kTRUE;
00021 fValidRocs.at( 3 ) = kFALSE;
00022 fValidRocs.at( 4 ) = kFALSE;
00023 fValidRocs.at( 5 ) = kFALSE;
00024 fValidRocs.at( 6 ) = kFALSE;
00025
00026
00027 fValidNxs.resize( kRocArrSize );
00028 for( Int_t iRoc = 0; iRoc < kRocArrSize; iRoc++ ) {
00029 fValidNxs.at( iRoc ).resize( kNxArrSize );
00030 if( IsValidRoc( iRoc ) ) {
00031 fValidNxs.at( iRoc ).at( 0 ) = kTRUE;
00032 fValidNxs.at( iRoc ).at( 1 ) = kFALSE;
00033 fValidNxs.at( iRoc ).at( 2 ) = kTRUE;
00034 }
00035 }
00036
00037 fNStrips.resize( kNDetectors );
00038 fNStrips.at( 0 ) = 256;
00039 fNStrips.at( 1 ) = 256;
00040 fNStrips.at( 2 ) = 256;
00041
00042 fRoc2Detector.resize( kRocArrSize );
00043
00044 fRoc2Detector.at( 1 ) = 0;
00045 fRoc2Detector.at( 2 ) = 0;
00046 fRoc2Detector.at( 3 ) = 2;
00047 fRoc2Detector.at( 4 ) = 2;
00048 fRoc2Detector.at( 5 ) = 1;
00049 fRoc2Detector.at( 6 ) = 1;
00050
00051
00052
00053 fRoc2Side.resize( kRocArrSize );
00054 fRoc2Side.at( 1 ) = kNSide;
00055 fRoc2Side.at( 2 ) = kPSide;
00056 fRoc2Side.at( 3 ) = kPSide;
00057 fRoc2Side.at( 4 ) = kNSide;
00058 fRoc2Side.at( 5 ) = kPSide;
00059 fRoc2Side.at( 6 ) = kNSide;
00060
00061
00062 fNx2Conn.resize( kRocArrSize );
00063 for( Int_t iRoc = 0; iRoc < kRocArrSize; iRoc++ ) {
00064 fNx2Conn.at( iRoc).resize( kNxArrSize );
00065 }
00066
00067 fNx2Conn.at( 1 ).at( 0 ) = kOddConnectors;
00068 fNx2Conn.at( 1 ).at( 2 ) = kEvenConnectors;
00069 fNx2Conn.at( 2 ).at( 0 ) = kEvenConnectors;
00070 fNx2Conn.at( 2 ).at( 2 ) = kOddConnectors;
00071 fNx2Conn.at( 3 ).at( 0 ) = kOddConnectors;
00072 fNx2Conn.at( 3 ).at( 2 ) = kEvenConnectors;
00073 fNx2Conn.at( 4 ).at( 0 ) = kOddConnectors;
00074 fNx2Conn.at( 4 ).at( 2 ) = kEvenConnectors;
00075 fNx2Conn.at( 5 ).at( 0 ) = kOddConnectors;
00076 fNx2Conn.at( 5 ).at( 2 ) = kEvenConnectors;
00077 fNx2Conn.at( 6 ).at( 0 ) = kOddConnectors;
00078 fNx2Conn.at( 6 ).at( 2 ) = kEvenConnectors;
00079
00080 fNRocs = 0;
00081 fNNxs = 0;
00082 for( Int_t iRoc = 0; iRoc < kRocArrSize; iRoc++ ) {
00083 if( IsValidRoc(iRoc) ) fNRocs++;
00084 for( Int_t iNx = 0; iNx < kNxArrSize; iNx++ ) {
00085 fNNxs++;
00086 }
00087 }
00088 }
00089
00090 TSTSTopology::~TSTSTopology()
00091 {
00092
00093 }
00094
00095 Int_t TSTSTopology::GetStrip( Int_t rocId, Int_t nxId, Int_t nxCh ) const
00096 {
00097 ESTSOddEvenConnectors conn = GetOddEvenConn( rocId, nxId );
00098 ESTSSide side = GetSide( rocId, nxId );
00099
00100 switch ( GetDetector( rocId ) ) {
00101 case 0: {
00102 return GetStrip_Dem0b( side, conn, nxCh);
00103 }
00104 case 1: {
00105 return GetStrip_Dem2b4( side, conn, nxCh);
00106 }
00107 case 2: {
00108 return GetStrip_DemFsd( side, conn, nxCh);
00109 }
00110 default: {
00111 return -1;
00112 }
00113 }
00114
00115 }
00116
00117
00118 Int_t TSTSTopology::GetStrip_Dem0b( ESTSSide side, ESTSOddEvenConnectors conn, Int_t nxCh ) const
00119 {
00120 if( side == kPSide ) {
00121 if( conn == kEvenConnectors ) {
00122 if( nxCh < 64 ) return 2 * ( nxCh + 2 - 2 * ( nxCh % 2 ) ) - 1;
00123 return 2 * ( nxCh + 1 ) - 1;
00124 }
00125 else {
00126 if( nxCh < 64 ) return 256 - 2 * ( nxCh + 2 - 2 * ( nxCh % 2 ) ) + 1 - 1;
00127 return 256 - 2 * nxCh - 1 - 1;
00128 }
00129 }
00130 else {
00131 if( conn == kEvenConnectors ) {
00132 if( nxCh < 64 ) return 256 - 2 * ( nxCh + 1 - 2 * ( nxCh % 2 ) ) - 1;
00133 return 256 - 2 * nxCh - 1;
00134 }
00135 else {
00136 if( nxCh < 64 ) return 2 * ( nxCh + 1 - 2 * ( nxCh % 2 ) ) + 1 - 1;
00137 return 2 * nxCh + 1 - 1;
00138 }
00139 }
00140 }
00141
00142
00143 Int_t TSTSTopology::GetStrip_Dem2b4( ESTSSide side, ESTSOddEvenConnectors conn, Int_t nxCh ) const
00144 {
00145 if( side == kPSide ) {
00146 if( conn == kEvenConnectors ) {
00147 if( nxCh < 64 ) return 2 * nxCh - 4 * ( nxCh % 2 ) + 2;
00148 return 2 * nxCh;
00149 }
00150 else {
00151 if( nxCh < 64 ) return 255 - 2 * nxCh + 4 * ( nxCh % 2 ) - 2;
00152 return 255 - 2 * nxCh;
00153 }
00154 }
00155 else {
00156 if( conn == kEvenConnectors ) {
00157 if( nxCh < 64 ) return 255 - 2 * nxCh + 4 * ( nxCh % 2 ) - 3;
00158 return 255 - 2 * nxCh - 1;
00159 }
00160 else {
00161 if( nxCh < 64 ) return 2 * nxCh - 4 * ( nxCh % 2 ) + 3;
00162 return 2 * nxCh + 1;
00163 }
00164 }
00165 }
00166
00167 Int_t TSTSTopology::GetStrip_DemFsd( ESTSSide side, ESTSOddEvenConnectors conn, Int_t nxCh ) const
00168 {
00169 if( side == kPSide ) {
00170 if( conn == kEvenConnectors ) {
00171 return nxCh * 2;
00172 }
00173 return ( 127 - nxCh ) * 2 + 1;
00174 }
00175 else {
00176 if( conn == kEvenConnectors ) {
00177 return (127 - nxCh) * 2 - 1 + 4 * ( nxCh % 2) - 1;
00178 }
00179 return 2 * nxCh + 3 - 4 * ( nxCh % 2);
00180 }
00181 }
00182
00183
00184
00185