thepeg is hosted by Hepforge, IPPP Durham
ThePEG 2.3.0
LesHouchesReader.h
1// -*- C++ -*-
2//
3// LesHouchesReader.h is a part of ThePEG - Toolkit for HEP Event Generation
4// Copyright (C) 1999-2019 Leif Lonnblad
5//
6// ThePEG is licenced under version 3 of the GPL, see COPYING for details.
7// Please respect the MCnet academic guidelines, see GUIDELINES for details.
8//
9#ifndef THEPEG_LesHouchesReader_H
10#define THEPEG_LesHouchesReader_H
11// This is the declaration of the LesHouchesReader class.
12
13#include "LesHouches.h"
14#include "ThePEG/Handlers/HandlerBase.h"
15#include "ThePEG/Utilities/ObjectIndexer.h"
16#include "ThePEG/Utilities/Exception.h"
17#include "ThePEG/Utilities/XSecStat.h"
18#include "ThePEG/PDF/PartonBinInstance.h"
19#include "ThePEG/PDF/PartonBin.fh"
20#include "ThePEG/MatrixElement/ReweightBase.h"
21#include "LesHouchesEventHandler.fh"
22#include "LesHouchesReader.fh"
23#include "ThePEG/Utilities/CFile.h"
24#include <cstdio>
25#include <cstring>
26
27namespace ThePEG {
28
78
83
88 typedef map<int,XSecStat> StatMap;
89
94 typedef map<tcPBPair,XCombPtr> XCombMap;
95
99 typedef vector<ReweightPtr> ReweightVector;
100
101public:
102
111
116
122
123public:
124
134 virtual void open() = 0;
135
141 virtual bool doReadEvent() = 0;
142
146 virtual void close() = 0;
147
151 virtual vector<string> optWeightsNamesFunc() = 0;
152
157 vector<string> optionalWeightsNames;
158
160
171
184 virtual double getEvent();
185
191 virtual bool readEvent();
192
198 virtual void skip(long n);
199
207
213
220 virtual long scan();
221
226 virtual void initStat();
227
233 double reweight();
234
239 virtual void fillEvent();
240
245 void reset();
246
254 virtual void setWeightScale(long neve);
255
257
260
266 static size_t eventSize(int N) {
267 return (N + 1)*sizeof(int) + // IDPRUP, ISTUP
268 (7*N + 4)*sizeof(double) + // XWGTUP, SCALUP, AQEDUP, AQCDUP, PUP,
269 // VTIMUP, SPINUP
270 N*sizeof(long) + // IDUP
271 2*N*sizeof(pair<int,int>) + // MOTHUP, ICOLUP
272 sizeof(pair<double,double>) + // XPDWUP.
273 2*sizeof(double); // lastweight and preweight
274 }
275
282 double eventWeight() const { return hepeup.XWGTUP*lastweight; }
283
287 const map<string,double>& optionalEventWeights() const { return optionalWeights; }
288
292 const long& LHEEventNum() const { return LHEeventnum; }
293
297 const int& optionalEventnpLO() const { return optionalnpLO; }
298 const int& optionalEventnpNLO() const { return optionalnpNLO; }
299
308 const PPair & beams() const { return theBeams; }
313 const PPair & incoming() const { return theIncoming; }
318 const PVector & outgoing() const { return theOutgoing; }
323 const PVector & intermediates() const { return theIntermediates; }
330 int maxMultCKKW() const { return theMaxMultCKKW; }
337 int minMultCKKW() const { return theMinMultCKKW; } //@}
338
345 long NEvents() const { return theNEvents; }
346
351 long currentPosition() const { return position; }
352
358 long maxScan() const { return theMaxScan; }
359
363 bool active() const { return isActive; }
364
368 bool negativeWeights() const { return heprup.IDWTUP < 0; }
369
373 const XSecStat & xSecStats() const { return stats; }
374
378 const StatMap & processStats() const { return statmap; }
379
384 void select(double weight) {
385 stats.select(weight);
386 statmap[hepeup.IDPRUP].select(weight);
387 }
388
392 void accept() {
393 stats.accept();
394 statmap[hepeup.IDPRUP].accept();
395 }
396
400 void reject(double w) {
401 stats.reject(w);
402 statmap[hepeup.IDPRUP].reject(w);
403 }
404
408 virtual void increaseMaxXSec(CrossSection maxxsec);
409
414
419 tCascHdlPtr CKKWHandler() const { return theCKKW; }
420
425 const PartonPairVec & partonBins() const { return thePartonBins; }
426
431 const XCombMap & xCombs() const { return theXCombs; }
432
436 const Cuts & cuts() const { return *theCuts; }
437
439
440protected:
441
444
449 string cacheFileName() const { return theCacheFileName; }
450
455 bool cutEarly() const { return doCutEarly; }
456
460 CFile cacheFile() const { return theCacheFile;}
461
466
471
476
480 void cacheEvent() const;
481
486
492 void reopen();
493
497 template <typename T>
498 static char * mwrite(char * pos, const T & t, size_t n = 1) {
499 std::memcpy(pos, (void *)&t, n*sizeof(T));
500 return pos + n*sizeof(T);
501 }
502
506 template <typename T>
507 static const char * mread(const char * pos, T & t, size_t n = 1) {
508 std::memcpy((void *)&t, pos, n*sizeof(T));
509 return pos + n*sizeof(T);
510 }
511
513
522 virtual bool checkPartonBin();
523
528 virtual void createParticles();
529
535 virtual tcPBPair createPartonBinInstances();
536
542 virtual void createBeams();
543
547 virtual void connectMothers();
549
550public:
551
559
565 void persistentInput(PersistentIStream & is, int version);
567
571 static void Init();
572
573protected:
574
581 void NEvents(long x) { theNEvents = x; }
582
587 XCombMap & xCombs() { return theXCombs; }
589
597 virtual void doinit();
598
603 virtual void doinitrun();
604
609 virtual void dofinish() {
610 close();
612 }
613
618 virtual bool preInitialize() const;
619
624 virtual void initPDFs();
626
627protected:
628
633
638
643
649 pair<PDFPtr,PDFPtr> inPDF;
650
654 pair<cPDFPtr,cPDFPtr> outPDF;
655
660
665
670 PartonPairVec thePartonBins;
671
677
681 CutsPtr theCuts;
682
688
694
699
706
711
716
722
728
733
738
744
750
756
761
767
773
779
784
789
794
798 double preweight;
799
804
810
818
826
833
837 map<string,double> optionalWeights;
838
843
844
850 double maxFactor;
851
856
861
867
871 vector<double> xSecWeights;
872
877 map<int,double> maxWeights;
878
883
888
894
899
904
905private:
906
908 void setBeamA(long id);
910 long getBeamA() const;
912 void setBeamB(long id);
914 long getBeamB() const;
931
932private:
933
938
943
944public:
945
949 class LesHouchesInconsistencyError: public Exception {};
950
953 class LesHouchesReopenWarning: public Exception {};
954
957 class LesHouchesReopenError: public Exception {};
958
961 class LesHouchesInitError: public InitException {};
964};
965
967ostream & operator<<(ostream & os, const HEPEUP & h);
968
969}
970
971
972#include "ThePEG/Utilities/ClassTraits.h"
973
974namespace ThePEG {
975
982template <>
983struct BaseClassTrait<LesHouchesReader,1>: public ClassTraitsType {
985 typedef HandlerBase NthBase;
986};
987
993template <>
994struct ClassTraits<LesHouchesReader>
995 : public ClassTraitsBase<LesHouchesReader> {
999 static string className() { return "ThePEG::LesHouchesReader"; }
1005 static string library() { return "LesHouches.so"; }
1006
1007};
1008
1011}
1012
1013#endif /* THEPEG_LesHouchesReader_H */
A concreate implementation of ClassDescriptionBase describing an abstract class with persistent data.
Here is the documentation of the CFile class.
Definition: CFile.h:15
Cuts is a class for implementing kinematical cuts in ThePEG.
Definition: Cuts.h:53
Exception is the base class for all exceptions to be used in ThePEG.
Definition: Exception.h:44
The HEPEUP class is a simple container corresponding to the Les Houches accord (hep-ph/0109068) commo...
Definition: LesHouches.h:128
int IDPRUP
The subprocess code for this event (as given in LPRUP).
Definition: LesHouches.h:177
double XWGTUP
The weight for this event.
Definition: LesHouches.h:182
The HEPRUP class is a simple container corresponding to the Les Houches accord (hep-ph/0109068) commo...
Definition: LesHouches.h:26
int IDWTUP
Master switch indicating how the ME generator envisages the events weights should be interpreted acco...
Definition: LesHouches.h:89
HandlerBase is an abstract base class derived from the Interfaced class via the HandlerBaseT class ad...
Definition: HandlerBase.h:151
virtual void dofinish()
Finalize this object.
LastXCombInfo is a templated class giving easy access to the information in an XComb object.
Definition: LastXCombInfo.h:32
The LesHouchesEventHandler inherits from the general EventHandler class and administers the reading o...
LesHouchesReader is an abstract base class to be used for objects which reads event files or streams ...
tPExtrPtr partonExtractor() const
The PartonExtractor object used to construct remnants.
void NEvents(long x)
The number of events in this reader.
pair< PDFPtr, PDFPtr > inPDF
The PDFBase objects which has been used for the beam particle when generating the events being read.
PartonPairVec thePartonBins
The pairs of PartonBin objects describing the partons which can be extracted by the PartonExtractor o...
void setPDFA(PDFPtr)
Access function for the interface.
bool reweightPDF
Should the event be reweighted by PDFs used by the PartonExtractor?
void select(double weight)
Select the current event.
long position
The number of events produced by this reader so far.
void persistentInput(PersistentIStream &is, int version)
Function used to read in object persistently.
virtual void connectMothers()
Go through the mother indices and connect up the Particles.
PBIPair thePartonBinInstances
The pair of PartonBinInstance objects describing the current incoming partons in the event.
bool negativeWeights() const
True if negative weights may be produced.
const StatMap & processStats() const
Collected statistics about the individual processes.
int reopened
The number of times this reader has been reopened.
PDFPtr getPDFB() const
Access function for the interface.
tXCombPtr getXComb()
Get an XComb object.
virtual void skip(long n)
Skip n events.
string cacheFileName() const
Name of file used to cache the events form the reader in a fast-readable form.
virtual double getEvent()
Calls readEvent() or uncacheEvent() to read information into the LesHouches common block variables.
tCascHdlPtr theCKKW
A pointer to a CascadeHandler to be used for CKKW-reweighting.
void persistentOutput(PersistentOStream &os) const
Function used to write out object persistently.
virtual vector< string > optWeightsNamesFunc()=0
return the weight names
CutsPtr theCuts
The Cuts object to be used for this reader.
virtual void increaseMaxXSec(CrossSection maxxsec)
Increase the overestimated cross section for this reader.
virtual tcPBPair createPartonBinInstances()
Using the already created particles create a pair of PartonBinInstance objects corresponding to the i...
static char * mwrite(char *pos, const T &t, size_t n=1)
Helper function to write a variable to a memory location.
bool doInitPDFs
Should PDFBase objects be constructed from the information in the event file in the initialization?
HEPEUP hepeup
The HEPEUP common block.
CFile cacheFile() const
File stream for the cache.
virtual bool readEvent()
Calls doReadEvent() and performs pre-defined reweightings.
bool theIncludeSpin
Use the spin information.
double reweight()
Reweights the current event using the reweights and preweights vectors.
int minMultCKKW() const
If this reader is to be used (possibly together with others) for CKKW reweighting and veto,...
Energy getEBeamA() const
Access function for the interface.
long theNEvents
The number of events in this reader.
PPair theBeams
The instances of the beam particles for the current event.
long getBeamA() const
Access function for the interface.
int maxMultCKKW() const
If this reader is to be used (possibly together with others) for CKKW reweighting and veto,...
static const char * mread(const char *pos, T &t, size_t n=1)
Helper function to read a variable from a memory location.
const PartonPairVec & partonBins() const
The pairs of PartonBin objects describing the partons which can be extracted by the PartonExtractor o...
LesHouchesReader(const LesHouchesReader &)
Copy-constructor.
map< tcPBPair, XCombPtr > XCombMap
Map of XComb objects describing the incoming partons indexed by the corresponding PartonBin pair.
vector< string > optionalWeightsNames
vector with the optional weights names
PPair theIncoming
The instances of the incoming particles to the sub process for the current event.
void cacheEvent() const
Write the current event to the cache file.
ReweightVector reweights
The reweight objects modifying the weights of this reader.
CFile theCacheFile
File stream for the cache.
void setBeamA(long id)
Access function for the interface.
tSubProPtr getSubProcess()
Get a SubProcess object corresponding to the information in the Les Houches common block variables.
bool scanning
Flag to tell whether we are in the process of scanning.
void setBeamB(long id)
Access function for the interface.
void reset()
Removes the particles created in the last generated event, preparing to produce a new one.
map< string, double > optionalWeights
The optional weights associated to the last read events.
LesHouchesReader(bool active=false)
Default constructor.
ObjectIndexer< long, Particle > particleIndex
Association between Particles and indices in the current translation.
LesHouchesReader & operator=(const LesHouchesReader &)=delete
Private and non-existent assignment operator.
virtual void open()=0
Open a file or stream with events and read in the run information into the heprup variable.
int optionalnpLO
npLO for LesHouches merging
virtual void fillEvent()
Converts the information in the Les Houches common block variables into a Particle objects.
bool doCutEarly
Determines whether to apply cuts to events before converting them to ThePEG format.
long currentPosition() const
The number of events produced so far.
XCombMap theXCombs
The map of XComb objects indexed by the corresponding PartonBin pair.
virtual void initialize(LesHouchesEventHandler &eh)
Initialize.
ReweightVector preweights
The preweight objects modifying the weights of this reader.
const PBIPair & partonBinInstances() const
The pair of PartonBinInstance objects describing the current incoming partons in the event.
void setPDFB(PDFPtr)
Access function for the interface.
vector< ReweightPtr > ReweightVector
A vector of pointers to ReweightBase objects.
const int & optionalEventnpLO() const
Return the optional npLO and npNLO.
vector< double > xSecWeights
Individual scales for different sub-processes if reweighted.
const XSecStat & xSecStats() const
The collected cross section statistics for this reader.
bool active() const
Return true if this reader is active.
bool uncacheEvent()
Read an event from the cache file.
map< int, double > maxWeights
Individual maximum weights for individual (possibly reweighted) processes.
void closeCacheFile()
Close the cache file;.
static size_t eventSize(int N)
Return the size of this event in bytes.
map< int, XSecStat > StatMap
Map for accumulating statistics of cross sections per process number.
void openWriteCacheFile()
Open the cache file for writing.
long maxScan() const
The maximum number of events to scan to collect information about processes and cross sections.
XSecStat stats
Collect statistics for this reader.
void setEBeamB(Energy e)
Access function for the interface.
const PVector & outgoing() const
Return the instances of the outgoing particles from the sub process for the current event.
HEPRUP heprup
The HEPRUP common block.
virtual bool checkPartonBin()
Check the existence of a pair of PartonBin objects corresponding to the current event.
XCombMap & xCombs()
The map of XComb objects indexed by the corresponding PartonBin pair.
double lastweight
The weight multiplying the last read event due to PDF reweighting, CKKW reweighting or assigned rewei...
PVector theOutgoing
The instances of the outgoing particles from the sub process for the current event.
virtual void initPDFs()
Called from doinit() to extract PDFs from the event file and add the corresponding objects to the cur...
virtual void setWeightScale(long neve)
Possibility for subclasses to recover from non-conformant settings of XMAXUP when an event file has b...
virtual void close()=0
Close the file or stream from which events have been read.
virtual bool preInitialize() const
Return true if this object needs to be initialized before all other objects because it needs to extra...
StatMap statmap
Collect statistics for each individual process.
Energy getEBeamB() const
Access function for the interface.
void reject(double w)
Reject the current event assuming it was previously accepted.
double preweight
The factor with which this reader was last pre-weighted.
const PPair & beams() const
Return the instances of the beam particles for the current event.
double maxFactor
If the maximum cross section of this reader has been increased with increaseMaxXSec(),...
tcPDPair inData
The ParticleData objects corresponding to the incoming particles.
int optionalnpNLO
npNLO for LesHouches merging
bool cutEarly() const
Determines whether to apply cuts to events converting them to ThePEG format.
int theMinMultCKKW
If this reader is to be used (possibly together with others) for CKKW reweighting and veto,...
CrossSection weightScale
The (reweighted) XWGTUP value should be scaled with this cross section when compared to the overestim...
void reopen()
Reopen a reader.
const PVector & intermediates() const
Return the instances of the intermediate particles in the sub process for the current event.
PDFPtr getPDFA() const
Access function for the interface.
long theMaxScan
The maximum number of events to scan to collect information about processes and cross sections.
virtual bool doReadEvent()=0
Read the next event from the file or stream into the corresponding protected variables.
double eventWeight() const
The current event weight given by XWGTUP times possible reweighting.
void accept()
Accept the current event assuming it was previously selcted.
void openReadCacheFile()
Open the cache file for reading.
virtual void createParticles()
Create instances of all particles in the event and store them in particleIndex.
ObjectIndexer< long, ColourLine > colourIndex
Association between ColourLines and colour indices in the current translation.
long getBeamB() const
Access function for the interface.
static AbstractClassDescription< LesHouchesReader > initLesHouchesReader
Describe an abstract base class with persistent data.
bool isActive
True if this is an active reader.
PVector theIntermediates
The instances of the intermediate particles in the sub process for the current event.
virtual long scan()
Scan the file or stream to obtain information about cross section weights and particles etc.
const XCombMap & xCombs() const
The map of XComb objects indexed by the corresponding PartonBin pair.
const map< string, double > & optionalEventWeights() const
Return the optional named weights associated to the current event.
void setEBeamA(Energy e)
Access function for the interface.
pair< cPDFPtr, cPDFPtr > outPDF
The PDFBase object to be used in the subsequent generation.
bool skipping
Is set to true when getEvent() is called from skip(int).
int theMaxMultCKKW
If this reader is to be used (possibly together with others) for CKKW reweighting and veto,...
PExtrPtr thePartonExtractor
The PartonExtractor object used to construct remnants.
string theCacheFileName
Name of file used to cache the events form the reader in a fast-readable form.
const long & LHEEventNum() const
Return the Les Houches event number associated with the current event.
tCascHdlPtr CKKWHandler() const
Return a possibly null pointer to a CascadeHandler to be used for CKKW-reweighting.
virtual ~LesHouchesReader()
Destructor.
long LHEeventnum
The event number.
virtual void dofinish()
Finalize this object.
unsigned int theMomentumTreatment
Option for the treatment of the momenta supplied.
virtual void doinitrun()
Initialize this object.
virtual void initStat()
Take the information corresponding to the HEPRUP common block and initialize the statistics for this ...
static void Init()
Standard Init function used to initialize the interfaces.
virtual void createBeams()
Create instances of the incoming beams in the event and store them in particleIndex.
virtual void doinit()
Initialize this object after the setup phase before saving an EventGenerator to disk.
long NEvents() const
The number of events found in this reader.
const Cuts & cuts() const
The Cuts object to be used for this reader.
bool theReOpenAllowed
Option to allow reopening of the file.
const PPair & incoming() const
Return the instances of the incoming particles to the sub process for the current event.
bool useWeightWarnings
Set to true if warnings about possible weight incompatibilities should be issued.
This is a templated class which dynamically associates (reference counted) objects to integer indices...
Definition: ObjectIndexer.h:25
PersistentIStream is used to read persistent objects from a stream where they were previously written...
PersistentOStream is used to write objects persistently to a stream from which they can be read in ag...
RCPtr is a reference counted (smart) pointer.
Definition: RCPtr.h:60
TransientRCPtr is a simple wrapper around a bare pointer which can be assigned to and from an RCPtr a...
Definition: RCPtr.h:519
XSecStat is a concrete helper class used to collect statistics about the cross section for a specific...
Definition: XSecStat.h:36
void accept()
An event of the corresponding class has been accepted.
Definition: XSecStat.h:109
void select(double weight)
An event of the corresponding class has been attempted.
Definition: XSecStat.h:117
void reject(double weight=1.0)
Reject the event which was last accepted with accept() or selected with select(double).
Definition: XSecStat.h:142
This is the main namespace within which all identifiers in ThePEG are declared.
Definition: FactoryBase.h:28
pair< PPtr, PPtr > PPair
A pair of pointers to Particle objects.
Definition: Containers.h:127
pair< PBIPtr, PBIPtr > PBIPair
A pair of pointers to PartonBinInstance objects.
vector< T > & operator<<(vector< T > &tv, const U &u)
Overload the left shift operator for vector to push_back objects to a vector.
Definition: Containers.h:179
pair< tcPDPtr, tcPDPtr > tcPDPair
A pair of transient pointers to const ParticleData objects.
Definition: Containers.h:124
vector< PPtr > PVector
A vector of pointers to Particle objects.
Definition: Containers.h:76
int NthBase
The type of the BaseN'th base class (int means there are no further base classes).
Definition: ClassTraits.h:161
static string className()
Return the name of class T.
Definition: ClassTraits.h:66
static string library()
The name of a file containing the dynamic library where the class T is implemented.
Definition: ClassTraits.h:85