]> git.uio.no Git - u/mrichter/AliRoot.git/blob - EVGEN/AliGenScan.cxx
Changed Print() to take into account the case where merging was used (AliRunDigitizer)
[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 /*
17 $Log$
18 Revision 1.9  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.8  2000/12/06 15:11:38  morsch
24 Correct double declared data members.
25
26 Revision 1.7  2000/11/30 07:12:50  alibrary
27 Introducing new Rndm and QA classes
28
29 Revision 1.6  2000/10/02 21:28:06  fca
30 Removal of useless dependecies via forward declarations
31
32 Revision 1.5  2000/06/09 20:37:20  morsch
33 All coding rule violations except RS3 corrected
34
35 Revision 1.4  1999/11/03 17:43:20  fca
36 New version from G.Martinez & A.Morsch
37
38 Revision 1.3  1999/09/29 09:24:14  fca
39 Introduction of the Copyright and cvs Log
40
41 */
42
43 #include "AliGenScan.h"
44 #include "AliRun.h"
45
46  ClassImp(AliGenScan)
47     
48  AliGenScan::AliGenScan()
49          :AliGenerator(-1)
50 {
51 // Constructor
52     fXCmin=0;
53     fXCmax=0;
54     fNx=1;
55     fYCmin=0;
56     fYCmax=0;
57     fNy=1;
58     fZmin=0;
59     fZmax=0;
60     fNz=1;
61 //
62 //  Read all particles
63     fNpart=-1;
64 }
65
66 AliGenScan::AliGenScan(Int_t npart)
67     :AliGenerator(npart)
68 {
69 // Constructor
70     fName  = "Scan";
71     fTitle = "Generator for particles on a grid";
72
73
74     fXCmin=0;
75     fXCmax=0;
76     fNx=1;
77     fYCmin=0;
78     fYCmax=0;
79     fNy=1;
80     fZmin=0;
81     fZmax=0;
82     fNz=1;
83 }
84
85 //____________________________________________________________
86 AliGenScan::~AliGenScan()
87 {
88 // Destructor
89 }
90
91 void AliGenScan::SetRange(Int_t nx, Float_t xmin, Float_t xmax,
92                      Int_t ny, Float_t ymin, Float_t ymax,
93                      Int_t nz, Float_t zmin, Float_t zmax)
94 {
95 // Define the grid
96     fXCmin=xmin;
97     fXCmax=xmax;
98     fNx=nx;
99     fYCmin=ymin;
100     fYCmax=ymax;
101     fNy=ny;
102     fZmin=zmin;
103     fZmax=zmax;
104     fNz=nz;
105 }
106
107 //____________________________________________________________
108 void AliGenScan::Generate()
109 {
110   //
111   // Generate one trigger
112   //
113   
114   Float_t polar[3]= {0,0,0};
115   //
116   Float_t origin[3];
117   Float_t p[3];
118   Int_t nt;
119   Float_t pmom, theta, phi;
120   //
121   Float_t random[6];
122   Float_t dx,dy,dz;
123   
124   //
125   if (fNy > 0) {
126       dx=(fXCmax-fXCmin)/fNx;
127   } else {
128       dx=1e10;
129   }
130
131   if (fNy > 0) {
132       dy=(fYCmax-fYCmin)/fNy;
133   } else {
134       dy=1e10;
135   }
136
137   if (fNz > 0) {
138       dz=(fZmax-fZmin)/fNz;
139   } else {
140       dz=1e10;
141   }
142   for (Int_t ix=0; ix<fNx; ix++) {
143       for (Int_t iy=0; iy<fNy; iy++) {
144           for (Int_t iz=0; iz<fNz; iz++){
145               Rndm(random,6);
146               origin[0]=fXCmin+ix*dx+2*(random[0]-0.5)*fOsigma[0];
147               origin[1]=fYCmin+iy*dy+2*(random[1]-0.5)*fOsigma[1];
148               origin[2]=fZmin+iz*dz+2*(random[2]-0.5)*fOsigma[2];            
149               pmom=fPMin+random[3]*(fPMax-fPMin);
150               theta=fThetaMin+random[4]*(fThetaMax-fThetaMin);
151               phi=fPhiMin+random[5]*(fPhiMax-fPhiMin);
152               p[0] = pmom*TMath::Cos(phi)*TMath::Sin(theta);
153               p[1] = pmom*TMath::Sin(phi)*TMath::Sin(theta);
154               p[2] = pmom*TMath::Cos(theta);
155               SetTrack(fTrackIt,-1,fIpart,p,origin,polar,0,kPPrimary,nt);
156           }
157       }
158   }
159 }
160
161
162
163
164
165
166
167
168