00001
00002
00003
00004
00005
00006
00008
00009
00010 #include <fstream>
00011
00012 #include "HepMC/IO_GenEvent.h"
00013 #include "HepMC/GenEvent.h"
00014 #include "HepMC/CompareGenEvent.h"
00015
00016
00017 #include "IsGoodEvent.h"
00018
00019 int main() {
00020
00021 std::ofstream os( "testMultipleCopies.out" );
00022 {
00023
00024 HepMC::IO_GenEvent ascii_in("@srcdir@/testIOGenEvent.input",std::ios::in);
00025
00026 HepMC::IO_GenEvent ascii_in2("@srcdir@/testHepMCVarious.input",std::ios::in);
00027 std::ofstream out1( "testMultipleOriginals.out" );
00028 std::ofstream out2( "testMultipleCopies1.out" );
00029 std::ofstream out3( "testMultipleCopies2.out" );
00030
00031 IsGoodEvent is_good_event;
00032
00033
00034 int icount=0;
00035 int num_good_events=0;
00036 int icnt;
00037 HepMC::GenEvent* evt1 = ascii_in.read_next_event();
00038 HepMC::GenEvent* evt2 = ascii_in2.read_next_event();
00039 HepMC::GenEvent* evt3 = ascii_in.read_next_event();
00040
00041 while ( evt1 && evt2 ) {
00042 icount++;
00043 if ( icount%50==1 ) os << "Processing Event Number " << icount
00044 << " stream 1 # " << evt1->event_number()
00045 << " stream 2 # " << evt2->event_number()
00046 << std::endl;
00047
00048 if ( is_good_event(evt1) ) {
00049
00050 os << "good event in stream 1 # "
00051 << evt1->event_number() << std::endl;
00052 evt1->print(out1);
00053 ++num_good_events;
00054 HepMC::GenEvent ec = (*evt1);
00055 ec.print(out3);
00056 icnt=0;
00057 for ( HepMC::GenEvent::particle_const_iterator p1 = ec.particles_begin();
00058 p1 != ec.particles_end(); ++p1 ) {
00059 ++icnt;
00060 os << "particle " << icnt << " barcode " <<(*p1)->barcode() << std::endl;
00061 }
00062 HepMC::GenEvent* evt4 = new HepMC::GenEvent(*evt1);
00063 evt4->print(out2);
00064 if( !compareGenEvent(evt1,evt4) ) { return -1; }
00065 delete evt4;
00066 }
00067
00068
00069 delete evt1;
00070 delete evt2;
00071 ascii_in >> evt1;
00072 ascii_in2 >> evt2;
00073 }
00074
00075 delete evt1;
00076 delete evt2;
00077 delete evt3;
00078
00079
00080 os << std::endl;
00081 os << num_good_events << " out of " << icount
00082 << " processed events passed the cuts." << std::endl;
00083 os << std::endl;
00084 os << " GenEvent copy constructor passes the test" << std::endl;
00085 os << std::endl;
00086 }
00087
00088
00089 {
00090
00091 HepMC::IO_GenEvent ascii_in("@srcdir@/testIOGenEvent.input",std::ios::in);
00092
00093 HepMC::GenEvent* evt5 = ascii_in.read_next_event();
00094 HepMC::GenEvent* evt6 = new HepMC::GenEvent();
00095 os << "event number for evt5: " << evt5->event_number() << std::endl;
00096 os << "event number for evt6: " << evt6->event_number() << std::endl;
00097
00098 (*evt6) = (*evt5);
00099 if( !compareGenEvent(evt5,evt6) ) { return -4; }
00100 delete evt5;
00101 os << "event number for evt6 after copy: " << evt6->event_number() << std::endl;
00102 os << std::endl;
00103 delete evt6;
00104 os << " GenEvent operator= passes the test" << std::endl;
00105 os << std::endl;
00106
00107 evt5 = ascii_in.read_next_event();
00108 evt6 = ascii_in.read_next_event();
00109 HepMC::GenEvent* evt7 = new HepMC::GenEvent(*evt5);
00110 HepMC::GenEvent* evt8 = new HepMC::GenEvent(*evt6);
00111 os << "event number for evt5: " << evt5->event_number() << std::endl;
00112 os << "event number for evt6: " << evt6->event_number() << std::endl;
00113 os << "before swap, evt5 has: " << evt5->vertices_size() << " vertices and "
00114 << evt5->particles_size() << " particles" << std::endl;
00115 os << "before swap, evt6 has: " << evt6->vertices_size() << " vertices and "
00116 << evt6->particles_size() << " particles" << std::endl;
00117 os << "before swap, evt7 has: " << evt7->vertices_size() << " vertices and "
00118 << evt7->particles_size() << " particles" << std::endl;
00119 os << "before swap, evt8 has: " << evt8->vertices_size() << " vertices and "
00120 << evt8->particles_size() << " particles" << std::endl;
00121 (*evt6).swap((*evt5));
00122 os << "event number for evt5 after swap: " << evt5->event_number() << std::endl;
00123 os << "event number for evt6 after swap: " << evt6->event_number() << std::endl;
00124
00125 os << "after swap, evt6 has: " << evt6->vertices_size() << " vertices and "
00126 << evt6->particles_size() << " particles" << std::endl;
00127 os << "after swap, evt7 has: " << evt7->vertices_size() << " vertices and "
00128 << evt7->particles_size() << " particles" << std::endl;
00129 if( !compareGenEvent(evt6,evt7) ) { return -6; }
00130
00131 os << "after swap, evt5 has: " << evt5->vertices_size() << " vertices and "
00132 << evt5->particles_size() << " particles" << std::endl;
00133 os << "after swap, evt8 has: " << evt8->vertices_size() << " vertices and "
00134 << evt8->particles_size() << " particles" << std::endl;
00135 if( !compareGenEvent(evt5,evt8) ) { return -5; }
00136
00137 delete evt5;
00138 delete evt6;
00139 delete evt7;
00140 delete evt8;
00141 os << std::endl;
00142 os << " GenEvent swap passes the test" << std::endl;
00143 os << std::endl;
00144 }
00145 return 0;
00146 }