]> git.uio.no Git - u/mrichter/AliRoot.git/blob - EVGEN/AliGenHaloProtvino.cxx
Some bugs corrected and skip method added. (Rachid Guernane)
[u/mrichter/AliRoot.git] / EVGEN / AliGenHaloProtvino.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 /*
17 $Log$
18 Revision 1.3  2001/07/27 17:09:36  morsch
19 Use local SetTrack, KeepTrack and SetHighWaterMark methods
20 to delegate either to local stack or to stack owned by AliRun.
21 (Piotr Skowronski, A.M.)
22
23 Revision 1.2  2001/06/14 12:15:27  morsch
24 Bugs corrected. SetSide() method added.
25
26 Revision 1.1  2001/01/23 15:04:33  morsch
27 Generator to read beam halo file from Protvino group.
28
29 */
30
31 // Read background particles from a boundary source
32 // Very specialized generator to simulate background from beam halo.
33 // The input file is a text file specially prepared 
34 // for this purpose.
35 // Author: andreas.morsch@cern.ch
36
37 #include "AliGenHaloProtvino.h"
38 #include "AliRun.h"
39 #include "AliMC.h"
40 #include "AliPDG.h"
41
42 #include <TDatabasePDG.h>
43 #include <stdlib.h>
44
45  ClassImp(AliGenHaloProtvino)
46      AliGenHaloProtvino::AliGenHaloProtvino()
47          :AliGenerator(-1)
48 {
49 // Constructor
50     printf("\n Calling Default Constructor");
51     
52     fName  = "HaloProtvino";
53     fTitle = "Halo from LHC Tunnel";
54 //
55 //  Read all particles
56     fNpart = -1;
57     fFile  =  0;
58     fSide  =  1;
59 }
60
61 AliGenHaloProtvino::AliGenHaloProtvino(Int_t npart)
62     :AliGenerator(npart)
63 {
64 // Constructor
65     printf("\n Calling Constructor");
66     fName = "Halo";
67     fTitle= "Halo from LHC Tunnel";
68 //
69     fNpart   = npart;
70     fFile    = 0;
71     fSide    = 1;
72 }
73
74 AliGenHaloProtvino::AliGenHaloProtvino(const AliGenHaloProtvino & HaloProtvino)
75 {
76 // copy constructor
77 }
78
79
80 //____________________________________________________________
81 AliGenHaloProtvino::~AliGenHaloProtvino()
82 {
83 // Destructor
84 }
85
86 //____________________________________________________________
87 void AliGenHaloProtvino::Init() 
88 {
89 // Initialisation
90     fFile = fopen(fFileName,"r");
91     if (fFile) {
92         printf("\n File %s opened for reading, %p ! \n ",  fFileName.Data(), fFile);
93     } else {
94         printf("\n Opening of file %s failed,  %p ! \n ",  fFileName.Data(), fFile);
95     }
96 }
97
98 //____________________________________________________________
99 void AliGenHaloProtvino::Generate()
100 {
101 // Generate from input file
102  
103   Float_t polar[3]= {0,0,0};
104   Float_t origin[3];
105   Float_t p[3], p0;
106   Float_t ekin, wgt, tx, ty, tz, txy;
107   Float_t zPrimary;
108   Float_t amass;
109   Int_t   inuc;
110   //
111   Int_t ipart, ncols, nt;
112   Int_t nskip = 0;
113   Int_t nread = 0;
114   while(1) {
115       ncols = fscanf(fFile,"%f %d %d %f %f %f %f %f %f",
116                      &zPrimary, &inuc, &ipart, &wgt, 
117                      &ekin, &origin[0], &origin[1],
118                      &tx, &ty);
119 /*
120       printf(" \n %f %d %d %f %f %f %f %f %f",
121              zPrimary, inuc, ipart, wgt, 
122              ekin, origin[0], origin[1],
123              tx, ty);
124 */
125       
126       if (ncols < 0) break;
127
128       nskip++;
129       if (fNpart !=-1 && nskip <= fNskip) continue;
130       
131       nread++;
132       if (fNpart !=-1 && nread > fNpart) break;
133
134       amass = TDatabasePDG::Instance()->GetParticle(ipart)->Mass();
135
136       //
137       // Momentum vector
138       //
139       p0=sqrt(ekin*ekin + 2.*amass*ekin);
140       
141       txy=TMath::Sqrt(tx*tx+ty*ty);
142       if (txy == 1.) {
143           tz=0;
144       } else {
145           tz=-TMath::Sqrt(1.-txy);
146       }
147     
148       p[0]=p0*tx;
149       p[1]=p0*ty;
150       p[2]=-p0*tz;
151       
152       origin[2] = -2196.5;
153
154       //
155       //
156       // Particle weight
157
158       Float_t originP[3] = {0., 0., 0.};
159       originP[2] = zPrimary;
160       
161       Float_t pP[3] = {0., 0., 0.};
162       Int_t ntP;
163       
164       if (fSide == -1) {
165           originP[2] = -zPrimary;
166           origin[2]  = -origin[2];
167           p[2]       = -p[2];
168       }
169
170       SetTrack(0,-1,kProton,pP,originP,polar,0,kPNoProcess,ntP);
171       KeepTrack(ntP);
172       fParentWeight=wgt*GassPressureWeight(zPrimary);
173       SetTrack(fTrackIt,ntP,ipart,p,origin,polar,0,kPNoProcess,nt,fParentWeight);
174       SetHighWaterMark(nt);
175       
176       //
177       // Assume particles come from two directions with same probability
178
179       // Both Side are considered
180       if (fSide > 1) {
181           origin[2]=-origin[2];
182           p[2]=-p[2];
183           fParentWeight=wgt*GassPressureWeight(-zPrimary);
184           SetTrack(fTrackIt,ntP,ipart,p,origin,polar,0,kPNoProcess,nt,fParentWeight);
185       }
186       
187   }
188 }
189  
190
191 AliGenHaloProtvino& AliGenHaloProtvino::operator=(const  AliGenHaloProtvino& rhs)
192 {
193 // Assignment operator
194     return *this;
195 }
196
197
198 Float_t AliGenHaloProtvino::GassPressureWeight(Float_t zPrimary)
199 {
200   // Return z-dependent gasspressure weight
201   //
202     Float_t weight = 500.;
203     
204     if (zPrimary > 45000.) weight = 2.e4;
205     
206   return weight;
207 }
208
209 /*
210 # Title:    README file for the sources of IR8 machine induced background
211 # Author:   Vadim Talanov <Vadim.Talanov@cern.ch>
212 # Modified: 12-12-2000 
213
214 0. Overview
215
216         There are three files, named ring.one.beta.[01,10,50].m, which
217         contain the lists of background particles, induced by proton losses
218         upstream of IP8 in the LHC ring one, for the beta* values of 1, 10
219         and 50 m, respectively.
220
221 1. File contents
222
223         Each line in the files contains the coordinates of particle track
224         crossing with the infinite plane, positioned at z=-1m, together with
225         the physical properties of corresponding particle, namely:
226
227         S  - S coordinate of the primary interaction vertex, cm;
228         N  - type of the gas nuclei at interaction, 1 is H, 2 - C and 3 - O;
229         I  - particle ID in PDG particle numbering scheme;
230         W  - particle weight;
231         E  - particle kinetic energy, GeV;
232         X  - x coordinate of the crossing point, cm;
233         Y  - y coordinate of the crossing point, cm;
234         Dx - x direction cosine;
235         Dy - y direction cosine.
236
237 2. Normalisation
238
239         Each file is given per unity of linear density of proton inelastic
240         interactions with the gas nuclei, [1 inelastic interaction/m].
241
242 # ~/vtalanov/public/README.mib: the end.
243
244 */
245
246
247
248