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

/* $Id$ */

//-------------------------------------------------------------------------
//     AOD Pid class to store additional pid information
//     Author: Annalisa Mastroserio
//-------------------------------------------------------------------------

#include "AliAODPid.h"
#include "AliESDtrack.h"
#include "AliLog.h"
#include "AliTPCdEdxInfo.h"

ClassImp(AliAODPid)


//______________________________________________________________________________
AliAODPid::AliAODPid():
    fITSsignal(0), 
    fTPCsignal(0),
    fTPCsignalN(0),
    fTPCmomentum(0),
    fTPCTgl(0),
    fTRDnSlices(0),
    fTRDntls(0),
    fTRDslices(0x0),
    fTRDsignal(0),
    fTRDChi2(0x0),
    fTOFesdsignal(0),
    fTPCdEdxInfo(0)
{
  // default constructor
    for(Int_t i=0; i<AliPID::kSPECIES; i++) fIntTime[i]   = 0; 
    for(Int_t i=0; i<5; i++) fTOFpidResolution[i] = 0.;
    for(Int_t i=0; i<6; i++) {
      fTRDmomentum[i]      = 0.;
      fTRDncls[i]          = 0;
    }
    for(Int_t i=0; i<4; i++) fITSdEdxSamples[i]   = 0.;
}

//______________________________________________________________________________
AliAODPid::~AliAODPid() 
{
  delete [] fTRDslices;
  fTRDslices = 0;
  delete fTPCdEdxInfo;
  // destructor
}


//______________________________________________________________________________
AliAODPid::AliAODPid(const AliAODPid& pid) : 
  TObject(pid),
  fITSsignal(pid.fITSsignal), 
  fTPCsignal(pid.fTPCsignal),
  fTPCsignalN(pid.fTPCsignalN),
  fTPCmomentum(pid.fTPCmomentum),
  fTPCTgl(pid.fTPCTgl),
  fTRDnSlices(pid.fTRDnSlices),
  fTRDntls(pid.fTRDntls),
  fTRDslices(0x0),
  fTRDsignal(pid.fTRDsignal),
  fTRDChi2(pid.fTRDChi2),
  fTOFesdsignal(pid.fTOFesdsignal),
  fTPCdEdxInfo(0x0)
{
  // Copy constructor
  SetTRDslices(fTRDnSlices, pid.fTRDslices);
    for(Int_t i=0; i<AliPID::kSPECIES; i++) fIntTime[i]=pid.fIntTime[i];

    for(Int_t i=0; i<6; i++){ 
      fTRDmomentum[i]=pid.fTRDmomentum[i];
      fTRDncls[i] = 0;
    }

    for(Int_t i=0; i<5; i++) fTOFpidResolution[i]=pid.fTOFpidResolution[i];

    for(Int_t i=0; i<4; i++) fITSdEdxSamples[i]=pid.fITSdEdxSamples[i];

    if (pid.fTPCdEdxInfo) fTPCdEdxInfo=new AliTPCdEdxInfo(*pid.fTPCdEdxInfo);
}

//______________________________________________________________________________
AliAODPid& AliAODPid::operator=(const AliAODPid& pid)
{
  // Assignment operator
  if(this!=&pid) {
    // copy stuff
    TObject::operator=(pid);

    fITSsignal   = pid.fITSsignal; 
    for (Int_t i = 0; i < 4; i++) fITSdEdxSamples[i]=pid.fITSdEdxSamples[i];
    fTPCsignal   = pid.fTPCsignal;
    fTPCsignalN  = pid.fTPCsignalN;
    fTPCmomentum = pid.fTPCmomentum;
    fTPCTgl      = pid.fTPCTgl;

    fTRDsignal = pid.fTRDsignal;
    if(fTRDnSlices != pid.fTRDnSlices) {
      // only delete if number changed or is 0
      delete [] fTRDslices;
      fTRDslices = 0;
      fTRDnSlices = pid.fTRDnSlices;
      if(pid.fTRDnSlices > 0) fTRDslices = new Double32_t[fTRDnSlices];
    }

    if (fTRDslices && pid.fTRDslices)
      memcpy(fTRDslices, pid.fTRDslices, fTRDnSlices*sizeof(Double32_t));

    fTRDntls = pid.fTRDntls;
    for(Int_t i = 0; i < 6; i++){ 
	fTRDmomentum[i] = pid.fTRDmomentum[i];
	fTRDncls[i]     = pid.fTRDncls[i];
    }

    fTRDChi2 = pid.fTRDChi2;

    fTOFesdsignal=pid.fTOFesdsignal;
    for (Int_t i = 0; i < 5; i++) fTOFpidResolution[i]=pid.fTOFpidResolution[i];
    for (Int_t i = 0; i < 5; i++) fIntTime[i]=pid.fIntTime[i];
    
     SetTPCdEdxInfo(pid.fTPCdEdxInfo);
  }

  return *this;
}
//_______________________________________________________________________________
void AliAODPid::GetIntegratedTimes(Double_t *timeint, Int_t nspec) const
{
  // Returns the array with integrated times for each particle hypothesis
  //
  for(Int_t i=0; i<AliPID::kSPECIES; i++) timeint[i]=fIntTime[i];
  //Note: at the moment only kSPECIES entries are available
  if (nspec>AliPID::kSPECIES) for (int i=AliPID::kSPECIES;i<AliPID::kSPECIESC;i++) timeint[i]=0;
  //
}
//_______________________________________________________________________________
void AliAODPid::SetIntegratedTimes(Double_t timeint[AliPID::kSPECIES])
{
 // Returns the array with integrated times for each particle hypothesis
 for(Int_t i=0; i<AliPID::kSPECIES; i++) fIntTime[i]=timeint[i];
}
//______________________________________________________________________________
void AliAODPid::SetTOFpidResolution(Double_t tofPIDres[5])
{
  for (Int_t i=0; i<5; i++) fTOFpidResolution[i]=tofPIDres[i];

}
//______________________________________________________________________________
void AliAODPid::GetTOFpidResolution(Double_t tofRes[5]) const
{
  for (Int_t i=0; i<5; i++) tofRes[i]=fTOFpidResolution[i];
}

//______________________________________________________________________________
void AliAODPid::SetITSdEdxSamples(const Double_t s[4])
{
  //
  // Set the 4 values of dE/dx from individual ITS layers that are read from ESD
  //  
  for (Int_t i=0; i<4; i++) fITSdEdxSamples[i]=s[i];
}
//______________________________________________________________________________
void AliAODPid::GetITSdEdxSamples(Double_t s[4]) const
{
  //
  // Get the 4 values of dE/dx from individual ITS layers that are read from ESD
  //  
  for (Int_t i=0; i<4; i++) s[i]=fITSdEdxSamples[i];
}
//______________________________________________________________________________
void AliAODPid::SetTPCdEdxInfo(AliTPCdEdxInfo * dEdxInfo)
{
  //
  // Set TPC dEdx info
  //
  if (dEdxInfo==0x0){
    delete fTPCdEdxInfo;
    fTPCdEdxInfo=0x0;
    return;
  }
  if (!fTPCdEdxInfo) fTPCdEdxInfo=new AliTPCdEdxInfo;
  (*fTPCdEdxInfo)=(*dEdxInfo);
}

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