## main37

Back to index.

    // main37.cc is a part of the PYTHIA event generator.
    // Copyright (C) 2024 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.

    // Keywords:
    //            Basic usage
    //            LHE file

    // This is a simple test program.
    // It illustrates how Les Houches Event File version 3.0 input can be used
    // to mix events according to several different event weights.

    #include "Pythia8/Pythia.h"
    using namespace Pythia8;

    int main() {

      // Generator
      Pythia pythia;

      // Initialize Les Houches Event File run.
      pythia.readString("Beams:frameType = 4");
      pythia.readString("Beams:LHEF = wbj_lhef3.lhe");
      pythia.init();

      // Get number of event weights.
      int ninitrwgt = pythia.info.initrwgt ? pythia.info.initrwgt->size() : 0;

      // Initialise as many histograms as there are event weights.
      vector<Hist> pTw;
      for (int iHist = 0; iHist < ninitrwgt; ++iHist)
        pTw.push_back( Hist("pT W",50,0.,200.) );

      // Begin event loop; generate until none left in input file.
      for (int iEvent = 0; iEvent < 10; ++iEvent) {

        // Generate events, and check whether generation failed.
        if (!pythia.next()) {
          // If failure because reached end of file then exit event loop.
          if (pythia.info.atEndOfFile()) break;
          else continue;
        }

        // Find the final copy of the W and its pT.
        int iW = 0;
        for (int i = pythia.event.size() - 1; i > 0; --i)
          if (pythia.event[i].idAbs() == 24) { iW = i; break;}
        double pT = pythia.event[iW].pT();

        // Loop over the event weights in the detailed format and histogram.
        int iwgt = 0;
        const map<string,double>* weights = pythia.info.weights_detailed;
        if (weights) {
          for ( map<string,double>::const_iterator it = weights->begin();
                it != weights->end(); ++it ) {
            pTw[iwgt].fill( max(pT,0.5), it->second );
            ++iwgt;
          }
        }

      // End of event loop.
      }

      // Give statistics.
      pythia.stat();

      // Print histograms.
      ofstream write;
      stringstream suffix;
      for (int iHist = 0; iHist < ninitrwgt; ++iHist) {
        suffix << iHist << ".dat";
        // Write histograms to file.
        write.open( (char*)("PTW_" + suffix.str()).c_str());
        pTw[iHist].table(write);
        suffix.str("");
        write.close();
      }

      // Done.
      return 0;
    }