BmnRoot
Loading...
Searching...
No Matches
MpdUnigenGenerator.h
Go to the documentation of this file.
1#ifndef MPDUNIGENGENERATOR_H
2#define MPDUNIGENGENERATOR_H
3
4#include <iostream>
5#include <random>
6#include <FairGenerator.h>
7#include <FairPrimaryGenerator.h>
8#include <FairMCEventHeader.h>
9#include <FairRunSim.h>
10#include "FairIon.h"
11#include "FairParticle.h"
12
13#include "UParticle.h"
14#include "UEvent.h"
15#include "URun.h"
16
17#include <TString.h>
18#include <TTree.h>
19#include <TFile.h>
20#include <TClonesArray.h>
21#include <TRandom.h>
22#include <TDatabasePDG.h>
23#include <TParticlePDG.h>
24
25class TVirtualMCStack;
26class FairPrimaryGenerator;
27
28class MpdUnigenGenerator : public FairGenerator
29{
30 public:
32 explicit MpdUnigenGenerator(TString fileName, Bool_t isSpectator = kFALSE);
33 ~MpdUnigenGenerator() override = default;
34 Long64_t GetNEntries(){ return fNEntries; }
35 Bool_t ReadEvent(FairPrimaryGenerator* primGen) override;
36 Int_t RegisterIons();
37
38 void SkipEvents(Int_t ev) {
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 fPhiMin = phiMin;
45 fPhiMax = phiMax;
46 fEventPlaneSet = kTRUE;
47 random_engine_ = std::mt19937(random_device_());
48 uniform_real_distribution_ = std::uniform_real_distribution<double>(fPhiMin,fPhiMax);
49 }
50 private:
51 std::random_device random_device_;
52 std::mt19937 random_engine_;
53 std::uniform_real_distribution<double> uniform_real_distribution_;
54 Long64_t fEventNumber;
55 Long64_t fNEntries;
56 TFile *fInFile;
57 TTree *fInTree;
58 UEvent *fEvent;
59 URun *fRun;
60 UParticle *fParticle;
61 Bool_t fSpectatorsON;
62
63 Double_t fPhiMin, fPhiMax; // Limits of event plane angle
64 Bool_t fEventPlaneSet; // Flag whether event plane angle is used
65
66 std::map<TString, FairIon*> fIonMap;
67
68 static const Int_t kPdgLambda = 10000000;
69 static const Int_t kPdgCharge = 10000;
70 static const Int_t kPdgMass = 10;
71
72 Double_t fGammaCM = 0.;
73 Double_t fBetaCM = 0.;
74
75 Int_t GetIonCharge(Int_t pdgCode) const { return (pdgCode % kPdgLambda) / kPdgCharge; }
76 Int_t GetIonLambdas(Int_t pdgCode) { return (pdgCode % (10 * kPdgLambda)) / kPdgLambda; }
77 Int_t GetIonMass(Int_t pdgCode) { return (pdgCode % kPdgCharge) / kPdgMass; }
78
80 MpdUnigenGenerator& operator=(const MpdUnigenGenerator&);
81
82 ClassDefOverride(MpdUnigenGenerator, 1);
83};
84
85#endif
void SetEventPlane(Double_t phiMin, Double_t phiMax)
~MpdUnigenGenerator() override=default
void SkipEvents(Int_t ev)
Bool_t ReadEvent(FairPrimaryGenerator *primGen) override
Definition URun.h:8