Go to the documentation of this file.00001 #ifndef GeneratorInterface_LHEInterface_LHEEvent_h
00002 #define GeneratorInterface_LHEInterface_LHEEvent_h
00003
00004 #include <iostream>
00005 #include <utility>
00006 #include <memory>
00007 #include <vector>
00008 #include <string>
00009
00010 #include <boost/shared_ptr.hpp>
00011
00012 #include <HepMC/GenEvent.h>
00013 #include <HepMC/GenVertex.h>
00014 #include <HepMC/PdfInfo.h>
00015
00016 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00017
00018 #include "SimDataFormats/GeneratorProducts/interface/LesHouches.h"
00019 #include "SimDataFormats/GeneratorProducts/interface/LHEEventProduct.h"
00020
00021 #include "GeneratorInterface/LHEInterface/interface/LHERunInfo.h"
00022
00023 namespace lhef {
00024
00025 class LHEEvent {
00026 public:
00027 LHEEvent(const boost::shared_ptr<LHERunInfo> &runInfo,
00028 std::istream &in);
00029 LHEEvent(const boost::shared_ptr<LHERunInfo> &runInfo,
00030 const HEPEUP &hepeup);
00031 LHEEvent(const boost::shared_ptr<LHERunInfo> &runInfo,
00032 const HEPEUP &hepeup,
00033 const LHEEventProduct::PDF *pdf,
00034 const std::vector<std::string> &comments);
00035 LHEEvent(const boost::shared_ptr<LHERunInfo> &runInfo,
00036 const LHEEventProduct &product);
00037 ~LHEEvent();
00038
00039 typedef LHEEventProduct::PDF PDF;
00040
00041 const boost::shared_ptr<LHERunInfo> &getRunInfo() const { return runInfo; }
00042 const HEPEUP *getHEPEUP() const { return &hepeup; }
00043 const HEPRUP *getHEPRUP() const { return runInfo->getHEPRUP(); }
00044 const PDF *getPDF() const { return pdf.get(); }
00045 const std::vector<std::string> &getComments() const { return comments; }
00046 const int getReadAttempts() { return readAttemptCounter; }
00047
00048 void setPDF(std::auto_ptr<PDF> pdf) { this->pdf = pdf; }
00049
00050 void addComment(const std::string &line) { comments.push_back(line); }
00051
00052 static void removeParticle(lhef::HEPEUP &hepeup, int index);
00053 void removeResonances(const std::vector<int> &ids);
00054
00055 void count(LHERunInfo::CountMode count,
00056 double weight = 1.0, double matchWeight = 1.0);
00057
00058 void attempted() { readAttemptCounter++; return; }
00059
00060 void fillPdfInfo(HepMC::PdfInfo *info) const;
00061 void fillEventInfo(HepMC::GenEvent *hepmc) const;
00062
00063 std::auto_ptr<HepMC::GenEvent> asHepMCEvent() const;
00064
00065 static const HepMC::GenVertex *findSignalVertex(
00066 const HepMC::GenEvent *event, bool status3 = true);
00067
00068 static void fixHepMCEventTimeOrdering(HepMC::GenEvent *event);
00069
00070 private:
00071 static bool checkHepMCTree(const HepMC::GenEvent *event);
00072 HepMC::GenParticle *makeHepMCParticle(unsigned int i) const;
00073
00074 const boost::shared_ptr<LHERunInfo> runInfo;
00075
00076 HEPEUP hepeup;
00077 std::auto_ptr<PDF> pdf;
00078 std::vector<std::string> comments;
00079 bool counted;
00080 int readAttemptCounter;
00081 };
00082
00083 }
00084
00085 #endif // GeneratorEvent_LHEInterface_LHEEvent_h