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