BmnRoot
Loading...
Searching...
No Matches
Mpd3fdGenerator.cxx
Go to the documentation of this file.
1// -------------------------------------------------------------------------
2// ----- Mpd3fdGenerator source file -----
3// ----- Created 24/06/04 by V. Friese -----
4// -------------------------------------------------------------------------
5#include "Mpd3fdGenerator.h"
6
7#include "FairPrimaryGenerator.h"
8#include "FairMCEventHeader.h"
9#include "constants.h"
10
11#include "TMCProcess.h"
12#include "TObjArray.h"
13#include "TPDGCode.h"
14#include "TParticle.h"
15#include "TRandom.h"
16#include "TString.h"
17#include "TVirtualMCStack.h"
18#include "TLorentzVector.h"
19#include "TDatabasePDG.h"
20#include "TParticlePDG.h"
21#include "TMath.h"
22#include "TString.h"
23
24#include <iostream>
25#include <cstring>
26
27#include <stdio.h>
28
29using namespace std;
30using namespace TMath;
31
32// ----- Default constructor ------------------------------------------
33
35: FairGenerator(),
36fInputFile(NULL),
37fFileName("") {
38}
39// ------------------------------------------------------------------------
40
41
42
43// ----- Standard constructor -----------------------------------------
44
46: FairGenerator(),
47fInputFile(NULL),
48fFileName(fileName) {
49 // fFileName = fileName;
50 cout << "-I Mpd3fdGenerator: Opening input file " << fFileName << endl;
51 fInputFile = new TFile(fFileName.Data());
52 if (!fInputFile) {
53 Fatal("Mpd3fdGenerator", "Cannot open input file.");
54 exit(1);
55 }
56 fDstTree = new TChain("out");
57 fDstTree->Add(fFileName);
58
59 // // Activate branches
60 fDstTree->SetBranchAddress("px", fPx);
61 fDstTree->SetBranchAddress("py", fPy);
62 fDstTree->SetBranchAddress("pz", fPz);
63 fDstTree->SetBranchAddress("x", fX);
64 fDstTree->SetBranchAddress("y", fY);
65 fDstTree->SetBranchAddress("z", fZ);
66 fDstTree->SetBranchAddress("E", fE);
67 fDstTree->SetBranchAddress("npart", &fNpart);
68 fDstTree->SetBranchAddress("id", fPID);
69
70 fEventNumber = 0;
71}
72// ------------------------------------------------------------------------
73
74
75
76// ----- Destructor ---------------------------------------------------
77
79 delete fInputFile;
80 delete fDstTree;
81}
82// ------------------------------------------------------------------------
83
84
85
86// ----- Public method ReadEvent --------------------------------------
87
88Bool_t Mpd3fdGenerator::ReadEvent(FairPrimaryGenerator* primGen) {
89
90 // ---> Check for input file
91 if (!fInputFile) {
92 cout << "-E Mpd3fdGenerator: Input file not open! " << endl;
93 return kFALSE;
94 }
95
96 // ---> Check for primary generator
97 if (!primGen) {
98 cout << "-E- Mpd3fdGenerator::ReadEvent: "
99 << "No PrimaryGenerator!" << endl;
100 return kFALSE;
101 }
102
103 fDstTree->GetEntry(fEventNumber);
104
105 //Int_t events = fDstTree->GetEntries();
106
107 // ---> Define event variables to be read from file
108 Int_t evnr = 0/*, aProj = 0, zProj = 0, aTarg = 0, zTarg = 0*/;
109
110 //Char_t nucl1;
111 //Char_t nucl2;
112 Int_t energ;
113 TString name;
114
115 if (fFileName.Contains("Au")) {
116 //aProj = 197;
117 //zProj = 79;
118 //aTarg = 197;
119 //zTarg = 79;
120 sscanf(fFileName.Data(), "Au_%d_", &energ);
121 }
122
123 cout << fFileName << " " << energ << endl;
124
125 Float_t b = 0.0; //TMP!
126
127 // ---> Calculate beta and gamma for Lorentztransformation
128 /*TDatabasePDG* pdgDB = TDatabasePDG::Instance();
129 TParticlePDG* kProton = pdgDB->GetParticle(2212);
130 Double_t kProtonMass = kProton->Mass();
131
132 Double_t eBeam = energ + kProtonMass;
133 Double_t pBeam = TMath::Sqrt(eBeam * eBeam - kProtonMass * kProtonMass);
134 Double_t betaCM = pBeam / (eBeam + kProtonMass);
135 Double_t gammaCM = TMath::Sqrt(1. / (1. - betaCM * betaCM));
136 */
137 cout << "-I Mpd3fdGenerator: Event " << fEventNumber << ", b = " << b
138 << " fm, multiplicity " << fNpart << ", Elab: " << energ << endl;
139
140 // Set event id and impact parameter in MCEvent if not yet done
141 FairMCEventHeader* event = primGen->GetEvent();
142 if (event && (!event->IsSet())) {
143 event->SetEventID(evnr);
144 event->SetB(b);
145 event->MarkSet(kTRUE);
146 }
147
148 // ---> Loop over tracks in the current event
149 for (UInt_t itrack = 0; itrack < fNpart; itrack++) {
150
151 // Lorentztransformation to lab
152// Double_t px = fPx[itrack];
153// Double_t py = fPy[itrack];
154// Double_t pz = fPz[itrack];
155// Double_t e = fE[itrack];
156// Double_t mass = Sqrt(e * e - px * px - py * py - pz * pz);
157// if (gCoordinateSystem == sysLaboratory)
158// pz = gammaCM * (pz + betaCM * e);
159// Double_t ee = sqrt(mass * mass + px * px + py * py + pz * pz);
160
161 // Give track to PrimaryGenerator
162 primGen->AddTrack(fPID[itrack], fPx[itrack], fPy[itrack], fPz[itrack], fX[itrack], fY[itrack], fZ[itrack]);
163
164 }
165 fEventNumber++;
166
167 return kTRUE;
168}
Bool_t ReadEvent(FairPrimaryGenerator *primGen)
STL namespace.