]> git.uio.no Git - u/mrichter/AliRoot.git/blob - EVGEN/AliGenDoubleScan.cxx
c554d72263b8cf5f281a23cc5c59b2adf1d1ba29
[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.1  2000/02/23 16:25:14  morsch
19 First commit of this file
20
21 */
22
23 #include "AliGenDoubleScan.h"
24 #include "AliRun.h"
25
26  ClassImp(AliGenDoubleScan)
27     
28  AliGenDoubleScan::AliGenDoubleScan()
29          :AliGenScan(-1)
30 {
31 }
32
33 AliGenDoubleScan::AliGenDoubleScan(Int_t npart)
34     :AliGenScan(npart)
35 {
36 // Constructor
37 }
38
39 //____________________________________________________________
40 AliGenDoubleScan::~AliGenDoubleScan()
41 {
42 // Destructor
43 }
44
45 //____________________________________________________________
46 void AliGenDoubleScan::Generate()
47 {
48     //
49     // Generate one trigger
50     //
51   
52     Float_t polar[3]= {0,0,0};
53     //
54     Float_t origin[3];
55     Float_t p[3];
56     Int_t nt;
57     Float_t pmom, theta, phi;
58     //
59     Float_t random[6];
60     Float_t dx,dy,dz;
61     
62     //
63     if (fNy > 0) {
64         dx=(fXmax-fXmin)/fNx;
65     } else {
66         dx=1e10;
67     }
68
69     if (fNy > 0) {
70         dy=(fYmax-fYmin)/fNy;
71     } else {
72         dy=1e10;
73     }
74     
75     if (fNz > 0) {
76       dz=(fZmax-fZmin)/fNz;
77     } else {
78         dz=1e10;
79     }
80     for (Int_t ix=0; ix<fNx; ix++) {
81       for (Int_t iy=0; iy<fNy; iy++) {
82           for (Int_t iz=0; iz<fNz; iz++){
83               gMC->Rndm(random,6);
84               origin[0]=fXmin+ix*dx+2*(random[0]-0.5)*fOsigma[0];
85               origin[1]=fYmin+iy*dy+2*(random[1]-0.5)*fOsigma[1];
86               origin[2]=fZmin+iz*dz+2*(random[2]-0.5)*fOsigma[2];            
87               pmom=fPMin+random[3]*(fPMax-fPMin);
88               theta=fThetaMin+random[4]*(fThetaMax-fThetaMin);
89               phi=fPhiMin+random[5]*(fPhiMax-fPhiMin);
90               p[0] = pmom*TMath::Cos(phi)*TMath::Sin(theta);
91               p[1] = pmom*TMath::Sin(phi)*TMath::Sin(theta);
92               p[2] = pmom*TMath::Cos(theta);
93               gAlice->SetTrack(fTrackIt,-1,fIpart,p,origin,polar,0,"Primary",nt);
94 //
95 // Generate 2nd particle at distance fDistance from  the first
96 //
97               gMC->Rndm(random,6);
98               Float_t phi2=2.*TMath::Pi()*random[0];
99               Float_t dx  =fDistance*TMath::Sin(phi2);
100               Float_t dy  =fDistance*TMath::Cos(phi2);        
101               origin[0]=origin[0]+dx;
102               origin[1]=origin[1]+dy;         
103               pmom=fPMin+random[1]*(fPMax-fPMin);
104               theta=fThetaMin+random[2]*(fThetaMax-fThetaMin);
105               phi=fPhiMin+random[3]*(fPhiMax-fPhiMin);
106               p[0] = pmom*TMath::Cos(phi)*TMath::Sin(theta);
107               p[1] = pmom*TMath::Sin(phi)*TMath::Sin(theta);
108               p[2] = pmom*TMath::Cos(theta);
109               gAlice->SetTrack(fTrackIt,-1,fIpart,p,origin,polar,0,"Primary",nt);
110           }
111       }
112   }
113 }
114
115
116
117
118
119
120
121
122
123
124
125
126