00001 #include "SIO/SIOTrackerPulseHandler.h"
00002
00003 #include "SIO/LCSIO.h"
00004
00005 #include "EVENT/TrackerPulse.h"
00006 #include "EVENT/LCIO.h"
00007 #include "IMPL/LCFlagImpl.h"
00008 #include "IOIMPL/TrackerPulseIOImpl.h"
00009
00010 #include "SIO_functions.h"
00011 #include "SIO_block.h"
00012
00013
00014 using namespace EVENT ;
00015 using namespace IMPL ;
00016 using namespace IOIMPL ;
00017
00018
00019 namespace SIO{
00020
00021 unsigned int SIOTrackerPulseHandler::read(SIO_stream* stream,
00022 LCObject** objP){
00023 unsigned int status ;
00024
00025
00026 TrackerPulseIOImpl* hit = new TrackerPulseIOImpl ;
00027 *objP = hit ;
00028
00029 SIO_DATA( stream , &(hit->_cellID0) , 1 ) ;
00030
00031 LCFlagImpl lcFlag(_flag) ;
00032 if( lcFlag.bitSet( LCIO::TRAWBIT_ID1 ) )
00033 SIO_DATA( stream , &(hit->_cellID1) , 1 ) ;
00034
00035 SIO_DATA( stream , &(hit->_time) , 1 ) ;
00036 SIO_DATA( stream , &(hit->_charge ) , 1 ) ;
00037 if( _vers > SIO_VERSION_ENCODE( 1, 12 ) ){
00038
00039
00040
00041
00042 if( lcFlag.bitSet( LCIO::TRAWBIT_CM ) ){
00043 float cov[TRKPULSENCOVMATRIX] ;
00044 SIO_DATA( stream , cov , TRKPULSENCOVMATRIX ) ;
00045 hit->setCovMatrix( cov ) ;
00046 }
00047 }
00048 SIO_DATA( stream , &(hit->_quality ) , 1 ) ;
00049
00050 SIO_PNTR( stream , &(hit->_corrData) ) ;
00051
00052 SIO_PTAG( stream , dynamic_cast<const TrackerPulse*>(hit) ) ;
00053
00054 return ( SIO_BLOCK_SUCCESS ) ;
00055 }
00056
00057
00058 unsigned int SIOTrackerPulseHandler::write(SIO_stream* stream,
00059 const LCObject* obj){
00060
00061 unsigned int status ;
00062
00063 const TrackerPulse* hit = dynamic_cast<const TrackerPulse*>(obj) ;
00064
00065 LCSIO_WRITE( stream, hit->getCellID0() ) ;
00066
00067 LCFlagImpl lcFlag(_flag) ;
00068 if( lcFlag.bitSet( LCIO::TRAWBIT_ID1 ) )
00069 LCSIO_WRITE( stream, hit->getCellID1() ) ;
00070 LCSIO_WRITE( stream, hit->getTime() ) ;
00071 LCSIO_WRITE( stream, hit->getCharge() ) ;
00072
00073
00074 if( lcFlag.bitSet( LCIO::TRAWBIT_CM ) ){
00075 const FloatVec& cov = hit->getCovMatrix() ;
00076 for(unsigned int i=0; i<cov.size(); i++){
00077 LCSIO_WRITE( stream, cov[i] ) ;
00078 }
00079 }
00080 LCSIO_WRITE( stream, hit->getQuality() ) ;
00081
00082 TrackerData* corr = hit->getTrackerData() ;
00083 SIO_PNTR( stream , & corr );
00084
00085
00086 SIO_PTAG( stream , hit ) ;
00087
00088 return ( SIO_BLOCK_SUCCESS ) ;
00089 }
00090
00091 }