Correct GetWire check on even/odd fnWires
[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 */
19
20 #include "AliGenScan.h"
21 #include <stdlib.h>
22 #include "AliRun.h"
23  ClassImp(AliGenScan)
24     
25  AliGenScan::AliGenScan()
26          :AliGenerator(-1)
27 {
28 //
29     fXmin=0;
30     fXmax=0;
31     fNx=1;
32     fYmin=0;
33     fYmax=0;
34     fNy=1;
35     fZmin=0;
36     fZmax=0;
37     fNz=1;
38 //
39 //  Read all particles
40     fNpart=-1;
41 }
42
43 AliGenScan::AliGenScan(Int_t npart)
44     :AliGenerator(npart)
45 {
46     fXmin=0;
47     fXmax=0;
48     fNx=1;
49     fYmin=0;
50     fYmax=0;
51     fNy=1;
52     fZmin=0;
53     fZmax=0;
54     fNz=1;
55 }
56
57 //____________________________________________________________
58 AliGenScan::~AliGenScan()
59 {}
60
61 void AliGenScan::SetRange(Int_t nx, Float_t xmin, Float_t xmax,
62                      Int_t ny, Float_t ymin, Float_t ymax,
63                      Int_t nz, Float_t zmin, Float_t zmax)
64 {
65     fXmin=xmin;
66     fXmax=xmax;
67     fNx=nx;
68     fYmin=ymin;
69     fYmax=ymax;
70     fNy=ny;
71     fZmin=zmin;
72     fZmax=zmax;
73     fNz=nz;
74 }
75
76 //____________________________________________________________
77 void AliGenScan::Generate()
78 {
79   //
80   // Generate one trigger
81   //
82   
83   Float_t polar[3]= {0,0,0};
84   //
85   Float_t origin[3];
86   Float_t p[3];
87   Int_t nt;
88   Float_t pmom, theta, phi;
89   //
90   Float_t random[6];
91   Float_t dx,dy,dz;
92   
93   //
94   if (fNy > 0) {
95       dx=(fXmax-fXmin)/fNx;
96   } else {
97       dx=1e10;
98   }
99
100   if (fNy > 0) {
101       dy=(fYmax-fYmin)/fNy;
102   } else {
103       dy=1e10;
104   }
105
106   if (fNz > 0) {
107       dz=(fZmax-fZmin)/fNz;
108   } else {
109       dz=1e10;
110   }
111   for (Int_t ix=0; ix<fNx; ix++) {
112       for (Int_t iy=0; iy<fNy; iy++) {
113           for (Int_t iz=0; iz<fNz; iz++){
114               gMC->Rndm(random,6);
115               origin[0]=fXmin+ix*dx+2*(random[0]-0.5)*fOsigma[0];
116               origin[1]=fYmin+iy*dy+2*(random[1]-0.5)*fOsigma[1];
117               origin[2]=fZmin+iz*dz+2*(random[2]-0.5)*fOsigma[2];            
118               pmom=fPMin+random[3]*(fPMax-fPMin);
119               theta=fThetaMin+random[4]*(fThetaMax-fThetaMin);
120               phi=fPhiMin+random[5]*(fPhiMax-fPhiMin);
121               p[0] = pmom*TMath::Cos(phi)*TMath::Sin(theta);
122               p[1] = pmom*TMath::Sin(phi)*TMath::Sin(theta);
123               p[2] = pmom*TMath::Cos(theta);
124               gAlice->SetTrack(1,-1,fIpart,p,origin,polar,0,"Primary",nt);
125           }
126       }
127   }
128 }
129
130
131
132
133
134
135
136
137