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

//
// Library of generators for PMD
// providing y and pt parametrisation
// for generated tracks
// Specific for PMD needs
// Author: PMD Offline Group
//

#include <TMath.h>
#include <TPDGCode.h>

#include "AliGenPMDlib.h"

ClassImp(AliGenPMDlib)
//
//  Neutral Pions

Double_t AliGenPMDlib::PtPi0(const Double_t *px, const Double_t */*dummy*/)
{
//
//     PT-PARAMETERIZATION CDF, PRL 61(88) 1819
//     POWER LAW FOR PT > 500 MEV
//     MT SCALING BELOW (T=160 MEV)
//
  const Double_t kp0 = 1.3;
  const Double_t kxn = 8.28;
  const Double_t kxlim=0.5;
  const Double_t kt=0.160;
  const Double_t kxmpi=0.139;
  const Double_t kb=1.;
  Double_t y, y1, xmpi2, ynorm, a;
  Double_t x=*px;
  //
  y1=TMath::Power(kp0/(kp0+kxlim),kxn);
  xmpi2=kxmpi*kxmpi;
  ynorm=kb*(TMath::Exp(-sqrt(kxlim*kxlim+xmpi2)/kt));
  a=ynorm/y1;
  if (x > kxlim)
    y=a*TMath::Power(kp0/(kp0+x),kxn);
  else
    y=kb*TMath::Exp(-sqrt(x*x+xmpi2)/kt);
  return y*x;
}

//
// y-distribution
//
Double_t AliGenPMDlib::YPi0( const Double_t *py, const Double_t */*dummy*/)
{
  //
  // y parametrisation for pi0
  //
    const Double_t ka1    = 4913.;
    const Double_t ka2    = 1819.;
    const Double_t keta1  = 0.22;
    const Double_t keta2  = 3.66;
    const Double_t kdeta1 = 1.47;
    const Double_t kdeta2 = 1.51;
    Double_t y=TMath::Abs(*py);
    //
    Double_t ex1 = (y-keta1)*(y-keta1)/(2*kdeta1*kdeta1);
    Double_t ex2 = (y-keta2)*(y-keta2)/(2*kdeta2*kdeta2);
    return ka1*TMath::Exp(-ex1)+ka2*TMath::Exp(-ex2);
}

//                 particle composition
//
Int_t AliGenPMDlib::IpPi0(TRandom *)
{
// Pi0
    return kPi0;
}

//____________________________________________________________
//
// Mt-scaling

Double_t AliGenPMDlib::PtScal(Double_t pt, Int_t np)
{
  //    SCALING EN MASSE PAR RAPPORT A PTPI
  //    MASS PI,K,ETA,RHO,OMEGA,ETA',PHI
  const Double_t khm[10] = {.13957,.493,.5488,.769,.7826,.958,1.02,0,0,0};
  //     VALUE MESON/PI AT 5 GEV
  const Double_t kfmax[10]={1.,0.3,0.55,1.0,1.0,1.0,1.0,0,0,0};
  Double_t f5=TMath::Power(((sqrt(100.018215)+2.)/(sqrt(100.+khm[np]*khm[np])+2.0)),12.3);
  Double_t fmax2=f5/kfmax[np];
  // PIONS
  Double_t ptpion=100.*PtPi0(&pt, (Double_t*) 0);
  Double_t fmtscal=TMath::Power(((sqrt(pt*pt+0.018215)+2.)/
				 (sqrt(pt*pt+khm[np]*khm[np])+2.0)),12.3)/ fmax2;
  return fmtscal*ptpion;
}
//
// kaon
//
//                pt-distribution
//____________________________________________________________

Double_t AliGenPMDlib::PtEta( const Double_t *px, const Double_t */*dummy*/)
{
// Kaon pT
  return PtScal(*px, 1);
}

// y-distribution
//____________________________________________________________
Double_t AliGenPMDlib::YEta( const Double_t *py, const Double_t */*dummy*/)
{
    //
    // y parametrisation for etas
    //
    const Double_t ka1    = 4913.;
    const Double_t ka2    = 1819.;
    const Double_t keta1  = 0.22;
    const Double_t keta2  = 3.66;
    const Double_t kdeta1 = 1.47;
    const Double_t kdeta2 = 1.51;
    Double_t y=TMath::Abs(*py);
    //
    Double_t ex1 = (y-keta1)*(y-keta1)/(2*kdeta1*kdeta1);
    Double_t ex2 = (y-keta2)*(y-keta2)/(2*kdeta2*kdeta2);
    return ka1*TMath::Exp(-ex1)+ka2*TMath::Exp(-ex2);
}

//                 particle composition
//
Int_t AliGenPMDlib::IpEta(TRandom *)
{
    return 221;
}


typedef Double_t (*GenFunc) (const Double_t*,  const Double_t*);
GenFunc AliGenPMDlib::GetPt(Int_t param,  const char* /*tname*/) const
{
// Return pointer to pT parameterisation
    GenFunc func=NULL;
    switch (param) 
    {
    case kPion:
	func=PtPi0;
	break;
    case kEta:
	func=PtEta;
	break;
    default:
        func=0;
        printf("<AliGenPMDlib::GetPt> unknown parametrisation\n");
    }
    return func;
}

GenFunc AliGenPMDlib::GetY(Int_t param, const char* /*tname*/) const
{
// Return pointer to y- parameterisation
    GenFunc func=NULL;
    switch (param) 
    {
    case kPion:
	func=YPi0;
	break;
    case kEta:
	func=YEta;
	break;
    default:
        func=0;
        printf("<AliGenPMDlib::GetY> unknown parametrisation\n");
    }
    return func;

}
typedef Int_t (*GenFuncIp) (TRandom *);
GenFuncIp AliGenPMDlib::GetIp(Int_t param,  const char* /*tname*/) const
{
// Return pointer to particle type parameterisation
    GenFuncIp func=NULL;
    switch (param) 
    {
    case kPion:
	func=IpPi0;
	break;
    case kEta:
	func=IpEta;
	break;
    default:
        printf("<AliGenPMDlib::GetIp> unknown parametrisation\n");
    }
    return func;
}




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