]> git.uio.no Git - u/mrichter/AliRoot.git/blob - EVGEN/AliGenDoubleScan.cxx
Coding Rule violations corrected.
[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 /* $Id$ */
17
18 // As AliGenScan,  generation of particles on a 3-dim grid
19 // but here double hits with a predefined distance are generated.
20 // The second particle is generated at a constant distance but with random phi.
21 // Generator can be used to evaluate double hit resolutions.
22 // Author: andreas.morsch@cern.ch
23
24 #include "AliGenDoubleScan.h"
25 #include "AliRun.h"
26
27  ClassImp(AliGenDoubleScan)
28     
29  AliGenDoubleScan::AliGenDoubleScan()
30          :AliGenScan(-1)
31 {
32 }
33
34 AliGenDoubleScan::AliGenDoubleScan(Int_t npart)
35     :AliGenScan(npart)
36 {
37 // Constructor
38     fName = "Double Scan";
39     fTitle= "Particle Generator for two correlated particles on a grid";
40 }
41
42 //____________________________________________________________
43 AliGenDoubleScan::~AliGenDoubleScan()
44 {
45 // Destructor
46 }
47
48 //____________________________________________________________
49 void AliGenDoubleScan::Generate()
50 {
51     //
52     // Generate one trigger
53     //
54   
55     Float_t polar[3]= {0,0,0};
56     //
57     Float_t origin[3];
58     Float_t p[3];
59     Int_t nt;
60     Float_t pmom, theta, phi;
61     //
62     Float_t random[6];
63     Float_t dx,dy,dz;
64     
65     //
66     if (fNx > 0) {
67         dx=(fXCmax-fXCmin)/fNx;
68     } else {
69         dx=1e10;
70     }
71
72     if (fNy > 0) {
73         dy=(fYCmax-fYCmin)/fNy;
74     } else {
75         dy=1e10;
76     }
77     
78     if (fNz > 0) {
79       dz=(fZmax-fZmin)/fNz;
80     } else {
81         dz=1e10;
82     }
83     for (Int_t ix=0; ix<fNx; ix++) {
84       for (Int_t iy=0; iy<fNy; iy++) {
85           for (Int_t iz=0; iz<fNz; iz++){
86               Rndm(random,6);
87               origin[0]=fXCmin+ix*dx+2*(random[0]-0.5)*fOsigma[0];
88               origin[1]=fYCmin+iy*dy+2*(random[1]-0.5)*fOsigma[1];
89               origin[2]=fZmin+iz*dz+2*(random[2]-0.5)*fOsigma[2];            
90               pmom=fPMin+random[3]*(fPMax-fPMin);
91               theta=fThetaMin+random[4]*(fThetaMax-fThetaMin);
92               phi=fPhiMin+random[5]*(fPhiMax-fPhiMin);
93               p[0] = pmom*TMath::Cos(phi)*TMath::Sin(theta);
94               p[1] = pmom*TMath::Sin(phi)*TMath::Sin(theta);
95               p[2] = pmom*TMath::Cos(theta);
96               PushTrack(fTrackIt,-1,fIpart,p,origin,polar,0,kPPrimary,nt);
97 //
98 // Generate 2nd particle at distance fDistance from  the first
99 //
100               Rndm(random,6);
101               Float_t phi2=2.*TMath::Pi()*random[0];
102               Float_t dx  =fDistance*TMath::Sin(phi2);
103               Float_t dy  =fDistance*TMath::Cos(phi2);        
104               origin[0]=origin[0]+dx;
105               origin[1]=origin[1]+dy;         
106               pmom=fPMin+random[1]*(fPMax-fPMin);
107               theta=fThetaMin+random[2]*(fThetaMax-fThetaMin);
108               phi=fPhiMin+random[3]*(fPhiMax-fPhiMin);
109               p[0] = pmom*TMath::Cos(phi)*TMath::Sin(theta);
110               p[1] = pmom*TMath::Sin(phi)*TMath::Sin(theta);
111               p[2] = pmom*TMath::Cos(theta);
112               PushTrack(fTrackIt,-1,fIpart,p,origin,polar,0,kPPrimary,nt);
113           }
114       }
115   }
116 }
117
118
119
120
121
122
123
124
125
126
127
128
129