ROOT logo
#include "TChain.h"
#include "TTree.h"
#include "TH1F.h"
#include "TH2F.h"
#include "TCanvas.h"
#include "AliAnalysisTask.h"
#include "AliAnalysisManager.h"
#include "AliESDEvent.h"
#include "AliESDInputHandler.h"
#include "AliESDPmdTrack.h"
#include "AliESDVertex.h"
#include "AliESDVZERO.h"
#include "AliAnalysisTaskPMD.h"

// AnalysisTask For PMD
// Authors: Sudipan De, Subhash Singha

ClassImp(AliAnalysisTaskPMD)

//________________________________________________________________________
AliAnalysisTaskPMD::AliAnalysisTaskPMD(const char *name) 
: AliAnalysisTaskSE(name), 
  fESD(0), 
  fOutputList(0), 
  fHistTotEvent(0),
  fHistTotEventAfterPhySel(0),
  fHistTotEventAfterVtx(0),
  fHistVtxZ(0),
  fHistXYPre(0),
  fHistEta(0),
  fHistEta1(0),
  fHistMultMeas(0),
  fHistMultMeas1(0)
{
  for(Int_t i=0; i<10; i++){
    fHistMultMeasEtaBinA[i] = 0;
    fHistMultMeasEtaBinA1[i] = 0;
  }
  // Constructor
  
  // Define input and output slots here
  // Input slot #0 works with a TChain
  DefineInput(0, TChain::Class());
  // Output slot #0 id reserved by the base class for AOD
  // Output slot #1 writes into a TH1 container
  DefineOutput(1, TList::Class());
}

//________________________________________________________________________
void AliAnalysisTaskPMD::UserCreateOutputObjects()
{
  // Create histograms
  // Called once
  
  fOutputList = new TList();
  Int_t kNbinsMultA = 50;  Float_t XminMultA = -0.5; Float_t XmaxMultA = 49.5;
  Int_t kNbinsXY = 200; Float_t XminXY = -100.0; Float_t XmaxXY  = 100.0;
  Int_t kNBinsEvent = 10; Float_t XminEvent = 0; Float_t XmaxEvent = 10;
  Int_t kNBinsEta = 10; Float_t XminEta = 2.1; Float_t XmaxEta = 4.1;
 
  fHistTotEvent = new TH1F("TotEvent","TotEvent",
			   kNBinsEvent,XminEvent,XmaxEvent); 
  fOutputList->Add(fHistTotEvent);
  fHistTotEventAfterPhySel = new TH1F("TotEventAfterPhySel","TotEventAfterPhySel",
				      kNBinsEvent,XminEvent,XmaxEvent); 
  fOutputList->Add(fHistTotEventAfterPhySel);
  fHistTotEventAfterVtx = new TH1F("TotEventAfterVtx","TotEventAfterVtx",
				   kNBinsEvent,XminEvent,XmaxEvent); 
  fOutputList->Add(fHistTotEventAfterVtx);
  fHistVtxZ = new TH1F("VtxZ","VtxZ",100,-50,50);
  fOutputList->Add(fHistVtxZ);
  fHistXYPre = new TH2F("XYPre","XYPre",kNbinsXY,XminXY,XmaxXY,
			kNbinsXY,XminXY,XmaxXY);
  fOutputList->Add(fHistXYPre);
  fHistEta = new TH1F ("Eta","Eta",kNBinsEta,XminEta,XmaxEta);
  fOutputList->Add(fHistEta);
  fHistEta1 = new TH1F ("Eta1","Eta1",kNBinsEta,XminEta,XmaxEta);
  fOutputList->Add(fHistEta1);
  fHistMultMeas = new TH1F("MultM","MultM",100,-0.5,99.5);
  fOutputList->Add(fHistMultMeas);
  fHistMultMeas1 = new TH1F("MultM1","MultM1",100,-0.5,99.5);
  fOutputList->Add(fHistMultMeas1);
  
  Char_t nameM[256], nameM1[256];
  for(Int_t i=0; i<10; i++){
    sprintf(nameM,"MultM_EtaBin%d",i+1);
    fHistMultMeasEtaBinA[i] =
      new TH1F(nameM,nameM,kNbinsMultA,
	       XminMultA,XmaxMultA);
    fOutputList->Add(fHistMultMeasEtaBinA[i]);
    sprintf(nameM1,"MultM1_EtaBin%d",i+1);
    fHistMultMeasEtaBinA1[i] =
      new TH1F(nameM1,nameM1,kNbinsMultA,
	       XminMultA,XmaxMultA);
    fOutputList->Add(fHistMultMeasEtaBinA1[i]);
  }//i loop
  
}

//________________________________________________________________________
void AliAnalysisTaskPMD::UserExec(Option_t *) 
{
  // Main loop
  // Called for each event
  Float_t MipCut1 = 432;//MPV=72=> 6*MPV=432
  Float_t MipCut2 = 648;//MPV=72=> 9*MPV=648
  Float_t etacls=0., theta=0., rdist=0.;
  Int_t PhotonCls = 0;//# of photon measured within 2.3 to 3.9 #eta
  Int_t PhotonCls1 = 0;//# of photon measured within 2.3 to 3.9 #eta
  Int_t PhotonClsAEtaBin[10] = {0};//# of photon measured with diff Eta bin
  Int_t PhotonClsAEtaBin1[10] = {0};//# of photon measured with diff Eta bin
  // Post output data.
  fESD = dynamic_cast<AliESDEvent*>(InputEvent());
  if (!fESD) {
    printf("ERROR: fESD not available\n");
    return;
  }
  fHistTotEvent->Fill(5);
  //event selection
  Bool_t isSelected = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() & AliVEvent::kMB);
  if (! isSelected) return;
  fHistTotEventAfterPhySel->Fill(5);
  //printf("There are %d tracks in this event\n", fESD->GetNumberOfPmdTracks());
  //vertex selection
  const AliESDVertex *vertex = fESD->GetPrimaryVertex();
  Float_t Vz = vertex->GetZ();    
  Bool_t zVerStatus = vertex->GetStatus();
  if(zVerStatus){
    fHistVtxZ->Fill(Vz);
    if(TMath::Abs(Vz)<10){
      fHistTotEventAfterVtx->Fill(5);
      Int_t ptracks = fESD->GetNumberOfPmdTracks();
      //PMDtrack Loop
      for(Int_t kk=0;kk<ptracks;kk++){
	AliESDPmdTrack *pmdtr = fESD->GetPmdTrack(kk);
	Int_t   det   = pmdtr->GetDetector();
	Float_t clsX  = pmdtr->GetClusterX();
	Float_t clsY  = pmdtr->GetClusterY();
	Float_t clsZ  = pmdtr->GetClusterZ();
	clsZ -= Vz;
	Float_t ncell = pmdtr->GetClusterCells();
	Float_t adc   = pmdtr->GetClusterADC();
	//Int_t smn = pmdtr->GetSmn();
	//Calculation of #eta
	rdist = TMath::Sqrt(clsX*clsX + clsY*clsY);
	if(clsZ!=0) theta = TMath::ATan2(rdist,clsZ);
	etacls  = -TMath::Log(TMath::Tan(0.5*theta));
	
	if(det==0 && adc>72)fHistXYPre->Fill(clsX,clsY);
	if(det==0 && adc>MipCut1 && ncell>2){
	  if(etacls > 2.1 && etacls<= 2.3)PhotonClsAEtaBin[0]++;
	  if(etacls > 2.3 && etacls<= 2.5)PhotonClsAEtaBin[1]++;
	  if(etacls > 2.5 && etacls<= 2.7)PhotonClsAEtaBin[2]++;
	  if(etacls > 2.7 && etacls<= 2.9)PhotonClsAEtaBin[3]++;
	  if(etacls > 2.9 && etacls<= 3.1)PhotonClsAEtaBin[4]++;
	  if(etacls > 3.1 && etacls<= 3.3)PhotonClsAEtaBin[5]++;
	  if(etacls > 3.3 && etacls<= 3.5)PhotonClsAEtaBin[6]++;
	  if(etacls > 3.5 && etacls<= 3.7)PhotonClsAEtaBin[7]++;
	  if(etacls > 3.7 && etacls<= 3.9)PhotonClsAEtaBin[8]++;
	  if(etacls > 3.9 && etacls<= 4.1)PhotonClsAEtaBin[9]++;
	  if(etacls > 2.3 && etacls<= 3.9)PhotonCls++;
	  fHistEta->Fill(etacls);
	}//if MipCut1
	if(det==0 && adc>MipCut2 && ncell>2){
	  if(etacls > 2.1 && etacls<= 2.3)PhotonClsAEtaBin1[0]++;
	  if(etacls > 2.3 && etacls<= 2.5)PhotonClsAEtaBin1[1]++;
	  if(etacls > 2.5 && etacls<= 2.7)PhotonClsAEtaBin1[2]++;
	  if(etacls > 2.7 && etacls<= 2.9)PhotonClsAEtaBin1[3]++;
	  if(etacls > 2.9 && etacls<= 3.1)PhotonClsAEtaBin1[4]++;
	  if(etacls > 3.1 && etacls<= 3.3)PhotonClsAEtaBin1[5]++;
	  if(etacls > 3.3 && etacls<= 3.5)PhotonClsAEtaBin1[6]++;
	  if(etacls > 3.5 && etacls<= 3.7)PhotonClsAEtaBin1[7]++;
	  if(etacls > 3.7 && etacls<= 3.9)PhotonClsAEtaBin1[8]++;
	  if(etacls > 3.9 && etacls<= 4.1)PhotonClsAEtaBin1[9]++;
	  if(etacls > 2.3 && etacls<= 3.9)PhotonCls1++;
	  fHistEta1->Fill(etacls);
	}//if Mipcut2
      } //PMDtrack loop 
      for(Int_t i=0; i<10; i++){
	fHistMultMeasEtaBinA[i]->Fill(PhotonClsAEtaBin[i]);
	fHistMultMeasEtaBinA1[i]->Fill(PhotonClsAEtaBin1[i]);
      }//i loop
      fHistMultMeas->Fill(PhotonCls);
      fHistMultMeas1->Fill(PhotonCls1);
    }// Vz loop 
  }// Vzcut loop
  PostData(1, fOutputList);
}      

//________________________________________________________________________
void AliAnalysisTaskPMD::Terminate(Option_t *) 
{
  // Draw result to the screen
  // Called once at the end of the query

  fOutputList = dynamic_cast<TList*> (GetOutputData(1));
  if (!fOutputList) {
    printf("ERROR: Output list not available\n");
    return;
  }
}
 AliAnalysisTaskPMD.cxx:1
 AliAnalysisTaskPMD.cxx:2
 AliAnalysisTaskPMD.cxx:3
 AliAnalysisTaskPMD.cxx:4
 AliAnalysisTaskPMD.cxx:5
 AliAnalysisTaskPMD.cxx:6
 AliAnalysisTaskPMD.cxx:7
 AliAnalysisTaskPMD.cxx:8
 AliAnalysisTaskPMD.cxx:9
 AliAnalysisTaskPMD.cxx:10
 AliAnalysisTaskPMD.cxx:11
 AliAnalysisTaskPMD.cxx:12
 AliAnalysisTaskPMD.cxx:13
 AliAnalysisTaskPMD.cxx:14
 AliAnalysisTaskPMD.cxx:15
 AliAnalysisTaskPMD.cxx:16
 AliAnalysisTaskPMD.cxx:17
 AliAnalysisTaskPMD.cxx:18
 AliAnalysisTaskPMD.cxx:19
 AliAnalysisTaskPMD.cxx:20
 AliAnalysisTaskPMD.cxx:21
 AliAnalysisTaskPMD.cxx:22
 AliAnalysisTaskPMD.cxx:23
 AliAnalysisTaskPMD.cxx:24
 AliAnalysisTaskPMD.cxx:25
 AliAnalysisTaskPMD.cxx:26
 AliAnalysisTaskPMD.cxx:27
 AliAnalysisTaskPMD.cxx:28
 AliAnalysisTaskPMD.cxx:29
 AliAnalysisTaskPMD.cxx:30
 AliAnalysisTaskPMD.cxx:31
 AliAnalysisTaskPMD.cxx:32
 AliAnalysisTaskPMD.cxx:33
 AliAnalysisTaskPMD.cxx:34
 AliAnalysisTaskPMD.cxx:35
 AliAnalysisTaskPMD.cxx:36
 AliAnalysisTaskPMD.cxx:37
 AliAnalysisTaskPMD.cxx:38
 AliAnalysisTaskPMD.cxx:39
 AliAnalysisTaskPMD.cxx:40
 AliAnalysisTaskPMD.cxx:41
 AliAnalysisTaskPMD.cxx:42
 AliAnalysisTaskPMD.cxx:43
 AliAnalysisTaskPMD.cxx:44
 AliAnalysisTaskPMD.cxx:45
 AliAnalysisTaskPMD.cxx:46
 AliAnalysisTaskPMD.cxx:47
 AliAnalysisTaskPMD.cxx:48
 AliAnalysisTaskPMD.cxx:49
 AliAnalysisTaskPMD.cxx:50
 AliAnalysisTaskPMD.cxx:51
 AliAnalysisTaskPMD.cxx:52
 AliAnalysisTaskPMD.cxx:53
 AliAnalysisTaskPMD.cxx:54
 AliAnalysisTaskPMD.cxx:55
 AliAnalysisTaskPMD.cxx:56
 AliAnalysisTaskPMD.cxx:57
 AliAnalysisTaskPMD.cxx:58
 AliAnalysisTaskPMD.cxx:59
 AliAnalysisTaskPMD.cxx:60
 AliAnalysisTaskPMD.cxx:61
 AliAnalysisTaskPMD.cxx:62
 AliAnalysisTaskPMD.cxx:63
 AliAnalysisTaskPMD.cxx:64
 AliAnalysisTaskPMD.cxx:65
 AliAnalysisTaskPMD.cxx:66
 AliAnalysisTaskPMD.cxx:67
 AliAnalysisTaskPMD.cxx:68
 AliAnalysisTaskPMD.cxx:69
 AliAnalysisTaskPMD.cxx:70
 AliAnalysisTaskPMD.cxx:71
 AliAnalysisTaskPMD.cxx:72
 AliAnalysisTaskPMD.cxx:73
 AliAnalysisTaskPMD.cxx:74
 AliAnalysisTaskPMD.cxx:75
 AliAnalysisTaskPMD.cxx:76
 AliAnalysisTaskPMD.cxx:77
 AliAnalysisTaskPMD.cxx:78
 AliAnalysisTaskPMD.cxx:79
 AliAnalysisTaskPMD.cxx:80
 AliAnalysisTaskPMD.cxx:81
 AliAnalysisTaskPMD.cxx:82
 AliAnalysisTaskPMD.cxx:83
 AliAnalysisTaskPMD.cxx:84
 AliAnalysisTaskPMD.cxx:85
 AliAnalysisTaskPMD.cxx:86
 AliAnalysisTaskPMD.cxx:87
 AliAnalysisTaskPMD.cxx:88
 AliAnalysisTaskPMD.cxx:89
 AliAnalysisTaskPMD.cxx:90
 AliAnalysisTaskPMD.cxx:91
 AliAnalysisTaskPMD.cxx:92
 AliAnalysisTaskPMD.cxx:93
 AliAnalysisTaskPMD.cxx:94
 AliAnalysisTaskPMD.cxx:95
 AliAnalysisTaskPMD.cxx:96
 AliAnalysisTaskPMD.cxx:97
 AliAnalysisTaskPMD.cxx:98
 AliAnalysisTaskPMD.cxx:99
 AliAnalysisTaskPMD.cxx:100
 AliAnalysisTaskPMD.cxx:101
 AliAnalysisTaskPMD.cxx:102
 AliAnalysisTaskPMD.cxx:103
 AliAnalysisTaskPMD.cxx:104
 AliAnalysisTaskPMD.cxx:105
 AliAnalysisTaskPMD.cxx:106
 AliAnalysisTaskPMD.cxx:107
 AliAnalysisTaskPMD.cxx:108
 AliAnalysisTaskPMD.cxx:109
 AliAnalysisTaskPMD.cxx:110
 AliAnalysisTaskPMD.cxx:111
 AliAnalysisTaskPMD.cxx:112
 AliAnalysisTaskPMD.cxx:113
 AliAnalysisTaskPMD.cxx:114
 AliAnalysisTaskPMD.cxx:115
 AliAnalysisTaskPMD.cxx:116
 AliAnalysisTaskPMD.cxx:117
 AliAnalysisTaskPMD.cxx:118
 AliAnalysisTaskPMD.cxx:119
 AliAnalysisTaskPMD.cxx:120
 AliAnalysisTaskPMD.cxx:121
 AliAnalysisTaskPMD.cxx:122
 AliAnalysisTaskPMD.cxx:123
 AliAnalysisTaskPMD.cxx:124
 AliAnalysisTaskPMD.cxx:125
 AliAnalysisTaskPMD.cxx:126
 AliAnalysisTaskPMD.cxx:127
 AliAnalysisTaskPMD.cxx:128
 AliAnalysisTaskPMD.cxx:129
 AliAnalysisTaskPMD.cxx:130
 AliAnalysisTaskPMD.cxx:131
 AliAnalysisTaskPMD.cxx:132
 AliAnalysisTaskPMD.cxx:133
 AliAnalysisTaskPMD.cxx:134
 AliAnalysisTaskPMD.cxx:135
 AliAnalysisTaskPMD.cxx:136
 AliAnalysisTaskPMD.cxx:137
 AliAnalysisTaskPMD.cxx:138
 AliAnalysisTaskPMD.cxx:139
 AliAnalysisTaskPMD.cxx:140
 AliAnalysisTaskPMD.cxx:141
 AliAnalysisTaskPMD.cxx:142
 AliAnalysisTaskPMD.cxx:143
 AliAnalysisTaskPMD.cxx:144
 AliAnalysisTaskPMD.cxx:145
 AliAnalysisTaskPMD.cxx:146
 AliAnalysisTaskPMD.cxx:147
 AliAnalysisTaskPMD.cxx:148
 AliAnalysisTaskPMD.cxx:149
 AliAnalysisTaskPMD.cxx:150
 AliAnalysisTaskPMD.cxx:151
 AliAnalysisTaskPMD.cxx:152
 AliAnalysisTaskPMD.cxx:153
 AliAnalysisTaskPMD.cxx:154
 AliAnalysisTaskPMD.cxx:155
 AliAnalysisTaskPMD.cxx:156
 AliAnalysisTaskPMD.cxx:157
 AliAnalysisTaskPMD.cxx:158
 AliAnalysisTaskPMD.cxx:159
 AliAnalysisTaskPMD.cxx:160
 AliAnalysisTaskPMD.cxx:161
 AliAnalysisTaskPMD.cxx:162
 AliAnalysisTaskPMD.cxx:163
 AliAnalysisTaskPMD.cxx:164
 AliAnalysisTaskPMD.cxx:165
 AliAnalysisTaskPMD.cxx:166
 AliAnalysisTaskPMD.cxx:167
 AliAnalysisTaskPMD.cxx:168
 AliAnalysisTaskPMD.cxx:169
 AliAnalysisTaskPMD.cxx:170
 AliAnalysisTaskPMD.cxx:171
 AliAnalysisTaskPMD.cxx:172
 AliAnalysisTaskPMD.cxx:173
 AliAnalysisTaskPMD.cxx:174
 AliAnalysisTaskPMD.cxx:175
 AliAnalysisTaskPMD.cxx:176
 AliAnalysisTaskPMD.cxx:177
 AliAnalysisTaskPMD.cxx:178
 AliAnalysisTaskPMD.cxx:179
 AliAnalysisTaskPMD.cxx:180
 AliAnalysisTaskPMD.cxx:181
 AliAnalysisTaskPMD.cxx:182
 AliAnalysisTaskPMD.cxx:183
 AliAnalysisTaskPMD.cxx:184
 AliAnalysisTaskPMD.cxx:185
 AliAnalysisTaskPMD.cxx:186
 AliAnalysisTaskPMD.cxx:187
 AliAnalysisTaskPMD.cxx:188
 AliAnalysisTaskPMD.cxx:189
 AliAnalysisTaskPMD.cxx:190
 AliAnalysisTaskPMD.cxx:191
 AliAnalysisTaskPMD.cxx:192
 AliAnalysisTaskPMD.cxx:193
 AliAnalysisTaskPMD.cxx:194
 AliAnalysisTaskPMD.cxx:195
 AliAnalysisTaskPMD.cxx:196
 AliAnalysisTaskPMD.cxx:197
 AliAnalysisTaskPMD.cxx:198
 AliAnalysisTaskPMD.cxx:199
 AliAnalysisTaskPMD.cxx:200
 AliAnalysisTaskPMD.cxx:201