Overlaps corrected, new shape of sectors
[u/mrichter/AliRoot.git] / EVGEN / AliGenScan.cxx
CommitLineData
4c039060 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
88cb7938 16/* $Id$ */
4c039060 17
0af12c00 18// Realisation of AliGenerator that generates particles with
19// vertices on a user defined grid.
20// The vertex positions can be smeared.
21// Momentum vectors are defined through the methods provided by AliGenerator.
22// Author: andreas.morsch@cern.ch
23
b0418df4 24#include "AliGenScan.h"
f87cfe57 25
b0418df4 26 ClassImp(AliGenScan)
27
28 AliGenScan::AliGenScan()
1c56e311 29 :AliGenerator(-1),
30 fXCmin(0),
31 fXCmax(0),
32 fNx(1),
33 fYCmin(0),
34 fYCmax(0),
35 fNy(1),
36 fZmin(0),
37 fZmax(0),
38 fNz(1),
39 fIpart(0)
b0418df4 40{
f87cfe57 41// Constructor
b0418df4 42//
43// Read all particles
44 fNpart=-1;
45}
46
47AliGenScan::AliGenScan(Int_t npart)
1c56e311 48 :AliGenerator(npart),
49 fXCmin(0),
50 fXCmax(0),
51 fNx(1),
52 fYCmin(0),
53 fYCmax(0),
54 fNy(1),
55 fZmin(0),
56 fZmax(0),
57 fNz(1),
58 fIpart(0)
b0418df4 59{
f87cfe57 60// Constructor
8b31bfac 61 fName = "Scan";
62 fTitle = "Generator for particles on a grid";
b0418df4 63}
64
65//____________________________________________________________
66AliGenScan::~AliGenScan()
f87cfe57 67{
68// Destructor
69}
b0418df4 70
71void AliGenScan::SetRange(Int_t nx, Float_t xmin, Float_t xmax,
72 Int_t ny, Float_t ymin, Float_t ymax,
73 Int_t nz, Float_t zmin, Float_t zmax)
74{
f87cfe57 75// Define the grid
38f1bd58 76 fXCmin=xmin;
77 fXCmax=xmax;
b0418df4 78 fNx=nx;
38f1bd58 79 fYCmin=ymin;
80 fYCmax=ymax;
b0418df4 81 fNy=ny;
82 fZmin=zmin;
83 fZmax=zmax;
84 fNz=nz;
85}
86
87//____________________________________________________________
88void AliGenScan::Generate()
89{
90 //
91 // Generate one trigger
92 //
b0418df4 93
94 Float_t polar[3]= {0,0,0};
95 //
96 Float_t origin[3];
97 Float_t p[3];
98 Int_t nt;
99 Float_t pmom, theta, phi;
100 //
101 Float_t random[6];
102 Float_t dx,dy,dz;
103
104 //
8a5ca7c5 105 if (fNx > 0) {
38f1bd58 106 dx=(fXCmax-fXCmin)/fNx;
b0418df4 107 } else {
108 dx=1e10;
109 }
110
111 if (fNy > 0) {
38f1bd58 112 dy=(fYCmax-fYCmin)/fNy;
b0418df4 113 } else {
114 dy=1e10;
115 }
116
117 if (fNz > 0) {
118 dz=(fZmax-fZmin)/fNz;
119 } else {
120 dz=1e10;
121 }
122 for (Int_t ix=0; ix<fNx; ix++) {
123 for (Int_t iy=0; iy<fNy; iy++) {
124 for (Int_t iz=0; iz<fNz; iz++){
65fb704d 125 Rndm(random,6);
38f1bd58 126 origin[0]=fXCmin+ix*dx+2*(random[0]-0.5)*fOsigma[0];
127 origin[1]=fYCmin+iy*dy+2*(random[1]-0.5)*fOsigma[1];
b0418df4 128 origin[2]=fZmin+iz*dz+2*(random[2]-0.5)*fOsigma[2];
129 pmom=fPMin+random[3]*(fPMax-fPMin);
130 theta=fThetaMin+random[4]*(fThetaMax-fThetaMin);
131 phi=fPhiMin+random[5]*(fPhiMax-fPhiMin);
132 p[0] = pmom*TMath::Cos(phi)*TMath::Sin(theta);
133 p[1] = pmom*TMath::Sin(phi)*TMath::Sin(theta);
134 p[2] = pmom*TMath::Cos(theta);
642f15cf 135 PushTrack(fTrackIt,-1,fIpart,p,origin,polar,0,kPPrimary,nt);
b0418df4 136 }
137 }
138 }
139}
140
141
142
143
144
145
146
147
148