/data3/calcul/jacquem/working_dir/Micromegas/micromegasFrameWork/lcio/src/cpp/src/SIO/SIOCalHitHandler.cc

Go to the documentation of this file.
00001 #include "SIO/SIOCalHitHandler.h"
00002 
00003 #include "SIO/LCSIO.h"
00004 
00005 #include "EVENT/LCIO.h"
00006 #include "EVENT/MCParticle.h"
00007 #include "EVENT/CalorimeterHit.h"
00008 #include "IOIMPL/CalorimeterHitIOImpl.h"
00009 #include "IMPL/LCFlagImpl.h"
00010 
00011 #include "SIO_functions.h"
00012 #include "SIO_block.h"
00013 
00014 
00015 using namespace EVENT ;
00016 using namespace IMPL ;
00017 using namespace IOIMPL ;
00018 
00019 
00020 namespace SIO{
00021     
00022   unsigned int SIOCalHitHandler::read(SIO_stream* stream, 
00023                                       LCObject** objP ){
00024     unsigned int status ; 
00025         
00026     // create a new object :
00027     CalorimeterHitIOImpl* hit  = new CalorimeterHitIOImpl ;
00028     *objP = hit ;
00029         
00030     SIO_DATA( stream ,  &(hit->_cellID0) , 1  ) ;
00031 
00032     LCFlagImpl lcFlag(_flag) ;
00033 
00034 
00035     // in v00-08 cellid1 has been stored by default
00036     if( lcFlag.bitSet( LCIO::RCHBIT_ID1 ) || 
00037 
00038         ( SIO_VERSION_MAJOR(_vers)==0 && SIO_VERSION_MINOR(_vers)==8) ){
00039 
00040       SIO_DATA( stream ,  &(hit->_cellID1) , 1  ) ;
00041 
00042     }
00043     SIO_DATA( stream ,  &(hit->_energy) , 1  ) ;
00044 
00045     if( _vers > SIO_VERSION_ENCODE( 1, 9 ) && lcFlag.bitSet( LCIO::RCHBIT_ENERGY_ERROR )){
00046         SIO_DATA( stream ,  &(hit->_energyError) , 1  ) ;
00047     } 
00048 
00049 
00050     if( _vers > SIO_VERSION_ENCODE( 1, 2) && lcFlag.bitSet( LCIO::RCHBIT_TIME ) ){
00051       SIO_DATA( stream ,  &(hit->_time) , 1  ) ;
00052     }
00053 
00054     if( lcFlag.bitSet( LCIO::RCHBIT_LONG ) ){
00055       SIO_DATA( stream ,  hit->_position  , 3 ) ;
00056     }
00057 
00058     if( _vers > SIO_VERSION_ENCODE( 1, 2)   ){
00059       SIO_DATA( stream ,  &(hit->_type) , 1  ) ;
00060       SIO_PNTR( stream , &(hit->_rawHit)  ) ;
00061   }
00062   
00063     // read a pointer tag for future reference to calorimeter hits
00064     
00065     if( _vers > SIO_VERSION_ENCODE( 1, 2) ){    // the logic of the pointer bit has been inverted in v1.3
00066       
00067       if( ! lcFlag.bitSet( LCIO::RCHBIT_NO_PTR )  )
00068         SIO_PTAG( stream , dynamic_cast<const CalorimeterHit*>(hit) ) ;
00069       
00070     }else{
00071       
00072       if( lcFlag.bitSet( LCIO::RCHBIT_NO_PTR )  )
00073         SIO_PTAG( stream , dynamic_cast<const CalorimeterHit*>(hit) ) ;
00074     }
00075     
00076     return ( SIO_BLOCK_SUCCESS ) ;
00077   }
00078   
00079     
00080   unsigned int SIOCalHitHandler::write(SIO_stream* stream, 
00081                                        const LCObject* obj ){
00082     
00083     unsigned int status ; 
00084 
00085     const CalorimeterHit* hit = dynamic_cast<const CalorimeterHit*>(obj)  ;
00086     
00087     LCFlagImpl lcFlag(_flag) ;
00088 
00089 
00090     LCSIO_WRITE( stream, hit->getCellID0()  ) ;
00091 
00092     if( lcFlag.bitSet( LCIO::RCHBIT_ID1 ) ){
00093       LCSIO_WRITE( stream, hit->getCellID1()  ) ;
00094     }
00095     LCSIO_WRITE( stream, hit->getEnergy()  ) ;
00096     if( lcFlag.bitSet( LCIO::RCHBIT_ENERGY_ERROR ) ){
00097         LCSIO_WRITE( stream, hit->getEnergyError()  ) ;
00098     }
00099 
00100     if( lcFlag.bitSet( LCIO::RCHBIT_TIME ) ){
00101       LCSIO_WRITE( stream ,  hit->getTime() ) ;
00102     }
00103 
00104     // as SIO doesn't provide a write function with const arguments
00105     // we have to cast away the constness 
00106     if( lcFlag.bitSet( LCIO::RCHBIT_LONG ) ){
00107       float* pos = const_cast<float*> ( hit->getPosition() ) ; 
00108       SIO_DATA( stream,  pos , 3 ) ;
00109     }
00110 
00111 
00112     LCSIO_WRITE( stream ,  hit->getType() ) ;
00113 
00114     EVENT::LCObject *rawHit = hit->getRawHit() ;
00115     SIO_PNTR( stream , &rawHit ) ;
00116     
00117     if( !lcFlag.bitSet( LCIO::RCHBIT_NO_PTR ) ){
00118       SIO_PTAG( stream , hit  ) ;
00119     }
00120 
00121     return ( SIO_BLOCK_SUCCESS ) ;
00122   }
00123   
00124 } // namespace

Generated on Mon Jan 7 13:15:21 2013 for MicromegasFramework by  doxygen 1.4.7