ROOT logo
#include "TChain.h"
#include "TTree.h"
#include "TH1F.h"
#include "TF1.h"
#include "TH2F.h"
#include "TCanvas.h"
#include "TObjArray.h"

#include "AliAnalysisTask.h"
#include "AliAnalysisManager.h"

#include "AliESDEvent.h"
#include "AliESDInputHandler.h"

#include "AliT0AnalysisTaskQA.h"
#include "AliESDpid.h"

//#include "AliCDBMetaData.h"
//#include "AliCDBId.h"
//#include "AliCDBEntry.h"
//#include "AliCDBManager.h"
//#include "AliCDBStorage.h"

// Task should calculate channels offset 
// Authors: Alla
//last change 23 Feb 2012 FK

ClassImp(AliT0AnalysisTaskQA)
//________________________________________________________________________
AliT0AnalysisTaskQA::AliT0AnalysisTaskQA() 
  : AliAnalysisTaskSE(),  fESD(0x0), fTzeroObject(0x0),
  fTzeroORA(0x0), fTzeroORC(0x0), fResolution(0x0), fTzeroORAplusORC(0x0), fTzeroTof(0x0),
    fRunNumber(0),fTimeVSAmplitude(0x0),fCFDVSPmtId(0x0),fSPDVertexVST0Vertex(0x0),
    fOrAvsNtracks(0x0), fOrCvsNtracks(0x0), fT0vsNtracks(0x0),fT0TimevsT0Tof(0x0),
    fESDpid(new AliESDpid())
{
  // Constructor

  // Define input and output slots here
  // Input slot #0 works with a TChain

// ########### NEVER define slots in the IO constructor
//  DefineInput(0,  TChain::Class());
//  DefineOutput(1, TObjArray::Class());
}


//________________________________________________________________________
AliT0AnalysisTaskQA::AliT0AnalysisTaskQA(const char *name) 
  : AliAnalysisTaskSE(name),  fESD(0x0), fTzeroObject(0x0),
  fTzeroORA(0x0), fTzeroORC(0x0), fResolution(0x0), fTzeroORAplusORC(0x0), fTzeroTof(0x0),
    fRunNumber(0),fTimeVSAmplitude(0x0),fCFDVSPmtId(0x0),fSPDVertexVST0Vertex(0x0),
    fOrAvsNtracks(0x0), fOrCvsNtracks(0x0), fT0vsNtracks(0x0),fT0TimevsT0Tof(0x0),
    fESDpid(new AliESDpid())
{
  // Constructor
  // Define input and output slots here
  // Input slot #0 works with a TChain
  DefineInput(0, TChain::Class());
  DefineOutput(1, TObjArray::Class());
  // Output slot #0 id reserved by the base class for AOD
  // Output slot #1 writes into a TH1 container
}

//________________________________________________________________________
AliT0AnalysisTaskQA::~AliT0AnalysisTaskQA() 
{
  // Destructor
  // printf("AliT0CalibOffsetChannels~AliT0CalibOffsetChannels() ");
  delete fTzeroORA;
  delete fTzeroORC;
  delete fResolution;
  delete fTzeroORAplusORC;
  delete fTzeroTof;
  delete [] fTimeVSAmplitude;
  delete fCFDVSPmtId;
  delete fSPDVertexVST0Vertex;
  delete fOrAvsNtracks;
  delete fOrCvsNtracks;
  delete fT0vsNtracks;
  delete fT0TimevsT0Tof;

  delete fESDpid;
  delete fTzeroObject;
}

//------------------------------------------------------------------
void AliT0AnalysisTaskQA::UserCreateOutputObjects()
{
  // Create histograms
 fTimeVSAmplitude = new TH2F*[kNPMT0];

 for (Int_t i=0; i<kNPMT0; i++) {
    fTimeVSAmplitude[i]= new TH2F (Form("fTimeVSAmplitude%d",i+1),"fTimeVsAmplitude",60, -10, 50,500,2000,7000);
  }

  fTzeroORAplusORC = new TH1F("fTzeroORAplusORC","ORA+ORC /2",100,-2000,2000);   //or A plus or C 
  fTzeroTof        = new TH1F("fTzeroTof","t0 from TOF",100,-2000,2000);   //t0 start time from TOF
  fResolution      = new TH1F("fResolution","fResolution",100,-500,500);// or A minus or C spectrum
  fTzeroORA        = new TH1F("fTzeroORA","fTzeroORA",100,-2000,2000);// or A spectrum
  fTzeroORC        = new TH1F("fTzeroORC","fTzeroORC",100,-2000,2000);// or C spectrum
  fCFDVSPmtId      = new TH2F("fCFDVSPmtId","fCFDVSPmtId",24,0,24,500,2000,7000);  // 
  fSPDVertexVST0Vertex = new TH2F("fSPDVertexVST0Vertex","fSPDVertexVST0Vertex",30,-30,30,30,-30,30);
  fOrAvsNtracks = new TH2F("fAvstracks", "A vs tracks",200, 0, 1000, 200, -1000, 1000);
  fOrCvsNtracks = new TH2F("fCvstracks", "C vs tracks",200, 0, 1000, 200, -1000, 1000);
  fT0vsNtracks  = new TH2F("fT0ACvstrackes", "T0AC vs tracks",200, 0, 1000, 200, -1000, 1000); 
  fT0TimevsT0Tof = new TH2F("fT0TimevsT0Tof", "fT0TimevsT0Tof",50, -1000,1000, 50, -1000,1000); 

  fTzeroObject     = new TObjArray(0);
  fTzeroObject->SetOwner(kTRUE);
  
  for (Int_t i=0; i<kNPMT0; i++)
    fTzeroObject->AddAtAndExpand(fTimeVSAmplitude[i],i);

  fTzeroObject->AddAtAndExpand(fCFDVSPmtId,24);
  fTzeroObject->AddAtAndExpand(fSPDVertexVST0Vertex,25);
  fTzeroObject->AddAtAndExpand(fTzeroORAplusORC, 26);
  fTzeroObject->AddAtAndExpand(fResolution, 27);
  fTzeroObject->AddAtAndExpand(fTzeroORA, 28);
  fTzeroObject->AddAtAndExpand(fTzeroORC, 29);
  fTzeroObject->AddAtAndExpand(fT0vsNtracks, 30);
  fTzeroObject->AddAtAndExpand(fOrAvsNtracks,31);
  fTzeroObject->AddAtAndExpand(fOrCvsNtracks, 32);
  fTzeroObject->AddAtAndExpand(fTzeroTof, 33);
  fTzeroObject->AddAtAndExpand(fT0TimevsT0Tof, 34);

  PostData(1, fTzeroObject);
  // Called once
}

//________________________________________________________________________
void AliT0AnalysisTaskQA::UserExec(Option_t *) 
{
  // Main loop
  // Called for each event

  // Post output data.
  fESD = dynamic_cast<AliESDEvent*>(InputEvent());
  if (!fESD) {
    printf("ERROR: fESD not available\n");
    return;
  }

  fRunNumber =  fESD->GetRunNumber() ; 

  const Double32_t* time = fESD->GetT0time();
  const Double32_t* amplitude = fESD->GetT0amplitude();

 
  for (Int_t i=0; i<kNPMT0; i++) {
    if(time[i]<9999 &&abs(time[i])>1e-8 && amplitude[i]<9999&&abs(amplitude[i])>1e-8 )
      {
	//	cout<<"time "<<time[i]<<" amplitude "<<amplitude[i]<<endl;
	fTimeVSAmplitude[i]->Fill(amplitude[i],time[i]);
	fCFDVSPmtId->Fill(i,time[i]);
      }
  }

  const Double32_t* mean = fESD->GetT0TOF();
  Double32_t orA = mean[1];
  Double32_t orC = mean[2];
  Int_t ntracks = fESD->GetNumberOfTracks();

  Int_t ntracksMatchedToTOF = 0; 
  for(Int_t itrk=0;itrk<ntracks;itrk++){
    AliESDtrack* track = fESD->GetTrack(itrk);
    if (!track) {
      Printf("ERROR: Could not receive track %d", itrk);
      continue;
    }
    //no track selection just TOF hit
    if (track->IsOn(AliESDtrack::kTOFout)) ntracksMatchedToTOF++;
  }

  if(orA<9999){
    fTzeroORA->Fill(orA);
    fOrAvsNtracks->Fill(ntracksMatchedToTOF, orA);
  }
  if(orC<9999) {
    fTzeroORC->Fill(orC);
    fOrCvsNtracks->Fill(ntracksMatchedToTOF, orC);
  }
  if(orA<9999 && orC<9999) {
    fResolution->Fill((orA-orC)/2.);
    fTzeroORAplusORC->Fill(mean[0]);
    fT0vsNtracks->Fill(ntracksMatchedToTOF, mean[0]);
  }

  if(fESDpid){ //get T0_TOF 
    fESDpid->SetTOFResponse(fESD,AliESDpid::kTOF_T0);
    Float_t t0tofTrack =(Float_t) (fESDpid->GetTOFResponse().GetStartTime(10.0)); //Get start time from all tracks 
    if (t0tofTrack !=0) fTzeroTof->Fill(t0tofTrack);

    if(orA<9999 && orC<9999 && t0tofTrack !=0){ // T0 time  and  TOF time simultaneously
      fT0TimevsT0Tof->Fill(t0tofTrack, mean[0]);
    }
  }
  
  Double32_t t0vertex = fESD->GetT0zVertex();
  //  cout << "t0 vertex "<<t0vertex<<endl;
  Double32_t esdzvertex;
  const AliESDVertex * esdvertex = fESD->GetPrimaryVertex();
  Int_t nofcontrib=-1;
  if(esdvertex && t0vertex<999)
    {
      nofcontrib=esdvertex->GetNContributors();
      if(nofcontrib>1)
	{
	  esdzvertex=esdvertex->GetZ();
	  //	  cout << "esd vertex "<<esdzvertex<<endl;
	  fSPDVertexVST0Vertex->Fill(t0vertex,esdzvertex);
	}
    }
  // printf("%f   %f  %f\n",orA,orC,time);
  PostData(1, fTzeroObject);
}      
 //________________________________________________________________________
void AliT0AnalysisTaskQA::Terminate(Option_t *) 
{
  
   // Called once at the end of the query
}
 AliT0AnalysisTaskQA.cxx:1
 AliT0AnalysisTaskQA.cxx:2
 AliT0AnalysisTaskQA.cxx:3
 AliT0AnalysisTaskQA.cxx:4
 AliT0AnalysisTaskQA.cxx:5
 AliT0AnalysisTaskQA.cxx:6
 AliT0AnalysisTaskQA.cxx:7
 AliT0AnalysisTaskQA.cxx:8
 AliT0AnalysisTaskQA.cxx:9
 AliT0AnalysisTaskQA.cxx:10
 AliT0AnalysisTaskQA.cxx:11
 AliT0AnalysisTaskQA.cxx:12
 AliT0AnalysisTaskQA.cxx:13
 AliT0AnalysisTaskQA.cxx:14
 AliT0AnalysisTaskQA.cxx:15
 AliT0AnalysisTaskQA.cxx:16
 AliT0AnalysisTaskQA.cxx:17
 AliT0AnalysisTaskQA.cxx:18
 AliT0AnalysisTaskQA.cxx:19
 AliT0AnalysisTaskQA.cxx:20
 AliT0AnalysisTaskQA.cxx:21
 AliT0AnalysisTaskQA.cxx:22
 AliT0AnalysisTaskQA.cxx:23
 AliT0AnalysisTaskQA.cxx:24
 AliT0AnalysisTaskQA.cxx:25
 AliT0AnalysisTaskQA.cxx:26
 AliT0AnalysisTaskQA.cxx:27
 AliT0AnalysisTaskQA.cxx:28
 AliT0AnalysisTaskQA.cxx:29
 AliT0AnalysisTaskQA.cxx:30
 AliT0AnalysisTaskQA.cxx:31
 AliT0AnalysisTaskQA.cxx:32
 AliT0AnalysisTaskQA.cxx:33
 AliT0AnalysisTaskQA.cxx:34
 AliT0AnalysisTaskQA.cxx:35
 AliT0AnalysisTaskQA.cxx:36
 AliT0AnalysisTaskQA.cxx:37
 AliT0AnalysisTaskQA.cxx:38
 AliT0AnalysisTaskQA.cxx:39
 AliT0AnalysisTaskQA.cxx:40
 AliT0AnalysisTaskQA.cxx:41
 AliT0AnalysisTaskQA.cxx:42
 AliT0AnalysisTaskQA.cxx:43
 AliT0AnalysisTaskQA.cxx:44
 AliT0AnalysisTaskQA.cxx:45
 AliT0AnalysisTaskQA.cxx:46
 AliT0AnalysisTaskQA.cxx:47
 AliT0AnalysisTaskQA.cxx:48
 AliT0AnalysisTaskQA.cxx:49
 AliT0AnalysisTaskQA.cxx:50
 AliT0AnalysisTaskQA.cxx:51
 AliT0AnalysisTaskQA.cxx:52
 AliT0AnalysisTaskQA.cxx:53
 AliT0AnalysisTaskQA.cxx:54
 AliT0AnalysisTaskQA.cxx:55
 AliT0AnalysisTaskQA.cxx:56
 AliT0AnalysisTaskQA.cxx:57
 AliT0AnalysisTaskQA.cxx:58
 AliT0AnalysisTaskQA.cxx:59
 AliT0AnalysisTaskQA.cxx:60
 AliT0AnalysisTaskQA.cxx:61
 AliT0AnalysisTaskQA.cxx:62
 AliT0AnalysisTaskQA.cxx:63
 AliT0AnalysisTaskQA.cxx:64
 AliT0AnalysisTaskQA.cxx:65
 AliT0AnalysisTaskQA.cxx:66
 AliT0AnalysisTaskQA.cxx:67
 AliT0AnalysisTaskQA.cxx:68
 AliT0AnalysisTaskQA.cxx:69
 AliT0AnalysisTaskQA.cxx:70
 AliT0AnalysisTaskQA.cxx:71
 AliT0AnalysisTaskQA.cxx:72
 AliT0AnalysisTaskQA.cxx:73
 AliT0AnalysisTaskQA.cxx:74
 AliT0AnalysisTaskQA.cxx:75
 AliT0AnalysisTaskQA.cxx:76
 AliT0AnalysisTaskQA.cxx:77
 AliT0AnalysisTaskQA.cxx:78
 AliT0AnalysisTaskQA.cxx:79
 AliT0AnalysisTaskQA.cxx:80
 AliT0AnalysisTaskQA.cxx:81
 AliT0AnalysisTaskQA.cxx:82
 AliT0AnalysisTaskQA.cxx:83
 AliT0AnalysisTaskQA.cxx:84
 AliT0AnalysisTaskQA.cxx:85
 AliT0AnalysisTaskQA.cxx:86
 AliT0AnalysisTaskQA.cxx:87
 AliT0AnalysisTaskQA.cxx:88
 AliT0AnalysisTaskQA.cxx:89
 AliT0AnalysisTaskQA.cxx:90
 AliT0AnalysisTaskQA.cxx:91
 AliT0AnalysisTaskQA.cxx:92
 AliT0AnalysisTaskQA.cxx:93
 AliT0AnalysisTaskQA.cxx:94
 AliT0AnalysisTaskQA.cxx:95
 AliT0AnalysisTaskQA.cxx:96
 AliT0AnalysisTaskQA.cxx:97
 AliT0AnalysisTaskQA.cxx:98
 AliT0AnalysisTaskQA.cxx:99
 AliT0AnalysisTaskQA.cxx:100
 AliT0AnalysisTaskQA.cxx:101
 AliT0AnalysisTaskQA.cxx:102
 AliT0AnalysisTaskQA.cxx:103
 AliT0AnalysisTaskQA.cxx:104
 AliT0AnalysisTaskQA.cxx:105
 AliT0AnalysisTaskQA.cxx:106
 AliT0AnalysisTaskQA.cxx:107
 AliT0AnalysisTaskQA.cxx:108
 AliT0AnalysisTaskQA.cxx:109
 AliT0AnalysisTaskQA.cxx:110
 AliT0AnalysisTaskQA.cxx:111
 AliT0AnalysisTaskQA.cxx:112
 AliT0AnalysisTaskQA.cxx:113
 AliT0AnalysisTaskQA.cxx:114
 AliT0AnalysisTaskQA.cxx:115
 AliT0AnalysisTaskQA.cxx:116
 AliT0AnalysisTaskQA.cxx:117
 AliT0AnalysisTaskQA.cxx:118
 AliT0AnalysisTaskQA.cxx:119
 AliT0AnalysisTaskQA.cxx:120
 AliT0AnalysisTaskQA.cxx:121
 AliT0AnalysisTaskQA.cxx:122
 AliT0AnalysisTaskQA.cxx:123
 AliT0AnalysisTaskQA.cxx:124
 AliT0AnalysisTaskQA.cxx:125
 AliT0AnalysisTaskQA.cxx:126
 AliT0AnalysisTaskQA.cxx:127
 AliT0AnalysisTaskQA.cxx:128
 AliT0AnalysisTaskQA.cxx:129
 AliT0AnalysisTaskQA.cxx:130
 AliT0AnalysisTaskQA.cxx:131
 AliT0AnalysisTaskQA.cxx:132
 AliT0AnalysisTaskQA.cxx:133
 AliT0AnalysisTaskQA.cxx:134
 AliT0AnalysisTaskQA.cxx:135
 AliT0AnalysisTaskQA.cxx:136
 AliT0AnalysisTaskQA.cxx:137
 AliT0AnalysisTaskQA.cxx:138
 AliT0AnalysisTaskQA.cxx:139
 AliT0AnalysisTaskQA.cxx:140
 AliT0AnalysisTaskQA.cxx:141
 AliT0AnalysisTaskQA.cxx:142
 AliT0AnalysisTaskQA.cxx:143
 AliT0AnalysisTaskQA.cxx:144
 AliT0AnalysisTaskQA.cxx:145
 AliT0AnalysisTaskQA.cxx:146
 AliT0AnalysisTaskQA.cxx:147
 AliT0AnalysisTaskQA.cxx:148
 AliT0AnalysisTaskQA.cxx:149
 AliT0AnalysisTaskQA.cxx:150
 AliT0AnalysisTaskQA.cxx:151
 AliT0AnalysisTaskQA.cxx:152
 AliT0AnalysisTaskQA.cxx:153
 AliT0AnalysisTaskQA.cxx:154
 AliT0AnalysisTaskQA.cxx:155
 AliT0AnalysisTaskQA.cxx:156
 AliT0AnalysisTaskQA.cxx:157
 AliT0AnalysisTaskQA.cxx:158
 AliT0AnalysisTaskQA.cxx:159
 AliT0AnalysisTaskQA.cxx:160
 AliT0AnalysisTaskQA.cxx:161
 AliT0AnalysisTaskQA.cxx:162
 AliT0AnalysisTaskQA.cxx:163
 AliT0AnalysisTaskQA.cxx:164
 AliT0AnalysisTaskQA.cxx:165
 AliT0AnalysisTaskQA.cxx:166
 AliT0AnalysisTaskQA.cxx:167
 AliT0AnalysisTaskQA.cxx:168
 AliT0AnalysisTaskQA.cxx:169
 AliT0AnalysisTaskQA.cxx:170
 AliT0AnalysisTaskQA.cxx:171
 AliT0AnalysisTaskQA.cxx:172
 AliT0AnalysisTaskQA.cxx:173
 AliT0AnalysisTaskQA.cxx:174
 AliT0AnalysisTaskQA.cxx:175
 AliT0AnalysisTaskQA.cxx:176
 AliT0AnalysisTaskQA.cxx:177
 AliT0AnalysisTaskQA.cxx:178
 AliT0AnalysisTaskQA.cxx:179
 AliT0AnalysisTaskQA.cxx:180
 AliT0AnalysisTaskQA.cxx:181
 AliT0AnalysisTaskQA.cxx:182
 AliT0AnalysisTaskQA.cxx:183
 AliT0AnalysisTaskQA.cxx:184
 AliT0AnalysisTaskQA.cxx:185
 AliT0AnalysisTaskQA.cxx:186
 AliT0AnalysisTaskQA.cxx:187
 AliT0AnalysisTaskQA.cxx:188
 AliT0AnalysisTaskQA.cxx:189
 AliT0AnalysisTaskQA.cxx:190
 AliT0AnalysisTaskQA.cxx:191
 AliT0AnalysisTaskQA.cxx:192
 AliT0AnalysisTaskQA.cxx:193
 AliT0AnalysisTaskQA.cxx:194
 AliT0AnalysisTaskQA.cxx:195
 AliT0AnalysisTaskQA.cxx:196
 AliT0AnalysisTaskQA.cxx:197
 AliT0AnalysisTaskQA.cxx:198
 AliT0AnalysisTaskQA.cxx:199
 AliT0AnalysisTaskQA.cxx:200
 AliT0AnalysisTaskQA.cxx:201
 AliT0AnalysisTaskQA.cxx:202
 AliT0AnalysisTaskQA.cxx:203
 AliT0AnalysisTaskQA.cxx:204
 AliT0AnalysisTaskQA.cxx:205
 AliT0AnalysisTaskQA.cxx:206
 AliT0AnalysisTaskQA.cxx:207
 AliT0AnalysisTaskQA.cxx:208
 AliT0AnalysisTaskQA.cxx:209
 AliT0AnalysisTaskQA.cxx:210
 AliT0AnalysisTaskQA.cxx:211
 AliT0AnalysisTaskQA.cxx:212
 AliT0AnalysisTaskQA.cxx:213
 AliT0AnalysisTaskQA.cxx:214
 AliT0AnalysisTaskQA.cxx:215
 AliT0AnalysisTaskQA.cxx:216
 AliT0AnalysisTaskQA.cxx:217
 AliT0AnalysisTaskQA.cxx:218
 AliT0AnalysisTaskQA.cxx:219
 AliT0AnalysisTaskQA.cxx:220
 AliT0AnalysisTaskQA.cxx:221
 AliT0AnalysisTaskQA.cxx:222