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 : // 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 6 : ClassImp(AliGenDoubleScan)
28 :
29 : AliGenDoubleScan::AliGenDoubleScan()
30 0 : :AliGenScan(-1),
31 0 : fDistance(0.)
32 0 : {
33 : // Default constructor
34 0 : }
35 :
36 : AliGenDoubleScan::AliGenDoubleScan(Int_t npart)
37 0 : :AliGenScan(npart),
38 0 : fDistance(0.)
39 0 : {
40 : // Constructor
41 0 : fName = "Double Scan";
42 0 : fTitle= "Particle Generator for two correlated particles on a grid";
43 0 : }
44 :
45 : //____________________________________________________________
46 0 : AliGenDoubleScan::~AliGenDoubleScan()
47 0 : {
48 : // Destructor
49 0 : }
50 :
51 : //____________________________________________________________
52 : void AliGenDoubleScan::Generate()
53 : {
54 : //
55 : // Generate one trigger
56 : //
57 :
58 0 : Float_t polar[3]= {0,0,0};
59 : //
60 0 : Float_t origin[3];
61 0 : Float_t p[3];
62 0 : Int_t nt;
63 : Float_t pmom, theta, phi;
64 : //
65 0 : Float_t random[6];
66 : Float_t dx,dy,dz;
67 :
68 : //
69 0 : if (fNx > 0) {
70 0 : dx=(fXCmax-fXCmin)/fNx;
71 0 : } else {
72 : dx=1e10;
73 : }
74 :
75 0 : if (fNy > 0) {
76 0 : dy=(fYCmax-fYCmin)/fNy;
77 0 : } else {
78 : dy=1e10;
79 : }
80 :
81 0 : if (fNz > 0) {
82 0 : dz=(fZmax-fZmin)/fNz;
83 0 : } else {
84 : dz=1e10;
85 : }
86 0 : for (Int_t ix=0; ix<fNx; ix++) {
87 0 : for (Int_t iy=0; iy<fNy; iy++) {
88 0 : for (Int_t iz=0; iz<fNz; iz++){
89 0 : Rndm(random,6);
90 0 : origin[0]=fXCmin+ix*dx+2*(random[0]-0.5)*fOsigma[0];
91 0 : origin[1]=fYCmin+iy*dy+2*(random[1]-0.5)*fOsigma[1];
92 0 : origin[2]=fZmin+iz*dz+2*(random[2]-0.5)*fOsigma[2];
93 0 : pmom=fPMin+random[3]*(fPMax-fPMin);
94 0 : theta=fThetaMin+random[4]*(fThetaMax-fThetaMin);
95 0 : phi=fPhiMin+random[5]*(fPhiMax-fPhiMin);
96 0 : p[0] = pmom*TMath::Cos(phi)*TMath::Sin(theta);
97 0 : p[1] = pmom*TMath::Sin(phi)*TMath::Sin(theta);
98 0 : p[2] = pmom*TMath::Cos(theta);
99 0 : PushTrack(fTrackIt,-1,fIpart,p,origin,polar,0,kPPrimary,nt);
100 : //
101 : // Generate 2nd particle at distance fDistance from the first
102 : //
103 0 : Rndm(random,6);
104 0 : Float_t phi2=2.*TMath::Pi()*random[0];
105 0 : Float_t dx2 =fDistance*TMath::Sin(phi2);
106 0 : Float_t dy2 =fDistance*TMath::Cos(phi2);
107 0 : origin[0]=origin[0]+dx2;
108 0 : origin[1]=origin[1]+dy2;
109 0 : pmom=fPMin+random[1]*(fPMax-fPMin);
110 0 : theta=fThetaMin+random[2]*(fThetaMax-fThetaMin);
111 0 : phi=fPhiMin+random[3]*(fPhiMax-fPhiMin);
112 0 : p[0] = pmom*TMath::Cos(phi)*TMath::Sin(theta);
113 0 : p[1] = pmom*TMath::Sin(phi)*TMath::Sin(theta);
114 0 : p[2] = pmom*TMath::Cos(theta);
115 0 : PushTrack(fTrackIt,-1,fIpart,p,origin,polar,0,kPPrimary,nt);
116 : }
117 : }
118 : }
119 0 : }
120 :
121 :
122 :
123 :
124 :
125 :
126 :
127 :
128 :
129 :
130 :
131 :
132 :
|