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