@@ -28,7 +28,10 @@ bool Geometry::absToRelNumbering(unsigned short absId, short* relid)
2828 // relid[0] = CPV Module number 1:fNModules
2929 // relid[1] = Column number inside a CPV module (Phi coordinate)
3030 // relid[2] = Row number inside a CPV module (Z coordinate)
31-
31+ if (absId >= kNCHANNELS ) {
32+ LOG (DEBUG) << " Wrong absId = " << absId << " > kNCHANNELS=" << kNCHANNELS ;
33+ return false ;
34+ }
3235 const short nCPV = kNumberOfCPVPadsPhi * kNumberOfCPVPadsZ ;
3336 relid[0 ] = absId / nCPV + 2 ;
3437 absId -= (relid[0 ] - 2 ) * nCPV;
@@ -102,52 +105,62 @@ bool Geometry::relToAbsNumbering(const short* relId, unsigned short& absId)
102105
103106 return true ;
104107}
105- void Geometry::hwaddressToAbsId (short ccId, short dil, short gas, short pad, unsigned short & absId)
108+ bool Geometry::hwaddressToAbsId (short ccId, short dil, short gas, short pad, unsigned short & absId)
106109{
110+ // check if hw address is valid
111+ bool isGoodHWAddress = true ;
112+ if (pad < 0 || pad >= kNPAD ) {
113+ LOG (DEBUG) << " Geometry::hwaddressToAbsId() : Wrong pad address: pad=" << pad << " >= kNPAD=" << kNPAD ;
114+ isGoodHWAddress = false ;
115+ }
116+ if (dil < 0 || dil >= kNDilogic ) {
117+ LOG (DEBUG) << " Geometry::hwaddressToAbsId() : Wrong dil address: dil=" << dil << " >= kNDilogic=" << kNDilogic ;
118+ isGoodHWAddress = false ;
119+ }
120+ if (gas < 0 || gas >= kNGas ) {
121+ LOG (DEBUG) << " Geometry::hwaddressToAbsId() : Wrong gasiplex address: gas=" << gas << " >= kNGas=" << kNGas ;
122+ isGoodHWAddress = false ;
123+ }
124+ // return false in no success case
125+ if (!isGoodHWAddress) {
126+ return false ;
127+ }
107128
108129 short pZ = mPadToZ [pad];
109130 short pPhi = mPadToPhi [pad];
110131 short relid[3 ] = {short (ccId / 8 + 2 ), short ((ccId % 8 ) * 16 + (dil / 2 ) * 8 + 7 - pPhi), short ((dil % 2 ) * 30 + gas * 6 + pZ)};
111132
112- relToAbsNumbering (relid, absId);
133+ return relToAbsNumbering (relid, absId);
113134}
114135
115- void Geometry::absIdToHWaddress (unsigned short absId, short & ccId, short & dil, short & gas, short & pad)
136+ bool Geometry::absIdToHWaddress (unsigned short absId, short & ccId, short & dil, short & gas, short & pad)
116137{
117138 // Convert absId to hw address
118139 // Arguments: ccId: 0 -- 7 - mod 2; 8...15 mod 3; 16...23 mod 4
119140 // dilogic: 0..3, gas=0..5, pad:0..47
120141
121142 short relid[3 ];
122- absToRelNumbering (absId, relid);
143+ if (!absToRelNumbering (absId, relid)) {
144+ return false ; // wrong absId passed
145+ }
123146
124147 ccId = (relid[0 ] - 2 ) * 8 + relid[1 ] / 16 ;
125148 dil = 2 * ((relid[1 ] % 16 ) / 8 ) + relid[2 ] / 30 ; // Dilogic# 0..3
126149 gas = (relid[2 ] % 30 ) / 6 ; // gasiplex# 0..4
127150 pad = mPadMap [relid[2 ] % 6 ][7 - relid[1 ] % 8 ]; // pad 0..47
128151
129- if (pad < 0 || pad > kNPAD ) {
130- LOG (ERROR) << " Wrong pad address: pad=" << pad << " > kNPAD=" << kNPAD ;
131- pad = 0 ;
132- dil = 0 ;
133- gas = 0 ;
134- ccId = 0 ;
135- return ;
152+ bool isAbsIdOk = true ;
153+ if (pad < 0 || pad >= kNPAD ) {
154+ LOG (DEBUG) << " Wrong pad address: pad=" << pad << " >= kNPAD=" << kNPAD ;
155+ isAbsIdOk = false ;
136156 }
137157 if (dil < 0 || dil >= kNDilogic ) {
138- LOG (ERROR) << " Wrong dil address: dil=" << dil << " > kNDilogic=" << kNDilogic ;
139- pad = 0 ;
140- dil = 0 ;
141- gas = 0 ;
142- ccId = 0 ;
143- return ;
158+ LOG (DEBUG) << " Wrong dil address: dil=" << dil << " >= kNDilogic=" << kNDilogic ;
159+ isAbsIdOk = false ;
144160 }
145161 if (gas < 0 || gas >= kNGas ) {
146- LOG (ERROR) << " Wrong gasiplex address: gas=" << gas << " > kNGas=" << kNGas ;
147- pad = 0 ;
148- dil = 0 ;
149- gas = 0 ;
150- ccId = 0 ;
151- return ;
162+ LOG (DEBUG) << " Wrong gasiplex address: gas=" << gas << " >= kNGas=" << kNGas ;
163+ isAbsIdOk = false ;
152164 }
165+ return isAbsIdOk;
153166}
0 commit comments