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


// Library class for particle pt and y distributions used for 
// ITS Upgrade related signal simulations.
//
// Author: Annalisa Mastroserio <Annalisa.Mastroserio@cern.ch>
//

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

#include "AliGenITSULib.h"
#include "AliLog.h"

ClassImp(AliGenITSULib)

 typedef Double_t (*GenFunc)   (const Double_t*,  const Double_t*);
 typedef Int_t    (*GenFuncIp) (TRandom *);


Double_t AliGenITSULib::PtLcDist( const Double_t *x, const Double_t *)
{
 //     pt-distribution
 // same shape as the Lb pt distribution for high pt were overestimated. The Lb fitting funcion has been
 // used from 3.5 GeV/c on. At smaller Pt, the shape is likely as  sqrt(x)*exp(-x) 
 Double_t par[6]={2.781336,1.353902,4.634330,(145479448.743187/202262270.892062),1.789479,-1.329143}; 
 Double_t y=0;
 if(x[0]<3.5) y= par[3]*(TMath::Power(x[0],par[4]))*TMath::Exp(x[0]*par[5]);
 else y= x[0]/TMath::Power((1+TMath::Power(x[0]/par[0],par[1])),par[2]);
 return y;
}


Double_t AliGenITSULib::PtLbDist( const Double_t *x, const Double_t *)
{
 //     pt-distribution (fitted in 0-30 GeV/c)
 Double_t par[4]={3.42500e-03,6.18902,1.76908,3.24823};
 return par[0]*x[0]/TMath::Power((1+TMath::Power(x[0]/par[1],par[2])),par[3]);
}

GenFunc AliGenITSULib::GetPt(Int_t iPID, const char * sForm) const
{
 // Return pointer to Pt parameterisation
 AliDebug(1,Form("PID: %i, form: %s \n",iPID,sForm));	
 TString type(sForm);
 GenFunc func;

 if(type=="FLAT") {
  func=PtFlat;
 } else if(type=="DIST") {

  switch(TMath::Abs(iPID)) {

   case kLb    :    func=PtLbDist; break;  
   case kLc    :    func=PtLcDist; break;  
   case kXi_c  :    func=PtLcDist; break;
   case kBplus :    func=PtLbDist; break;
   case kBzero :    func=PtLbDist; break;
   case kDs    :    func=PtLcDist; break;
   case kDplus :    func=PtLcDist; break;
   default : AliError(Form("Unknown particle type: %i, Pt dist is 0",iPID));      func=0;
  } 
 }else {
  AliError(Form("Unknown Pt distribution %s. Pt distribution is set to 0 ",sForm));
  func=0;
 }

 return func;
}

GenFunc AliGenITSULib::GetY(Int_t iPID, const char *sForm) const
{
 GenFunc func;

 if(TMath::Abs(iPID) != kLc && TMath::Abs(iPID) != kLb && TMath::Abs(iPID) != kXi_c && TMath::Abs(iPID) != kBplus && TMath::Abs(iPID) != kBzero && TMath::Abs(iPID)!=kDplus && TMath::Abs(iPID)!=kDs) {
  AliError(Form("Unknown PID: %i, form: %s, returning 0",iPID,sForm));   //////////	
  func=0;
 } else { 
  func = YFlat;
 }
 return func;
}

GenFuncIp AliGenITSULib::GetIp(Int_t iPID, const char *sForm) const
{
 AliDebug(1,Form(" %i - %s",iPID,sForm));
 // Return pointer to particle type parameterisation
 GenFuncIp id;

 if(TMath::Abs(iPID) != kLc && TMath::Abs(iPID) != kLb && TMath::Abs(iPID) != kXi_c && TMath::Abs(iPID) != kBplus && TMath::Abs(iPID) != kBzero && TMath::Abs(iPID)!=kDplus && TMath::Abs(iPID)!=kDs) {
  AliError(Form("Unknown PID: %i, form: %s, return 0",iPID,sForm));   //////////	
  id = 0;
 } else {
  switch (iPID){
   case kLc    :                                  return id=IpLcPlus;
   case -kLc   :                                  return id=IpLcMinus;
   case kLb    :                                  return id=IpLb;
   case -kLb   :                                  return id=IpLbBar;
   case kXi_c  :                                  return id=IpXic;
   case -kXi_c :                                  return id=IpXicBar;
   case kBplus :                                  return id=IpBPlus;
   case kBzero :                                  return id=IpB0;
   case -kBzero:                                  return id=IpB0Bar;
   case -kBplus:                                  return id=IpBMinus;
   case kDs    :                                  return id=IpDsPlus;
   case -kDs   :                                  return id=IpDsMinus;
   case kDplus :                                  return id=IpDPlus;
   case -kDplus:                                  return id=IpDMinus;
   default  : AliFatal(Form("Unknown particle type: %i",iPID));  id=0;
  }

 }

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