-
Notifications
You must be signed in to change notification settings - Fork 496
Expand file tree
/
Copy pathGeneratorHepMC.h
More file actions
138 lines (117 loc) · 4.09 KB
/
GeneratorHepMC.h
File metadata and controls
138 lines (117 loc) · 4.09 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
// Copyright 2019-2020 CERN and copyright holders of ALICE O2.
// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
// All rights not expressly granted are reserved.
//
// This software is distributed under the terms of the GNU General Public
// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
//
// In applying this license CERN does not waive the privileges and immunities
// granted to it by virtue of its status as an Intergovernmental Organization
// or submit itself to any jurisdiction.
/// \author R+Preghenella - August 2017
#ifndef ALICEO2_EVENTGEN_GENERATORHEPMC_H_
#define ALICEO2_EVENTGEN_GENERATORHEPMC_H_
#include "Generators/Generator.h"
#include "Generators/GeneratorFileOrCmd.h"
#include "Generators/GeneratorHepMCParam.h"
#include "Generators/GeneratorFileOrCmdParam.h"
#ifdef GENERATORS_WITH_HEPMC3_DEPRECATED
namespace HepMC
{
class Reader;
class GenEvent;
class FourVector;
} // namespace HepMC
#else
namespace HepMC3
{
class Reader;
class GenEvent;
class FourVector;
class GenParticle;
} // namespace HepMC3
#endif
namespace o2
{
namespace conf
{
class SimConfig;
}
namespace eventgen
{
/*****************************************************************/
/*****************************************************************/
class GeneratorHepMC : public Generator, public GeneratorFileOrCmd
{
public:
/** default constructor **/
GeneratorHepMC();
/** constructor **/
GeneratorHepMC(const Char_t* name,
const Char_t* title = "ALICEo2 HepMC Generator");
/** destructor **/
~GeneratorHepMC() override;
/** Initialize the generator. **/
Bool_t Init() override;
/**
* Configure the generator from parameters and the general
* simulation configuration. This is implemented as a member
* function so as to better facilitate changes. */
void setup(const GeneratorFileOrCmdParam& param0,
const GeneratorHepMCParam& param,
const conf::SimConfig& config);
// Generator configuration from external local parameters
void setup(const FileOrCmdGenConfig& param0,
const HepMCGenConfig& param,
const conf::SimConfig& config);
/**
* Generate a single event. The event is read in from the current
* input file. Returns false if a new event could not be read.
**/
Bool_t generateEvent() override;
/**
* Import particles from the last read event into a vector
* TParticle. Returns false if no particles could be exported to
* the vector.
*/
Bool_t importParticles() override;
/** setters **/
void setEventsToSkip(uint64_t val) { mEventsToSkip = val; };
void setVersion(const int& ver) { mVersion = ver; };
protected:
/** copy constructor **/
GeneratorHepMC(const GeneratorHepMC&);
/** operator= **/
GeneratorHepMC& operator=(const GeneratorHepMC&);
/** methods **/
#ifdef GENERATORS_WITH_HEPMC3_DEPRECATED
const HepMC::FourVector getBoostedVector(const HepMC::FourVector& vector, Double_t boost);
#else
const HepMC3::FourVector getBoostedVector(const HepMC3::FourVector& vector, Double_t boost);
#endif
/** methods that can be overridded **/
void updateHeader(o2::dataformats::MCEventHeader* eventHeader) override;
/** Make our reader */
bool makeReader();
/** Type of function to select particles to keep when pruning
* events */
typedef bool (*Select)(std::shared_ptr<const HepMC3::GenParticle>);
/** Prune event of particles that are not selected by passed
* function. The event structure is preserved. */
void pruneEvent(Select select);
/** HepMC interface **/
uint64_t mEventsToSkip = 0;
/** HepMC event record version to expected. Deprecated. */
int mVersion = 0;
std::shared_ptr<HepMC3::Reader> mReader;
/** Event structure */
HepMC3::GenEvent* mEvent = nullptr;
/** Option whether to prune event */
bool mPrune; //!
ClassDefOverride(GeneratorHepMC, 1);
}; /** class GeneratorHepMC **/
/*****************************************************************/
/*****************************************************************/
} // namespace eventgen
} // namespace o2
#endif /* ALICEO2_EVENTGEN_GENERATORHEPMC_H_ */