ATTPCROOT  0.3.0-alpha
A ROOT-based framework for analyzing data from active target detectors
Pythia6Generator.cxx
Go to the documentation of this file.
1 /********************************************************************************
2  * Copyright (C) 2014 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *
3  * *
4  * This software is distributed under the terms of the *
5  * GNU Lesser General Public Licence version 3 (LGPL) version 3, *
6  * copied verbatim in the file "LICENSE" *
7  ********************************************************************************/
8 // -------------------------------------------------------------------------
9 // ----- M. Al-Turany June 2014 -----
10 // -------------------------------------------------------------------------
11 // -------------------------------------------------------------------------
12 // ----- Pythia6Generator source file -----
13 // ----- Created 08/08/08 by S. Spataro -----
14 // -------------------------------------------------------------------------
15 #include "Pythia6Generator.h"
16 
17 #include <FairPrimaryGenerator.h>
18 
19 #include <cstdio>
20 #include <iostream>
21 
22 using std::cout;
23 using std::endl;
24 using std::max;
25 
26 // ----- Default constructor ------------------------------------------
28 // ------------------------------------------------------------------------
29 
30 // ----- Standard constructor -----------------------------------------
32 {
33  fFileName = fileName;
34  fVerbose = 0;
35  cout << "-I Pythia6Generator: Opening input file " << fileName << endl;
36  if ((fInputFile = fopen(fFileName, "r")) == NULL)
37  // fInputFile = new ifstream(fFileName);
38  // if ( ! fInputFile->is_open() )
39  Fatal("Pythia6Generator", "Cannot open input file.");
40 
41  // fPDG=TDatabasePDG::Instance();
42 }
43 // ------------------------------------------------------------------------
44 
45 // ----- Destructor ---------------------------------------------------
47 {
48  CloseInput();
49 }
50 // ------------------------------------------------------------------------
51 
52 // ----- Public method ReadEvent --------------------------------------
53 Bool_t Pythia6Generator::ReadEvent(FairPrimaryGenerator *primGen)
54 {
55 
56  // Check for input file
57  if (!fInputFile) {
58  // if ( ! fInputFile->is_open() ) {
59  cout << "-E Pythia6Generator: Input file not open!" << endl;
60  return kFALSE;
61  }
62 
63  // Define event variable to be read from file
64  Int_t ntracks = 0, eventID = 0, ncols = 0;
65 
66  // Define track variables to be read from file
67  Int_t nLev = 0, pdgID = 0, nM1 = -1, nM2 = -1, nDF = -1, nDL = -1;
68  Float_t fPx = 0., fPy = 0., fPz = 0., fM = 0., fE = 0.;
69  Float_t fVx = 0., fVy = 0., fVz = 0., fT = 0.;
70 
71  // Read event header line from input file
72 
73  Int_t max_nr = 0;
74 
75  Text_t buffer[200];
76  ncols = fscanf(fInputFile, "%d\t%d", &eventID, &ntracks);
77 
78  if (ncols && ntracks > 0) {
79 
80  if (fVerbose > 0)
81  cout << "Event number: " << eventID << "\tNtracks: " << ntracks << endl;
82 
83  for (Int_t ll = 0; ll < ntracks; ll++) {
84  ncols = fscanf(fInputFile, "%d %d %d %d %d %d %f %f %f %f %f %f %f %f %f", &nLev, &pdgID, &nM1, &nM2, &nDF,
85  &nDL, &fPx, &fPy, &fPz, &fE, &fM, &fVx, &fVy, &fVz, &fT);
86  if (fVerbose > 0)
87  cout << nLev << "\t" << pdgID << "\t" << nM1 << "\t" << nM2 << "\t" << nDF << "\t" << nDL << "\t" << fPx
88  << "\t" << fPy << "\t" << fPz << "\t" << fE << "\t" << fM << "\t" << fVx << "\t" << fVy << "\t" << fVz
89  << "\t" << fT << endl;
90  if (nLev == 1)
91  primGen->AddTrack(pdgID, fPx, fPy, fPz, fVx, fVy, fVz);
92  }
93  } else {
94  cout << "-I Pythia6Generator: End of input file reached " << endl;
95  CloseInput();
96  return kFALSE;
97  }
98 
99  // If end of input file is reached : close it and abort run
100  if (feof(fInputFile)) {
101  cout << "-I Pythia6Generator: End of input file reached " << endl;
102  CloseInput();
103  return kFALSE;
104  }
105 
106  /*
107  cout << "-I Pythia6Generator: Event " << eventID << ", vertex = ("
108  << vx << "," << vy << "," << vz << ") cm, multiplicity "
109  << ntracks << endl;
110  */
111 
112  return kTRUE;
113 }
114 // ------------------------------------------------------------------------
115 
116 // ----- Private method CloseInput ------------------------------------
117 void Pythia6Generator::CloseInput()
118 {
119  if (fInputFile) {
120  // if ( fInputFile->is_open() ) {
121  {
122  cout << "-I Pythia6Generator: Closing input file " << fFileName << endl;
123  // fInputFile->close();
124 
125  fclose(fInputFile);
126  }
127  delete fInputFile;
128  fInputFile = NULL;
129  }
130 }
131 // ------------------------------------------------------------------------
132 
ClassImp
ClassImp(AtFindVertex)
Pythia6Generator.h
Pythia6Generator::Pythia6Generator
Pythia6Generator()
Definition: Pythia6Generator.cxx:27
Pythia6Generator::~Pythia6Generator
virtual ~Pythia6Generator()
Definition: Pythia6Generator.cxx:46
Pythia6Generator::ReadEvent
virtual Bool_t ReadEvent(FairPrimaryGenerator *primGen)
Definition: Pythia6Generator.cxx:53
Pythia6Generator
Definition: Pythia6Generator.h:81