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