]> git.uio.no Git - u/mrichter/AliRoot.git/blame - EVGEN/AliGenExtFile.cxx
Class moved from AliGenCocktail.h
[u/mrichter/AliRoot.git] / EVGEN / AliGenExtFile.cxx
CommitLineData
4c039060 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/*
17$Log$
3c8636e9 18Revision 1.6 1999/11/09 07:38:48 fca
19Changes for compatibility with version 2.23 of ROOT
20
084c1b4a 21Revision 1.5 1999/09/29 09:24:12 fca
22Introduction of the Copyright and cvs Log
23
4c039060 24*/
25
084c1b4a 26#include <iostream.h>
27
693caace 28#include "AliGenExtFile.h"
29#include "AliGenMUONlib.h"
30#include "AliMC.h"
31#include "AliRun.h"
32#include <TDirectory.h>
33#include <TFile.h>
34#include <TTree.h>
35#include <stdlib.h>
36 ClassImp(AliGenExtFile)
37 AliGenExtFile::AliGenExtFile()
38 :AliGenerator(-1)
39{
40 //
41 fName="ExtFile";
42 fTitle="Primaries from ext. File";
43 fFileName="dtujet93.root";
44 fTreeNtuple=0;
45 fNcurrent=0;
46//
47// Read all particles
48 fNpart=-1;
49}
50
51AliGenExtFile::AliGenExtFile(Int_t npart)
52 :AliGenerator(npart)
53{
54 //
55 fName="ExtFile";
56 fTitle="Primaries from ext. File";
57 fFileName="dtujet93.root";
58 fTreeNtuple=0;
59 fNcurrent=0;
60}
61
62//____________________________________________________________
63AliGenExtFile::~AliGenExtFile()
64{
65 delete fTreeNtuple;
66}
67
68//____________________________________________________________
69void AliGenExtFile::NtupleInit()
70{
71//
72// reset the existing file environment and open a new root file if
73// the pointer to the Fluka tree is null
74
75 TFile *File=0;
76 if (fTreeNtuple==0) {
77 if (!File) {
78 File = new TFile(fFileName);
79 File->cd();
80 cout<<"I have opened "<<fFileName<<" file "<<endl;
81 }
82// get the tree address in the Fluka boundary source file
83 fTreeNtuple = (TTree*)gDirectory->Get("h888");
84 } else {
85 File = fTreeNtuple->GetCurrentFile();
86 File->cd();
87 }
88
89 TTree *h2=fTreeNtuple;
90//Set branch addresses
91//Set branch addresses
92 h2->SetBranchAddress("Nihead",&Nihead);
93 h2->SetBranchAddress("Ihead",Ihead);
94 h2->SetBranchAddress("Nrhead",&Nrhead);
95 h2->SetBranchAddress("Rhead",Rhead);
96 h2->SetBranchAddress("Idpart",&Idpart);
97 h2->SetBranchAddress("Theta",&Theta);
98 h2->SetBranchAddress("Phi",&Phi);
99 h2->SetBranchAddress("P",&P);
100 h2->SetBranchAddress("E",&E);
101}
102
103
104//____________________________________________________________
105void AliGenExtFile::Generate()
106{
107
693caace 108 Float_t polar[3]= {0,0,0};
109 //
110 Float_t origin[3]={0,0,0};
111 Float_t p[3];
112 Float_t random[6];
113 Float_t prwn;
9b153ba2 114 Int_t i, j, nt, Ntracks=0;
693caace 115 //
116 NtupleInit();
117 TTree *h2=fTreeNtuple;
118 Int_t nentries = (Int_t) h2->GetEntries();
119 // loop over number of particles
120 Int_t nb = (Int_t)h2->GetEvent(fNcurrent);
121 Int_t i5=Ihead[4];
122 Int_t i6=Ihead[5];
123
124 for (j=0;j<3;j++) origin[j]=fOrigin[j];
125 if(fVertexSmear==perEvent) {
cfce8870 126 gMC->Rndm(random,6);
693caace 127 for (j=0;j<3;j++) {
128 origin[j]+=fOsigma[j]*TMath::Cos(2*random[2*j]*TMath::Pi())*
129 TMath::Sqrt(-2*TMath::Log(random[2*j+1]));
130 }
131 }
132
133 if (fNcurrent >= nentries) {
134 printf("\n No more entries !!! !\n");
135 return;
136 }
137
138
139 if (i5==0) {
140 printf("\n This should never happen !\n");
141 } else {
142 printf("\n Next event contains %d tracks! \n", i6);
143 Ntracks=i6;
144 }
145 for (i=0; i<Ntracks; i++) {
3c8636e9 146 Idpart=gMC->PDGFromId(Idpart);
c7a01d5a 147 Double_t amass = TDatabasePDG::Instance()->GetParticle(Idpart)->Mass();
148 if(E<=amass) {
3c8636e9 149 Warning("Generate","Particle %d no %d E = %f mass = %f\n",
150 Idpart,i,E,amass);
c7a01d5a 151 prwn=0;
152 } else {
153 prwn=sqrt((E+amass)*(E-amass));
154 }
693caace 155
156 Theta *= TMath::Pi()/180.;
157 Phi = (Phi-180)*TMath::Pi()/180.;
158 if(Theta<fThetaMin || Theta>fThetaMax ||
159 Phi<fPhiMin || Phi>fPhiMax ||
160 prwn<fPMin || prwn>fPMax)
161 {
162 ;
163 } else {
164 p[0]=prwn*TMath::Sin(Theta)*TMath::Cos(Phi);
165 p[1]=prwn*TMath::Sin(Theta)*TMath::Sin(Phi);
166 p[2]=prwn*TMath::Cos(Theta);
167
168 if(fVertexSmear==perTrack) {
cfce8870 169 gMC->Rndm(random,6);
693caace 170 for (j=0;j<3;j++) {
171 origin[j]=fOrigin[j]
172 +fOsigma[j]*TMath::Cos(2*random[2*j]*TMath::Pi())*
173 TMath::Sqrt(-2*TMath::Log(random[2*j+1]));
174 }
175 }
176 gAlice->SetTrack(fTrackIt,-1,Idpart,p,origin,polar,0,"Primary",nt);
177 }
178 fNcurrent++;
179 nb = (Int_t)h2->GetEvent(fNcurrent);
180 }
181
182 TFile *File=0;
183// Get AliRun object or create it
184 if (!gAlice) {
185 gAlice = (AliRun*)File->Get("gAlice");
186 if (gAlice) printf("AliRun object found on file\n");
187 if (!gAlice) gAlice = new AliRun("gAlice","Alice test program");
188 }
189 TTree *fAli=gAlice->TreeK();
190 if (fAli) File =fAli->GetCurrentFile();
191 File->cd();
192}
193
194
195
196
197
198
199
200
201