ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

/* $Id$ */

// Realisation of AliGenerator that generates particles with
// vertices on a user defined grid.
// The vertex positions can be smeared. 
// Momentum vectors are defined through the methods provided by AliGenerator.
// Author: andreas.morsch@cern.ch

#include "AliGenScan.h"

 ClassImp(AliGenScan)
    
 AliGenScan::AliGenScan()
     :AliGenerator(-1), 
      fXCmin(0),
      fXCmax(0),
      fNx(1),
      fYCmin(0),
      fYCmax(0),
      fNy(1),
      fZmin(0),
      fZmax(0),
      fNz(1),
      fIpart(0)
{
// Constructor
//
//  Read all particles
    fNpart=-1;
}

AliGenScan::AliGenScan(Int_t npart)
    :AliGenerator(npart), 
      fXCmin(0),
      fXCmax(0),
      fNx(1),
      fYCmin(0),
      fYCmax(0),
      fNy(1),
      fZmin(0),
      fZmax(0),
      fNz(1),
      fIpart(0)
{
// Constructor
    fName  = "Scan";
    fTitle = "Generator for particles on a grid";
}

//____________________________________________________________
AliGenScan::~AliGenScan()
{
// Destructor
}

void AliGenScan::SetRange(Int_t nx, Float_t xmin, Float_t xmax,
		     Int_t ny, Float_t ymin, Float_t ymax,
		     Int_t nz, Float_t zmin, Float_t zmax)
{
// Define the grid
    fXCmin=xmin;
    fXCmax=xmax;
    fNx=nx;
    fYCmin=ymin;
    fYCmax=ymax;
    fNy=ny;
    fZmin=zmin;
    fZmax=zmax;
    fNz=nz;
}

//____________________________________________________________
void AliGenScan::Generate()
{
  //
  // Generate one trigger
  //
  
  Float_t polar[3]= {0,0,0};
  //
  Float_t origin[3];
  Float_t p[3];
  Int_t nt;
  Float_t pmom, theta, phi;
  //
  Float_t random[6];
  Float_t dx,dy,dz;
  
  //
  if (fNx > 0) {
      dx=(fXCmax-fXCmin)/fNx;
  } else {
      dx=1e10;
  }

  if (fNy > 0) {
      dy=(fYCmax-fYCmin)/fNy;
  } else {
      dy=1e10;
  }

  if (fNz > 0) {
      dz=(fZmax-fZmin)/fNz;
  } else {
      dz=1e10;
  }
  for (Int_t ix=0; ix<fNx; ix++) {
      for (Int_t iy=0; iy<fNy; iy++) {
	  for (Int_t iz=0; iz<fNz; iz++){
	      Rndm(random,6);
	      origin[0]=fXCmin+ix*dx+2*(random[0]-0.5)*fOsigma[0];
	      origin[1]=fYCmin+iy*dy+2*(random[1]-0.5)*fOsigma[1];
	      origin[2]=fZmin+iz*dz+2*(random[2]-0.5)*fOsigma[2];	     
	      pmom=fPMin+random[3]*(fPMax-fPMin);
	      theta=fThetaMin+random[4]*(fThetaMax-fThetaMin);
	      phi=fPhiMin+random[5]*(fPhiMax-fPhiMin);
	      p[0] = pmom*TMath::Cos(phi)*TMath::Sin(theta);
	      p[1] = pmom*TMath::Sin(phi)*TMath::Sin(theta);
	      p[2] = pmom*TMath::Cos(theta);
	      PushTrack(fTrackIt,-1,fIpart,p,origin,polar,0,kPPrimary,nt);
	  }
      }
  }
}









 AliGenScan.cxx:1
 AliGenScan.cxx:2
 AliGenScan.cxx:3
 AliGenScan.cxx:4
 AliGenScan.cxx:5
 AliGenScan.cxx:6
 AliGenScan.cxx:7
 AliGenScan.cxx:8
 AliGenScan.cxx:9
 AliGenScan.cxx:10
 AliGenScan.cxx:11
 AliGenScan.cxx:12
 AliGenScan.cxx:13
 AliGenScan.cxx:14
 AliGenScan.cxx:15
 AliGenScan.cxx:16
 AliGenScan.cxx:17
 AliGenScan.cxx:18
 AliGenScan.cxx:19
 AliGenScan.cxx:20
 AliGenScan.cxx:21
 AliGenScan.cxx:22
 AliGenScan.cxx:23
 AliGenScan.cxx:24
 AliGenScan.cxx:25
 AliGenScan.cxx:26
 AliGenScan.cxx:27
 AliGenScan.cxx:28
 AliGenScan.cxx:29
 AliGenScan.cxx:30
 AliGenScan.cxx:31
 AliGenScan.cxx:32
 AliGenScan.cxx:33
 AliGenScan.cxx:34
 AliGenScan.cxx:35
 AliGenScan.cxx:36
 AliGenScan.cxx:37
 AliGenScan.cxx:38
 AliGenScan.cxx:39
 AliGenScan.cxx:40
 AliGenScan.cxx:41
 AliGenScan.cxx:42
 AliGenScan.cxx:43
 AliGenScan.cxx:44
 AliGenScan.cxx:45
 AliGenScan.cxx:46
 AliGenScan.cxx:47
 AliGenScan.cxx:48
 AliGenScan.cxx:49
 AliGenScan.cxx:50
 AliGenScan.cxx:51
 AliGenScan.cxx:52
 AliGenScan.cxx:53
 AliGenScan.cxx:54
 AliGenScan.cxx:55
 AliGenScan.cxx:56
 AliGenScan.cxx:57
 AliGenScan.cxx:58
 AliGenScan.cxx:59
 AliGenScan.cxx:60
 AliGenScan.cxx:61
 AliGenScan.cxx:62
 AliGenScan.cxx:63
 AliGenScan.cxx:64
 AliGenScan.cxx:65
 AliGenScan.cxx:66
 AliGenScan.cxx:67
 AliGenScan.cxx:68
 AliGenScan.cxx:69
 AliGenScan.cxx:70
 AliGenScan.cxx:71
 AliGenScan.cxx:72
 AliGenScan.cxx:73
 AliGenScan.cxx:74
 AliGenScan.cxx:75
 AliGenScan.cxx:76
 AliGenScan.cxx:77
 AliGenScan.cxx:78
 AliGenScan.cxx:79
 AliGenScan.cxx:80
 AliGenScan.cxx:81
 AliGenScan.cxx:82
 AliGenScan.cxx:83
 AliGenScan.cxx:84
 AliGenScan.cxx:85
 AliGenScan.cxx:86
 AliGenScan.cxx:87
 AliGenScan.cxx:88
 AliGenScan.cxx:89
 AliGenScan.cxx:90
 AliGenScan.cxx:91
 AliGenScan.cxx:92
 AliGenScan.cxx:93
 AliGenScan.cxx:94
 AliGenScan.cxx:95
 AliGenScan.cxx:96
 AliGenScan.cxx:97
 AliGenScan.cxx:98
 AliGenScan.cxx:99
 AliGenScan.cxx:100
 AliGenScan.cxx:101
 AliGenScan.cxx:102
 AliGenScan.cxx:103
 AliGenScan.cxx:104
 AliGenScan.cxx:105
 AliGenScan.cxx:106
 AliGenScan.cxx:107
 AliGenScan.cxx:108
 AliGenScan.cxx:109
 AliGenScan.cxx:110
 AliGenScan.cxx:111
 AliGenScan.cxx:112
 AliGenScan.cxx:113
 AliGenScan.cxx:114
 AliGenScan.cxx:115
 AliGenScan.cxx:116
 AliGenScan.cxx:117
 AliGenScan.cxx:118
 AliGenScan.cxx:119
 AliGenScan.cxx:120
 AliGenScan.cxx:121
 AliGenScan.cxx:122
 AliGenScan.cxx:123
 AliGenScan.cxx:124
 AliGenScan.cxx:125
 AliGenScan.cxx:126
 AliGenScan.cxx:127
 AliGenScan.cxx:128
 AliGenScan.cxx:129
 AliGenScan.cxx:130
 AliGenScan.cxx:131
 AliGenScan.cxx:132
 AliGenScan.cxx:133
 AliGenScan.cxx:134
 AliGenScan.cxx:135
 AliGenScan.cxx:136
 AliGenScan.cxx:137
 AliGenScan.cxx:138
 AliGenScan.cxx:139
 AliGenScan.cxx:140
 AliGenScan.cxx:141
 AliGenScan.cxx:142
 AliGenScan.cxx:143
 AliGenScan.cxx:144
 AliGenScan.cxx:145
 AliGenScan.cxx:146
 AliGenScan.cxx:147
 AliGenScan.cxx:148