BmnRoot 26.10.0-18-g4e3414f9
Software framework of the BM@N experiment
Loading...
Searching...
No Matches
MpdUnigenGenerator.h
Go to the documentation of this file.
1#ifndef MPDUNIGENGENERATOR_H
2#define MPDUNIGENGENERATOR_H
3
4#include "FairIon.h"
5#include "FairParticle.h"
6#include "UEvent.h"
7#include "UParticle.h"
8#include "URun.h"
9
10#include <FairGenerator.h>
11#include <FairMCEventHeader.h>
12#include <FairPrimaryGenerator.h>
13#include <FairRunSim.h>
14#include <TClonesArray.h>
15#include <TDatabasePDG.h>
16#include <TFile.h>
17#include <TParticlePDG.h>
18#include <TRandom.h>
19#include <TString.h>
20#include <TTree.h>
21#include <iostream>
22#include <random>
23
24class TVirtualMCStack;
25class FairPrimaryGenerator;
26
28{
29 public:
31 explicit MpdUnigenGenerator(TString fileName, Bool_t isSpectator = kFALSE);
32 ~MpdUnigenGenerator() override = default;
34 Bool_t ReadEvent(FairPrimaryGenerator* primGen) override;
36
38 {
39 fEventNumber = ev;
40 std::cout << "NUMBER OF SKIPPED EVENTS = " << ev << std::endl;
41 }
42
43 void SetEventPlane(Double_t phiMin, Double_t phiMax)
44 {
45 fPhiMin = phiMin;
46 fPhiMax = phiMax;
48 random_engine_ = std::mt19937(random_device_());
49 uniform_real_distribution_ = std::uniform_real_distribution<double>(fPhiMin, fPhiMax);
50 }
51
52 private:
53 std::random_device random_device_;
54 std::mt19937 random_engine_;
55 std::uniform_real_distribution<double> uniform_real_distribution_;
61 URun* fRun;
64
65 Double_t fPhiMin, fPhiMax; // Limits of event plane angle
66 Bool_t fEventPlaneSet; // Flag whether event plane angle is used
67
68 std::map<TString, FairIon*> fIonMap; //!< Map from ion name to FairIon
69
70 static const Int_t kPdgLambda = 10000000;
71 static const Int_t kPdgCharge = 10000;
72 static const Int_t kPdgMass = 10;
73
74 Double_t fGammaCM = 0.;
75 Double_t fBetaCM = 0.;
76
77 Int_t GetIonCharge(Int_t pdgCode) const { return (pdgCode % kPdgLambda) / kPdgCharge; }
78 Int_t GetIonLambdas(Int_t pdgCode) { return (pdgCode % (10 * kPdgLambda)) / kPdgLambda; }
79 Int_t GetIonMass(Int_t pdgCode) { return (pdgCode % kPdgCharge) / kPdgMass; }
80
83
85};
86
87#endif
bool Bool_t
int Int_t
constexpr Bool_t kFALSE
double Double_t
long long Long64_t
constexpr Bool_t kTRUE
#define ClassDefOverride(name, id)
void SetEventPlane(Double_t phiMin, Double_t phiMax)
std::mt19937 random_engine_
~MpdUnigenGenerator() override=default
void SkipEvents(Int_t ev)
Int_t GetIonCharge(Int_t pdgCode) const
Int_t GetIonLambdas(Int_t pdgCode)
std::random_device random_device_
Bool_t ReadEvent(FairPrimaryGenerator *primGen) override
Int_t GetIonMass(Int_t pdgCode)
MpdUnigenGenerator(TString fileName, Bool_t isSpectator=kFALSE)
static const Int_t kPdgMass
static const Int_t kPdgLambda
MpdUnigenGenerator(const MpdUnigenGenerator &)
MpdUnigenGenerator & operator=(const MpdUnigenGenerator &)
std::map< TString, FairIon * > fIonMap
Map from ion name to FairIon.
static const Int_t kPdgCharge
std::uniform_real_distribution< double > uniform_real_distribution_
unigen event
Definition UEvent.h:20
unigen particle
Definition UParticle.h:14
Definition URun.h:8