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$ */

// As AliGenScan,  generation of particles on a 3-dim grid
// but here double hits with a predefined distance are generated.
// The second particle is generated at a constant distance but with random phi.
// Generator can be used to evaluate double hit resolutions.
// Author: andreas.morsch@cern.ch

#include "AliGenDoubleScan.h"
#include "AliRun.h"

 ClassImp(AliGenDoubleScan)
    
 AliGenDoubleScan::AliGenDoubleScan()
     :AliGenScan(-1),
      fDistance(0.)
{
    // Default constructor
}

AliGenDoubleScan::AliGenDoubleScan(Int_t npart)
    :AliGenScan(npart),
     fDistance(0.)
{
// Constructor
    fName = "Double Scan";
    fTitle= "Particle Generator for two correlated particles on a grid";
}

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

//____________________________________________________________
void AliGenDoubleScan::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);
//
// Generate 2nd particle at distance fDistance from  the first
//
	      Rndm(random,6);
	      Float_t phi2=2.*TMath::Pi()*random[0];
	      Float_t dx2  =fDistance*TMath::Sin(phi2);
	      Float_t dy2  =fDistance*TMath::Cos(phi2);	      
	      origin[0]=origin[0]+dx2;
	      origin[1]=origin[1]+dy2;	      
	      pmom=fPMin+random[1]*(fPMax-fPMin);
	      theta=fThetaMin+random[2]*(fThetaMax-fThetaMin);
	      phi=fPhiMin+random[3]*(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);
	  }
      }
  }
}













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