ROOT logo
/**************************************************************************
* 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.                  *
**************************************************************************/
//
// Class AliHFEitsPIDqa
// Monitoring ITS PID in the HFE PID montioring framework. The following
// quantities are monitored:
//   ITS dE/dx (Number of sigmas)
// (Always as function of momentum, particle species and centrality 
// before and after cut)
// More information about the PID monitoring framework can be found in
// AliHFEpidQAmanager.cxx and AliHFEdetPIDqa.cxx
//
// Author:
//    Yvonne Pachmayer <pachmay@physi.uni-heidelberg.de>
//
#include <TBrowser.h>
#include <TClass.h>
#include <TH2.h>
#include <THnSparse.h>
#include <TString.h>

#include "AliAODTrack.h"
#include "AliESDtrack.h"
#include "AliLog.h"
#include "AliPID.h"
#include "AliPIDResponse.h"

#include "AliHFEcollection.h"
#include "AliHFEpidBase.h"
#include "AliHFEpidQAmanager.h"
#include "AliHFEpidITS.h"
#include "AliHFEtools.h"
#include "AliHFEitsPIDqa.h"

ClassImp(AliHFEitsPIDqa)

//_________________________________________________________
AliHFEitsPIDqa::AliHFEitsPIDqa():
    AliHFEdetPIDqa()
  , fHistos(NULL)
  , fBrowseCentrality(-1)
{
  //
  // Dummy constructor
  //
}

//_________________________________________________________
AliHFEitsPIDqa::AliHFEitsPIDqa(const char* name):
    AliHFEdetPIDqa(name, "QA for ITS")
  , fHistos(NULL)
  , fBrowseCentrality(-1)
{
  //
  // Default constructor
  //
}

//_________________________________________________________
AliHFEitsPIDqa::AliHFEitsPIDqa(const AliHFEitsPIDqa &o):
    AliHFEdetPIDqa(o)
  , fHistos(NULL)
  , fBrowseCentrality(o.fBrowseCentrality)
{
  //
  // Copy constructor
  //
  o.Copy(*this);
}

//_________________________________________________________
AliHFEitsPIDqa &AliHFEitsPIDqa::operator=(const AliHFEitsPIDqa &o){
  //
  // Do assignment
  //
  AliHFEdetPIDqa::operator=(o);
  if(&o != this) o.Copy(*this);
  return *this;
}

//_________________________________________________________
AliHFEitsPIDqa::~AliHFEitsPIDqa(){
  //
  // Destructor
  //
  if(fHistos) delete fHistos;
}

//_________________________________________________________
void AliHFEitsPIDqa::Copy(TObject &o) const {
  //
  // Make copy
  //
  AliHFEitsPIDqa &target = dynamic_cast<AliHFEitsPIDqa &>(o);
  if(target.fHistos){
    delete target.fHistos;
    target.fHistos = NULL;
  }
  if(fHistos) target.fHistos = new AliHFEcollection(*fHistos);
  target.fBrowseCentrality = fBrowseCentrality;
}

//_________________________________________________________
Long64_t AliHFEitsPIDqa::Merge(TCollection *coll){
  //
  // Merge with other objects
  //
  if(!coll) return 0;
  if(coll->IsEmpty()) return 1;

  TIter it(coll);
  AliHFEitsPIDqa *refQA = NULL;
  TObject *o = NULL;
  Long64_t count = 0;
  TList listHistos;
  while((o = it())){
    refQA = dynamic_cast<AliHFEitsPIDqa *>(o);
    if(!refQA) continue;

    listHistos.Add(refQA->fHistos);
    count++; 
  }
  fHistos->Merge(&listHistos);
  return count + 1;
}

//_________________________________________________________
void AliHFEitsPIDqa::Browse(TBrowser *b){
  //
  // Browse the PID QA
  //
  if(b){
    if(fHistos){
      b->Add(fHistos, fHistos->GetName());

      // Make Projections of the nsigma Spectra and add them to a new Folder
      TString specnames[AliPID::kSPECIES+1] = {"All", "Electrons", "Muon", "Pions", "Kaon", "Protons"};
      Int_t specind[AliPID::kSPECIES+1] = {-1, AliPID::kElectron, AliPID::kMuon, AliPID::kPion, AliPID::kKaon, AliPID::kProton};
      TList *listNsigma = new TList;
      listNsigma->SetOwner();

      TH2 *hptr = NULL; 
      for(Int_t ispec = 0; ispec < AliPID::kSPECIES+1; ispec++){
        for(Int_t istep = 0; istep < 2; istep++){
          hptr = MakeSpectrumNSigma(static_cast<AliHFEdetPIDqa::EStep_t>(istep), specind[ispec], fBrowseCentrality);
          hptr->SetName(Form("hITSnsigma%s%s%s", specnames[ispec].Data(), istep == 0 ? "Before" : "After", fBrowseCentrality == -1 ? "MinBias" : Form("Cent%d", fBrowseCentrality)));
          listNsigma->Add(hptr);
        }
      }
      
      b->Add(listNsigma, "Projections NSigma");
    }
  }
}

//_________________________________________________________
void AliHFEitsPIDqa::Initialize(){
  //
  // Define Histograms
  //

  fHistos = new AliHFEcollection("itsqahistos", "Collection of ITS QA histograms");

  // Make common binning
  const Int_t kNdim = 5;
  const Int_t kPIDbins = AliPID::kSPECIES + 1;
  const Int_t kSteps = 2;
  const Int_t kCentralityBins = 11;
  const Double_t kMinPID = -1;
  const Double_t kMinP = 0.;
  const Double_t kMaxPID = (Double_t)AliPID::kSPECIES;
  const Double_t kMaxP = 2.;

  // Quantities where one can switch between low and high resolution
  Int_t kPbins = fQAmanager->HasHighResolutionHistos() ? 100 : 10;
  Int_t kSigmaBins = fQAmanager->HasHighResolutionHistos() ? 1400 : 240;
 
  // 1st histogram: ITS sigmas: (species, p, nsigma, step, centrality)
  Int_t nBinsSigma[kNdim] = {kPIDbins, kPbins, kSigmaBins, kSteps, kCentralityBins};
  Double_t minSigma[kNdim] = {kMinPID, kMinP, -12., 0., 0.};
  Double_t maxSigma[kNdim] = {kMaxPID, kMaxP, 12., 2., 11.};
  fHistos->CreateTHnSparse("itsnSigma", "ITS signal; species; p [GeV/c]; ITS signal [a.u.]; Selection Step; Centrality; Eta", kNdim, nBinsSigma, minSigma, maxSigma);

  // General ITS QA
}

//_________________________________________________________
void AliHFEitsPIDqa::ProcessTrack(const AliHFEpidObject *track, AliHFEdetPIDqa::EStep_t step){
  //
  // Fill ITS histograms
  //
  AliDebug(1, Form("QA started for ITS PID for step %d", (Int_t)step));
  //AliHFEpidObject::AnalysisType_t anatype = track->IsESDanalysis() ? AliHFEpidObject::kESDanalysis : AliHFEpidObject::kAODanalysis;
  Float_t centrality = track->GetCentrality();
  Int_t species = track->GetAbInitioPID();
  if(species >= AliPID::kSPECIES) species = -1;

  AliHFEpidITS *itspid = dynamic_cast<AliHFEpidITS *>(fQAmanager->GetDetectorPID(AliHFEpid::kITSpid));
  Double_t contentSignal[5];
  contentSignal[0] = species;
  contentSignal[1] = track->GetRecTrack()->P();
  contentSignal[2] = itspid ? itspid->GetITSNsigmaCorrected(track->GetRecTrack()) : -100.; 
  contentSignal[3] = step;
  contentSignal[4] = centrality;
 
  fHistos->Fill("itsnSigma", contentSignal);
}

//_________________________________________________________
TH2 *AliHFEitsPIDqa::MakeSpectrumNSigma(AliHFEdetPIDqa::EStep_t istep, Int_t species, Int_t centralityClass){
  //
  // Plot the Spectrum
  //
  THnSparseF *hSignal = dynamic_cast<THnSparseF *>(fHistos->Get("itsnSigma"));
  if(!hSignal) return NULL;
  hSignal->GetAxis(3)->SetRange(istep + 1, istep + 1);
  if(species >= 0 && species < AliPID::kSPECIES)
    hSignal->GetAxis(0)->SetRange(2 + species, 2 + species);
  TString hname = Form("hITSsigma%s", istep == AliHFEdetPIDqa::kBeforePID ? "before" : "after"), 
          htitle = Form("ITS dE/dx Spectrum[#sigma] %s selection", istep == AliHFEdetPIDqa::kBeforePID ? "before" : "after");
  if(species > -1){
    hname += AliPID::ParticleName(species);
    htitle += Form(" for %ss", AliPID::ParticleName(species));
  }
  TString centname, centtitle;
  Bool_t hasCentralityInfo = kTRUE;
  if(centralityClass > -1){
    if(hSignal->GetNdimensions() < 5){
      AliError("Centrality Information not available");
      centname = centtitle = "MinBias";
      hasCentralityInfo= kFALSE;
    } else {
      // Project centrality classes
      // -1 is Min. Bias
      hSignal->GetAxis(4)->SetRange(centralityClass+1, centralityClass+1);
      centname = Form("Cent%d", centralityClass);
      centtitle = Form(" Centrality %d", centralityClass);
    }
  } else {
    centname = centtitle = "MinBias";
    hasCentralityInfo= kFALSE;
  }
  hname += centtitle;
  htitle += centtitle;

  TH2 *hTmp = hSignal->Projection(2,1);
  hTmp->SetName(hname.Data());
  hTmp->SetTitle(htitle.Data());
  hTmp->SetStats(kFALSE);
  hTmp->GetXaxis()->SetTitle("p [GeV/c]");
  hTmp->GetYaxis()->SetTitle("ITS dE/dx - <dE/dx>|_{el} [#sigma]");
  hSignal->GetAxis(3)->SetRange(0, hSignal->GetAxis(3)->GetNbins());
  hSignal->GetAxis(0)->SetRange(0, hSignal->GetAxis(0)->GetNbins());
  if(hasCentralityInfo) hSignal->GetAxis(4)->SetRange(0, hSignal->GetAxis(4)->GetNbins());
  return hTmp;
}

 AliHFEitsPIDqa.cxx:1
 AliHFEitsPIDqa.cxx:2
 AliHFEitsPIDqa.cxx:3
 AliHFEitsPIDqa.cxx:4
 AliHFEitsPIDqa.cxx:5
 AliHFEitsPIDqa.cxx:6
 AliHFEitsPIDqa.cxx:7
 AliHFEitsPIDqa.cxx:8
 AliHFEitsPIDqa.cxx:9
 AliHFEitsPIDqa.cxx:10
 AliHFEitsPIDqa.cxx:11
 AliHFEitsPIDqa.cxx:12
 AliHFEitsPIDqa.cxx:13
 AliHFEitsPIDqa.cxx:14
 AliHFEitsPIDqa.cxx:15
 AliHFEitsPIDqa.cxx:16
 AliHFEitsPIDqa.cxx:17
 AliHFEitsPIDqa.cxx:18
 AliHFEitsPIDqa.cxx:19
 AliHFEitsPIDqa.cxx:20
 AliHFEitsPIDqa.cxx:21
 AliHFEitsPIDqa.cxx:22
 AliHFEitsPIDqa.cxx:23
 AliHFEitsPIDqa.cxx:24
 AliHFEitsPIDqa.cxx:25
 AliHFEitsPIDqa.cxx:26
 AliHFEitsPIDqa.cxx:27
 AliHFEitsPIDqa.cxx:28
 AliHFEitsPIDqa.cxx:29
 AliHFEitsPIDqa.cxx:30
 AliHFEitsPIDqa.cxx:31
 AliHFEitsPIDqa.cxx:32
 AliHFEitsPIDqa.cxx:33
 AliHFEitsPIDqa.cxx:34
 AliHFEitsPIDqa.cxx:35
 AliHFEitsPIDqa.cxx:36
 AliHFEitsPIDqa.cxx:37
 AliHFEitsPIDqa.cxx:38
 AliHFEitsPIDqa.cxx:39
 AliHFEitsPIDqa.cxx:40
 AliHFEitsPIDqa.cxx:41
 AliHFEitsPIDqa.cxx:42
 AliHFEitsPIDqa.cxx:43
 AliHFEitsPIDqa.cxx:44
 AliHFEitsPIDqa.cxx:45
 AliHFEitsPIDqa.cxx:46
 AliHFEitsPIDqa.cxx:47
 AliHFEitsPIDqa.cxx:48
 AliHFEitsPIDqa.cxx:49
 AliHFEitsPIDqa.cxx:50
 AliHFEitsPIDqa.cxx:51
 AliHFEitsPIDqa.cxx:52
 AliHFEitsPIDqa.cxx:53
 AliHFEitsPIDqa.cxx:54
 AliHFEitsPIDqa.cxx:55
 AliHFEitsPIDqa.cxx:56
 AliHFEitsPIDqa.cxx:57
 AliHFEitsPIDqa.cxx:58
 AliHFEitsPIDqa.cxx:59
 AliHFEitsPIDqa.cxx:60
 AliHFEitsPIDqa.cxx:61
 AliHFEitsPIDqa.cxx:62
 AliHFEitsPIDqa.cxx:63
 AliHFEitsPIDqa.cxx:64
 AliHFEitsPIDqa.cxx:65
 AliHFEitsPIDqa.cxx:66
 AliHFEitsPIDqa.cxx:67
 AliHFEitsPIDqa.cxx:68
 AliHFEitsPIDqa.cxx:69
 AliHFEitsPIDqa.cxx:70
 AliHFEitsPIDqa.cxx:71
 AliHFEitsPIDqa.cxx:72
 AliHFEitsPIDqa.cxx:73
 AliHFEitsPIDqa.cxx:74
 AliHFEitsPIDqa.cxx:75
 AliHFEitsPIDqa.cxx:76
 AliHFEitsPIDqa.cxx:77
 AliHFEitsPIDqa.cxx:78
 AliHFEitsPIDqa.cxx:79
 AliHFEitsPIDqa.cxx:80
 AliHFEitsPIDqa.cxx:81
 AliHFEitsPIDqa.cxx:82
 AliHFEitsPIDqa.cxx:83
 AliHFEitsPIDqa.cxx:84
 AliHFEitsPIDqa.cxx:85
 AliHFEitsPIDqa.cxx:86
 AliHFEitsPIDqa.cxx:87
 AliHFEitsPIDqa.cxx:88
 AliHFEitsPIDqa.cxx:89
 AliHFEitsPIDqa.cxx:90
 AliHFEitsPIDqa.cxx:91
 AliHFEitsPIDqa.cxx:92
 AliHFEitsPIDqa.cxx:93
 AliHFEitsPIDqa.cxx:94
 AliHFEitsPIDqa.cxx:95
 AliHFEitsPIDqa.cxx:96
 AliHFEitsPIDqa.cxx:97
 AliHFEitsPIDqa.cxx:98
 AliHFEitsPIDqa.cxx:99
 AliHFEitsPIDqa.cxx:100
 AliHFEitsPIDqa.cxx:101
 AliHFEitsPIDqa.cxx:102
 AliHFEitsPIDqa.cxx:103
 AliHFEitsPIDqa.cxx:104
 AliHFEitsPIDqa.cxx:105
 AliHFEitsPIDqa.cxx:106
 AliHFEitsPIDqa.cxx:107
 AliHFEitsPIDqa.cxx:108
 AliHFEitsPIDqa.cxx:109
 AliHFEitsPIDqa.cxx:110
 AliHFEitsPIDqa.cxx:111
 AliHFEitsPIDqa.cxx:112
 AliHFEitsPIDqa.cxx:113
 AliHFEitsPIDqa.cxx:114
 AliHFEitsPIDqa.cxx:115
 AliHFEitsPIDqa.cxx:116
 AliHFEitsPIDqa.cxx:117
 AliHFEitsPIDqa.cxx:118
 AliHFEitsPIDqa.cxx:119
 AliHFEitsPIDqa.cxx:120
 AliHFEitsPIDqa.cxx:121
 AliHFEitsPIDqa.cxx:122
 AliHFEitsPIDqa.cxx:123
 AliHFEitsPIDqa.cxx:124
 AliHFEitsPIDqa.cxx:125
 AliHFEitsPIDqa.cxx:126
 AliHFEitsPIDqa.cxx:127
 AliHFEitsPIDqa.cxx:128
 AliHFEitsPIDqa.cxx:129
 AliHFEitsPIDqa.cxx:130
 AliHFEitsPIDqa.cxx:131
 AliHFEitsPIDqa.cxx:132
 AliHFEitsPIDqa.cxx:133
 AliHFEitsPIDqa.cxx:134
 AliHFEitsPIDqa.cxx:135
 AliHFEitsPIDqa.cxx:136
 AliHFEitsPIDqa.cxx:137
 AliHFEitsPIDqa.cxx:138
 AliHFEitsPIDqa.cxx:139
 AliHFEitsPIDqa.cxx:140
 AliHFEitsPIDqa.cxx:141
 AliHFEitsPIDqa.cxx:142
 AliHFEitsPIDqa.cxx:143
 AliHFEitsPIDqa.cxx:144
 AliHFEitsPIDqa.cxx:145
 AliHFEitsPIDqa.cxx:146
 AliHFEitsPIDqa.cxx:147
 AliHFEitsPIDqa.cxx:148
 AliHFEitsPIDqa.cxx:149
 AliHFEitsPIDqa.cxx:150
 AliHFEitsPIDqa.cxx:151
 AliHFEitsPIDqa.cxx:152
 AliHFEitsPIDqa.cxx:153
 AliHFEitsPIDqa.cxx:154
 AliHFEitsPIDqa.cxx:155
 AliHFEitsPIDqa.cxx:156
 AliHFEitsPIDqa.cxx:157
 AliHFEitsPIDqa.cxx:158
 AliHFEitsPIDqa.cxx:159
 AliHFEitsPIDqa.cxx:160
 AliHFEitsPIDqa.cxx:161
 AliHFEitsPIDqa.cxx:162
 AliHFEitsPIDqa.cxx:163
 AliHFEitsPIDqa.cxx:164
 AliHFEitsPIDqa.cxx:165
 AliHFEitsPIDqa.cxx:166
 AliHFEitsPIDqa.cxx:167
 AliHFEitsPIDqa.cxx:168
 AliHFEitsPIDqa.cxx:169
 AliHFEitsPIDqa.cxx:170
 AliHFEitsPIDqa.cxx:171
 AliHFEitsPIDqa.cxx:172
 AliHFEitsPIDqa.cxx:173
 AliHFEitsPIDqa.cxx:174
 AliHFEitsPIDqa.cxx:175
 AliHFEitsPIDqa.cxx:176
 AliHFEitsPIDqa.cxx:177
 AliHFEitsPIDqa.cxx:178
 AliHFEitsPIDqa.cxx:179
 AliHFEitsPIDqa.cxx:180
 AliHFEitsPIDqa.cxx:181
 AliHFEitsPIDqa.cxx:182
 AliHFEitsPIDqa.cxx:183
 AliHFEitsPIDqa.cxx:184
 AliHFEitsPIDqa.cxx:185
 AliHFEitsPIDqa.cxx:186
 AliHFEitsPIDqa.cxx:187
 AliHFEitsPIDqa.cxx:188
 AliHFEitsPIDqa.cxx:189
 AliHFEitsPIDqa.cxx:190
 AliHFEitsPIDqa.cxx:191
 AliHFEitsPIDqa.cxx:192
 AliHFEitsPIDqa.cxx:193
 AliHFEitsPIDqa.cxx:194
 AliHFEitsPIDqa.cxx:195
 AliHFEitsPIDqa.cxx:196
 AliHFEitsPIDqa.cxx:197
 AliHFEitsPIDqa.cxx:198
 AliHFEitsPIDqa.cxx:199
 AliHFEitsPIDqa.cxx:200
 AliHFEitsPIDqa.cxx:201
 AliHFEitsPIDqa.cxx:202
 AliHFEitsPIDqa.cxx:203
 AliHFEitsPIDqa.cxx:204
 AliHFEitsPIDqa.cxx:205
 AliHFEitsPIDqa.cxx:206
 AliHFEitsPIDqa.cxx:207
 AliHFEitsPIDqa.cxx:208
 AliHFEitsPIDqa.cxx:209
 AliHFEitsPIDqa.cxx:210
 AliHFEitsPIDqa.cxx:211
 AliHFEitsPIDqa.cxx:212
 AliHFEitsPIDqa.cxx:213
 AliHFEitsPIDqa.cxx:214
 AliHFEitsPIDqa.cxx:215
 AliHFEitsPIDqa.cxx:216
 AliHFEitsPIDqa.cxx:217
 AliHFEitsPIDqa.cxx:218
 AliHFEitsPIDqa.cxx:219
 AliHFEitsPIDqa.cxx:220
 AliHFEitsPIDqa.cxx:221
 AliHFEitsPIDqa.cxx:222
 AliHFEitsPIDqa.cxx:223
 AliHFEitsPIDqa.cxx:224
 AliHFEitsPIDqa.cxx:225
 AliHFEitsPIDqa.cxx:226
 AliHFEitsPIDqa.cxx:227
 AliHFEitsPIDqa.cxx:228
 AliHFEitsPIDqa.cxx:229
 AliHFEitsPIDqa.cxx:230
 AliHFEitsPIDqa.cxx:231
 AliHFEitsPIDqa.cxx:232
 AliHFEitsPIDqa.cxx:233
 AliHFEitsPIDqa.cxx:234
 AliHFEitsPIDqa.cxx:235
 AliHFEitsPIDqa.cxx:236
 AliHFEitsPIDqa.cxx:237
 AliHFEitsPIDqa.cxx:238
 AliHFEitsPIDqa.cxx:239
 AliHFEitsPIDqa.cxx:240
 AliHFEitsPIDqa.cxx:241
 AliHFEitsPIDqa.cxx:242
 AliHFEitsPIDqa.cxx:243
 AliHFEitsPIDqa.cxx:244
 AliHFEitsPIDqa.cxx:245
 AliHFEitsPIDqa.cxx:246
 AliHFEitsPIDqa.cxx:247
 AliHFEitsPIDqa.cxx:248
 AliHFEitsPIDqa.cxx:249
 AliHFEitsPIDqa.cxx:250
 AliHFEitsPIDqa.cxx:251
 AliHFEitsPIDqa.cxx:252
 AliHFEitsPIDqa.cxx:253
 AliHFEitsPIDqa.cxx:254
 AliHFEitsPIDqa.cxx:255
 AliHFEitsPIDqa.cxx:256
 AliHFEitsPIDqa.cxx:257
 AliHFEitsPIDqa.cxx:258
 AliHFEitsPIDqa.cxx:259
 AliHFEitsPIDqa.cxx:260
 AliHFEitsPIDqa.cxx:261
 AliHFEitsPIDqa.cxx:262
 AliHFEitsPIDqa.cxx:263
 AliHFEitsPIDqa.cxx:264
 AliHFEitsPIDqa.cxx:265
 AliHFEitsPIDqa.cxx:266
 AliHFEitsPIDqa.cxx:267
 AliHFEitsPIDqa.cxx:268
 AliHFEitsPIDqa.cxx:269