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

///////////////////////////////////////////////////////////////////
//                                                               //
// Class to store information for PID with ITS                   //
// and truncated mean computation methods                        //
// Origin: F.Prino, Torino, prino@to.infn.it                     //
//                                                               //
///////////////////////////////////////////////////////////////////

#include <TObject.h>
#include "AliPID.h"

class AliITSPidParams;

class AliITSdEdxSamples : public TObject {

 public:
  AliITSdEdxSamples();
  AliITSdEdxSamples(Int_t nSamples, Double_t* esamples, Double_t* xsamples, Double_t mom, Int_t specie=0);
  AliITSdEdxSamples(const AliITSdEdxSamples& source);
  AliITSdEdxSamples& operator=(const AliITSdEdxSamples& source); 
  virtual ~AliITSdEdxSamples(){};

  void SetdESamples(Int_t nSamples, Double_t* samples);
  void SetdxSamples(Int_t nSamples, Double_t* samples);
  void SetSamplesAndMomenta(Int_t nSamples, Double_t* esamples, Double_t* xsamples, Double_t* mom);
  void SetNSamples(Int_t nSamples){
    fNSamples=nSamples;
  }
  void SetLayerSample(Int_t iLayer, Bool_t haspoint, Double_t dE=0., Double_t dx=0., Double_t p=0.);

  void SetMomentum(Double_t mom){
    fP=mom;
  }
  void SetParticleSpecieMC(Int_t specie){
    fParticleSpecie=specie;
  }
  void SetClusterMap(UInt_t map){
    fClusterMap=map;
  }
  void SetPointOnLayer(Int_t iLay){
    fClusterMap|=(1<<iLay);
  }
  void SetLayersForPID(UInt_t laypid){
    fLayersForPid=laypid;
  }
  void SetUseLayerForPid(Int_t iLay){
    fLayersForPid|=(1<<iLay);
  }
  void SetNotUseLayerForPid(Int_t iLay){
    if(fLayersForPid&(1<<iLay)) fLayersForPid-=(1<<iLay);
  }

  Int_t GetNumberOfSamples() const {
    return fNSamples;
  }
  Int_t GetNumberOfEffectiveSamples() const{
    Int_t nS=0;
    for (Int_t il=0; il<fNSamples; il++)  if(HasPointOnLayer(il)) nS++;
    return nS;
  }

  Double_t GetdESample(Int_t i) const {
    if(i<fNSamples) return fdESamples[i];
    else return 0.;
  }
  Double_t GetNehPairs(Int_t i) const {
    if(i<fNSamples) return fdESamples[i]*1000./3.63;
    else return 0.;
  }
  Double_t GetQfC(Int_t i) const{
    return GetNehPairs(i)*1.6E-4;
  }
  Double_t GetdxSample(Int_t i) const {
    if(i<fNSamples) return fdxSamples[i];
    else return 0.;
  }
  Double_t GetdEdxSample(Int_t i) const { // keV/100um
    if(i<fNSamples && fdxSamples[i]>0.) return fdESamples[i]/(fdxSamples[i]*100.);
    else return 0.;
  }

  Double_t GetMomentum() const {
    return fP;
  }
  Double_t GetMomentumAtSample(Int_t i) const{
    if(i<fNSamples) return fPAtSample[i];
    else return 0.;
  } 
  Int_t GetParticleSpecieMC() const {
    return fParticleSpecie;
  }
  UInt_t GetClusterMap() const{
    return fClusterMap;
  }
  Bool_t HasPointOnLayer(Int_t iLay) const{
    return fClusterMap&(1<<iLay);
  }
  UInt_t GetLayersForPid() const{
    return fLayersForPid;
  }
  Bool_t UseLayerForPid(Int_t iLay) const{
    return fLayersForPid&(1<<iLay);
  }

  void PrintAll() const;
  void PrintClusterMap() const;

  Double_t GetTruncatedMean(Double_t frac=0.5, Double_t mindedx=0.) const;
  Double_t GetWeightedMean(Double_t mindedx=0.) const;
  void     GetConditionalProbabilities(const AliITSPidParams* pars, Double_t condprob[AliPID::kSPECIES], Double_t mindedx=0.) const;


 protected:

  void SetClusterMapFromdE(){
    fClusterMap=0;
    for(Int_t i=0; i<fNSamples; i++)
      if(fdESamples[i]>0.) SetPointOnLayer(i);
  }

  enum{kMaxSamples=10}; // max. n. of layers with dE/dx info

  Int_t    fNSamples;                // number of samples
  UInt_t   fClusterMap;              // map of clusters in layers
  Double_t fdESamples[kMaxSamples];  // dE samples (keV)
  Double_t fdxSamples[kMaxSamples];  // dx samples (cm)
  Double_t fP;                       // track momentum
  Int_t    fParticleSpecie;          // MC generated particle
  Double_t fPAtSample[kMaxSamples];  // track momentum at specific samples
  UInt_t   fLayersForPid;            // bit-map to enable/disable layers in PID

  ClassDef(AliITSdEdxSamples,3);

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