--- /dev/null
+/**************************************************************************
+ * 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. *
+ **************************************************************************/
+
+
+///////////////////////////////////////////////////////////////////////////
+// Detector PID //
+// //
+// //
+/*
+
+This class is supposed to store the detector pid values for all detectors
+ and all particle species.
+It is meant to be used to buffer the PID values as a transient object in
+ AliESDtrack and AliAODTrack, respectively.
+The calculation filling and association to the track is done in
+ AliAnalysisTaskPID response.
+The idea of this object is to save computing time in an analysis train with
+ many analyses where access to pid is done often
+
+
+
+*/
+// //
+///////////////////////////////////////////////////////////////////////////
+
+#include "AliPIDValues.h"
+
+#include "AliDetectorPID.h"
+
+ClassImp(AliDetectorPID)
+
+
+AliDetectorPID::AliDetectorPID() :
+ TObject(),
+ fArrNsigmas("AliPIDValues",AliPIDResponse::kNdetectors),
+ fArrRawProbabilities("AliPIDValues",AliPIDResponse::kNdetectors)
+{
+ //
+ // default constructor
+ //
+
+}
+
+//_______________________________________________________________________
+AliDetectorPID::AliDetectorPID(const AliDetectorPID &pid) :
+ TObject(pid),
+ fArrNsigmas(pid.fArrNsigmas),
+ fArrRawProbabilities(pid.fArrRawProbabilities)
+{
+ //
+ // copy constructor
+ //
+
+}
+
+//_______________________________________________________________________
+AliDetectorPID::~AliDetectorPID()
+{
+ //
+ // destructor
+ //
+ fArrNsigmas.Delete();
+ fArrRawProbabilities.Delete();
+}
+
+//_______________________________________________________________________
+AliDetectorPID& AliDetectorPID::operator= (const AliDetectorPID &pid)
+{
+ //
+ // assignment operator
+ //
+
+ if (this==&pid) return *this;
+
+ TObject::operator=(pid);
+
+ fArrNsigmas.Clear();
+ fArrRawProbabilities.Clear();
+
+ AliPIDValues *val=0x0;
+ for (Int_t idet=0; idet<(Int_t)AliPIDResponse::kNdetectors; ++idet){
+ val=static_cast<AliPIDValues*>(pid.fArrNsigmas.UncheckedAt(idet));
+ if (val) new (fArrNsigmas[idet]) AliPIDValues(*val);
+
+ val=static_cast<AliPIDValues*>(pid.fArrRawProbabilities.UncheckedAt(idet));
+ if (val) new (fArrRawProbabilities[idet]) AliPIDValues(*val);
+ }
+
+ return *this;
+}
+
+//_______________________________________________________________________
+void AliDetectorPID::SetRawProbability(AliPIDResponse::EDetector det, const Double_t prob[],
+ Int_t nspecies, AliPIDResponse::EDetPidStatus status)
+{
+ //
+ // set raw probabilities for nspecies for 'det'ector
+ //
+
+ AliPIDValues *val=static_cast<AliPIDValues*>(fArrRawProbabilities.UncheckedAt(det));
+ if (!val)
+ val=new (fArrRawProbabilities[(Int_t)det]) AliPIDValues;
+
+ val->SetValues(prob,nspecies,status);
+}
+
+//_______________________________________________________________________
+void AliDetectorPID::SetNumberOfSigmas(AliPIDResponse::EDetector det, const Double_t nsig[], Int_t nspecies)
+{
+ //
+ // set number of sigmas for nspecies for 'det'ector
+ //
+
+ AliPIDValues *val=static_cast<AliPIDValues*>(fArrNsigmas.UncheckedAt(det));
+ if (!val)
+ val=new (fArrNsigmas[(Int_t)det]) AliPIDValues;
+
+ val->SetValues(nsig,nspecies);
+}
+
+//_______________________________________________________________________
+AliPIDResponse::EDetPidStatus AliDetectorPID::GetRawProbability(AliPIDResponse::EDetector det, Double_t prob[], Int_t nspecies) const
+{
+ //
+ // get raw probabilities for nspecies for 'det'ector
+ //
+
+ AliPIDValues *val=static_cast<AliPIDValues*>(fArrRawProbabilities.UncheckedAt((Int_t)det));
+ if (!val) {
+ for (Int_t i=0; i<nspecies; ++i) prob[i]=1.; //TODO: Is '1' the correct values or better 1/nspecies
+ return AliPIDResponse::kDetNoSignal;
+ }
+
+ return val->GetValues(prob,nspecies);
+}
+
+//_______________________________________________________________________
+void AliDetectorPID::GetNumberOfSigmas(AliPIDResponse::EDetector det, Double_t nsig[], Int_t nspecies) const
+{
+ //
+ // get number of sigmas for nspecies for detector 'det'
+ //
+
+ AliPIDValues *val=static_cast<AliPIDValues*>(fArrNsigmas.UncheckedAt((Int_t)det));
+ if (!val) {
+ for (Int_t i=0; i<nspecies; ++i) nsig[i]=-999.;
+ return;
+ }
+
+ val->GetValues(nsig,nspecies);
+}
+
+//_______________________________________________________________________
+Double_t AliDetectorPID::GetRawProbability(AliPIDResponse::EDetector det, AliPID::EParticleType type) const
+{
+ //
+ // get 'det'ector raw probability for particle 'type'
+ //
+
+ AliPIDValues *val=static_cast<AliPIDValues*>(fArrRawProbabilities.UncheckedAt((Int_t)det));
+ if (!val) {
+ return 0.; //TODO: Is '0' the correct value?
+ }
+
+ return val->GetValue(type);
+}
+
+//_______________________________________________________________________
+Double_t AliDetectorPID::GetNumberOfSigmas(AliPIDResponse::EDetector det, AliPID::EParticleType type) const
+{
+ //
+ // get 'det'ector number of sigmas for particle 'type'
+ //
+ AliPIDValues *val=static_cast<AliPIDValues*>(fArrNsigmas.UncheckedAt((Int_t)det));
+ if (!val) {
+ return -999.; //TODO: Is '-999.' the correct value?
+ }
+
+ return val->GetValue(type);
+}
+
+
--- /dev/null
+#ifndef ALI_DETECTOR_PID_H
+#define ALI_DETECTOR_PID_H
+/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ * See cxx source for full Copyright notice */
+
+//---------------------------------------------------------------//
+// Class to store raw probabilities and nsigmas //
+// of all detectors //
+// //
+// //
+// Origin: Jens Wiechula, Uni Tuebingen, jens.wiechula@cern.ch //
+//---------------------------------------------------------------//
+
+#include <TObject.h>
+#include <TClonesArray.h>
+
+#include "AliPID.h"
+#include "AliPIDResponse.h"
+
+class AliDetectorPID : public TObject {
+public:
+ AliDetectorPID();
+ AliDetectorPID(const AliDetectorPID &pid);
+ virtual ~AliDetectorPID();
+ AliDetectorPID& operator= (const AliDetectorPID &pid);
+
+ void SetRawProbability(AliPIDResponse::EDetector det, const Double_t prob[], Int_t nspecies, AliPIDResponse::EDetPidStatus status);
+ void SetNumberOfSigmas(AliPIDResponse::EDetector det, const Double_t nsig[], Int_t nspecies);
+
+ AliPIDResponse::EDetPidStatus GetRawProbability(AliPIDResponse::EDetector det, Double_t prob[], Int_t nspecies) const;
+ void GetNumberOfSigmas(AliPIDResponse::EDetector det, Double_t nsig[], Int_t nspecies) const;
+
+ Double_t GetRawProbability(AliPIDResponse::EDetector det, AliPID::EParticleType type) const;
+ Double_t GetNumberOfSigmas(AliPIDResponse::EDetector det, AliPID::EParticleType type) const;
+private:
+ TClonesArray fArrNsigmas; // array to store nsigma values of all detectors
+ TClonesArray fArrRawProbabilities; // array to strore raw probabilities of all detectors
+
+ ClassDef(AliDetectorPID,1); //Store raw probabilities and nsigmas for all detectors
+};
+
+#endif
+
--- /dev/null
+/**************************************************************************
+ * 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. *
+ **************************************************************************/
+
+///////////////////////////////////////////////////////////////////////////
+// PID Values //
+// //
+// //
+/*
+
+Class to store PID information for each particle species
+
+*/
+// //
+///////////////////////////////////////////////////////////////////////////
+
+
+#include "AliPIDValues.h"
+
+ClassImp(AliPIDValues)
+
+AliPIDValues::AliPIDValues() :
+ TObject(),
+ fPIDStatus(AliPIDResponse::kDetPidOk)
+{
+ //
+ // default constructor
+ //
+ Int_t nspecies=AliPID::kSPECIESCN;
+ for (Int_t i=0; i<nspecies; ++i) fValues[i]=0.;
+}
+
+//_______________________________________________________________________
+AliPIDValues::AliPIDValues(const AliPIDValues &val) :
+ TObject(val),
+ fPIDStatus(val.fPIDStatus)
+{
+ //
+ // copy constructor
+ //
+ Int_t nspecies=AliPID::kSPECIESCN;
+ for (Int_t i=0; i<nspecies; ++i) fValues[i]=val.fValues[i];
+}
+
+//_______________________________________________________________________
+AliPIDValues::AliPIDValues(Double_t val[], Int_t nspecies, AliPIDResponse::EDetPidStatus status) :
+ TObject(),
+ fPIDStatus(AliPIDResponse::kDetPidOk)
+{
+ //
+ // constructor with array of values
+ //
+ SetValues(val,nspecies,status);
+}
+
+//_______________________________________________________________________
+AliPIDValues& AliPIDValues::operator= (const AliPIDValues &val)
+{
+ //
+ // assignment operator
+ //
+ if (this!=&val){
+ TObject::operator=(val);
+
+ Int_t nspecies=AliPID::kSPECIESCN;
+ for (Int_t i=0; i<nspecies; ++i) fValues[i]=val.fValues[i];
+ fPIDStatus=val.fPIDStatus;
+ }
+
+ return *this;
+}
+
+//_______________________________________________________________________
+void AliPIDValues::Copy(TObject &obj) const {
+ // this overwrites the virtual TObject::Copy()
+ // to allow run time copying without casting
+ // in AliPIDValues
+
+ if(this==&obj)return;
+ AliPIDValues *robj = dynamic_cast<AliPIDValues*>(&obj);
+ if(!robj)return; // not AliPIDValues
+ *robj = *this;
+}
+
+//_______________________________________________________________________
+void AliPIDValues::SetValues(const Double_t val[], Int_t nspecies, AliPIDResponse::EDetPidStatus status)
+{
+ //
+ // set array of values
+ //
+ if (nspecies>AliPID::kSPECIESCN) nspecies=AliPID::kSPECIESCN;
+ for (Int_t i=0; i<nspecies; ++i) fValues[i]=val[i];
+ fPIDStatus=status;
+}
+
+//_______________________________________________________________________
+AliPIDResponse::EDetPidStatus AliPIDValues::GetValues(Double_t val[], Int_t nspecies) const
+{
+ //
+ // get array of values
+ //
+ if (nspecies>AliPID::kSPECIESCN) nspecies=AliPID::kSPECIESCN;
+ for (Int_t i=0; i<nspecies; ++i) val[i]=fValues[i];
+ return fPIDStatus;
+}
+
+//_______________________________________________________________________
+Double_t AliPIDValues::GetValue(AliPID::EParticleType type) const
+{
+ //
+ // get values for a specific particle type
+ //
+ return fValues[(Int_t)type];
+}
+
--- /dev/null
+#ifndef ALI_PID_VALUES_H
+#define ALI_PID_VALUES_H
+/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ * See cxx source for full Copyright notice */
+
+//---------------------------------------------------------------//
+// Base class for handling the pid response //
+// functions of all detectors //
+// and give access to the nsigmas //
+// //
+// Origin: Jens Wiechula, Uni Tuebingen, jens.wiechula@cern.ch //
+//---------------------------------------------------------------//
+
+#include <TObject.h>
+
+#include "AliPID.h"
+#include "AliPIDResponse.h"
+
+class AliPIDValues : public TObject {
+public:
+ AliPIDValues();
+ AliPIDValues(const AliPIDValues &val);
+ AliPIDValues(Double_t val[], Int_t nspecies, AliPIDResponse::EDetPidStatus status=AliPIDResponse::kDetPidOk);
+
+ AliPIDValues& operator= (const AliPIDValues &val);
+ void Copy(TObject &obj) const;
+
+ void SetValues(const Double_t val[], Int_t nspecies, AliPIDResponse::EDetPidStatus status=AliPIDResponse::kDetPidOk);
+ AliPIDResponse::EDetPidStatus GetValues(Double_t val[], Int_t nspecies) const;
+
+ Double_t GetValue(AliPID::EParticleType type) const;
+
+ void SetPIDStatus(AliPIDResponse::EDetPidStatus status) { fPIDStatus=status; }
+ AliPIDResponse::EDetPidStatus GetPIDStatus() const { return fPIDStatus; }
+
+private:
+ Double32_t fValues[AliPID::kSPECIESCN]; //[0.,0.,8] PID values
+ AliPIDResponse::EDetPidStatus fPIDStatus; //PID status of the detector
+
+ ClassDef(AliPIDValues,1); //Store PID values for each particle type
+};
+
+#endif