## main501

Back to index.

    // main501.cc is a part of the PYTHIA event generator.
    // Copyright (C) 2026 Torbjorn Sjostrand.
    // PYTHIA is licenced under the GNU GPL v2 or later, see COPYING for details.
    // Please respect the MCnet Guidelines, see GUIDELINES for details.

    // Authors:
    //            Nishita Desai

    // Keywords:
    //            Basic usage
    //            Supersymmetry
    //            BSM
    //            Command file

    // This is a simple test program.
    // It illustrates how to run SUSY processes in Pythia8.
    // All input is specified in the main501.cmnd file.

    #include "Pythia8/Pythia.h"

    using namespace Pythia8;

    //==========================================================================

    int main() {

      // Generator. Shorthand for the event.
      Pythia pythia;
      Event& event = pythia.event;

      // Read in commands from external file.
      pythia.readFile("main501.cmnd");

      // Extract settings to be used in the main program.
      int nEvent   = pythia.mode("Main:numberOfEvents");
      int nAbort   = pythia.mode("Main:timesAllowErrors");
      double eCM   = pythia.parm("Beams:eCM");

      // If Pythia fails to initialize, exit with error.
      if (!pythia.init()) return 1;

      // Histograms.
      double epTol = 1e-6 * eCM;
      Hist epCons("deviation from energy-momentum conservation",100,0.,epTol);
      Hist nFinal("final particle multiplicity",100,-0.5,799.5);
      Hist dnparticledy("dn/dy for particles",100,-10.,10.);

      // Begin event loop.
      int iAbort = 0;
      for (int iEvent = 0; iEvent < nEvent; ++iEvent) {

        // Generate events. Quit if failure.
        if (!pythia.next()) {
          if (++iAbort < nAbort) continue;
          cout << " Event generation aborted prematurely, owing to error!\n";
          break;
        }

        // Loop over final particles in the event.
        int nFin = 0;
        Vec4 pSum;
        for (int i = 0; i < event.size(); ++i) if (event[i].isFinal()) {
          nFin++;
          pSum += event[i].p();
          dnparticledy.fill(event[i].y());
        }

        // Check and print event with too big energy-momentum deviation.
        nFinal.fill(nFin);
        double epDev = abs(pSum.e() - eCM) + abs(pSum.px()) + abs(pSum.py())
          + abs(pSum.pz());
        epCons.fill(epDev);
        if (epDev > epTol) {
          cout << " Warning! Event with epDev = " << scientific
               << setprecision(4) << epDev << " now listed:";
          event.list();
        }

      // End of event loop.
      }

      // Final statistics and histogram output.
      pythia.stat();
      cout << epCons << nFinal << dnparticledy;

      return 0;
    }