Moving to the new VMC naming convention
[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
23
24 #include "AliGenBeamGas.h"
25 #include "AliRun.h"
26
27 #include <TParticle.h>
28 #include <TFile.h>
29 #include <TTree.h>
30
31
32  ClassImp(AliGenBeamGas)
33
34 AliGenBeamGas::AliGenBeamGas()
35   :AliGenExtFile()
36 {
37 //  Constructor
38 //
39     fInteractions = 1;
40     fOsigma[0] =    0.;
41     fOsigma[1] =    0.;
42     fOsigma[2] = 2000.;
43 }
44
45 AliGenBeamGas::AliGenBeamGas(const AliGenBeamGas & ExtFile)
46 {
47 // copy constructor
48 }
49 //____________________________________________________________
50
51 AliGenBeamGas::~AliGenBeamGas()
52 {
53 // Destructor
54     delete fReader;
55 }
56
57 //___________________________________________________________
58 void AliGenBeamGas::Init()
59 {
60 // Initialize
61     AliGenExtFile::Init();
62 }
63
64     
65 void AliGenBeamGas::Generate()
66 {
67 // Generate particles
68
69   Float_t polar[3]  = {0,0,0};
70   Float_t origin[3] = {0,0,0};
71   Float_t p[3];
72   Float_t random[2];
73   Int_t i, nt;
74   Int_t nInt = 0;
75   
76   while(nInt < fInteractions) {
77 //
78       Rndm(random,2);
79 //
80 //  Interaction vertex
81 //
82       origin[2] = 2. * fOsigma[2] * random[0] - fOsigma[2];
83 //
84 //    beam 1 or 2
85 //      
86       Float_t ibeam = (random[1] < 0.5) ? -1. : 1.;
87       
88 //
89 //    Read next event
90 //      
91       Int_t nTracks = fReader->NextEvent();     
92       if (nTracks == 0) {
93           // printf("\n No more events !!! !\n");
94           Warning("AliGenBeamGas::Generate",
95                   "\nNo more events in external file!!!\n Last event may be empty or incomplete.\n");
96           return;
97       }
98       
99       //
100       // Stack filling loop
101       //
102       for (i = 0; i < nTracks; i++) {
103           TParticle* iparticle = fReader->NextParticle();
104           p[0] = iparticle->Px();
105           p[1] = iparticle->Py();
106           p[2] = iparticle->Pz() * ibeam;
107         
108           Int_t idpart     = iparticle->GetPdgCode();
109           Int_t decayed    = iparticle->GetFirstDaughter();
110           Int_t doTracking = fTrackIt && (decayed < 0) && (TMath::Abs(idpart) > 10);
111           PushTrack(doTracking,-1,idpart,p,origin,polar,0,kPPrimary,nt);
112           KeepTrack(nt);
113       } // track loop
114       nInt++;
115   } // event loop
116 //
117   SetHighWaterMark(nt);
118 //
119   CdEventFile();
120 }
121
122
123 //AliGenBeamGas& AliGenBeamGas::operator=(const  AliGenBeamGas& rhs)
124 //{
125 // Assignment operator
126 //    return *this;
127 //}
128
129
130
131
132
133
134
135