Since it contains fixes of coding rule violations, all classes are involved. Further...
authordainese <dainese@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 3 Aug 2009 14:24:14 +0000 (14:24 +0000)
committerdainese <dainese@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 3 Aug 2009 14:24:14 +0000 (14:24 +0000)
PWG3/hfe/AliHFEpidITS.cxx [new file with mode: 0644]
PWG3/hfe/AliHFEpidITS.h [new file with mode: 0644]

diff --git a/PWG3/hfe/AliHFEpidITS.cxx b/PWG3/hfe/AliHFEpidITS.cxx
new file mode 100644 (file)
index 0000000..6693f55
--- /dev/null
@@ -0,0 +1,202 @@
+/**************************************************************************
+ * 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.                  *
+ **************************************************************************/
+/*
+ * ITS PID class
+ * checks ITS PID based on ITS dE/dx truncated mean
+ *
+ * Authors: Matus Kalisky <matus.kalisky@cern.ch>
+ *          Markus Fasel <M.Fasel@gsi.de>
+ *
+ */
+#include <TH2F.h>
+#include <TList.h>
+#include <TMath.h>
+
+#include "AliESDtrack.h"
+#include "AliLog.h"
+#include "AliPID.h"
+#include "AliVParticle.h"
+
+#include "AliHFEpidITS.h"
+
+//___________________________________________________________________
+AliHFEpidITS::AliHFEpidITS(const Char_t *name):
+    AliHFEpidBase(name)
+  , fQAlist(0x0)
+{
+  //
+  // Default constructor
+  //
+}
+
+//___________________________________________________________________
+AliHFEpidITS::AliHFEpidITS(const AliHFEpidITS &ref):
+    AliHFEpidBase("")
+  , fQAlist(0x0)
+{
+  //
+  // Copy constructor
+  //
+  ref.Copy(*this);
+}
+
+//___________________________________________________________________
+AliHFEpidITS &AliHFEpidITS::operator=(const AliHFEpidITS &ref){
+  //
+  // Assignment operator
+  //
+  if(this != &ref) ref.Copy(*this);
+  return *this;
+}
+
+//___________________________________________________________________
+AliHFEpidITS::~AliHFEpidITS(){
+  //
+  // Destructor
+  //
+  if(fQAlist){
+    fQAlist->Clear();
+    delete fQAlist;
+  }
+}
+
+//___________________________________________________________________
+void AliHFEpidITS::Copy(TObject &o) const {
+  //
+  // Copy function
+  // Provides a deep copy
+  //
+  AliHFEpidITS &target = dynamic_cast<AliHFEpidITS &>(o);
+
+  target.fQAlist = dynamic_cast<TList *>(fQAlist->Clone());
+  AliHFEpidBase::Copy(target);
+}
+
+//___________________________________________________________________
+Bool_t AliHFEpidITS::InitializePID(){
+  //
+  // ITS PID initialization
+  //
+  return kTRUE;
+}
+
+
+//___________________________________________________________________
+Int_t AliHFEpidITS::IsSelected(AliVParticle * /*track*/){
+  //
+  // Does PID decision for ITS
+  // 
+  return 11;  // @TODO: Implement ITS PID decision
+}
+
+//___________________________________________________________________
+void AliHFEpidITS::AddQAhistograms(TList *l){
+  //
+  // Adding QA histograms for ITS PID
+  //
+  // QA histograms are:
+  // - all Particles ITS signal vs. p (both methods)
+  // - single particle ITS signal vs. p (both methods)
+  // 
+  if(!fQAlist) fQAlist = new TList;
+  fQAlist->SetName("fITSqaHistograms");
+
+  // prepare axis
+  const Int_t kMomentumBins = 41;
+  const Double_t kPtMin = 0.1;
+  const Double_t kPtMax = 10.;
+  const Int_t kSigBins = 300;
+  Double_t momentumBins[kMomentumBins];
+  for(Int_t ibin = 0; ibin < kMomentumBins; ibin++)
+    momentumBins[ibin] = static_cast<Double_t>(TMath::Power(10,TMath::Log10(kPtMin) + (TMath::Log10(kPtMax)-TMath::Log10(kPtMin))/(kMomentumBins-1)*static_cast<Double_t>(ibin)));
+
+  TH2 *histo = NULL;
+  fQAlist->AddAt((histo = new TH2F("fITSsigV1all", "ITS signal vs. p (all species, Method1):p / GeV/c:ITS signal / a.u.", kMomentumBins - 1, momentumBins, kSigBins, 0., kSigBins)), kITSsigV1);
+  fQAlist->AddAt((histo = new TH2F("fITSsigV2all", "ITS signal vs. p (all species, Method2):p / GeV/c:ITS signal / a.u.", kMomentumBins - 1, momentumBins, kSigBins, 0., kSigBins)), kITSsigV2);
+  for(Int_t ispec = 0; ispec < AliPID::kSPECIES; ispec++){
+    fQAlist->AddAt((histo = new TH2F(Form("fITSsigV1%s", AliPID::ParticleName(ispec)), Form("ITS signal vs. p (%s, Method1):p / GeV/c:ITS signal / a.u.", AliPID::ParticleName(ispec)), kMomentumBins - 1, momentumBins, kSigBins, 0., kSigBins)), 2 * ispec + kHistosSigAll);
+    fQAlist->AddAt((histo = new TH2F(Form("fITSsigV2%s", AliPID::ParticleName(ispec)), Form("ITS signal vs. p (%s, Method2):p / GeV/c:ITS signal / a.u.", AliPID::ParticleName(ispec)), kMomentumBins - 1, momentumBins, kSigBins, 0., kSigBins)), 2 * ispec + 1 + kHistosSigAll);
+  }
+  l->Add(fQAlist);
+}
+
+//___________________________________________________________________
+Double_t AliHFEpidITS::GetITSSignalV1(AliESDtrack *track){
+  //
+  // Calculate the ITS signal according to the mean charge of the clusters
+  //
+  Double_t signal = 0.;
+#ifdef TRUNK
+  Double_t dedx[4];
+  track->GetITSdEdxSamples(dedx);
+  signal = TMath::Mean(4, dedx);
+#else
+  signal = track->GetITSsignal();
+#endif
+  Double_t p = track->GetTPCInnerParam() ? track->GetTPCInnerParam()->P() : track->P();
+  AliDebug(1, Form("Momentum: %f, ITS Signal: %f", p, signal));
+  if(IsQAon()) FillHistogramsSignalV1(p, signal, GetMCpid(track));
+  return signal;
+}
+
+//___________________________________________________________________
+Double_t AliHFEpidITS::GetITSSignalV2(AliESDtrack *track){
+  //
+  // Calculates the ITS signal. Truncated mean is used.
+  //
+  Double_t dedx[4], tmp[4];
+  Int_t indices[4];
+  track->GetITSdEdxSamples(tmp);
+  TMath::Sort(4, tmp, indices);
+  for(Int_t ien = 0; ien < 4; ien++) dedx[ien] = tmp[indices[ien]];
+  Double_t signal = TMath::Mean(3, dedx); 
+  Double_t p = track->GetTPCInnerParam() ? track->GetTPCInnerParam()->P() : track->P();
+  AliDebug(1, Form("Momentum: %f, ITS Signal: %f", p, signal));
+  if(IsQAon()) FillHistogramsSignalV2(p, signal, GetMCpid(track));
+  return signal;
+}
+
+//___________________________________________________________________
+void AliHFEpidITS::FillHistogramsSignalV1(Double_t p, Double_t signal, Int_t species){
+  (dynamic_cast<TH2 *>(fQAlist->At(kITSsigV1)))->Fill(p, signal);
+  if(species >= 0 && species < AliPID::kSPECIES)
+    (dynamic_cast<TH2 *>(fQAlist->At(kHistosSigAll + 2 * species)))->Fill(p, signal);
+}
+
+//___________________________________________________________________
+void AliHFEpidITS::FillHistogramsSignalV2(Double_t p, Double_t signal, Int_t species){
+  (dynamic_cast<TH2 *>(fQAlist->At(kITSsigV2)))->Fill(p, signal);
+  if(species >= 0 && species < AliPID::kSPECIES)
+    (dynamic_cast<TH2 *>(fQAlist->At(kHistosSigAll + 2 * species + 1)))->Fill(p, signal);
+}
+
+//___________________________________________________________________
+Int_t AliHFEpidITS::GetMCpid(AliESDtrack *track){
+  //
+  // Return species of the track according to MC information
+  //
+  Int_t pdg = TMath::Abs(AliHFEpidBase::GetPdgCode(track));
+  Int_t pid = -1;
+  switch(pdg){
+    case 11:    pid = AliPID::kElectron; break;
+    case 13:    pid = AliPID::kMuon; break;
+    case 211:   pid = AliPID::kPion; break;
+    case 321:   pid = AliPID::kKaon; break;
+    case 2212:  pid = AliPID::kProton; break;
+    default:    pid = -1; break;
+  };
+  return pid;
+}
+
diff --git a/PWG3/hfe/AliHFEpidITS.h b/PWG3/hfe/AliHFEpidITS.h
new file mode 100644 (file)
index 0000000..90a80b9
--- /dev/null
@@ -0,0 +1,56 @@
+/**************************************************************************
+ * 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.                  *
+ **************************************************************************/
+#ifndef ALIHFEPIDITS_H
+#define ALIHFEPIDITS_H
+
+#ifndef ALIHFEPIDBASE_H
+#include "AliHFEpidBase.h"
+#endif
+
+class AliESDtrack;
+class AliVParticle;
+class TList;
+
+class AliHFEpidITS : public AliHFEpidBase{
+  enum{
+    kITSsigV1 = 0,
+    kITSsigV2 = 1,
+    kHistosSigAll = 2
+  };
+  public:
+    AliHFEpidITS(const Char_t *name);
+    AliHFEpidITS(const AliHFEpidITS &ref);
+    AliHFEpidITS& operator=(const AliHFEpidITS &ref);
+    virtual ~AliHFEpidITS();
+
+    virtual Bool_t InitializePID();
+    virtual Int_t IsSelected(AliVParticle *track);
+    virtual Bool_t HasQAhistos() const { return kTRUE; };
+
+    Double_t GetITSSignalV1(AliESDtrack *track);
+    Double_t GetITSSignalV2(AliESDtrack *track);
+  protected:
+    virtual void AddQAhistograms(TList *l);
+    void Copy(TObject &o) const;
+    void FillHistogramsSignalV1(Double_t p, Double_t signal, Int_t species);
+    void FillHistogramsSignalV2(Double_t p, Double_t signal, Int_t species);
+    Int_t GetMCpid(AliESDtrack *track);
+  private:
+    TList *fQAlist;      // QA histograms for ITS pid
+
+    ClassDef(AliHFEpidITS, 0)  // PID class for ITS
+};
+#endif
+