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