1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
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 **************************************************************************/
18 Revision 1.11 2002/10/14 14:55:35 hristov
19 Merging the VirtualMC branch to the main development branch (HEAD)
21 Revision 1.8.4.1 2002/07/24 08:56:28 alibrary
22 Updating EVGEN on TVirtulaMC
24 Revision 1.10 2002/05/28 14:28:12 morsch
25 Correct LHC nominal current profile (1st year 20%, 2nd year 30%, 3rd year 100 %)
27 Revision 1.9 2002/05/28 13:49:17 morsch
28 - Udates for new pressure table
30 - first provisions for real events.
32 Revision 1.8 2002/03/22 13:00:25 morsch
33 Initialize sum to 0. (Jiri Chudoba).
35 Revision 1.7 2002/02/21 16:09:45 morsch
36 Move SetHighwaterMark() after last possible SetTrack()
38 Revision 1.6 2002/02/01 15:28:22 morsch
39 Fastidious print statements removed.
41 Revision 1.5 2002/02/01 14:12:28 morsch
42 Include new gas pressure estimates (LHC Pproject Note 273)
44 Revision 1.4 2001/12/19 16:30:24 morsch
45 Some bugs corrected and skip method added. (Rachid Guernane)
47 Revision 1.3 2001/07/27 17:09:36 morsch
48 Use local SetTrack, KeepTrack and SetHighWaterMark methods
49 to delegate either to local stack or to stack owned by AliRun.
50 (Piotr Skowronski, A.M.)
52 Revision 1.2 2001/06/14 12:15:27 morsch
53 Bugs corrected. SetSide() method added.
55 Revision 1.1 2001/01/23 15:04:33 morsch
56 Generator to read beam halo file from Protvino group.
60 // Read background particles from a boundary source
61 // Very specialized generator to simulate background from beam halo.
62 // The input file is a text file specially prepared
64 // Author: andreas.morsch@cern.ch
66 #include "AliGenHaloProtvino.h"
70 #include <TDatabasePDG.h>
74 ClassImp(AliGenHaloProtvino)
75 AliGenHaloProtvino::AliGenHaloProtvino()
80 fName = "HaloProtvino";
81 fTitle = "Halo from LHC Tunnel";
93 AliGenHaloProtvino::AliGenHaloProtvino(Int_t npart)
98 fTitle= "Halo from LHC Tunnel";
109 AliGenHaloProtvino::AliGenHaloProtvino(const AliGenHaloProtvino & HaloProtvino)
115 //____________________________________________________________
116 AliGenHaloProtvino::~AliGenHaloProtvino()
121 //____________________________________________________________
122 void AliGenHaloProtvino::Init()
125 fFile = fopen(fFileName,"r");
127 printf("\n File %s opened for reading, %p ! \n ", fFileName.Data(), fFile);
129 printf("\n Opening of file %s failed, %p ! \n ", fFileName.Data(), fFile);
134 // Read file with gas pressure values
137 name = gSystem->ExpandPathName("$(ALICE_ROOT)/LHC/gasPressure.dat" );
138 FILE* file = fopen(name, "r");
145 for (i = 0; i < 21; i++)
147 fscanf(file, "%f %f %f %f %f %f", &z,
148 &fG1[i][0], &fG1[i][1], &fG1[i][2], &fG1[i][3], &fG1[i][4]);
150 fZ1[i] = fZ1[i-1] + z;
158 for (i = 0; i < 21; i++)
160 fscanf(file, "%f %f %f %f %f %f", &z,
161 &fG2[i][0], &fG2[i][1], &fG2[i][2], &fG2[i][3], &fG2[i][4]);
163 fZ2[i] = fZ2[i-1] + z;
169 // Transform into interaction rates
171 const Float_t crossSection = 0.094e-28; // m^2
172 Float_t pFlux[5] = {0.2, 0.2, 0.3, 0.3, 1.0};
174 for (j = 0; j < 5; j++) {
175 pFlux[j] *= 1.e11/25.e-9;
176 for (i = 0; i < 21; i++)
178 fG1[i][j] = fG1[i][j] * crossSection * pFlux[j]; // 1/m/s
179 fG2[i][j] = fG2[i][j] * crossSection * pFlux[j]; // 1/m/s
187 for (Int_t i = 0; i < 300; i++) {
188 Float_t z = 20.+i*1.;
190 Float_t wgt1 = GassPressureWeight(z);
191 Float_t wgt2 = GassPressureWeight(-z);
192 // printf("weight: %f %f %f %f %f \n", z, wgt1, wgt2, fZ1[20], fZ2[20]);
198 printf("\n %f %f \n \n", sum1, sum2);
201 //____________________________________________________________
202 void AliGenHaloProtvino::Generate()
204 // Generate from input file
206 Float_t polar[3]= {0,0,0};
216 Float_t* zPrimary = new Float_t [fNpart];
217 Int_t * inuc = new Int_t [fNpart];
218 Int_t * ipart = new Int_t [fNpart];
219 Float_t* wgt = new Float_t [fNpart];
220 Float_t* ekin = new Float_t [fNpart];
221 Float_t* vx = new Float_t [fNpart];
222 Float_t* vy = new Float_t [fNpart];
223 Float_t* tx = new Float_t [fNpart];
224 Float_t* ty = new Float_t [fNpart];
226 Float_t zVertexOld = -1.e10;
227 Int_t nInt = 0; // Counts number of interactions
231 // Load event into array
233 ncols = fscanf(fFile,"%f %d %d %f %f %f %f %f %f",
234 &zPrimary[nread], &inuc[nread], &ipart[nread], &wgt[nread],
235 &ekin[nread], &vx[nread], &vy[nread],
236 &tx[nread], &ty[nread]);
238 if (ncols < 0) break;
239 // Skip fNskip events
241 if (fNpart !=-1 && nskip <= fNskip) continue;
242 // Count interactions
243 if (zPrimary[nread] != zVertexOld) {
245 zVertexOld = zPrimary[nread];
249 if (fNpart !=-1 && nread > fNpart) break;
252 // Mean time between interactions
254 Float_t dT = fTimePerEvent/nInt; // sec
255 Float_t t = 0; // sec
258 // Loop over primaries
263 for (Int_t nprim = 0; nprim < fNpart; nprim++)
265 amass = TDatabasePDG::Instance()->GetParticle(ipart[nprim])->Mass();
270 p0=sqrt(ekin[nprim]*ekin[nprim] + 2.*amass*ekin[nprim]);
272 txy=TMath::Sqrt(tx[nprim]*tx[nprim]+ty[nprim]*ty[nprim]);
276 tz=-TMath::Sqrt(1.-txy);
283 origin[0] = vx[nprim];
284 origin[1] = vy[nprim];
291 Float_t originP[3] = {0., 0., 0.};
292 originP[2] = zPrimary[nprim];
294 Float_t pP[3] = {0., 0., 0.};
298 originP[2] = -zPrimary[nprim];
299 origin[2] = -origin[2];
306 if (zPrimary[nprim] != zVertexOld) {
307 while(arg==0.) arg = gRandom->Rndm();
308 t -= dT*TMath::Log(arg); // (sec)
309 zVertexOld = zPrimary[nprim];
312 // Get statistical weight according to local gas-pressure
314 fParentWeight=wgt[nprim]*GassPressureWeight(zPrimary[nprim]);
316 if (!fAnalog || gRandom->Rndm() < fParentWeight) {
317 // Pass parent particle
319 SetTrack(0,-1,kProton,pP,originP,polar,t,kPNoProcess,ntP, fParentWeight);
321 SetTrack(fTrackIt,ntP,ipart[nprim],p,origin,polar,t,kPNoProcess,nt,fParentWeight);
325 // Both sides are considered
329 fParentWeight=wgt[nprim]*GassPressureWeight(-zPrimary[nprim]);
330 if (!fAnalog || gRandom->Rndm() < fParentWeight) {
331 origin[2] = -origin[2];
332 originP[2] = -originP[2];
334 SetTrack(0,-1,kProton,pP,originP,polar,t,kPNoProcess,ntP, fParentWeight);
336 SetTrack(fTrackIt,ntP,ipart[nprim],p,origin,polar,t,kPNoProcess,nt,fParentWeight);
339 SetHighWaterMark(nt);
353 AliGenHaloProtvino& AliGenHaloProtvino::operator=(const AliGenHaloProtvino& rhs)
355 // Assignment operator
361 Float_t AliGenHaloProtvino::GassPressureWeight(Float_t zPrimary)
364 // Return z-dependent gasspressure weight = interaction rate [1/m/s].
368 Float_t zAbs = TMath::Abs(zPrimary);
371 if (zAbs > fZ1[20]) {
374 for (Int_t i = 1; i < 21; i++) {
376 weight = fG1[i][fRunPeriod];
382 if (zAbs > fZ2[20]) {
385 for (Int_t i = 1; i < 21; i++) {
387 weight = fG2[i][fRunPeriod];
397 # Title: README file for the sources of IR8 machine induced background
398 # Author: Vadim Talanov <Vadim.Talanov@cern.ch>
399 # Modified: 12-12-2000
403 There are three files, named ring.one.beta.[01,10,50].m, which
404 contain the lists of background particles, induced by proton losses
405 upstream of IP8 in the LHC ring one, for the beta* values of 1, 10
406 and 50 m, respectively.
410 Each line in the files contains the coordinates of particle track
411 crossing with the infinite plane, positioned at z=-1m, together with
412 the physical properties of corresponding particle, namely:
414 S - S coordinate of the primary interaction vertex, cm;
415 N - type of the gas nuclei at interaction, 1 is H, 2 - C and 3 - O;
416 I - particle ID in PDG particle numbering scheme;
418 E - particle kinetic energy, GeV;
419 X - x coordinate of the crossing point, cm;
420 Y - y coordinate of the crossing point, cm;
421 Dx - x direction cosine;
422 Dy - y direction cosine.
426 Each file is given per unity of linear density of proton inelastic
427 interactions with the gas nuclei, [1 inelastic interaction/m].
429 # ~/vtalanov/public/README.mib: the end.