Setter for calling Generate n-times
[u/mrichter/AliRoot.git] / EVGEN / AliGenBeamGas.cxx
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 //
19 // Generator to simulate beam gas interactions.
20 // At present single interactions are read from an external file. 
21 // Several interactions are combined in one event.
22 // By default the vertex is smeared between +/- 20 m
23 // Author: andreas.morsch@cern.ch
24
25 #include "AliGenBeamGas.h"
26 #include "AliGenReader.h"
27
28 #include <TParticle.h>
29
30
31 ClassImp(AliGenBeamGas)
32
33 AliGenBeamGas::AliGenBeamGas()
34     :AliGenExtFile(), 
35      fInteractions(1)
36 {
37 //  Constructor
38 //
39     fOsigma[0] =    0.;
40     fOsigma[1] =    0.;
41     fOsigma[2] = 2000.;
42 }
43
44 //____________________________________________________________
45
46 AliGenBeamGas::~AliGenBeamGas()
47 {
48 // Destructor
49     delete fReader;
50 }
51
52 //___________________________________________________________
53 void AliGenBeamGas::Init()
54 {
55 // Initialize
56     AliGenExtFile::Init();
57 }
58
59     
60 void AliGenBeamGas::Generate()
61 {
62 // Generate particles
63
64   Float_t polar[3]  = {0,0,0};
65   Float_t origin[3] = {0,0,0};
66   Float_t p[3];
67   Float_t random[2];
68   Int_t i, nt;
69   Int_t nInt = 0;
70   
71   while(nInt < fInteractions) {
72 //
73       Rndm(random,2);
74 //
75 //  Interaction vertex
76 //
77       origin[2] = 2. * fOsigma[2] * random[0] - fOsigma[2];
78 //
79 //    beam 1 or 2
80 //      
81       Float_t ibeam = (random[1] < 0.5) ? -1. : 1.;
82
83       // Interaction time
84       Float_t time = origin[2]/TMath::Ccgs()*ibeam;
85 //
86 //    Read next event
87 //      
88       Int_t nTracks = fReader->NextEvent();     
89       if (nTracks == 0) {
90           // printf("\n No more events !!! !\n");
91           Warning("AliGenBeamGas::Generate",
92                   "\nNo more events in external file!!!\n Last event may be empty or incomplete.\n");
93           return;
94       }
95       
96       //
97       // Stack filling loop
98       //
99       for (i = 0; i < nTracks; i++) {
100           TParticle* iparticle = fReader->NextParticle();
101           p[0] = iparticle->Px();
102           p[1] = iparticle->Py();
103           p[2] = iparticle->Pz() * ibeam;
104         
105           Int_t idpart     = iparticle->GetPdgCode();
106           Int_t decayed    = iparticle->GetFirstDaughter();
107           Int_t doTracking = fTrackIt && (decayed < 0) && (TMath::Abs(idpart) > 10);
108           PushTrack(doTracking,-1,idpart,p,origin,polar,time,kPPrimary,nt);
109           KeepTrack(nt);
110       } // track loop
111       nInt++;
112   } // event loop
113 //
114   SetHighWaterMark(nt);
115 //
116   CdEventFile();
117 }
118
119
120
121
122