]> git.uio.no Git - u/mrichter/AliRoot.git/blob - EVGEN/AliGenBeamGas.cxx
- Removing AliMpSegFactory -> using AliMpSegmentation instead
[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 AliGenBeamGas::AliGenBeamGas(const AliGenBeamGas & beamgas):
44     AliGenExtFile(beamgas),
45     fInteractions(1)
46 {
47 // Copy constructor
48     beamgas.Copy(*this);
49 }
50 //____________________________________________________________
51
52 AliGenBeamGas::~AliGenBeamGas()
53 {
54 // Destructor
55     delete fReader;
56 }
57
58 //___________________________________________________________
59 void AliGenBeamGas::Init()
60 {
61 // Initialize
62     AliGenExtFile::Init();
63 }
64
65     
66 void AliGenBeamGas::Generate()
67 {
68 // Generate particles
69
70   Float_t polar[3]  = {0,0,0};
71   Float_t origin[3] = {0,0,0};
72   Float_t p[3];
73   Float_t random[2];
74   Int_t i, nt;
75   Int_t nInt = 0;
76   
77   while(nInt < fInteractions) {
78 //
79       Rndm(random,2);
80 //
81 //  Interaction vertex
82 //
83       origin[2] = 2. * fOsigma[2] * random[0] - fOsigma[2];
84 //
85 //    beam 1 or 2
86 //      
87       Float_t ibeam = (random[1] < 0.5) ? -1. : 1.;
88       
89 //
90 //    Read next event
91 //      
92       Int_t nTracks = fReader->NextEvent();     
93       if (nTracks == 0) {
94           // printf("\n No more events !!! !\n");
95           Warning("AliGenBeamGas::Generate",
96                   "\nNo more events in external file!!!\n Last event may be empty or incomplete.\n");
97           return;
98       }
99       
100       //
101       // Stack filling loop
102       //
103       for (i = 0; i < nTracks; i++) {
104           TParticle* iparticle = fReader->NextParticle();
105           p[0] = iparticle->Px();
106           p[1] = iparticle->Py();
107           p[2] = iparticle->Pz() * ibeam;
108         
109           Int_t idpart     = iparticle->GetPdgCode();
110           Int_t decayed    = iparticle->GetFirstDaughter();
111           Int_t doTracking = fTrackIt && (decayed < 0) && (TMath::Abs(idpart) > 10);
112           PushTrack(doTracking,-1,idpart,p,origin,polar,0,kPPrimary,nt);
113           KeepTrack(nt);
114       } // track loop
115       nInt++;
116   } // event loop
117 //
118   SetHighWaterMark(nt);
119 //
120   CdEventFile();
121 }
122
123
124
125 void AliGenBeamGas::Copy(TObject&) const
126 {
127     //
128     // Copy 
129     //
130     Fatal("Copy","Not implemented!\n");
131 }
132
133
134
135
136
137