ROOT logo
#ifndef ALIITSPIDPARAMS_H
#define ALIITSPIDPARAMS_H
/* Copyright(c) 2007-2009, ALICE Experiment at CERN, All rights reserved. *
 * See cxx source for full Copyright notice                               */

/* $Id: $ */

///////////////////////////////////////////////////////////////////
//                                                               //
// Class to store parameters of ITS response functions           //
// Origin: F.Prino, Torino, prino@to.infn.it                     //
//                                                               //
///////////////////////////////////////////////////////////////////

#include <TFormula.h>
#include <TNamed.h>
#include "AliPID.h"

class AliITSPidParams : public TNamed {

 public:
  AliITSPidParams(Bool_t isMC = kFALSE);
  AliITSPidParams(Char_t * name, Bool_t isMC = kFALSE);
  ~AliITSPidParams();
  
  void InitMC();
  void InitData();
  Double_t GetLandauGausNormPdgCode(Double_t dedx, Int_t pdgCode, Double_t mom, Int_t lay) const;
  Double_t GetLandauGausNorm(Double_t dedx, Int_t partType, Double_t mom, Int_t lay) const;
  
  // electron setters
  void SetSDDElecMPVparams(const Double_t* params){
    for(Int_t ipar=0; ipar<5; ipar++) fSDDElecMPVBetheParams[ipar]=params[ipar];
  }  
  void SetSSDElecMPVparams(const Double_t* params){
    for(Int_t ipar=0; ipar<5; ipar++) fSSDElecMPVBetheParams[ipar]=params[ipar];
  }
  void SetSDDElecLandauWidth(const TFormula* form){
    if(fSDDElecLandauWidth) delete fSDDElecLandauWidth;
    fSDDElecLandauWidth=new TFormula(*form);
  }
  void SetSDDElecGaussWidth(const TFormula* form){
    if(fSDDElecGaussWidth) delete fSDDElecGaussWidth;
    fSDDElecGaussWidth=new TFormula(*form);
  } 
  void SetSSDElecLandauWidth(const TFormula* form){
    if(fSSDElecLandauWidth) delete fSSDElecLandauWidth;
    fSSDElecLandauWidth=new TFormula(*form);
  }
  void SetSSDElecGaussWidth(const TFormula* form){
    if(fSSDElecGaussWidth) delete fSSDElecGaussWidth;
    fSSDElecGaussWidth=new TFormula(*form);
  }

  //Hadron setters
  void SetSDDHadronMPVparams(const Double_t* params){
    for(Int_t ipar=0; ipar<5; ipar++) fSDDHadronMPVBetheParams[ipar]=params[ipar];
  }  
  void SetSSDHadronMPVparams(const Double_t* params){
    for(Int_t ipar=0; ipar<5; ipar++) fSSDHadronMPVBetheParams[ipar]=params[ipar];
  }
  
  //Pion setters
  void SetSDDPionLandauWidth(const TFormula* form){
    if(fSDDPionLandauWidth) delete fSDDPionLandauWidth;
    fSDDPionLandauWidth=new TFormula(*form);
  }
  void SetSDDPionGaussWidth(const TFormula* form){
    if(fSDDPionGaussWidth) delete fSDDPionGaussWidth;
    fSDDPionGaussWidth=new TFormula(*form);
  } 
  void SetSSDPionLandauWidth(const TFormula* form){
    if(fSSDPionLandauWidth) delete fSSDPionLandauWidth;
    fSSDPionLandauWidth=new TFormula(*form);
  }
  void SetSSDPionGaussWidth(const TFormula* form){
    if(fSSDPionGaussWidth) delete fSSDPionGaussWidth;
    fSSDPionGaussWidth=new TFormula(*form);
  }

  // kaon setters
  void SetSDDKaonLandauWidth(const TFormula* form){
    if(fSDDKaonLandauWidth) delete fSDDKaonLandauWidth;
    fSDDKaonLandauWidth=new TFormula(*form);
  }
  void SetSDDKaonGaussWidth(const TFormula* form){
    if(fSDDKaonGaussWidth) delete fSDDKaonGaussWidth;
    fSDDKaonGaussWidth=new TFormula(*form);
  }
  void SetSSDKaonLandauWidth(const TFormula* form){
    if(fSSDKaonLandauWidth) delete fSSDKaonLandauWidth;
    fSSDKaonLandauWidth=new TFormula(*form);
  }
  void SetSSDKaonGaussWidth(const TFormula* form){
    if(fSSDKaonGaussWidth) delete fSSDKaonGaussWidth;
    fSSDKaonGaussWidth=new TFormula(*form);
  }

  // proton setters
  void SetSDDProtLandauWidth(const TFormula* form){
    if(fSDDProtLandauWidth) delete fSDDProtLandauWidth;
    fSDDProtLandauWidth=new TFormula(*form);
  }
  void SetSDDProtGaussWidth(const TFormula* form){
    if(fSDDProtGaussWidth) delete fSDDProtGaussWidth;
    fSDDProtGaussWidth=new TFormula(*form);
  }
  void SetSSDProtLandauWidth(const TFormula* form){
    if(fSSDProtLandauWidth) delete fSSDProtLandauWidth;
    fSSDProtLandauWidth=new TFormula(*form);
  }
  void SetSSDProtGaussWidth(const TFormula* form){
    if(fSSDProtGaussWidth) delete fSSDProtGaussWidth;
    fSSDProtGaussWidth=new TFormula(*form);
  }

  // electron getters
  Double_t GetSDDElecMPV(Double_t mom) const {
    Double_t mass = AliPID::ParticleMass(AliPID::kElectron);
    return BetheBloch(mom,mass,fSDDElecMPVBetheParams);
  }
  Double_t GetSDDElecLandauWidth(Double_t mom) const {
    return fSDDElecLandauWidth->Eval(mom);
  }
  Double_t GetSDDElecGaussWidth(Double_t mom) const {
    return fSDDElecGaussWidth->Eval(mom);
  }
  Double_t GetSSDElecMPV(Double_t mom) const {
    Double_t mass = AliPID::ParticleMass(AliPID::kElectron);
    return BetheBloch(mom,mass,fSSDElecMPVBetheParams);
  }
  Double_t GetSSDElecLandauWidth(Double_t mom) const {
    return fSSDElecLandauWidth->Eval(mom);
  }
  Double_t GetSSDElecGaussWidth(Double_t mom) const {
    return fSSDElecGaussWidth->Eval(mom);
  }

  // pion getters
  Double_t GetSDDPionMPV(Double_t mom) const {
    Double_t mass = AliPID::ParticleMass(AliPID::kPion);
    return BetheBloch(mom,mass,fSDDHadronMPVBetheParams);
  }
  Double_t GetSDDPionLandauWidth(Double_t mom) const {
    return fSDDPionLandauWidth->Eval(mom);
  }
  Double_t GetSDDPionGaussWidth(Double_t mom) const {
    return fSDDPionGaussWidth->Eval(mom);
  }
  Double_t GetSSDPionMPV(Double_t mom) const {
    Double_t mass = AliPID::ParticleMass(AliPID::kPion);
    return BetheBloch(mom,mass,fSSDHadronMPVBetheParams);
  }
  Double_t GetSSDPionLandauWidth(Double_t mom) const {
    return fSSDPionLandauWidth->Eval(mom);
  }
  Double_t GetSSDPionGaussWidth(Double_t mom) const {
    return fSSDPionGaussWidth->Eval(mom);
  }

  // kaon getters
  Double_t GetSDDKaonMPV(Double_t mom) const {
    Double_t mass = AliPID::ParticleMass(AliPID::kKaon);
    return BetheBloch(mom,mass,fSDDHadronMPVBetheParams);
  }
  Double_t GetSDDKaonLandauWidth(Double_t mom) const {
    Double_t xmin = 0.2;
    mom = (mom > xmin) ? mom : xmin;
    return fSDDKaonLandauWidth->Eval(mom);
  }
  Double_t GetSDDKaonGaussWidth(Double_t mom) const {
    Double_t xmin = 0.2;
    mom = (mom > xmin) ? mom : xmin;
    return fSDDKaonGaussWidth->Eval(mom);
  }
  Double_t GetSSDKaonMPV(Double_t mom) const {
    Double_t mass = AliPID::ParticleMass(AliPID::kKaon);
    return BetheBloch(mom,mass,fSSDHadronMPVBetheParams);
  }
  Double_t GetSSDKaonLandauWidth(Double_t mom) const {
    Double_t xmin = 0.2;
    mom = (mom > xmin) ? mom : xmin;
    return fSSDKaonLandauWidth->Eval(mom);
  }
  Double_t GetSSDKaonGaussWidth(Double_t mom) const {
    Double_t xmin = 0.2;
    mom = (mom > xmin) ? mom : xmin;
    return fSSDKaonGaussWidth->Eval(mom);
  }

  // proton getters
  Double_t GetSDDProtMPV(Double_t mom) const {
    Double_t mass = AliPID::ParticleMass(AliPID::kProton);
    return BetheBloch(mom,mass,fSDDHadronMPVBetheParams);
  }
  Double_t GetSDDProtLandauWidth(Double_t mom) const {
    Double_t xmin = 0.4;
    mom = (mom > xmin) ? mom : xmin;
    return fSDDProtLandauWidth->Eval(mom);
  }
  Double_t GetSDDProtGaussWidth(Double_t mom) const {
    Double_t xmin = 0.4;
    mom = (mom > xmin) ? mom : xmin;
    return fSDDProtGaussWidth->Eval(mom);
  }
  Double_t GetSSDProtMPV(Double_t mom) const {
    Double_t mass = AliPID::ParticleMass(AliPID::kProton);
    return BetheBloch(mom,mass,fSSDHadronMPVBetheParams);
  }
  Double_t GetSSDProtLandauWidth(Double_t mom) const {
    Double_t xmin = 0.4;
    mom = (mom > xmin) ? mom : xmin;
    return fSSDProtLandauWidth->Eval(mom);
  }
  Double_t GetSSDProtGaussWidth(Double_t mom) const {
    Double_t xmin = 0.4;
    mom = (mom > xmin) ? mom : xmin;
    return fSSDProtGaussWidth->Eval(mom);
  }

 private:
  
  AliITSPidParams(const AliITSPidParams& rec);
  AliITSPidParams& operator=(const AliITSPidParams &source);

  Double_t BetheBloch(Double_t mom, Double_t mass, const Double_t* p) const;
  Double_t ExtrapolateWidth(Double_t mom, Double_t x1, Double_t y1, Double_t x2, Double_t y2) const;
  
  // Electron parameterizations
  Double_t fSDDElecMPVBetheParams[5];         // Electron bethe block parameters in SDD
  Double_t fSSDElecMPVBetheParams[5];         // Electron bethe block parameters in SSD
 
  TFormula* fSDDElecLandauWidth; // Electron dE/dx Landau width vs. p in SDD
  TFormula* fSDDElecGaussWidth;  // Electron dE/dx Gaussian width vs. p in SDD

  TFormula* fSSDElecLandauWidth; // Electron dE/dx Landau width vs. p in SSD
  TFormula* fSSDElecGaussWidth;  // Electron dE/dx Gaussian width vs. p in SSD
  
  // Hadron parameterizations
  Double_t fSDDHadronMPVBetheParams[5];         // hadrons bethe block parameters in SDD
  Double_t fSSDHadronMPVBetheParams[5];         // hadrons bethe block parameters in SSD
 
  TFormula* fSDDPionLandauWidth; // pion dE/dx Landau width vs. p in SDD
  TFormula* fSDDPionGaussWidth;  // pion dE/dx Gaussian width vs. p in SDD

  TFormula* fSSDPionLandauWidth; // pion dE/dx Landau width vs. p in SSD
  TFormula* fSSDPionGaussWidth;  // pion dE/dx Gaussian width vs. p in SSD

  TFormula* fSDDKaonLandauWidth; // kaon dE/dx Landau width vs. p in SDD
  TFormula* fSDDKaonGaussWidth;  // kaon dE/dx Gaussian width vs. p in SDD

  TFormula* fSSDKaonLandauWidth; // kaon dE/dx Landau width vs. p in SSD
  TFormula* fSSDKaonGaussWidth;  // kaon dE/dx Gaussian width vs. p in SSD

  TFormula* fSDDProtLandauWidth; // Proton dE/dx Landau width vs. p in SDD
  TFormula* fSDDProtGaussWidth;  // Proton dE/dx Gaussian width vs. p in SDD

  TFormula* fSSDProtLandauWidth; // Proton dE/dx Landau width vs. p in SSD
  TFormula* fSSDProtGaussWidth;  // Proton dE/dx Gaussian width vs. p in SSD


  
  ClassDef(AliITSPidParams,2);
};
#endif

 AliITSPidParams.h:1
 AliITSPidParams.h:2
 AliITSPidParams.h:3
 AliITSPidParams.h:4
 AliITSPidParams.h:5
 AliITSPidParams.h:6
 AliITSPidParams.h:7
 AliITSPidParams.h:8
 AliITSPidParams.h:9
 AliITSPidParams.h:10
 AliITSPidParams.h:11
 AliITSPidParams.h:12
 AliITSPidParams.h:13
 AliITSPidParams.h:14
 AliITSPidParams.h:15
 AliITSPidParams.h:16
 AliITSPidParams.h:17
 AliITSPidParams.h:18
 AliITSPidParams.h:19
 AliITSPidParams.h:20
 AliITSPidParams.h:21
 AliITSPidParams.h:22
 AliITSPidParams.h:23
 AliITSPidParams.h:24
 AliITSPidParams.h:25
 AliITSPidParams.h:26
 AliITSPidParams.h:27
 AliITSPidParams.h:28
 AliITSPidParams.h:29
 AliITSPidParams.h:30
 AliITSPidParams.h:31
 AliITSPidParams.h:32
 AliITSPidParams.h:33
 AliITSPidParams.h:34
 AliITSPidParams.h:35
 AliITSPidParams.h:36
 AliITSPidParams.h:37
 AliITSPidParams.h:38
 AliITSPidParams.h:39
 AliITSPidParams.h:40
 AliITSPidParams.h:41
 AliITSPidParams.h:42
 AliITSPidParams.h:43
 AliITSPidParams.h:44
 AliITSPidParams.h:45
 AliITSPidParams.h:46
 AliITSPidParams.h:47
 AliITSPidParams.h:48
 AliITSPidParams.h:49
 AliITSPidParams.h:50
 AliITSPidParams.h:51
 AliITSPidParams.h:52
 AliITSPidParams.h:53
 AliITSPidParams.h:54
 AliITSPidParams.h:55
 AliITSPidParams.h:56
 AliITSPidParams.h:57
 AliITSPidParams.h:58
 AliITSPidParams.h:59
 AliITSPidParams.h:60
 AliITSPidParams.h:61
 AliITSPidParams.h:62
 AliITSPidParams.h:63
 AliITSPidParams.h:64
 AliITSPidParams.h:65
 AliITSPidParams.h:66
 AliITSPidParams.h:67
 AliITSPidParams.h:68
 AliITSPidParams.h:69
 AliITSPidParams.h:70
 AliITSPidParams.h:71
 AliITSPidParams.h:72
 AliITSPidParams.h:73
 AliITSPidParams.h:74
 AliITSPidParams.h:75
 AliITSPidParams.h:76
 AliITSPidParams.h:77
 AliITSPidParams.h:78
 AliITSPidParams.h:79
 AliITSPidParams.h:80
 AliITSPidParams.h:81
 AliITSPidParams.h:82
 AliITSPidParams.h:83
 AliITSPidParams.h:84
 AliITSPidParams.h:85
 AliITSPidParams.h:86
 AliITSPidParams.h:87
 AliITSPidParams.h:88
 AliITSPidParams.h:89
 AliITSPidParams.h:90
 AliITSPidParams.h:91
 AliITSPidParams.h:92
 AliITSPidParams.h:93
 AliITSPidParams.h:94
 AliITSPidParams.h:95
 AliITSPidParams.h:96
 AliITSPidParams.h:97
 AliITSPidParams.h:98
 AliITSPidParams.h:99
 AliITSPidParams.h:100
 AliITSPidParams.h:101
 AliITSPidParams.h:102
 AliITSPidParams.h:103
 AliITSPidParams.h:104
 AliITSPidParams.h:105
 AliITSPidParams.h:106
 AliITSPidParams.h:107
 AliITSPidParams.h:108
 AliITSPidParams.h:109
 AliITSPidParams.h:110
 AliITSPidParams.h:111
 AliITSPidParams.h:112
 AliITSPidParams.h:113
 AliITSPidParams.h:114
 AliITSPidParams.h:115
 AliITSPidParams.h:116
 AliITSPidParams.h:117
 AliITSPidParams.h:118
 AliITSPidParams.h:119
 AliITSPidParams.h:120
 AliITSPidParams.h:121
 AliITSPidParams.h:122
 AliITSPidParams.h:123
 AliITSPidParams.h:124
 AliITSPidParams.h:125
 AliITSPidParams.h:126
 AliITSPidParams.h:127
 AliITSPidParams.h:128
 AliITSPidParams.h:129
 AliITSPidParams.h:130
 AliITSPidParams.h:131
 AliITSPidParams.h:132
 AliITSPidParams.h:133
 AliITSPidParams.h:134
 AliITSPidParams.h:135
 AliITSPidParams.h:136
 AliITSPidParams.h:137
 AliITSPidParams.h:138
 AliITSPidParams.h:139
 AliITSPidParams.h:140
 AliITSPidParams.h:141
 AliITSPidParams.h:142
 AliITSPidParams.h:143
 AliITSPidParams.h:144
 AliITSPidParams.h:145
 AliITSPidParams.h:146
 AliITSPidParams.h:147
 AliITSPidParams.h:148
 AliITSPidParams.h:149
 AliITSPidParams.h:150
 AliITSPidParams.h:151
 AliITSPidParams.h:152
 AliITSPidParams.h:153
 AliITSPidParams.h:154
 AliITSPidParams.h:155
 AliITSPidParams.h:156
 AliITSPidParams.h:157
 AliITSPidParams.h:158
 AliITSPidParams.h:159
 AliITSPidParams.h:160
 AliITSPidParams.h:161
 AliITSPidParams.h:162
 AliITSPidParams.h:163
 AliITSPidParams.h:164
 AliITSPidParams.h:165
 AliITSPidParams.h:166
 AliITSPidParams.h:167
 AliITSPidParams.h:168
 AliITSPidParams.h:169
 AliITSPidParams.h:170
 AliITSPidParams.h:171
 AliITSPidParams.h:172
 AliITSPidParams.h:173
 AliITSPidParams.h:174
 AliITSPidParams.h:175
 AliITSPidParams.h:176
 AliITSPidParams.h:177
 AliITSPidParams.h:178
 AliITSPidParams.h:179
 AliITSPidParams.h:180
 AliITSPidParams.h:181
 AliITSPidParams.h:182
 AliITSPidParams.h:183
 AliITSPidParams.h:184
 AliITSPidParams.h:185
 AliITSPidParams.h:186
 AliITSPidParams.h:187
 AliITSPidParams.h:188
 AliITSPidParams.h:189
 AliITSPidParams.h:190
 AliITSPidParams.h:191
 AliITSPidParams.h:192
 AliITSPidParams.h:193
 AliITSPidParams.h:194
 AliITSPidParams.h:195
 AliITSPidParams.h:196
 AliITSPidParams.h:197
 AliITSPidParams.h:198
 AliITSPidParams.h:199
 AliITSPidParams.h:200
 AliITSPidParams.h:201
 AliITSPidParams.h:202
 AliITSPidParams.h:203
 AliITSPidParams.h:204
 AliITSPidParams.h:205
 AliITSPidParams.h:206
 AliITSPidParams.h:207
 AliITSPidParams.h:208
 AliITSPidParams.h:209
 AliITSPidParams.h:210
 AliITSPidParams.h:211
 AliITSPidParams.h:212
 AliITSPidParams.h:213
 AliITSPidParams.h:214
 AliITSPidParams.h:215
 AliITSPidParams.h:216
 AliITSPidParams.h:217
 AliITSPidParams.h:218
 AliITSPidParams.h:219
 AliITSPidParams.h:220
 AliITSPidParams.h:221
 AliITSPidParams.h:222
 AliITSPidParams.h:223
 AliITSPidParams.h:224
 AliITSPidParams.h:225
 AliITSPidParams.h:226
 AliITSPidParams.h:227
 AliITSPidParams.h:228
 AliITSPidParams.h:229
 AliITSPidParams.h:230
 AliITSPidParams.h:231
 AliITSPidParams.h:232
 AliITSPidParams.h:233
 AliITSPidParams.h:234
 AliITSPidParams.h:235
 AliITSPidParams.h:236
 AliITSPidParams.h:237
 AliITSPidParams.h:238
 AliITSPidParams.h:239
 AliITSPidParams.h:240
 AliITSPidParams.h:241
 AliITSPidParams.h:242
 AliITSPidParams.h:243
 AliITSPidParams.h:244
 AliITSPidParams.h:245
 AliITSPidParams.h:246
 AliITSPidParams.h:247
 AliITSPidParams.h:248
 AliITSPidParams.h:249
 AliITSPidParams.h:250
 AliITSPidParams.h:251
 AliITSPidParams.h:252
 AliITSPidParams.h:253
 AliITSPidParams.h:254
 AliITSPidParams.h:255
 AliITSPidParams.h:256
 AliITSPidParams.h:257
 AliITSPidParams.h:258
 AliITSPidParams.h:259
 AliITSPidParams.h:260
 AliITSPidParams.h:261
 AliITSPidParams.h:262
 AliITSPidParams.h:263
 AliITSPidParams.h:264
 AliITSPidParams.h:265
 AliITSPidParams.h:266