Line data Source code
1 : /**************************************************************************
2 : * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3 : * *
4 : * Author: The ALICE Off-line Project. *
5 : * Contributors are mentioned in the code where appropriate. *
6 : * *
7 : * Permission to use, copy, modify and distribute this software and its *
8 : * documentation strictly for non-commercial purposes is hereby granted *
9 : * without fee, provided that the above copyright notice appears in all *
10 : * copies and that both the copyright notice and this permission notice *
11 : * appear in the supporting documentation. The authors make no claims *
12 : * about the suitability of this software for any purpose. It is *
13 : * provided "as is" without express or implied warranty. *
14 : **************************************************************************/
15 :
16 : /* $Id$ */
17 : //
18 : // Realisation of AliGenReader to be used with AliGenExtFile
19 : // It reads Hijing events from a ntuple like event structure.
20 : // The event format is defined in Init()
21 : // NextEvent() is used to loop over events and NextParticle() to loop over particles.
22 : // Author: andreas.morsch@cern.ch
23 : //
24 : #include <TFile.h>
25 : #include <TParticle.h>
26 : #include <TDatabasePDG.h>
27 : #include <TTree.h>
28 :
29 : #include "AliGenReaderEcalHijing.h"
30 :
31 6 : ClassImp(AliGenReaderEcalHijing)
32 :
33 0 : AliGenReaderEcalHijing::AliGenReaderEcalHijing():
34 0 : fNcurrent(0),
35 0 : fNparticle(0),
36 0 : fTreeNtuple(0),
37 0 : fNjatt(0),
38 0 : fNahij(0),
39 0 : fNphij(0)
40 0 : {
41 : // Default constructor
42 0 : for (Int_t i = 0; i < 10000; i++) {
43 0 : fKhij[i] = 0;
44 0 : fPxhij[i] = 0.;
45 0 : fPyhij[i] = 0.;
46 0 : fPzhij[i] = 0.;
47 0 : fEhij[i] = 0.;
48 : }
49 0 : }
50 :
51 : AliGenReaderEcalHijing::AliGenReaderEcalHijing(const AliGenReaderEcalHijing &reader):
52 0 : AliGenReader(reader),
53 0 : fNcurrent(0),
54 0 : fNparticle(0),
55 0 : fTreeNtuple(0),
56 0 : fNjatt(0),
57 0 : fNahij(0),
58 0 : fNphij(0)
59 0 : {
60 : // Copy constructor
61 0 : for (Int_t i = 0; i < 10000; i++) {
62 0 : fKhij[i] = 0;
63 0 : fPxhij[i] = 0.;
64 0 : fPyhij[i] = 0.;
65 0 : fPzhij[i] = 0.;
66 0 : fEhij[i] = 0.;
67 : }
68 0 : reader.Copy(*this);
69 0 : }
70 :
71 : void AliGenReaderEcalHijing::Init()
72 : {
73 : //
74 : // reset the existing file environment and open a new root file if
75 : // the pointer to the Fluka tree is null
76 :
77 : TFile *pFile=0;
78 0 : if (!pFile) {
79 0 : pFile = new TFile(fFileName);
80 0 : pFile->cd();
81 0 : printf("\n I have opened %s file \n", fFileName);
82 0 : }
83 : // get the tree address in the Fluka boundary source file
84 0 : fTreeNtuple = (TTree*)gDirectory->Get("h2");
85 : TTree *h2=fTreeNtuple;
86 0 : h2->SetMakeClass(1);
87 : //Set branch addresses
88 0 : h2->SetBranchAddress("njatt", &fNjatt);
89 0 : h2->SetBranchAddress("nahij", &fNahij);
90 0 : h2->SetBranchAddress("nphij", &fNphij);
91 0 : h2->SetBranchAddress("khij", fKhij) ;
92 0 : h2->SetBranchAddress("pxhij", fPxhij);
93 0 : h2->SetBranchAddress("pyhij", fPyhij);
94 0 : h2->SetBranchAddress("pzhij", fPzhij);
95 0 : h2->SetBranchAddress("ehij", fEhij) ;
96 0 : }
97 :
98 : Int_t AliGenReaderEcalHijing::NextEvent()
99 : {
100 : // Read the next event
101 : Int_t nTracks=0, nread=0;
102 :
103 0 : TFile* pFile = fTreeNtuple->GetCurrentFile();
104 0 : pFile->cd();
105 :
106 0 : Int_t nentries = (Int_t) fTreeNtuple->GetEntries();
107 0 : if (fNcurrent < nentries) {
108 0 : Int_t nb = (Int_t)fTreeNtuple->GetEvent(fNcurrent);
109 : nread += nb;
110 0 : fNcurrent++;
111 0 : printf("\n Next event contains %d tracks! \n", fNphij);
112 0 : nTracks = fNphij;
113 0 : fNparticle = 0;
114 : return nTracks;
115 : }
116 0 : return 0;
117 0 : }
118 :
119 : TParticle* AliGenReaderEcalHijing::NextParticle()
120 : {
121 : // Read the next particle
122 :
123 : Float_t p[4];
124 0 : Int_t ipart = fKhij[fNparticle];
125 0 : p[0] = fPxhij[fNparticle];
126 0 : p[1] = fPyhij[fNparticle];
127 0 : p[2] = fPzhij[fNparticle];
128 0 : p[3] = fEhij[fNparticle];
129 :
130 0 : Double_t amass = TDatabasePDG::Instance()->GetParticle(ipart)->Mass();
131 :
132 0 : if(p[3] <= amass) {
133 0 : Warning("Generate","Particle %d E = %f mass = %f \n",
134 : ipart, p[3], amass);
135 0 : }
136 : TParticle* particle =
137 0 : new TParticle(ipart, 0, -1, -1, -1, -1, p[0], p[1], p[2], p[3],
138 : 0., 0., 0., 0.);
139 0 : fNparticle++;
140 0 : return particle;
141 0 : }
142 :
143 :
144 :
145 : AliGenReaderEcalHijing& AliGenReaderEcalHijing::operator=(const AliGenReaderEcalHijing& rhs)
146 : {
147 : // Assignment operator
148 0 : rhs.Copy(*this);
149 0 : return (*this);
150 : }
151 :
152 : void AliGenReaderEcalHijing::Copy(TObject&) const
153 : {
154 : //
155 : // Copy
156 : //
157 0 : Fatal("Copy","Not implemented!\n");
158 0 : }
159 :
160 :
161 :
162 :
163 :
164 :
|