Page MenuHomeHEPForge

No OneTemporary

Index: trunk/src/Generators/FPythia/FPythia.cc
===================================================================
--- trunk/src/Generators/FPythia/FPythia.cc (revision 155)
+++ trunk/src/Generators/FPythia/FPythia.cc (revision 156)
@@ -1,136 +1,137 @@
// $Id: $
// Include files
#include "RivetGun/FPythia/FPythia.h"
#include <sstream>
#include <iostream>
using namespace std;
namespace RivetGun {
///-----------------------------------------------------------------------------
/// Implementation file for class : FPythia
/// @author Andy Buckley
///-----------------------------------------------------------------------------
/// Standard constructor
FPythia::FPythia() {
/// Herwig 6.2.6 uses HEPEVT with 4000 entries and 8-byte floats.
HepMC::HEPEVT_Wrapper::set_max_number_entries(4000);
HepMC::HEPEVT_Wrapper::set_sizeof_real(8);
//HepMC::HEPEVT_Wrapper::set_sizeof_int(4);
// (Some platforms may require the initialization of pythia PYDATA block
// data as external - if you get pythia initialization errors try
// commenting in/out the below call to initpydata() )
// initpydata();
//
// Select W+gamma process (process number 20)
// (here we have to be careful of C/F77 differences: arrays in C
// start at 0, F77 at 1, so we need to subtract 1 from the process #)
pysubs_.msel=0;
pysubs_.msub[20-1] = 1;
// set random number seed (mandatory!)
pydatr_.mrpy[0]=55122 ;
// Tell Pythia not to write multiple copies of particles in event record.
pypars_.mstp[128-1] = 2;
// Example of setting a Pythia parameter: set the top mass
pydat2_.pmas[1-1][6-1]= 175;
}
/// Standard destructor
FPythia::~FPythia() {}
/// Set a parameter with an integer value
Status FPythia::setParam(const string & name, int value) {
stringstream sval;
sval << value;
const string pygive_input( name + "=" + sval.str() );
call_pygive(pygive_input.c_str());
return Success;
}
/// Set a parameter with a double-precision value
Status FPythia::setParam(const string & name, double value) {
stringstream sval;
sval << value;
const string pygive_input( name + "=" + sval.str() );
call_pygive(pygive_input.c_str());
return Success;
}
/// Set a parameter with a boolean value
Status FPythia::setParam(const string & name, bool value) {
stringstream sval;
sval << value;
const string pygive_input( name + "=" + sval.str() );
call_pygive(pygive_input.c_str());
return Success;
}
/// Set up default params etc.
Status FPythia::initialize() {
// Call pythia initialization
call_pyinit( "CMS", "p", "p", 14000.0);
return Success;
}
/// Run the generator for one event
Status FPythia::makeEvent(HepMC::GenEvent& evt) {
+ clearEvent(evt);
call_pyevnt(); // generate one event
call_pyhepc(1); // convert common PYJETS into common HEPEVT
fillEvent(evt);
return Success;
}
/// Fill a HepMC event
Status FPythia::fillEvent(HepMC::GenEvent& evt) {
//cout << "Pythia filling event" << endl;
HepMC::IO_HEPEVT hepevt;
// HepMC::IO_Ascii output("dump.dat",std::ios::out);
// Populate HepMC event
hepevt.fill_next_event(&evt);
//hepevt.read_next_event();
// Set process ID code from common block
//evt.set_signal_process_id(gHwproc->iproc);
//evt.set_random_states(m_seeds);
//if (true) {
// HepMC::HEPEVT_Wrapper::print_hepevt();
// evt.print();
//}
return Success;
}
/// Tidy up after ourselves
Status FPythia::finalize() {
//call_pystat(1);
return Success;
}
////////////////////////////////////////////
// Class factory
extern "C" Generator* create() {
return new FPythia();
}
// Class destroyer
extern "C" void destroy(Generator* gen) {
delete gen;
}
}
Index: trunk/src/Generators/Generator.cc
===================================================================
--- trunk/src/Generators/Generator.cc (revision 155)
+++ trunk/src/Generators/Generator.cc (revision 156)
@@ -1,11 +1,19 @@
#include "RivetGun/Generator.h"
namespace RivetGun {
/// Standard constructor
Generator::Generator() {}
-
+
/// Standard destructor
Generator::~Generator() {}
+ /// Clear the passed event
+ Status Generator::clearEvent(HepMC::GenEvent& evt) {
+ if (!evt.particles_empty() || !evt.vertices_empty()) {
+ evt = HepMC::GenEvent();
+ }
+ return Success;
+ }
+
}
Index: trunk/src/Generators/FHerwig/FHerwig.cc
===================================================================
--- trunk/src/Generators/FHerwig/FHerwig.cc (revision 155)
+++ trunk/src/Generators/FHerwig/FHerwig.cc (revision 156)
@@ -1,159 +1,160 @@
// $Id: $
// Include files
#include "RivetGun/FHerwig/FHerwig.h"
#include <iostream>
using std::cout;
using std::endl;
using std::cerr;
namespace RivetGun {
//-----------------------------------------------------------------------------
// Implementation file for class : FHerwig
// @author Andy Buckley
//-----------------------------------------------------------------------------
// Standard constructor
FHerwig::FHerwig() {
/// Herwig 6.5 uses HEPEVT with 4000 entries and 8-byte floats.
HepMC::HEPEVT_Wrapper::set_max_number_entries(4000);
HepMC::HEPEVT_Wrapper::set_sizeof_real(8);
//HepMC::HEPEVT_Wrapper::set_sizeof_int(4);
// Set default common block params
hwproc_.PBEAM1 = 7000.0; // energy of beam1
hwproc_.PBEAM2 = 7000.0; // energy of beam2
// 1610 = gg->H--> WW, 1706 = qq-->ttbar, 2510 = ttH -> ttWW
hwproc_.IPROC = 1706; // qq -> ttbar production
hwproc_.MAXEV = 100; // number of events
hwevnt_.MAXPR = 2; // Number of events to print
// Specify beam particles
for ( unsigned int i = 0; i < 8; ++i ) {
hwbmch_.PART1[i] = (i < 1) ? 'P' : ' ';
hwbmch_.PART2[i] = (i < 1) ? 'P' : ' ';
}
}
// Standard destructor
FHerwig::~FHerwig() {}
/// Parameter setting
Status FHerwig::setParam(const std::string & name, const int value) {
if (name == "IPROC") {
// 1610 = gg->H--> WW, 1706 = qq-->ttbar, 2510 = ttH -> ttWW
hwproc_.IPROC = value; // qq -> ttbar production
} else if (name == "MAXEV") {
hwproc_.MAXEV = value; // number of events
} else if (name == "MAXPR") {
hwevnt_.MAXPR = value; // Number of events to print
} else if (name == "PART1[i]") {
// Specify beam particles
// hwbmch_.PART1[i] // i from 0 to 7
} else {
cerr << "FHerwig doesn't have an integer-valued parameter called " << name << endl;
}
return Success;
}
Status FHerwig::setParam(const std::string & name, const double value) {
if (name == "PBEAM1") {
hwproc_.PBEAM1 = value; // energy of beam1
} else if (name == "PBEAM2") {
hwproc_.PBEAM2 = value; // energy of beam2
} else {
cerr << "FHerwig doesn't have a double-valued parameter called " << name << endl;
}
return Success;
}
// Set bool-valued params
Status FHerwig::setParam(const std::string & name, const bool value) {
cerr << "FHerwig doesn't have a double-valued parameter called " << name << endl;
return Failure;
}
/// Set up initial state from supplied params
Status FHerwig::initialize() {
hwigin_(); // Initialise other common blocks
hwuinc_(); // Compute parameter-dependent constants
hweini_(); // Initialise elementary process
return Success;
}
// Run the generator for one event
/// @todo Make sub-process execution conditional
Status FHerwig::makeEvent(HepMC::GenEvent& evt) {
+ clearEvent(evt);
hwuine_(); // Initialize event
hwepro_(); // Generate hard subprocess
hwbgen_(); // Generate parton cascade
hwdhob_(); // Do heavy quark decays
hwcfor_(); // Do cluster formation
hwcdec_(); // Do cluster decays
hwdhad_(); // Do unstable particle decays
hwdhvy_(); // Do heavy flavor decays
hwmevt_(); // Add soft underlying event
hwufne_(); // Finish event
fillEvent(evt);
return Success;
}
/// Fill a HepMC event
Status FHerwig::fillEvent(HepMC::GenEvent& evt) {
//cout << "Herwig filling event" << endl;
HepMC::IO_HERWIG hepevt;
// HepMC::IO_Ascii output("dump.dat",ios::out);
// Populate HepMC event
hepevt.fill_next_event(&evt);
//hepevt.read_next_event();
// Set process ID code from common block
//evt.set_signal_process_id(gHwproc->iproc);
//evt.set_random_states(m_seeds);
// Re-interpret event weights
// if (gHwevnt->evwgt < 0.0) {
// evt.weights().push_back(-1.0);
// } else if (gHwevnt->evwgt > 0.0) {
// evt.weights().push_back(1.0);
// } else {
// cerr << "Herwig: event weight == 0!" << endl;
// }
//if (true) {
// HepMC::HEPEVT_Wrapper::print_hepevt();
// evt.print();
//}
return Success;
}
/// Tidy up after ourselves
Status FHerwig::finalize() {
hwefin_();
return Success;
}
////////////////////////////////////////////
// Class factory
extern "C" Generator* create() {
return new FHerwig();
}
// Class destroyer
extern "C" void destroy(Generator* gen) {
delete gen;
}
}
Index: trunk/src/Test/testRivet.cc
===================================================================
--- trunk/src/Test/testRivet.cc (revision 155)
+++ trunk/src/Test/testRivet.cc (revision 156)
@@ -1,66 +0,0 @@
-// -*- C++ -*-
-namespace RivetGun {}
-using namespace RivetGun;
-
-#ifdef FPYTHIA
-#include "RivetGun/FPythia/FPythia.h"
-typedef FPythia MyGen;
-#endif
-#ifdef FHERWIG
-#include "RivetGun/FHerwig/FHerwig.h"
-typedef FHerwig MyGen;
-#endif
-
-#include "Rivet/Analysis/RivetHandler.h"
-#include "Rivet/Analysis/Examples/TestMultiplicity.h"
-
-using namespace Rivet;
-using namespace std;
-
-
-int main() {
- //Generator* gen = GeneratorFactory::createGen("Pythia6206");
- Generator* gen = new MyGen();
- //HepMC::GenEvent myevent;
-
- //Set params
-#ifdef FHERWIG
- gen->setParam("PBEAM1", 8000.0);
- gen->setParam("IPROC", 1705);
-#endif
-#ifdef FPYTHIA
- gen->setParam("MSUB(96)", 0);
- gen->setParam("MSUB(25)", 1);
-#endif
-
- // Initialize
- gen->initialize();
-
- // Initialise Rivet
- RivetHandler rh;
- rh.addAnalysis(TestMultiplicity());
- rh.init();
- cout << "RivetHandler info: " << endl << rh.info() << endl;
-
- // Event loop
- unsigned int maxev(20);
- cout << "Generating " << maxev << " events." << endl;
- cout << "Starting..." << endl;
- for (unsigned int i = 0; i < maxev; ++i) {
- cout << "Event number " << i << endl;
- HepMC::GenEvent myevent;
- gen->makeEvent(myevent);
- rh.analyze(myevent);
- //myevent.clear();
- }
- cout << "Finished!" << endl;
-
- // Rivet reports...
- //rh.finalize();
-
- // Finalise Herwig
- gen->finalize();
-
- return EXIT_SUCCESS;
-}
-
Index: trunk/src/Test/Makefile.am
===================================================================
--- trunk/src/Test/Makefile.am (revision 155)
+++ trunk/src/Test/Makefile.am (revision 156)
@@ -1,86 +1,94 @@
noinst_PROGRAMS =
EXTRA_PROGRAMS = testrivet testloop
MYCPPFLAGS = -I$(top_srcdir)/include -I$(HEPMCINCPATH) -I$(CLHEPINCPATH)
MYLDFLAGS = -L$(top_srcdir)/src/Generators -export-dynamic
MYLDADD = -l$(CLHEPLIBNAME)
if WITH_RIVET
MYCPPFLAGS += -I$(RIVETINCPATH)
MYLDFLAGS += -L$(RIVETLIBPATH)
MYLDADD += -l$(RIVETLIBNAME)
endif
## Pythia 7 / ThePEG tests
if WITH_THEPEG
if WITH_RIVET
noinst_PROGRAMS += testrivet testloop
testrivet_SOURCES = testrivet.cc
testrivet_LDADD = $(MYLDADD) -l$(THEPEGLIBNAME)
testrivet_LDFLAGS = $(MYLDFLAGS) -L$(THEPEGLIBPATH)
testrivet_CPPFLAGS = $(MYCPPFLAGS) -I$(THEPEGINCPATH)
testloop_SOURCES = runEventLoop.cc
testloop_LDADD = $(MYLDADD) -l$(THEPEGLIBNAME)
testloop_LDFLAGS = $(MYLDFLAGS) -L$(THEPEGLIBPATH)
testloop_CPPFLAGS = $(MYCPPFLAGS) -I$(THEPEGINCPATH)
endif
endif
## Fortran Pythia 6206 tests
FPYTHIACPPFLAGS = $(MYCPPFLAGS)
-FPYTHIALDFLAGS = $(MYLDFLAGS) -L$(HEPMCFIOLIBPATH) -L$(LHAPDFLIBPATH) -L$(top_srcdir)/src/Generators
+FPYTHIALDFLAGS = $(MYLDFLAGS) -L$(HEPMCLIBPATH) -L$(HEPMCFIOLIBPATH) -L$(LHAPDFLIBPATH) -L$(top_srcdir)/src/Generators
FPYTHIALDADD = $(MYLDADD) -lg2c -l$(HEPMCLIBNAME) -l$(HEPMCFIOLIBNAME) -lAGILe -lAGILeFPythia -l$(LHAPDFLIBNAME)
if WITH_PYTHIA6206LIB
+ FPYTHIA6206CPPFLAGS = $(FPYTHIACPPFLAGS) -I$(PYTHIA6206INCPATH)/$(PYTHIA6206INCNAME) -DFPYTHIA
+ FPYTHIA6206LDFLAGS = $(FPYTHIALDFLAGS) -L$(PYTHIA6206LIBPATH)
+ FPYTHIA6206LDADD = $(FPYTHIALDADD) -l$(PYTHIA6206LIBNAME)
noinst_PROGRAMS += testFPythia6206
- testFPythia6206_SOURCES = testGenerator.cc
- testFPythia6206_CPPFLAGS = $(FPYTHIACPPFLAGS) -I$(PYTHIA6206INCPATH)/$(PYTHIA6206INCNAME) -DFPYTHIA
- testFPythia6206_LDFLAGS = $(FPYTHIALDFLAGS) -L$(PYTHIA6206LIBPATH)
- testFPythia6206_LDADD = $(FPYTHIALDADD) -l$(PYTHIA6206LIBNAME) -l$(LHAPDFLIBNAME)
+ testFPythia6206_SOURCES = testGenerator.cc
+ testFPythia6206_CPPFLAGS = $(FPYTHIA6206CPPFLAGS)
+ testFPythia6206_LDFLAGS = $(FPYTHIA6206LDFLAGS)
+ testFPythia6206_LDADD = $(FPYTHIA6206LDADD)
if WITH_RIVET
- noinst_PROGRAMS += testRivetWithFPythia6206
- testRivetWithFPythia6206_SOURCES = testRivet.cc
- testRivetWithFPythia6206_CPPFLAGS = $(FPYTHIACPPFLAGS) -I$(RIVETINCPATH) -I$(PYTHIA6206INCPATH)/$(PYTHIA6206INCNAME) -DFPYTHIA
- testRivetWithFPythia6206_LDFLAGS = $(FPYTHIALDFLAGS) -L$(PYTHIA6206LIBPATH)
- testRivetWithFPythia6206_LDADD = $(FPYTHIALDADD) -l$(PYTHIA6206LIBNAME) -l$(LHAPDFLIBNAME) -l$(RIVETLIBNAME)
+ noinst_PROGRAMS += testFPythia6206WithRivet
+ testFPythia6206WithRivet_SOURCES = testGenerator.cc
+ testFPythia6206WithRivet_CPPFLAGS = $(FPYTHIA6206CPPFLAGS) -I$(RIVETINCPATH) -DRIVET
+ testFPythia6206WithRivet_LDFLAGS = $(FPYTHIA6206LDFLAGS) -L$(RIVETLIBPATH)
+ testFPythia6206WithRivet_LDADD = $(FPYTHIA6206LDADD) -l$(RIVETLIBNAME)
endif
endif
## Fortran Herwig 6507 tests
FHERWIGCPPFLAGS = $(MYCPPFLAGS)
FHERWIGLDFLAGS = $(MYLDFLAGS) -L$(HEPMCFIOLIBPATH) -L$(LHAPDFLIBPATH) -L$(top_srcdir)/src/Generators
FHERWIGLDADD = $(MYLDADD) -lg2c -l$(HEPMCLIBNAME) -l$(HEPMCFIOLIBNAME) -lAGILe -lAGILeFHerwig -l$(LHAPDFLIBNAME)
if WITH_HERWIG6507LIB
+ FHERWIG6507CPPFLAGS = $(FHERWIGCPPFLAGS) -I$(HERWIG6507INCPATH)/$(HERWIG6507INCNAME) -DFHERWIG
+ FHERWIG6507LDFLAGS = $(FHERWIGLDFLAGS) -L$(HERWIG6507LIBPATH)
+ FHERWIG6507LDADD = $(FHERWIGLDADD) -l$(HERWIG6507LIBNAME)
noinst_PROGRAMS += testFHerwig6507
- testFHerwig6507_SOURCES = testGenerator.cc
- testFHerwig6507_CPPFLAGS = $(FHERWIGCPPFLAGS) -I$(HERWIG6507INCPATH)/$(HERWIG6507INCNAME) -DFHERWIG
- testFHerwig6507_LDFLAGS = $(FHERWIGLDFLAGS) -L$(HERWIG6507LIBPATH)
- testFHerwig6507_LDADD = $(FHERWIGLDADD) -l$(HERWIG6507LIBNAME)
+ testFHerwig6507_SOURCES = testGenerator.cc
+ testFHerwig6507_CPPFLAGS = $(FHERWIG6507CPPFLAGS)
+ testFHerwig6507_LDFLAGS = $(FHERWIG6507LDFLAGS)
+ testFHerwig6507_LDADD = $(FHERWIG6507LDADD)
if WITH_RIVET
- noinst_PROGRAMS += testRivetWithFHerwig6507
- testRivetWithFHerwig6507_SOURCES = testRivet.cc
- testRivetWithFHerwig6507_CPPFLAGS = $(MYCPPFLAGS) $(FHERWIGCPPFLAGS) -I$(HERWIG6507INCPATH)/$(HERWIG6507INCNAME) -DFHERWIG
- testRivetWithFHerwig6507_LDFLAGS = $(FHERWIGLDFLAGS) -L$(HERWIG6507LIBPATH)
- testRivetWithFHerwig6507_LDADD = -l$(RIVETLIBNAME) $(FHERWIGLDADD) -l$(HERWIG6507LIBNAME)
+ noinst_PROGRAMS += testFHerwig6507WithRivet
+ testFHerwig6507WithRivet_SOURCES = testGenerator.cc
+ testFHerwig6507WithRivet_CPPFLAGS = $(FHERWIG6507CPPFLAGS) -I$(RIVETINCPATH) -DRIVET
+ testFHerwig6507WithRivet_LDFLAGS = $(FHERWIG6507LDFLAGS) -L$(RIVETLIBPATH)
+ testFHerwig6507WithRivet_LDADD = $(FHERWIG6507LDADD) -l$(RIVETLIBNAME)
endif
endif
## Fortran Herwig 6510 tests
if WITH_HERWIG6510LIB
- noinst_PROGRAMS += testFHerwig6510
- testFHerwig6510_SOURCES = testGenerator.cc
- testFHerwig6510_CPPFLAGS = $(FHERWIGCPPFLAGS) -I$(HERWIG6510INCPATH)/$(HERWIG6510INCNAME) -DFHERWIG
- testFHerwig6510_LDFLAGS = $(FHERWIGLDFLAGS) -L$(HERWIG6510LIBPATH)
- testFHerwig6510_LDADD = $(FHERWIGLDADD) -l$(HERWIG6510LIBNAME)
+ FHERWIG6510CPPFLAGS = $(FHERWIGCPPFLAGS) -I$(HERWIG6510INCPATH)/$(HERWIG6510INCNAME) -DFHERWIG
+ FHERWIG6510LDFLAGS = $(FHERWIGLDFLAGS) -L$(HERWIG6510LIBPATH)
+ FHERWIG6510LDADD = $(FHERWIGLDADD) -l$(HERWIG6510LIBNAME)
+ noinst_PROGRAMS += testFHerwig6510
+ testFHerwig6510_SOURCES = testGenerator.cc
+ testFHerwig6510_CPPFLAGS = $(FHERWIG6510CPPFLAGS)
+ testFHerwig6510_LDFLAGS = $(FHERWIG6510LDFLAGS)
+ testFHerwig6510_LDADD = $(FHERWIG6510LDADD)
if WITH_RIVET
- noinst_PROGRAMS += testRivetWithFHerwig6510
- testRivetWithFHerwig6510_SOURCES = testRivet.cc
- testRivetWithFHerwig6510_CPPFLAGS = $(FHERWIGCPPFLAGS) -I$(HERWIG6510INCPATH)/$(HERWIG6510INCNAME) -DFHERWIG
- testRivetWithFHerwig6510_LDFLAGS = $(FHERWIGLDFLAGS) -L$(HERWIG6510LIBPATH)
- testRivetWithFHerwig6510_LDADD = -l$(RIVETLIBNAME) $(FHERWIGLDADD) -l$(HERWIG6510LIBNAME)
+ noinst_PROGRAMS += testFHerwig6510WithRivet
+ testFHerwig6510WithRivet_SOURCES = testGenerator.cc
+ testFHerwig6510WithRivet_CPPFLAGS = $(FHERWIG6510CPPFLAGS) -I$(RIVETINCPATH) -DRIVET
+ testFHerwig6510WithRivet_LDFLAGS = $(FHERWIG6510LDFLAGS) -L$(RIVETLIBPATH)
+ testFHerwig6510WithRivet_LDADD = $(FHERWIG6510LDADD) -l$(RIVETLIBNAME)
endif
endif
-
## Consistency checks
check-local:
./testrivet
Index: trunk/src/Test/testGenerator.cc
===================================================================
--- trunk/src/Test/testGenerator.cc (revision 155)
+++ trunk/src/Test/testGenerator.cc (revision 156)
@@ -1,45 +1,70 @@
// -*- C++ -*-
namespace RivetGun {}
using namespace RivetGun;
#ifdef FPYTHIA
#include "RivetGun/FPythia/FPythia.h"
typedef FPythia MyGen;
#endif
#ifdef FHERWIG
#include "RivetGun/FHerwig/FHerwig.h"
typedef FHerwig MyGen;
#endif
+#include "Rivet/Analysis/RivetHandler.h"
+#include "Rivet/Analysis/Examples/TestMultiplicity.h"
+
+using namespace Rivet;
+using namespace std;
+
+
int main() {
+ //Generator* gen = GeneratorFactory::createGen("Pythia6206");
Generator* gen = new MyGen();
HepMC::GenEvent myevent;
//Set params
#ifdef FHERWIG
gen->setParam("PBEAM1", 8000.0);
gen->setParam("IPROC", 1705);
#endif
#ifdef FPYTHIA
gen->setParam("MSUB(96)", 0);
gen->setParam("MSUB(25)", 1);
#endif
// Initialize
gen->initialize();
+#ifdef RIVET
+ // Initialise Rivet
+ RivetHandler rh;
+ rh.addAnalysis(TestMultiplicity());
+ rh.init();
+ cout << "RivetHandler info: " << endl << rh.info() << endl;
+#endif
+
// Event loop
- unsigned int maxev(10);
- std::cout << "Generating " << maxev << " events." << std::endl;
- std::cout << "Starting..." << std::endl;
- for (unsigned int i = 1; i < maxev + 1; ++i) {
- std::cout << "Event number " << i << std::endl;
+ unsigned int maxev(20);
+ cout << "Generating " << maxev << " events." << endl;
+ cout << "Starting..." << endl;
+ for (unsigned int i = 0; i < maxev; ++i) {
+ cout << "Event number " << i << endl;
gen->makeEvent(myevent);
+#ifdef RIVET
+ rh.analyze(myevent);
+#endif
}
- std::cout << "Finished generating" << std::endl;
+ cout << "Finished!" << endl;
+
+#ifdef RIVET
+ // Rivet reports...
+ //rh.finalize();
+#endif
- // Finalise
+ // Finalise Herwig
gen->finalize();
return EXIT_SUCCESS;
}
+

File Metadata

Mime Type
text/x-diff
Expires
Wed, May 14, 10:51 AM (1 d, 3 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
5111271
Default Alt Text
(19 KB)

Event Timeline