Bug fix (I.Hrivnacova)
[u/mrichter/AliRoot.git] / EVGEN / AliGenScan.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 #include "AliGenScan.h"
19 #include "AliRun.h"
20
21  ClassImp(AliGenScan)
22     
23  AliGenScan::AliGenScan()
24          :AliGenerator(-1)
25 {
26 // Constructor
27     fXCmin=0;
28     fXCmax=0;
29     fNx=1;
30     fYCmin=0;
31     fYCmax=0;
32     fNy=1;
33     fZmin=0;
34     fZmax=0;
35     fNz=1;
36 //
37 //  Read all particles
38     fNpart=-1;
39 }
40
41 AliGenScan::AliGenScan(Int_t npart)
42     :AliGenerator(npart)
43 {
44 // Constructor
45     fName  = "Scan";
46     fTitle = "Generator for particles on a grid";
47
48
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 }
59
60 //____________________________________________________________
61 AliGenScan::~AliGenScan()
62 {
63 // Destructor
64 }
65
66 void AliGenScan::SetRange(Int_t nx, Float_t xmin, Float_t xmax,
67                      Int_t ny, Float_t ymin, Float_t ymax,
68                      Int_t nz, Float_t zmin, Float_t zmax)
69 {
70 // Define the grid
71     fXCmin=xmin;
72     fXCmax=xmax;
73     fNx=nx;
74     fYCmin=ymin;
75     fYCmax=ymax;
76     fNy=ny;
77     fZmin=zmin;
78     fZmax=zmax;
79     fNz=nz;
80 }
81
82 //____________________________________________________________
83 void AliGenScan::Generate()
84 {
85   //
86   // Generate one trigger
87   //
88   
89   Float_t polar[3]= {0,0,0};
90   //
91   Float_t origin[3];
92   Float_t p[3];
93   Int_t nt;
94   Float_t pmom, theta, phi;
95   //
96   Float_t random[6];
97   Float_t dx,dy,dz;
98   
99   //
100   if (fNx > 0) {
101       dx=(fXCmax-fXCmin)/fNx;
102   } else {
103       dx=1e10;
104   }
105
106   if (fNy > 0) {
107       dy=(fYCmax-fYCmin)/fNy;
108   } else {
109       dy=1e10;
110   }
111
112   if (fNz > 0) {
113       dz=(fZmax-fZmin)/fNz;
114   } else {
115       dz=1e10;
116   }
117   for (Int_t ix=0; ix<fNx; ix++) {
118       for (Int_t iy=0; iy<fNy; iy++) {
119           for (Int_t iz=0; iz<fNz; iz++){
120               Rndm(random,6);
121               origin[0]=fXCmin+ix*dx+2*(random[0]-0.5)*fOsigma[0];
122               origin[1]=fYCmin+iy*dy+2*(random[1]-0.5)*fOsigma[1];
123               origin[2]=fZmin+iz*dz+2*(random[2]-0.5)*fOsigma[2];            
124               pmom=fPMin+random[3]*(fPMax-fPMin);
125               theta=fThetaMin+random[4]*(fThetaMax-fThetaMin);
126               phi=fPhiMin+random[5]*(fPhiMax-fPhiMin);
127               p[0] = pmom*TMath::Cos(phi)*TMath::Sin(theta);
128               p[1] = pmom*TMath::Sin(phi)*TMath::Sin(theta);
129               p[2] = pmom*TMath::Cos(theta);
130               SetTrack(fTrackIt,-1,fIpart,p,origin,polar,0,kPPrimary,nt);
131           }
132       }
133   }
134 }
135
136
137
138
139
140
141
142
143