00001
00002
00003
00004
00005 #include "tutil.h"
00006 #include "lcio.h"
00007 #include <cstdlib>
00008
00009
00010
00011
00012
00013
00014 #include "SIO/LCIORandomAccess.h"
00015 #include "SIO/LCIORandomAccessMgr.h"
00016 #include "SIO/RunEventMap.h"
00017
00018 #include "UTIL/LCTOOLS.h"
00019
00020 #include <iostream>
00021 #include <set>
00022 #include <vector>
00023 #include <algorithm>
00024
00025 using namespace std ;
00026 using namespace lcio ;
00027
00028 using namespace SIO ;
00029
00030
00031 const static string testname="random_access";
00032
00033
00034
00035 int main(int argc, char** argv ){
00036
00037
00038 TEST MYTEST=TEST( testname, std::cout );
00039
00040
00041 MYTEST.LOG( " ---------------------------- testing class RunEvent" ) ;
00042
00043
00044
00045 set< RunEvent > reSet ;
00046 reSet.insert( RunEvent( 123456, -1 ) ) ;
00047 reSet.insert( RunEvent( 123456, 1 ) ) ;
00048 reSet.insert( RunEvent( 123456, 12 ) ) ;
00049 reSet.insert( RunEvent( 123450, -1 ) ) ;
00050 reSet.insert( RunEvent( 123450, 112345 ) ) ;
00051
00052 reSet.insert( EVENT::long64(123400) << 32 | (12345678LL & 0xffffffff) ) ;
00053
00054 MYTEST( reSet.size() , unsigned(6) , " set< RunEvent>.size() != 6 " ) ;
00055
00056 std::vector< RunEvent > v ;
00057 std::copy( reSet.begin() , reSet.end() , std::back_inserter( v ) ) ;
00058
00059
00060
00061
00062
00063
00064 std::stringstream err ;
00065 err << " v[0] : " << v[0] << std::endl
00066 << " v[1] : " << v[1] << std::endl
00067 << " v[2] : " << v[2] << std::endl
00068 << " v[3] : " << v[3] << std::endl
00069 << " v[4] : " << v[4] << std::endl
00070 << " v[5] : " << v[5] << std::endl ;
00071
00072 MYTEST( v[0] < v[1] , true , err.str() ) ;
00073 MYTEST( v[1] < v[2] , true , err.str() ) ;
00074 MYTEST( v[2] < v[3] , true , err.str() ) ;
00075 MYTEST( v[3] < v[4] , true , err.str() ) ;
00076 MYTEST( v[4] < v[5] , true , err.str() ) ;
00077
00078
00079 MYTEST.LOG( " ------------------------------------- testing class RunEventMap" ) ;
00080
00081 RunEventMap map ;
00082
00083 int count = 0 ;
00084 for( std::set< RunEvent >::iterator it = reSet.begin() ; it != reSet.end() ; ++it , ++count ){
00085
00086
00087 map.add( *it , 1024 * count ) ;
00088 }
00089 MYTEST( map.getPosition( v[2] ), 2048 , " EventMap::getPosition() return for exisiting event " ) ;
00090
00091 MYTEST( unsigned (map.getNumberOfRunRecords() + map.getNumberOfEventRecords() ),
00092 map.size(), "RunEventMap invariant: nRun+nEvt = map.size " );
00093
00094 MYTEST( map.getNumberOfEventRecords(), 4 , "RunEventMap::getNumberOfEventRecords() " );
00095 MYTEST( map.getNumberOfRunRecords(), 2 , "RunEventMap::getNumberOfRunRecords() " );
00096
00097 map.add( v[2] , 2048000 ) ;
00098
00099 MYTEST( map.getPosition( v[2] ), 2048000 , " test if EventMap::add() overwrites existing entry " ) ;
00100
00101 MYTEST( map.getNumberOfEventRecords(), 4 , "RunEventMap::getNumberOfEventRecords() after addition of duplicate (overwrite) " );
00102
00103
00104
00105
00106 if( false ){
00107
00108 MYTEST.FAILED( "oops, something went wrong..." );
00109 }
00110
00111
00112 MYTEST.LOG( " ------------------------------------- test random access in file simjob.slcio - file must exist in : " ) ;
00113 std::system("pwd") ;
00114
00115
00116
00117
00118
00119 LCReader* lcReader = LCFactory::getInstance()->createLCReader( IO::LCReader::directAccess ) ;
00120
00121
00122
00123 try{
00124
00125 lcReader->open( "c_sim.slcio" ) ;
00126
00127
00128
00129 LCRunHeader* rHdr = lcReader->readNextRunHeader() ;
00130 MYTEST( rHdr->getRunNumber() , 0 , " LCReader::readNextRunHeader() - run number is not 0" );
00131
00132 LCEvent* evt = lcReader->readNextEvent() ;
00133 MYTEST( evt->getEventNumber() , 0 , " LCReader::readNextEvent() - event number is not 0" );
00134 MYTEST( evt->getRunNumber() , 0 , " LCReader::readNextEvent() - run number is not 0" );
00135
00136
00137 evt = lcReader->readEvent( 3 , 4 ) ;
00138
00139 MYTEST( evt !=0 , true , " LCReader::readEvent( 3 , 4 ) - evt is NULL" );
00140 MYTEST( evt->getRunNumber() , 3 , " LCReader::readEvent( 3, 4 ) - run number is not 3" );
00141 MYTEST( evt->getEventNumber() , 4 , " LCReader::readEvent( 3, 4 ) - event number is not 4" );
00142
00143 }
00144 catch( Exception &e ){
00145
00146 MYTEST.FAILED( e.what() );
00147 }
00148
00149 lcReader->close();
00150
00151 delete lcReader;
00152
00153
00154 return 0;
00155 }
00156
00157
00158