00001
00002 #include "lcio.h"
00003
00004 #include "IO/LCWriter.h"
00005 #include "EVENT/LCIO.h"
00006 #include "IMPL/LCEventImpl.h"
00007 #include "IMPL/LCRunHeaderImpl.h"
00008
00009 #include "UTIL/LCStdHepRdr.h"
00010
00011 #include <cstdlib>
00012 #include <iostream>
00013 #include <sstream>
00014 #include <memory>
00015
00016
00017
00018 using namespace lcio ;
00019
00020
00021
00022
00023
00024
00025 int main(int argc, char** argv ){
00026
00027 if(argc < 4) {
00028
00029 std::cout << " usage: stdhepjob infile.stdhep outfile.slcio maxEvt " << std::endl
00030 << " infile.stdhep - input file name " << std::endl
00031 << " outfile.slcio - ouput file name " << std::endl
00032 << " maxEvt - max number of events to read [-1: all]" << std::endl ;
00033
00034 return 1;
00035 }
00036
00037 std::string inFile = argv[1] ;
00038 std::string outFile = argv[2] ;
00039 int maxEvt = std::atoi( argv[3] ) ;
00040
00041
00042 std::cout << "==================================================== " << std::endl
00043 << " stdhepjob : " << std::endl ;
00044
00045
00046 LCStdHepRdr rdr( inFile.c_str() ) ;
00047
00048 std::cout << " opened file : " << inFile << std::endl ;
00049
00050 rdr.printHeader() ;
00051
00052
00053 std::auto_ptr<LCWriter> lcWrt( LCFactory::getInstance()->createLCWriter() ) ;
00054
00055 lcWrt->open( outFile ) ;
00056
00057 std::auto_ptr<LCRunHeaderImpl> runHdr( new LCRunHeaderImpl ) ;
00058
00059 runHdr->setRunNumber( 0 ) ;
00060
00061 std::string detName("Unknown") ;
00062 runHdr->setDetectorName( detName ) ;
00063
00064 std::stringstream description ;
00065
00066 description << " file generated with LCIO stdhepjob from " << inFile ;
00067
00068 runHdr->setDescription( description.str() ) ;
00069
00070 lcWrt->writeRunHeader( runHdr.get() ) ;
00071
00072 int count = 0;
00073
00074 try {
00075
00076 while( maxEvt < 0 || count < maxEvt ){
00077
00078 std::auto_ptr<LCEventImpl> evt( new LCEventImpl() ) ;
00079
00080 evt->setRunNumber( 0 ) ;
00081 evt->setEventNumber( count ) ;
00082 evt->setDetectorName( detName ) ;
00083
00084
00085 rdr.updateNextEvent( evt.get() , "MCParticle" ) ;
00086
00087 lcWrt->writeEvent( evt.get() ) ;
00088
00089 ++count ;
00090
00091 }
00092 }
00093
00094 catch( IO::EndOfDataException& e ) {
00095 }
00096
00097 std::cout << " converted " << count << " events - written to LCIO " << outFile << std::endl ;
00098
00099 std::cout << "==================================================== "
00100 << std::endl << std::endl ;
00101
00102 lcWrt->close() ;
00103
00104 return 0 ;
00105
00106 }
00107