]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG3/hfe/AliHFEpidITS.cxx
correcting compilation warning
[u/mrichter/AliRoot.git] / PWG3 / hfe / AliHFEpidITS.cxx
CommitLineData
e8a6457a 1/**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3 * *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
6 * *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
15/*
16 * ITS PID class
17 * checks ITS PID based on ITS dE/dx truncated mean
18 *
19 * Authors: Matus Kalisky <matus.kalisky@cern.ch>
20 * Markus Fasel <M.Fasel@gsi.de>
21 *
22 */
722347d8 23#include <TClass.h>
e8a6457a 24#include <TH2F.h>
25#include <TList.h>
26#include <TMath.h>
722347d8 27#include <TString.h>
e8a6457a 28
722347d8 29#include "AliAODTrack.h"
30#include "AliAODMCParticle.h"
e8a6457a 31#include "AliESDtrack.h"
32#include "AliLog.h"
33#include "AliPID.h"
34#include "AliVParticle.h"
35
36#include "AliHFEpidITS.h"
37
38//___________________________________________________________________
39AliHFEpidITS::AliHFEpidITS(const Char_t *name):
40 AliHFEpidBase(name)
41 , fQAlist(0x0)
42{
43 //
44 // Default constructor
45 //
46}
47
48//___________________________________________________________________
49AliHFEpidITS::AliHFEpidITS(const AliHFEpidITS &ref):
50 AliHFEpidBase("")
51 , fQAlist(0x0)
52{
53 //
54 // Copy constructor
55 //
56 ref.Copy(*this);
57}
58
59//___________________________________________________________________
60AliHFEpidITS &AliHFEpidITS::operator=(const AliHFEpidITS &ref){
61 //
62 // Assignment operator
63 //
64 if(this != &ref) ref.Copy(*this);
65 return *this;
66}
67
68//___________________________________________________________________
69AliHFEpidITS::~AliHFEpidITS(){
70 //
71 // Destructor
72 //
73 if(fQAlist){
74 fQAlist->Clear();
75 delete fQAlist;
76 }
77}
78
79//___________________________________________________________________
80void AliHFEpidITS::Copy(TObject &o) const {
81 //
82 // Copy function
83 // Provides a deep copy
84 //
85 AliHFEpidITS &target = dynamic_cast<AliHFEpidITS &>(o);
86
87 target.fQAlist = dynamic_cast<TList *>(fQAlist->Clone());
88 AliHFEpidBase::Copy(target);
89}
90
91//___________________________________________________________________
92Bool_t AliHFEpidITS::InitializePID(){
93 //
94 // ITS PID initialization
95 //
96 return kTRUE;
97}
98
99
100//___________________________________________________________________
722347d8 101Int_t AliHFEpidITS::IsSelected(AliHFEpidObject* /*track*/){
e8a6457a 102 //
103 // Does PID decision for ITS
104 //
105 return 11; // @TODO: Implement ITS PID decision
106}
107
108//___________________________________________________________________
109void AliHFEpidITS::AddQAhistograms(TList *l){
110 //
111 // Adding QA histograms for ITS PID
112 //
113 // QA histograms are:
114 // - all Particles ITS signal vs. p (both methods)
115 // - single particle ITS signal vs. p (both methods)
116 //
117 if(!fQAlist) fQAlist = new TList;
118 fQAlist->SetName("fITSqaHistograms");
119
120 // prepare axis
121 const Int_t kMomentumBins = 41;
122 const Double_t kPtMin = 0.1;
123 const Double_t kPtMax = 10.;
124 const Int_t kSigBins = 300;
125 Double_t momentumBins[kMomentumBins];
126 for(Int_t ibin = 0; ibin < kMomentumBins; ibin++)
127 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)));
128
129 TH2 *histo = NULL;
130 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);
131 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);
132 for(Int_t ispec = 0; ispec < AliPID::kSPECIES; ispec++){
133 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);
134 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);
135 }
136 l->Add(fQAlist);
137}
138
139//___________________________________________________________________
722347d8 140Double_t AliHFEpidITS::GetITSSignalV1(AliVParticle *vtrack, Int_t mcPID){
e8a6457a 141 //
142 // Calculate the ITS signal according to the mean charge of the clusters
143 //
722347d8 144 if(!TString(vtrack->IsA()->GetName()).CompareTo("AliAODtrack")){
145 AliError("PID for AODs not implemented yet");
146 return 0.;
147 }
148 AliESDtrack *track = dynamic_cast<AliESDtrack *>(vtrack);
e8a6457a 149 Double_t signal = 0.;
150#ifdef TRUNK
151 Double_t dedx[4];
152 track->GetITSdEdxSamples(dedx);
153 signal = TMath::Mean(4, dedx);
154#else
155 signal = track->GetITSsignal();
156#endif
157 Double_t p = track->GetTPCInnerParam() ? track->GetTPCInnerParam()->P() : track->P();
158 AliDebug(1, Form("Momentum: %f, ITS Signal: %f", p, signal));
722347d8 159 if(IsQAon()) FillHistogramsSignalV1(p, signal, mcPID);
e8a6457a 160 return signal;
161}
162
163//___________________________________________________________________
722347d8 164Double_t AliHFEpidITS::GetITSSignalV2(AliVParticle *vtrack, Int_t mcPID){
e8a6457a 165 //
166 // Calculates the ITS signal. Truncated mean is used.
167 //
722347d8 168 if(!TString(vtrack->IsA()->GetName()).CompareTo("AliAODtrack")){
169 AliError("PID for AODs not implemented yet");
170 return 0.;
171 }
172 AliESDtrack *track = dynamic_cast<AliESDtrack *>(vtrack);
e8a6457a 173 Double_t dedx[4], tmp[4];
174 Int_t indices[4];
175 track->GetITSdEdxSamples(tmp);
176 TMath::Sort(4, tmp, indices);
177 for(Int_t ien = 0; ien < 4; ien++) dedx[ien] = tmp[indices[ien]];
178 Double_t signal = TMath::Mean(3, dedx);
179 Double_t p = track->GetTPCInnerParam() ? track->GetTPCInnerParam()->P() : track->P();
180 AliDebug(1, Form("Momentum: %f, ITS Signal: %f", p, signal));
722347d8 181 if(IsQAon()) FillHistogramsSignalV2(p, signal, mcPID);
e8a6457a 182 return signal;
183}
184
185//___________________________________________________________________
186void AliHFEpidITS::FillHistogramsSignalV1(Double_t p, Double_t signal, Int_t species){
187 (dynamic_cast<TH2 *>(fQAlist->At(kITSsigV1)))->Fill(p, signal);
188 if(species >= 0 && species < AliPID::kSPECIES)
189 (dynamic_cast<TH2 *>(fQAlist->At(kHistosSigAll + 2 * species)))->Fill(p, signal);
190}
191
192//___________________________________________________________________
193void AliHFEpidITS::FillHistogramsSignalV2(Double_t p, Double_t signal, Int_t species){
194 (dynamic_cast<TH2 *>(fQAlist->At(kITSsigV2)))->Fill(p, signal);
195 if(species >= 0 && species < AliPID::kSPECIES)
196 (dynamic_cast<TH2 *>(fQAlist->At(kHistosSigAll + 2 * species + 1)))->Fill(p, signal);
197}
198