]> git.uio.no Git - u/mrichter/AliRoot.git/blob - EVGEN/AliGenDoubleScan.cxx
Psi and Upsilon family generated.
[u/mrichter/AliRoot.git] / EVGEN / AliGenDoubleScan.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.6.1  2002/07/30 15:00:39  alibrary
19 Correction in initialization of dx (Enrique Gamez Flores).
20
21 Revision 1.9  2002/07/30 13:48:03  morsch
22
23 Correction in initialization of dx (Enrique Gamez Flores).
24
25 Revision 1.8  2002/02/08 16:50:50  morsch
26 Add name and title in constructor.
27
28 Revision 1.7  2001/07/27 17:09:35  morsch
29 Use local SetTrack, KeepTrack and SetHighWaterMark methods
30 to delegate either to local stack or to stack owned by AliRun.
31 (Piotr Skowronski, A.M.)
32
33 Revision 1.6  2000/12/21 16:24:06  morsch
34 Coding convention clean-up
35
36 Revision 1.5  2000/12/06 15:11:38  morsch
37 Correct double declared data members.
38
39 Revision 1.4  2000/11/30 07:12:50  alibrary
40 Introducing new Rndm and QA classes
41
42 Revision 1.3  2000/10/02 21:28:06  fca
43 Removal of useless dependecies via forward declarations
44
45 Revision 1.2  2000/06/09 20:37:51  morsch
46 All coding rule violations except RS3 corrected
47
48 Revision 1.1  2000/02/23 16:25:14  morsch
49 First commit of this file
50
51 */
52
53 // As AliGenScan,  generation of particles on a 3-dim grid
54 // but here double hits with a predefined distance are generated.
55 // The second particle is generated at a constant distance but with random phi.
56 // Generator can be used to evaluate double hit resolutions.
57 // Author: andreas.morsch@cern.ch
58
59 #include "AliGenDoubleScan.h"
60 #include "AliRun.h"
61
62  ClassImp(AliGenDoubleScan)
63     
64  AliGenDoubleScan::AliGenDoubleScan()
65          :AliGenScan(-1)
66 {
67 }
68
69 AliGenDoubleScan::AliGenDoubleScan(Int_t npart)
70     :AliGenScan(npart)
71 {
72 // Constructor
73     fName = "Double Scan";
74     fTitle= "Particle Generator for two correlated particles on a grid";
75 }
76
77 //____________________________________________________________
78 AliGenDoubleScan::~AliGenDoubleScan()
79 {
80 // Destructor
81 }
82
83 //____________________________________________________________
84 void AliGenDoubleScan::Generate()
85 {
86     //
87     // Generate one trigger
88     //
89   
90     Float_t polar[3]= {0,0,0};
91     //
92     Float_t origin[3];
93     Float_t p[3];
94     Int_t nt;
95     Float_t pmom, theta, phi;
96     //
97     Float_t random[6];
98     Float_t dx,dy,dz;
99     
100     //
101     if (fNx > 0) {
102         dx=(fXCmax-fXCmin)/fNx;
103     } else {
104         dx=1e10;
105     }
106
107     if (fNy > 0) {
108         dy=(fYCmax-fYCmin)/fNy;
109     } else {
110         dy=1e10;
111     }
112     
113     if (fNz > 0) {
114       dz=(fZmax-fZmin)/fNz;
115     } else {
116         dz=1e10;
117     }
118     for (Int_t ix=0; ix<fNx; ix++) {
119       for (Int_t iy=0; iy<fNy; iy++) {
120           for (Int_t iz=0; iz<fNz; iz++){
121               Rndm(random,6);
122               origin[0]=fXCmin+ix*dx+2*(random[0]-0.5)*fOsigma[0];
123               origin[1]=fYCmin+iy*dy+2*(random[1]-0.5)*fOsigma[1];
124               origin[2]=fZmin+iz*dz+2*(random[2]-0.5)*fOsigma[2];            
125               pmom=fPMin+random[3]*(fPMax-fPMin);
126               theta=fThetaMin+random[4]*(fThetaMax-fThetaMin);
127               phi=fPhiMin+random[5]*(fPhiMax-fPhiMin);
128               p[0] = pmom*TMath::Cos(phi)*TMath::Sin(theta);
129               p[1] = pmom*TMath::Sin(phi)*TMath::Sin(theta);
130               p[2] = pmom*TMath::Cos(theta);
131               SetTrack(fTrackIt,-1,fIpart,p,origin,polar,0,kPPrimary,nt);
132 //
133 // Generate 2nd particle at distance fDistance from  the first
134 //
135               Rndm(random,6);
136               Float_t phi2=2.*TMath::Pi()*random[0];
137               Float_t dx  =fDistance*TMath::Sin(phi2);
138               Float_t dy  =fDistance*TMath::Cos(phi2);        
139               origin[0]=origin[0]+dx;
140               origin[1]=origin[1]+dy;         
141               pmom=fPMin+random[1]*(fPMax-fPMin);
142               theta=fThetaMin+random[2]*(fThetaMax-fThetaMin);
143               phi=fPhiMin+random[3]*(fPhiMax-fPhiMin);
144               p[0] = pmom*TMath::Cos(phi)*TMath::Sin(theta);
145               p[1] = pmom*TMath::Sin(phi)*TMath::Sin(theta);
146               p[2] = pmom*TMath::Cos(theta);
147               SetTrack(fTrackIt,-1,fIpart,p,origin,polar,0,kPPrimary,nt);
148           }
149       }
150   }
151 }
152
153
154
155
156
157
158
159
160
161
162
163
164