ROOT logo
/**************************************************************************
 * Copyright(c) 1998-2007, 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.                  *
 **************************************************************************/

//-----------------------------------------------------------------------
// Particle generator according to 4 correlated variables : here
// z, ptot, r, theta. The input is a THnSparse object included in
// the root file (path and name to be set via the SetTHnSparse method).
// This class is similar to AliGenFunction.
//-----------------------------------------------------------------------
// Author : X. Lopez - LPC Clermont (fr)
//-----------------------------------------------------------------------
/*
  Example for generation :
  	AliGenTHnSparse *gener = new AliGenTHnSparse();
	gener->SetNumberParticles(10);
	gener->SetPart(13,kTRUE); // for generating id 13 and -13
	gener->SetThnSparse("file_name","thn_name");
	gener->Init();
*/

#include <TRandom.h>
#include <TFile.h>
#include "THnSparse.h"

#include "AliGenTHnSparse.h"

// NEW
#include "AliRun.h"
#include "AliLog.h"
#include "AliGenEventHeader.h"
//

ClassImp(AliGenTHnSparse)

//_______________________________________________________________________
AliGenTHnSparse::AliGenTHnSparse():
  AliGenerator(),
  fHn(0),
  fFile(0),
  fIpart(0),
  fBoth(kFALSE)
{
    // Default constructor
    SetNumberParticles(1);
}

//_______________________________________________________________________
AliGenTHnSparse::AliGenTHnSparse(const AliGenTHnSparse& func):
  AliGenerator(),
  fHn(func.fHn),
  fFile(func.fFile),
  fIpart(func.fIpart),
  fBoth(func.fBoth)
{
    // Copy constructor
    SetNumberParticles(1);
}

//_______________________________________________________________________
AliGenTHnSparse & AliGenTHnSparse::operator=(const AliGenTHnSparse& func)
{
    // Assigment operator
    if(&func == this) return *this;
    fHn  = func.fHn;
    fFile  = func.fFile;
    fIpart  = func.fIpart;
    fBoth   = func.fBoth;
    
    return *this;
}

//_______________________________________________________________________
AliGenTHnSparse::~AliGenTHnSparse()
{
    // Destructor
    delete fFile;
}

//_______________________________________________________________________
void AliGenTHnSparse::Generate()
{
    // Generate Npart of id Ipart
    Int_t naccepted =0;
    
    Double_t rand[4]; //  z, ptot, r, theta
    Float_t pos[3], phi, ptot, theta, pt, z, r;
    Float_t mom[3];
    Int_t pdg = fIpart;
  
    for (Int_t ipart = 0; ipart < fNpart && naccepted<fNpart; ipart++) {

	fHn->GetRandom(rand);
	z=rand[0];
	ptot=rand[1];
	r=rand[2];
	theta=rand[3];

// Phi: same for position and momemtum
 
	phi=(-180+gRandom->Rndm()*360)*TMath::Pi()/180;

// position at production
	
	pos[0] = r*TMath::Cos(phi);
	pos[1] = r*TMath::Sin(phi);
	pos[2] = z;
	
// momentum at production

	pt     = ptot*TMath::Sin(theta);
	mom[0] = pt*TMath::Cos(phi); 
	mom[1] = pt*TMath::Sin(phi); 
	mom[2] = ptot*TMath::Cos(theta);

// propagation

	Float_t polarization[3] = {0,0,0};
	Int_t nt;

// Part and anti-part

	if(fBoth){
	    Double_t sign = gRandom->Rndm();
	    if(sign < 0.5) pdg = -fIpart;
	    else pdg = fIpart;
	}

	PushTrack(fTrackIt,-1,pdg,mom, pos, polarization,0,kPPrimary,nt);
	naccepted++;
  }

    AliGenEventHeader* header = new AliGenEventHeader("THn");
    gAlice->SetGenEventHeader(header);
    return;

}

//_______________________________________________________________________
void AliGenTHnSparse::Init()
{
    
    // Initialisation, check consistency of selected file
    printf("************ AliGenTHnSparse ****************\n");
    printf("*********************************************\n");
    if (!fHn){
	AliFatal("THnSparse file not specified");
    }

    return;
}

//_______________________________________________________________________
void AliGenTHnSparse::SetThnSparse(char *file_name, char *thn_name)
{

    // Open the file and get object
  fFile = new TFile(file_name);
  fHn = (THnSparseF*)(fFile->Get(thn_name));

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