00001 #include "DstEvent/TofHitStatus.h" 00002 #include "DstEvent/DstTofTrack.h" 00003 #include <assert.h> 00004 00005 TofHitStatus::TofHitStatus() { 00006 m_status = 0; 00007 m_raw = false; 00008 m_readout = false; 00009 m_counter = false; 00010 m_cluster = false; 00011 m_barrel = false; 00012 m_east = false; 00013 m_layer = 0; 00014 m_overflow = false; 00015 m_multihit = false; 00016 m_ncounter = 0; 00017 m_neast = 0; 00018 m_nwest = 0; 00019 m_mrpc = false; 00020 } 00021 00022 00023 void TofHitStatus::init() { 00024 m_status = 0; 00025 m_raw = false; 00026 m_readout = false; 00027 m_counter = false; 00028 m_cluster = false; 00029 m_barrel = false; 00030 m_east = false; 00031 m_layer = 0; 00032 m_overflow = false; 00033 m_multihit = false; 00034 m_ncounter = 0; 00035 m_neast = 0; 00036 m_nwest = 0; 00037 m_mrpc = false; 00038 } 00039 00040 00041 TofHitStatus& 00042 TofHitStatus::operator=(const DstTofTrack& source){ 00043 m_status = source.status(); 00044 m_raw = ((m_status & Raw_Mask) >> Raw_Index ) ? true : false; 00045 m_readout = ((m_status & Readout_Mask) >> Readout_Index ) ? true : false; 00046 m_counter = ((m_status & Counter_Mask) >> Counter_Index ) ? true : false; 00047 m_cluster = ((m_status & Cluster_Mask) >> Cluster_Index ) ? true : false; 00048 m_barrel = ((m_status & Barrel_Mask) >> Barrel_Index ) ? true : false; 00049 m_east = ((m_status & East_Mask) >> East_Index ) ? true : false; 00050 m_layer = (m_status & Layer_Mask) >> Layer_Index; 00051 m_overflow = ((m_status & Overflow_Mask) >> Overflow_Index ) ? true : false; 00052 m_multihit = ((m_status & Multihit_Mask) >> Multihit_Index ) ? true : false; 00053 m_ncounter = (m_status >> Ncounter_Index ) & N_Mask; 00054 m_neast = (m_status >> Neast_Index ) & N_Mask; 00055 m_nwest = (m_status >> Nwest_Index ) & N_Mask; 00056 m_mrpc = ((m_status & MRPC_Mask) >> MRPC_Index ) ? true : false; 00057 00058 return *this; 00059 } 00060 00061 00062 TofHitStatus& 00063 TofHitStatus::operator=( const TofHitStatus& source ){ 00064 m_status = source.m_status; 00065 return *this; 00066 } 00067 00068 00069 bool TofHitStatus::is_raw( unsigned int status ) { 00070 return ((status & Raw_Mask) >> Raw_Index ) ? true : false; 00071 } 00072 00073 00074 bool TofHitStatus::is_readout( unsigned int status ) { 00075 return ((status & Readout_Mask) >> Readout_Index ) ? true : false; 00076 } 00077 00078 00079 bool TofHitStatus::is_counter( unsigned int status ) { 00080 return ((status & Counter_Mask) >> Counter_Index ) ? true : false; 00081 } 00082 00083 00084 bool TofHitStatus::is_cluster( unsigned int status ) { 00085 return ((status & Cluster_Mask) >> Cluster_Index ) ? true : false; 00086 } 00087 00088 00089 bool TofHitStatus::is_barrel( unsigned int status ) { 00090 return ((status & Barrel_Mask) >> Barrel_Index ) ? true : false; 00091 } 00092 00093 00094 bool TofHitStatus::is_east( unsigned int status ) { 00095 return ((status & East_Mask) >> East_Index ) ? true : false; 00096 } 00097 00098 00099 unsigned int TofHitStatus::layer( unsigned int status ) { 00100 return (status & Layer_Mask) >> Layer_Index; 00101 } 00102 00103 00104 bool TofHitStatus::is_overflow( unsigned int status ) { 00105 return ((status & Overflow_Mask) >> Overflow_Index ) ? true : false; 00106 } 00107 00108 00109 bool TofHitStatus::is_multihit( unsigned int status ) { 00110 return ((status & Multihit_Mask) >> Multihit_Index ) ? true : false; 00111 } 00112 00113 00114 unsigned int TofHitStatus::ncounter( unsigned int status ) { 00115 return (status >> Ncounter_Index ) & N_Mask; 00116 } 00117 00118 00119 unsigned int TofHitStatus::neast( unsigned int status ) { 00120 return (status >> Neast_Index ) & N_Mask; 00121 } 00122 00123 00124 unsigned int TofHitStatus::nwest( unsigned int status ) { 00125 return (status >> Nwest_Index ) & N_Mask; 00126 } 00127 00128 00129 bool TofHitStatus::is_mrpc( unsigned int status ) { 00130 return ((status & MRPC_Mask) >> MRPC_Index ) ? true : false; 00131 } 00132 00133 00134 void TofHitStatus::setStatus( unsigned int status ) { 00135 m_status = status; 00136 m_raw = ((m_status & Raw_Mask) >> Raw_Index ) ? true : false; 00137 m_readout = ((m_status & Readout_Mask) >> Readout_Index ) ? true : false; 00138 m_counter = ((m_status & Counter_Mask) >> Counter_Index ) ? true : false; 00139 m_cluster = ((m_status & Cluster_Mask) >> Cluster_Index ) ? true : false; 00140 m_barrel = ((m_status & Barrel_Mask) >> Barrel_Index ) ? true : false; 00141 m_east = ((m_status & East_Mask) >> East_Index ) ? true : false; 00142 m_layer = (m_status & Layer_Mask) >> Layer_Index; 00143 m_overflow = ((m_status & Overflow_Mask) >> Overflow_Index ) ? true : false; 00144 m_multihit = ((m_status & Multihit_Mask) >> Multihit_Index ) ? true : false; 00145 m_ncounter = (m_status >> Ncounter_Index ) & N_Mask; 00146 m_neast = (m_status >> Neast_Index ) & N_Mask; 00147 m_nwest = (m_status >> Nwest_Index ) & N_Mask; 00148 m_mrpc = ((m_status & MRPC_Mask) >> MRPC_Index ) ? true : false; 00149 } 00150 00151 00152 void TofHitStatus::setRaw( bool raw ) { 00153 m_raw = raw; 00154 if( raw ) { m_status |= Raw_Mask; } 00155 else { m_status &= (~Raw_Mask); } 00156 } 00157 00158 00159 void TofHitStatus::setReadout( bool readout ) { 00160 m_readout = readout; 00161 if( readout ) { m_status |= Readout_Mask; } 00162 else { m_status &= (~Readout_Mask); } 00163 } 00164 00165 00166 void TofHitStatus::setCounter( bool counter ) { 00167 m_counter = counter; 00168 if( counter ) { m_status |= Counter_Mask; } 00169 else { m_status &= (~Counter_Mask); } 00170 } 00171 00172 00173 void TofHitStatus::setCluster( bool cluster ) { 00174 m_cluster = cluster; 00175 if( cluster ) { m_status |= Cluster_Mask; } 00176 else { m_status &= (~Cluster_Mask); } 00177 } 00178 00179 00180 void TofHitStatus::setBarrel( bool barrel ) { 00181 m_barrel = barrel; 00182 if( barrel ) { m_status |= Barrel_Mask; } 00183 else { m_status &= (~Barrel_Mask); } 00184 } 00185 00186 00187 void TofHitStatus::setEast( bool east ) { 00188 m_east = east; 00189 if( east ) { m_status |= East_Mask; } 00190 else { m_status &= (~East_Mask); } 00191 } 00192 00193 00194 void TofHitStatus::setLayer( unsigned int layer ) { 00195 assert(layer<=3); 00196 m_layer = layer; 00197 m_status |= (layer << Layer_Index); 00198 } 00199 00200 00201 void TofHitStatus::setOverflow( bool overflow ) { 00202 m_overflow = overflow; 00203 if( overflow ) { m_status |= Overflow_Mask; } 00204 else { m_status &= (~Overflow_Mask); } 00205 } 00206 00207 00208 void TofHitStatus::setMultihit( bool multihit ) { 00209 m_multihit = multihit; 00210 if( multihit ) { m_status |= Multihit_Mask; } 00211 else { m_status &= (~Multihit_Mask); } 00212 } 00213 00214 00215 void TofHitStatus::setNCounter( unsigned int ncounter ) { 00216 if( m_barrel ) assert(ncounter<=176); 00217 else assert(ncounter<=96); 00218 m_ncounter = ncounter; 00219 m_status |= (ncounter << Ncounter_Index); 00220 } 00221 00222 00223 void TofHitStatus::setNEast( unsigned int neast ) { 00224 if( m_barrel ) assert(neast<=176); 00225 else assert(neast<=96); 00226 m_neast = neast; 00227 m_status |= (neast << Neast_Index); 00228 } 00229 00230 00231 void TofHitStatus::setNWest( unsigned int nwest ) { 00232 if( m_barrel ) assert(nwest<=176); 00233 else assert(nwest<=96); 00234 m_nwest = nwest; 00235 m_status |= (nwest << Nwest_Index); 00236 } 00237 00238 00239 void TofHitStatus::setMRPC( bool mrpc ) { 00240 m_mrpc = mrpc; 00241 if( mrpc ) { m_status |= MRPC_Mask; } 00242 else { m_status &= (~MRPC_Mask); } 00243 } 00244 00245 00246 void TofHitStatus::setBarrelCluster( unsigned int layer ) { 00247 TofHitStatus::setRaw( false ); 00248 TofHitStatus::setCluster( true ); 00249 TofHitStatus::setBarrel( true ); 00250 TofHitStatus::setOverflow( false ); 00251 TofHitStatus::setMultihit( false ); 00252 00253 if( layer == 3 ) { 00254 TofHitStatus::setReadout( false ); 00255 TofHitStatus::setCounter( false ); 00256 TofHitStatus::setEast( false ); 00257 TofHitStatus::setLayer( layer ); 00258 TofHitStatus::setNCounter( 2 ); 00259 TofHitStatus::setNEast( 2 ); 00260 TofHitStatus::setNWest( 2 ); 00261 } 00262 else if( layer == 1 || layer == 2 ) { 00263 TofHitStatus::setReadout( false ); 00264 TofHitStatus::setCounter( true ); 00265 TofHitStatus::setEast( false ); 00266 TofHitStatus::setLayer( layer ); 00267 TofHitStatus::setNCounter( 1 ); 00268 TofHitStatus::setNEast( 1 ); 00269 TofHitStatus::setNWest( 1 ); 00270 } 00271 else if( layer == 11 || layer == 12 || layer == 21 || layer == 22 ) { 00272 TofHitStatus::setReadout( true ); 00273 TofHitStatus::setCounter( true ); 00274 TofHitStatus::setNCounter( 0 ); 00275 if( layer%10 == 1 ) { 00276 TofHitStatus::setEast( true ); 00277 TofHitStatus::setNEast( 1 ); 00278 TofHitStatus::setNWest( 0 ); 00279 } 00280 else { 00281 TofHitStatus::setEast( false ); 00282 TofHitStatus::setNEast( 0 ); 00283 TofHitStatus::setNWest( 1 ); 00284 } 00285 if( static_cast<int>(layer/10) == 1 ) { 00286 TofHitStatus::setLayer( 1 ); 00287 } 00288 else { 00289 TofHitStatus::setLayer( 2 ); 00290 } 00291 } 00292 else{ 00293 cout << "TofRec TofHitStatus::setBarrelCounter layer = " << layer << endl; 00294 return; 00295 } 00296 TofHitStatus::setMRPC( false ); 00297 00298 return; 00299 } 00300 00301 00302 void TofHitStatus::setBarrelCounter( unsigned int layer ) { 00303 00304 TofHitStatus::setRaw( false ); 00305 TofHitStatus::setCounter( true ); 00306 TofHitStatus::setCluster( false ); 00307 TofHitStatus::setBarrel( true ); 00308 TofHitStatus::setOverflow( false ); 00309 TofHitStatus::setMultihit( false ); 00310 00311 if( layer == 1 || layer == 2 ) { 00312 TofHitStatus::setReadout( false ); 00313 TofHitStatus::setEast( false ); 00314 TofHitStatus::setLayer( layer ); 00315 TofHitStatus::setNCounter( 1 ); 00316 TofHitStatus::setNEast( 1 ); 00317 TofHitStatus::setNWest( 1 ); 00318 } 00319 if( layer == 11 || layer == 12 || layer == 21 || layer == 22 ) { 00320 TofHitStatus::setReadout( true ); 00321 TofHitStatus::setNCounter( 0 ); 00322 if( layer%10 == 1 ) { 00323 TofHitStatus::setEast( true ); 00324 TofHitStatus::setNEast( 1 ); 00325 TofHitStatus::setNWest( 0 ); 00326 } 00327 else { 00328 TofHitStatus::setEast( false ); 00329 TofHitStatus::setNEast( 0 ); 00330 TofHitStatus::setNWest( 1 ); 00331 } 00332 if( static_cast<int>(layer/10) == 1 ) { 00333 TofHitStatus::setLayer( 1 ); 00334 } 00335 else { 00336 TofHitStatus::setLayer( 2 ); 00337 } 00338 } 00339 TofHitStatus::setMRPC( false ); 00340 00341 return; 00342 } 00343 00344 00345 void TofHitStatus::setBarrelReadout( unsigned int layer, bool east ) { 00346 TofHitStatus::setRaw( false ); 00347 TofHitStatus::setReadout( true ); 00348 TofHitStatus::setCounter( false ); 00349 TofHitStatus::setCluster( false ); 00350 TofHitStatus::setBarrel( true ); 00351 TofHitStatus::setEast( east ); 00352 TofHitStatus::setLayer( layer ); 00353 TofHitStatus::setOverflow( false ); 00354 TofHitStatus::setMultihit( false ); 00355 TofHitStatus::setNCounter( 0 ); 00356 if( east ){ 00357 TofHitStatus::setNEast( 1 ); 00358 TofHitStatus::setNWest( 0 ); 00359 } 00360 else{ 00361 TofHitStatus::setNEast( 0 ); 00362 TofHitStatus::setNWest( 1 ); 00363 } 00364 TofHitStatus::setMRPC( false ); 00365 return; 00366 } 00367 00368 00369 void TofHitStatus::setBarrelRaw( unsigned int layer, bool east ) { 00370 TofHitStatus::setRaw( true ); 00371 TofHitStatus::setReadout( true ); 00372 TofHitStatus::setCounter( false ); 00373 TofHitStatus::setCluster( false ); 00374 TofHitStatus::setBarrel( true ); 00375 TofHitStatus::setEast( east ); 00376 TofHitStatus::setLayer( layer ); 00377 TofHitStatus::setOverflow( false ); 00378 TofHitStatus::setMultihit( false ); 00379 TofHitStatus::setNCounter( 0 ); 00380 if( east ){ 00381 TofHitStatus::setNEast( 1 ); 00382 TofHitStatus::setNWest( 0 ); 00383 } 00384 else{ 00385 TofHitStatus::setNEast( 0 ); 00386 TofHitStatus::setNWest( 1 ); 00387 } 00388 TofHitStatus::setMRPC( false ); 00389 return; 00390 } 00391 00392 00393 void TofHitStatus::setEndcapCluster( bool east ) { 00394 TofHitStatus::setRaw( false ); 00395 TofHitStatus::setReadout( true ); 00396 TofHitStatus::setCounter( true ); 00397 TofHitStatus::setCluster( true ); 00398 TofHitStatus::setBarrel( false ); 00399 TofHitStatus::setEast( east ); 00400 TofHitStatus::setLayer( 1 ); 00401 TofHitStatus::setOverflow( false ); 00402 TofHitStatus::setMultihit( false ); 00403 TofHitStatus::setNCounter( 1 ); 00404 TofHitStatus::setNEast( 1 ); 00405 TofHitStatus::setNWest( 0 ); 00406 TofHitStatus::setMRPC( false ); 00407 return; 00408 } 00409 00410 00411 void TofHitStatus::setEndcapRaw( bool east ) { 00412 TofHitStatus::setRaw( true ); 00413 TofHitStatus::setReadout( true ); 00414 TofHitStatus::setCounter( false ); 00415 TofHitStatus::setCluster( false ); 00416 TofHitStatus::setBarrel( false ); 00417 TofHitStatus::setEast( east ); 00418 TofHitStatus::setLayer( 1 ); 00419 TofHitStatus::setOverflow( false ); 00420 TofHitStatus::setMultihit( false ); 00421 TofHitStatus::setNCounter( 1 ); 00422 TofHitStatus::setNEast( 1 ); 00423 TofHitStatus::setNWest( 0 ); 00424 TofHitStatus::setMRPC( false ); 00425 return; 00426 } 00427 00428 00429 void TofHitStatus::setMRPCReadout( bool east ) { 00430 TofHitStatus::setRaw( false ); 00431 TofHitStatus::setReadout( true ); 00432 TofHitStatus::setCounter( false ); 00433 TofHitStatus::setCluster( false ); 00434 TofHitStatus::setBarrel( false ); 00435 TofHitStatus::setEast( east ); 00436 TofHitStatus::setLayer( 1 ); 00437 TofHitStatus::setOverflow( false ); 00438 TofHitStatus::setMultihit( false ); 00439 TofHitStatus::setNCounter( 0 ); 00440 if( east ) { 00441 TofHitStatus::setNEast( 1 ); 00442 TofHitStatus::setNWest( 0 ); 00443 } 00444 else { 00445 TofHitStatus::setNEast( 0 ); 00446 TofHitStatus::setNWest( 1 ); 00447 } 00448 TofHitStatus::setMRPC( true ); 00449 return; 00450 } 00451 00452 00453 void TofHitStatus::setMRPCCluster( bool cluster, bool east ) { 00454 TofHitStatus::setRaw( false ); 00455 if( cluster ) { 00456 TofHitStatus::setReadout( false ); 00457 } 00458 else { 00459 TofHitStatus::setReadout( true ); 00460 } 00461 TofHitStatus::setCounter( true ); 00462 TofHitStatus::setCluster( true ); 00463 TofHitStatus::setBarrel( false ); 00464 TofHitStatus::setEast( east ); 00465 TofHitStatus::setLayer( 1 ); 00466 TofHitStatus::setOverflow( false ); 00467 TofHitStatus::setMultihit( false ); 00468 if( cluster ) { 00469 TofHitStatus::setNCounter( 1 ); 00470 TofHitStatus::setNEast( 1 ); 00471 TofHitStatus::setNWest( 1 ); 00472 } 00473 else { 00474 TofHitStatus::setNCounter( 1 ); 00475 if( east ) { 00476 TofHitStatus::setNEast( 1 ); 00477 TofHitStatus::setNWest( 0 ); 00478 } 00479 else { 00480 TofHitStatus::setNEast( 0 ); 00481 TofHitStatus::setNWest( 1 ); 00482 } 00483 } 00484 TofHitStatus::setMRPC( true ); 00485 return; 00486 } 00487 00488 00489 void TofHitStatus::setNoHit() { 00490 TofHitStatus::setRaw( true ); 00491 TofHitStatus::setReadout( false ); 00492 TofHitStatus::setCounter( false ); 00493 TofHitStatus::setCluster( false ); 00494 TofHitStatus::setBarrel( false ); 00495 TofHitStatus::setEast( false ); 00496 TofHitStatus::setLayer( 0 ); 00497 TofHitStatus::setOverflow( false ); 00498 TofHitStatus::setMultihit( false ); 00499 TofHitStatus::setNCounter( 0 ); 00500 TofHitStatus::setNEast( 0 ); 00501 TofHitStatus::setNWest( 0 ); 00502 TofHitStatus::setMRPC( false ); 00503 return; 00504 }