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.                  *
 **************************************************************************/
//
//
// 
//Task for analysis if TPC base QA 

// QA histogram
// Dimensions
// 0 - chi2
// 1 - number of clusters
// 2 - number of findable clusters
// 3 - number of clusters/ findable clusters  
// 4 - pt          - at the entrance of the TPC
// 5 - eta         - at the entrance of the TPC
// 6 - phi         - at the entrance of the TPC

//-----------------------------------------------------------------------
// Author : M.Ivanov  marian.ivanov@cern.ch - 
//-----------------------------------------------------------------------



//
// ROOT includes
#include <TChain.h>
#include <TMath.h>
#include <TVectorD.h>
#include <TSystem.h>
#include <TFile.h>
#include <TParticle.h>

// ALIROOT includes
#include <AliAnalysisManager.h>
#include <AliESDInputHandler.h>
#include "AliStack.h"
#include "AliMCEvent.h"
#include "AliMCEventHandler.h"
#include "AliMathBase.h"

#include <AliESD.h>
#include "AliExternalTrackParam.h"
#include "AliTracker.h"
#include "AliTPCseed.h"
//
#include "AliTPCtaskQA.h"
//
#include <THnSparse.h>

//

// STL includes
#include <iostream>

using namespace std;


ClassImp(AliTPCtaskQA)

//________________________________________________________________________
AliTPCtaskQA::AliTPCtaskQA() : 
  AliAnalysisTask(), 
  fMCinfo(0),     //! MC event handler
  fESD(0),
  fList(0),
  fTPCqa(0)
{
  //
  // Default constructor (should not be used)
  //
}

AliTPCtaskQA::AliTPCtaskQA(const AliTPCtaskQA& info) : 
  AliAnalysisTask(info), 
  fMCinfo(info.fMCinfo),     //! MC event handler
  fESD(info.fESD),        //!
  fList(0),
  fTPCqa(0)
{
  //
  // Dummy Copy  constructor - no copy constructor for THnSparse 
  //
  fList = (TObjArray*)(info.fList->Clone());
}



//________________________________________________________________________
AliTPCtaskQA::AliTPCtaskQA(const char *name) : 
  AliAnalysisTask(name, "AliTPCtaskQA"), 
  fMCinfo(0),     //! MC event handler
  fESD(0),
  fList(0),
  fTPCqa(0)
{
  //
  // Normal constructor
  //
  // Input slot #0 works with a TChain
  DefineInput(0, TChain::Class());
  // Output slot #0 writes into a TList
  DefineOutput(0, TObjArray::Class());
  //
  //make histos
  Init(); 
}

void AliTPCtaskQA::Init(){
  //
  // Init qa histogram
  // Dimensions
  //
  // 0 - chi2
  // 1 - number of clusters
  // 2 - number of findable clusters
  // 3 - number of clusters/ findable clusters  
  // 4 - pt          - at the entrance of the TPC
  // 5 - eta         - at the entrance of the TPC
  // 6 - phi         - at the entrance of the TPC
  


  Double_t xmin[7],  xmax[7];
  Int_t    nbins[7];
  // 
  nbins[0]=100;                // chi2
  xmin[0]=0; xmax[0]=10;
  //
  nbins[1]=80;                 // ncls
  xmin[1]=0; xmax[1]=160;
  //
  nbins[2]=80;                 // nclsf
  xmin[2]=0; xmax[2]=160;
  //
  nbins[3]=40;                 // ncls/nclsf
  xmin[3] =-0.1; xmax[3]=1.1;
  //
  nbins[4]=50;                 // pt
  xmin[4] =0.1; xmax[4]=100;

  nbins[5]=40;                 // eta
  xmin[5] =-2; xmax[5]=2;

  nbins[6]= 360;                 // phi - 10 bins per sector
  xmin[6] = -TMath::Pi(); xmax[6]=TMath::Pi();



  fTPCqa = new THnSparseS("TPC qa","TPC qa",7,nbins,xmin,xmax);
  //
  //
  BinLogX(fTPCqa->GetAxis(4));
  
  const char *hisAxisName[7] ={"chi2/N_{cl}","N_{cl}","N_{clF}","N_{clR}","p_{t}","#eta","#phi"};
  //  
  for (Int_t i=0;i<7;i++) {
    fTPCqa->GetAxis(i)->SetTitle(hisAxisName[i]);
    fTPCqa->GetAxis(i)->SetName(hisAxisName[i]);
  }
  fList = new TObjArray(3);
  fList->AddAt(fTPCqa,0);
}




AliTPCtaskQA::~AliTPCtaskQA(){
  //
  //
  //
  delete fTPCqa;
}


//________________________________________________________________________
void AliTPCtaskQA::ConnectInputData(Option_t *) 
{
  //
  // Connect the input data
  //

  TTree* tree=dynamic_cast<TTree*>(GetInputData(0));
  if (!tree) {
    //Printf("ERROR: Could not read chain from input slot 0");
  }
  else {
    AliESDInputHandler *esdH = dynamic_cast<AliESDInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
    if (!esdH) {
      //Printf("ERROR: Could not get ESDInputHandler");
    }
    else {
      fESD = esdH->GetEvent();
      //Printf("*** CONNECTED NEW EVENT ****");
    }  
  }
  AliMCEventHandler* mcinfo = (AliMCEventHandler*) (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler());  
  mcinfo->SetReadTR(kTRUE);
  
  fMCinfo = mcinfo->MCEvent();


}






//________________________________________________________________________
void AliTPCtaskQA::CreateOutputObjects() 
{
  //
  // Connect the output objects
  //

}


//________________________________________________________________________
void AliTPCtaskQA::Exec(Option_t *) {
  //
  // Execute analysis for current event 
  //


  // If MC has been connected   

  if (!fMCinfo){
    cout << "Not MC info\n" << endl;
  }else{
    ProcessMCInfo();
  }
  //
  PostData(0, fList);
}      










void  AliTPCtaskQA::ProcessMCInfo(){
  //
  //
  //
  //

  if (!fTPCqa) Init();
  Int_t npart   = fMCinfo->GetNumberOfTracks();
  Int_t ntracks = fESD->GetNumberOfTracks(); 
  if (npart<=0) return;
  if (ntracks<=0) return;
  //
  //
  TParticle * particle= new TParticle;
  TClonesArray * trefs = new TClonesArray("AliTrackReference");
  
  for (Int_t itrack=0;itrack<ntracks;itrack++){
    AliESDtrack *track = fESD->GetTrack(itrack);
    //
    if ((track->GetStatus()&AliESDtrack::kTPCrefit)==0) continue;   // only refited tracks
    Int_t ipart = TMath::Abs(track->GetLabel());
    //
    Int_t status = fMCinfo->GetParticleAndTR(ipart, particle, trefs);
    if (status<0) continue;
    if (!particle) continue;
    if (!trefs) continue;
    //
    //
    AliTrackReference *tpcRef=0;
    for (Int_t iref=0; iref<trefs->GetEntries(); iref++){
      AliTrackReference *ref = (AliTrackReference*)trefs->At(iref);
      if (ref->DetectorId()== AliTrackReference::kTPC){
	tpcRef=ref;
	break;
      }
    }
    if (!tpcRef) continue;
    
    //
    // Fill histos
    //
    Double_t x[7];
    x[0]= track->GetTPCchi2()/track->GetTPCNcls();
    x[1]= track->GetTPCNcls();
    x[2]= track->GetTPCNclsF();
    x[3]= Float_t(track->GetTPCNcls())/Float_t(track->GetTPCNclsF());
    x[4]= tpcRef->Pt();
    x[5]= -0.5*TMath::Log((tpcRef->P()+tpcRef->Pz())/(tpcRef->P()-tpcRef->Pz()));
    x[6]= TMath::ATan2(tpcRef->Y(),tpcRef->X());
    //
    fTPCqa->Fill(x);
  }
}






void AliTPCtaskQA::BinLogX(TAxis *axis) {
  //
  //
  //
  Int_t bins = axis->GetNbins();
  
  Double_t from = axis->GetXmin();
  Double_t to   = axis->GetXmax();
  Double_t *new_bins = new Double_t[bins + 1];
  
  new_bins[0] = from;
  Double_t factor = pow(to/from, 1./bins);
  
  for (Int_t i = 1; i <= bins; i++) {
    new_bins[i] = factor * new_bins[i-1];
  }
  axis->Set(bins, new_bins);
  delete [] new_bins;
}


AliTPCtaskQA* AliTPCtaskQA::ReadFromFile(const char *fname){
  //
  //
  //
  AliTPCtaskQA *qa = new AliTPCtaskQA;
  TFile *f = new TFile(fname);
  TObjArray *array= (TObjArray*)f->Get("tpcTaskQA");
  qa->fTPCqa =  (THnSparse*)array->At(0);  
  delete f;
  return qa;
}

 AliTPCtaskQA.cxx:1
 AliTPCtaskQA.cxx:2
 AliTPCtaskQA.cxx:3
 AliTPCtaskQA.cxx:4
 AliTPCtaskQA.cxx:5
 AliTPCtaskQA.cxx:6
 AliTPCtaskQA.cxx:7
 AliTPCtaskQA.cxx:8
 AliTPCtaskQA.cxx:9
 AliTPCtaskQA.cxx:10
 AliTPCtaskQA.cxx:11
 AliTPCtaskQA.cxx:12
 AliTPCtaskQA.cxx:13
 AliTPCtaskQA.cxx:14
 AliTPCtaskQA.cxx:15
 AliTPCtaskQA.cxx:16
 AliTPCtaskQA.cxx:17
 AliTPCtaskQA.cxx:18
 AliTPCtaskQA.cxx:19
 AliTPCtaskQA.cxx:20
 AliTPCtaskQA.cxx:21
 AliTPCtaskQA.cxx:22
 AliTPCtaskQA.cxx:23
 AliTPCtaskQA.cxx:24
 AliTPCtaskQA.cxx:25
 AliTPCtaskQA.cxx:26
 AliTPCtaskQA.cxx:27
 AliTPCtaskQA.cxx:28
 AliTPCtaskQA.cxx:29
 AliTPCtaskQA.cxx:30
 AliTPCtaskQA.cxx:31
 AliTPCtaskQA.cxx:32
 AliTPCtaskQA.cxx:33
 AliTPCtaskQA.cxx:34
 AliTPCtaskQA.cxx:35
 AliTPCtaskQA.cxx:36
 AliTPCtaskQA.cxx:37
 AliTPCtaskQA.cxx:38
 AliTPCtaskQA.cxx:39
 AliTPCtaskQA.cxx:40
 AliTPCtaskQA.cxx:41
 AliTPCtaskQA.cxx:42
 AliTPCtaskQA.cxx:43
 AliTPCtaskQA.cxx:44
 AliTPCtaskQA.cxx:45
 AliTPCtaskQA.cxx:46
 AliTPCtaskQA.cxx:47
 AliTPCtaskQA.cxx:48
 AliTPCtaskQA.cxx:49
 AliTPCtaskQA.cxx:50
 AliTPCtaskQA.cxx:51
 AliTPCtaskQA.cxx:52
 AliTPCtaskQA.cxx:53
 AliTPCtaskQA.cxx:54
 AliTPCtaskQA.cxx:55
 AliTPCtaskQA.cxx:56
 AliTPCtaskQA.cxx:57
 AliTPCtaskQA.cxx:58
 AliTPCtaskQA.cxx:59
 AliTPCtaskQA.cxx:60
 AliTPCtaskQA.cxx:61
 AliTPCtaskQA.cxx:62
 AliTPCtaskQA.cxx:63
 AliTPCtaskQA.cxx:64
 AliTPCtaskQA.cxx:65
 AliTPCtaskQA.cxx:66
 AliTPCtaskQA.cxx:67
 AliTPCtaskQA.cxx:68
 AliTPCtaskQA.cxx:69
 AliTPCtaskQA.cxx:70
 AliTPCtaskQA.cxx:71
 AliTPCtaskQA.cxx:72
 AliTPCtaskQA.cxx:73
 AliTPCtaskQA.cxx:74
 AliTPCtaskQA.cxx:75
 AliTPCtaskQA.cxx:76
 AliTPCtaskQA.cxx:77
 AliTPCtaskQA.cxx:78
 AliTPCtaskQA.cxx:79
 AliTPCtaskQA.cxx:80
 AliTPCtaskQA.cxx:81
 AliTPCtaskQA.cxx:82
 AliTPCtaskQA.cxx:83
 AliTPCtaskQA.cxx:84
 AliTPCtaskQA.cxx:85
 AliTPCtaskQA.cxx:86
 AliTPCtaskQA.cxx:87
 AliTPCtaskQA.cxx:88
 AliTPCtaskQA.cxx:89
 AliTPCtaskQA.cxx:90
 AliTPCtaskQA.cxx:91
 AliTPCtaskQA.cxx:92
 AliTPCtaskQA.cxx:93
 AliTPCtaskQA.cxx:94
 AliTPCtaskQA.cxx:95
 AliTPCtaskQA.cxx:96
 AliTPCtaskQA.cxx:97
 AliTPCtaskQA.cxx:98
 AliTPCtaskQA.cxx:99
 AliTPCtaskQA.cxx:100
 AliTPCtaskQA.cxx:101
 AliTPCtaskQA.cxx:102
 AliTPCtaskQA.cxx:103
 AliTPCtaskQA.cxx:104
 AliTPCtaskQA.cxx:105
 AliTPCtaskQA.cxx:106
 AliTPCtaskQA.cxx:107
 AliTPCtaskQA.cxx:108
 AliTPCtaskQA.cxx:109
 AliTPCtaskQA.cxx:110
 AliTPCtaskQA.cxx:111
 AliTPCtaskQA.cxx:112
 AliTPCtaskQA.cxx:113
 AliTPCtaskQA.cxx:114
 AliTPCtaskQA.cxx:115
 AliTPCtaskQA.cxx:116
 AliTPCtaskQA.cxx:117
 AliTPCtaskQA.cxx:118
 AliTPCtaskQA.cxx:119
 AliTPCtaskQA.cxx:120
 AliTPCtaskQA.cxx:121
 AliTPCtaskQA.cxx:122
 AliTPCtaskQA.cxx:123
 AliTPCtaskQA.cxx:124
 AliTPCtaskQA.cxx:125
 AliTPCtaskQA.cxx:126
 AliTPCtaskQA.cxx:127
 AliTPCtaskQA.cxx:128
 AliTPCtaskQA.cxx:129
 AliTPCtaskQA.cxx:130
 AliTPCtaskQA.cxx:131
 AliTPCtaskQA.cxx:132
 AliTPCtaskQA.cxx:133
 AliTPCtaskQA.cxx:134
 AliTPCtaskQA.cxx:135
 AliTPCtaskQA.cxx:136
 AliTPCtaskQA.cxx:137
 AliTPCtaskQA.cxx:138
 AliTPCtaskQA.cxx:139
 AliTPCtaskQA.cxx:140
 AliTPCtaskQA.cxx:141
 AliTPCtaskQA.cxx:142
 AliTPCtaskQA.cxx:143
 AliTPCtaskQA.cxx:144
 AliTPCtaskQA.cxx:145
 AliTPCtaskQA.cxx:146
 AliTPCtaskQA.cxx:147
 AliTPCtaskQA.cxx:148
 AliTPCtaskQA.cxx:149
 AliTPCtaskQA.cxx:150
 AliTPCtaskQA.cxx:151
 AliTPCtaskQA.cxx:152
 AliTPCtaskQA.cxx:153
 AliTPCtaskQA.cxx:154
 AliTPCtaskQA.cxx:155
 AliTPCtaskQA.cxx:156
 AliTPCtaskQA.cxx:157
 AliTPCtaskQA.cxx:158
 AliTPCtaskQA.cxx:159
 AliTPCtaskQA.cxx:160
 AliTPCtaskQA.cxx:161
 AliTPCtaskQA.cxx:162
 AliTPCtaskQA.cxx:163
 AliTPCtaskQA.cxx:164
 AliTPCtaskQA.cxx:165
 AliTPCtaskQA.cxx:166
 AliTPCtaskQA.cxx:167
 AliTPCtaskQA.cxx:168
 AliTPCtaskQA.cxx:169
 AliTPCtaskQA.cxx:170
 AliTPCtaskQA.cxx:171
 AliTPCtaskQA.cxx:172
 AliTPCtaskQA.cxx:173
 AliTPCtaskQA.cxx:174
 AliTPCtaskQA.cxx:175
 AliTPCtaskQA.cxx:176
 AliTPCtaskQA.cxx:177
 AliTPCtaskQA.cxx:178
 AliTPCtaskQA.cxx:179
 AliTPCtaskQA.cxx:180
 AliTPCtaskQA.cxx:181
 AliTPCtaskQA.cxx:182
 AliTPCtaskQA.cxx:183
 AliTPCtaskQA.cxx:184
 AliTPCtaskQA.cxx:185
 AliTPCtaskQA.cxx:186
 AliTPCtaskQA.cxx:187
 AliTPCtaskQA.cxx:188
 AliTPCtaskQA.cxx:189
 AliTPCtaskQA.cxx:190
 AliTPCtaskQA.cxx:191
 AliTPCtaskQA.cxx:192
 AliTPCtaskQA.cxx:193
 AliTPCtaskQA.cxx:194
 AliTPCtaskQA.cxx:195
 AliTPCtaskQA.cxx:196
 AliTPCtaskQA.cxx:197
 AliTPCtaskQA.cxx:198
 AliTPCtaskQA.cxx:199
 AliTPCtaskQA.cxx:200
 AliTPCtaskQA.cxx:201
 AliTPCtaskQA.cxx:202
 AliTPCtaskQA.cxx:203
 AliTPCtaskQA.cxx:204
 AliTPCtaskQA.cxx:205
 AliTPCtaskQA.cxx:206
 AliTPCtaskQA.cxx:207
 AliTPCtaskQA.cxx:208
 AliTPCtaskQA.cxx:209
 AliTPCtaskQA.cxx:210
 AliTPCtaskQA.cxx:211
 AliTPCtaskQA.cxx:212
 AliTPCtaskQA.cxx:213
 AliTPCtaskQA.cxx:214
 AliTPCtaskQA.cxx:215
 AliTPCtaskQA.cxx:216
 AliTPCtaskQA.cxx:217
 AliTPCtaskQA.cxx:218
 AliTPCtaskQA.cxx:219
 AliTPCtaskQA.cxx:220
 AliTPCtaskQA.cxx:221
 AliTPCtaskQA.cxx:222
 AliTPCtaskQA.cxx:223
 AliTPCtaskQA.cxx:224
 AliTPCtaskQA.cxx:225
 AliTPCtaskQA.cxx:226
 AliTPCtaskQA.cxx:227
 AliTPCtaskQA.cxx:228
 AliTPCtaskQA.cxx:229
 AliTPCtaskQA.cxx:230
 AliTPCtaskQA.cxx:231
 AliTPCtaskQA.cxx:232
 AliTPCtaskQA.cxx:233
 AliTPCtaskQA.cxx:234
 AliTPCtaskQA.cxx:235
 AliTPCtaskQA.cxx:236
 AliTPCtaskQA.cxx:237
 AliTPCtaskQA.cxx:238
 AliTPCtaskQA.cxx:239
 AliTPCtaskQA.cxx:240
 AliTPCtaskQA.cxx:241
 AliTPCtaskQA.cxx:242
 AliTPCtaskQA.cxx:243
 AliTPCtaskQA.cxx:244
 AliTPCtaskQA.cxx:245
 AliTPCtaskQA.cxx:246
 AliTPCtaskQA.cxx:247
 AliTPCtaskQA.cxx:248
 AliTPCtaskQA.cxx:249
 AliTPCtaskQA.cxx:250
 AliTPCtaskQA.cxx:251
 AliTPCtaskQA.cxx:252
 AliTPCtaskQA.cxx:253
 AliTPCtaskQA.cxx:254
 AliTPCtaskQA.cxx:255
 AliTPCtaskQA.cxx:256
 AliTPCtaskQA.cxx:257
 AliTPCtaskQA.cxx:258
 AliTPCtaskQA.cxx:259
 AliTPCtaskQA.cxx:260
 AliTPCtaskQA.cxx:261
 AliTPCtaskQA.cxx:262
 AliTPCtaskQA.cxx:263
 AliTPCtaskQA.cxx:264
 AliTPCtaskQA.cxx:265
 AliTPCtaskQA.cxx:266
 AliTPCtaskQA.cxx:267
 AliTPCtaskQA.cxx:268
 AliTPCtaskQA.cxx:269
 AliTPCtaskQA.cxx:270
 AliTPCtaskQA.cxx:271
 AliTPCtaskQA.cxx:272
 AliTPCtaskQA.cxx:273
 AliTPCtaskQA.cxx:274
 AliTPCtaskQA.cxx:275
 AliTPCtaskQA.cxx:276
 AliTPCtaskQA.cxx:277
 AliTPCtaskQA.cxx:278
 AliTPCtaskQA.cxx:279
 AliTPCtaskQA.cxx:280
 AliTPCtaskQA.cxx:281
 AliTPCtaskQA.cxx:282
 AliTPCtaskQA.cxx:283
 AliTPCtaskQA.cxx:284
 AliTPCtaskQA.cxx:285
 AliTPCtaskQA.cxx:286
 AliTPCtaskQA.cxx:287
 AliTPCtaskQA.cxx:288
 AliTPCtaskQA.cxx:289
 AliTPCtaskQA.cxx:290
 AliTPCtaskQA.cxx:291
 AliTPCtaskQA.cxx:292
 AliTPCtaskQA.cxx:293
 AliTPCtaskQA.cxx:294
 AliTPCtaskQA.cxx:295
 AliTPCtaskQA.cxx:296
 AliTPCtaskQA.cxx:297
 AliTPCtaskQA.cxx:298
 AliTPCtaskQA.cxx:299
 AliTPCtaskQA.cxx:300
 AliTPCtaskQA.cxx:301
 AliTPCtaskQA.cxx:302
 AliTPCtaskQA.cxx:303
 AliTPCtaskQA.cxx:304
 AliTPCtaskQA.cxx:305
 AliTPCtaskQA.cxx:306
 AliTPCtaskQA.cxx:307
 AliTPCtaskQA.cxx:308
 AliTPCtaskQA.cxx:309
 AliTPCtaskQA.cxx:310
 AliTPCtaskQA.cxx:311
 AliTPCtaskQA.cxx:312
 AliTPCtaskQA.cxx:313
 AliTPCtaskQA.cxx:314
 AliTPCtaskQA.cxx:315
 AliTPCtaskQA.cxx:316
 AliTPCtaskQA.cxx:317
 AliTPCtaskQA.cxx:318
 AliTPCtaskQA.cxx:319
 AliTPCtaskQA.cxx:320
 AliTPCtaskQA.cxx:321
 AliTPCtaskQA.cxx:322
 AliTPCtaskQA.cxx:323
 AliTPCtaskQA.cxx:324
 AliTPCtaskQA.cxx:325
 AliTPCtaskQA.cxx:326
 AliTPCtaskQA.cxx:327
 AliTPCtaskQA.cxx:328
 AliTPCtaskQA.cxx:329
 AliTPCtaskQA.cxx:330
 AliTPCtaskQA.cxx:331
 AliTPCtaskQA.cxx:332
 AliTPCtaskQA.cxx:333
 AliTPCtaskQA.cxx:334
 AliTPCtaskQA.cxx:335
 AliTPCtaskQA.cxx:336
 AliTPCtaskQA.cxx:337
 AliTPCtaskQA.cxx:338
 AliTPCtaskQA.cxx:339
 AliTPCtaskQA.cxx:340
 AliTPCtaskQA.cxx:341
 AliTPCtaskQA.cxx:342
 AliTPCtaskQA.cxx:343
 AliTPCtaskQA.cxx:344
 AliTPCtaskQA.cxx:345
 AliTPCtaskQA.cxx:346
 AliTPCtaskQA.cxx:347
 AliTPCtaskQA.cxx:348
 AliTPCtaskQA.cxx:349