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