Add const to SolenoidField() method for correct overwriting from the parent class
[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  2002/02/08 16:50:50  morsch
19 Add name and title in constructor.
20
21 Revision 1.7  2001/07/27 17:09:35  morsch
22 Use local SetTrack, KeepTrack and SetHighWaterMark methods
23 to delegate either to local stack or to stack owned by AliRun.
24 (Piotr Skowronski, A.M.)
25
26 Revision 1.6  2000/12/21 16:24:06  morsch
27 Coding convention clean-up
28
29 Revision 1.5  2000/12/06 15:11:38  morsch
30 Correct double declared data members.
31
32 Revision 1.4  2000/11/30 07:12:50  alibrary
33 Introducing new Rndm and QA classes
34
35 Revision 1.3  2000/10/02 21:28:06  fca
36 Removal of useless dependecies via forward declarations
37
38 Revision 1.2  2000/06/09 20:37:51  morsch
39 All coding rule violations except RS3 corrected
40
41 Revision 1.1  2000/02/23 16:25:14  morsch
42 First commit of this file
43
44 */
45
46 // As AliGenScan,  generation of particles on a 3-dim grid
47 // but here double hits with a predefined distance are generated.
48 // The second particle is generated at a constant distance but with random phi.
49 // Generator can be used to evaluate double hit resolutions.
50 // Author: andreas.morsch@cern.ch
51
52 #include "AliGenDoubleScan.h"
53 #include "AliRun.h"
54
55  ClassImp(AliGenDoubleScan)
56     
57  AliGenDoubleScan::AliGenDoubleScan()
58          :AliGenScan(-1)
59 {
60 }
61
62 AliGenDoubleScan::AliGenDoubleScan(Int_t npart)
63     :AliGenScan(npart)
64 {
65 // Constructor
66     fName = "Double Scan";
67     fTitle= "Particle Generator for two correlated particles on a grid";
68 }
69
70 //____________________________________________________________
71 AliGenDoubleScan::~AliGenDoubleScan()
72 {
73 // Destructor
74 }
75
76 //____________________________________________________________
77 void AliGenDoubleScan::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 (fNx > 0) {
95         dx=(fXCmax-fXCmin)/fNx;
96     } else {
97         dx=1e10;
98     }
99
100     if (fNy > 0) {
101         dy=(fYCmax-fYCmin)/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               Rndm(random,6);
115               origin[0]=fXCmin+ix*dx+2*(random[0]-0.5)*fOsigma[0];
116               origin[1]=fYCmin+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               SetTrack(fTrackIt,-1,fIpart,p,origin,polar,0,kPPrimary,nt);
125 //
126 // Generate 2nd particle at distance fDistance from  the first
127 //
128               Rndm(random,6);
129               Float_t phi2=2.*TMath::Pi()*random[0];
130               Float_t dx  =fDistance*TMath::Sin(phi2);
131               Float_t dy  =fDistance*TMath::Cos(phi2);        
132               origin[0]=origin[0]+dx;
133               origin[1]=origin[1]+dy;         
134               pmom=fPMin+random[1]*(fPMax-fPMin);
135               theta=fThetaMin+random[2]*(fThetaMax-fThetaMin);
136               phi=fPhiMin+random[3]*(fPhiMax-fPhiMin);
137               p[0] = pmom*TMath::Cos(phi)*TMath::Sin(theta);
138               p[1] = pmom*TMath::Sin(phi)*TMath::Sin(theta);
139               p[2] = pmom*TMath::Cos(theta);
140               SetTrack(fTrackIt,-1,fIpart,p,origin,polar,0,kPPrimary,nt);
141           }
142       }
143   }
144 }
145
146
147
148
149
150
151
152
153
154
155
156
157