ROOT logo
// $Id$
//
// Emcal sample analysis task.
//
// Author: S.Aiola, M. Verweij

#include <TClonesArray.h>
#include <TH1F.h>
#include <TH2F.h>
#include <TH3F.h>
#include <TList.h>
#include <TLorentzVector.h>

#include "AliVCluster.h"
#include "AliAODCaloCluster.h"
#include "AliESDCaloCluster.h"
#include "AliVTrack.h"
#include "AliLog.h"
#include "AliParticleContainer.h"
#include "AliClusterContainer.h"
#include "AliPicoTrack.h"

#include "AliAnalysisTaskEmcalSample.h"

ClassImp(AliAnalysisTaskEmcalSample)

//________________________________________________________________________
AliAnalysisTaskEmcalSample::AliAnalysisTaskEmcalSample() : 
  AliAnalysisTaskEmcal("AliAnalysisTaskEmcalSample", kTRUE),
  fHistTracksPt(0),
  fHistClustersPt(0),
  fHistPtDEtaDPhiTrackClus(0),
  fHistPtDEtaDPhiClusTrack(0),
  fTracksCont(0),
  fCaloClustersCont(0)
{
  // Default constructor.

  fHistTracksPt       = new TH1*[fNcentBins];
  fHistClustersPt     = new TH1*[fNcentBins];

  for (Int_t i = 0; i < fNcentBins; i++) {
    fHistTracksPt[i] = 0;
    fHistClustersPt[i] = 0;
  }

  SetMakeGeneralHistograms(kTRUE);
}

//________________________________________________________________________
AliAnalysisTaskEmcalSample::AliAnalysisTaskEmcalSample(const char *name) : 
  AliAnalysisTaskEmcal(name, kTRUE),
  fHistTracksPt(0),
  fHistClustersPt(0),
  fHistPtDEtaDPhiTrackClus(0),
  fHistPtDEtaDPhiClusTrack(0),
  fTracksCont(0),
  fCaloClustersCont(0)
{
  // Standard constructor.

  fHistTracksPt       = new TH1*[fNcentBins];
  fHistClustersPt     = new TH1*[fNcentBins];

  for (Int_t i = 0; i < fNcentBins; i++) {
    fHistTracksPt[i] = 0;
    fHistClustersPt[i] = 0;
  }

  SetMakeGeneralHistograms(kTRUE);
}

//________________________________________________________________________
AliAnalysisTaskEmcalSample::~AliAnalysisTaskEmcalSample()
{
  // Destructor.
}

//________________________________________________________________________
void AliAnalysisTaskEmcalSample::UserCreateOutputObjects()
{
  // Create user output.

  AliAnalysisTaskEmcal::UserCreateOutputObjects();

  fTracksCont       = GetParticleContainer(0);
  fCaloClustersCont = GetClusterContainer(0);
  fTracksCont->SetClassName("AliVTrack");
  fCaloClustersCont->SetClassName("AliVCluster");

  TString histname;

  for (Int_t i = 0; i < fNcentBins; i++) {
    if (fParticleCollArray.GetEntriesFast()>0) {
      histname = "fHistTracksPt_";
      histname += i;
      fHistTracksPt[i] = new TH1F(histname.Data(), histname.Data(), fNbins / 2, fMinBinPt, fMaxBinPt / 2);
      fHistTracksPt[i]->GetXaxis()->SetTitle("p_{T,track} (GeV/c)");
      fHistTracksPt[i]->GetYaxis()->SetTitle("counts");
      fOutput->Add(fHistTracksPt[i]);
    }

    if (fClusterCollArray.GetEntriesFast()>0) {
      histname = "fHistClustersPt_";
      histname += i;
      fHistClustersPt[i] = new TH1F(histname.Data(), histname.Data(), fNbins / 2, fMinBinPt, fMaxBinPt / 2);
      fHistClustersPt[i]->GetXaxis()->SetTitle("p_{T,clus} (GeV/c)");
      fHistClustersPt[i]->GetYaxis()->SetTitle("counts");
      fOutput->Add(fHistClustersPt[i]);
    }
  }

  histname = "fHistPtDEtaDPhiTrackClus";
  fHistPtDEtaDPhiTrackClus = new TH3F(histname.Data(),Form("%s;#it{p}_{T}^{track};#Delta#eta;#Delta#varphi",histname.Data()),100,0.,100.,100,-0.1,0.1,100,-0.1,0.1);
  fOutput->Add(fHistPtDEtaDPhiTrackClus);

  histname = "fHistPtDEtaDPhiClusTrack";
  fHistPtDEtaDPhiClusTrack = new TH3F(histname.Data(),Form("%s;#it{p}_{T}^{clus};#Delta#eta;#Delta#varphi",histname.Data()),100,0.,100.,100,-0.1,0.1,100,-0.1,0.1);
  fOutput->Add(fHistPtDEtaDPhiClusTrack);

  PostData(1, fOutput); // Post data for ALL output slots > 0 here.
}

//________________________________________________________________________
Bool_t AliAnalysisTaskEmcalSample::FillHistograms()
{
  // Fill histograms.

  if (fTracksCont) {
    AliVTrack *track = static_cast<AliVTrack*>(fTracksCont->GetNextAcceptParticle(0)); 
    while(track) {
      fHistTracksPt[fCentBin]->Fill(track->Pt()); 
      track = static_cast<AliVTrack*>(fTracksCont->GetNextAcceptParticle());
    }
  }
  
  if (fCaloClustersCont) {
    AliVCluster *cluster = fCaloClustersCont->GetNextAcceptCluster(0); 
    while(cluster) {
      TLorentzVector nPart;
      cluster->GetMomentum(nPart, fVertex);
      fHistClustersPt[fCentBin]->Fill(nPart.Pt());
      cluster = fCaloClustersCont->GetNextAcceptCluster();
    }
  }

  CheckClusTrackMatching();

  return kTRUE;
}

//________________________________________________________________________
void AliAnalysisTaskEmcalSample::CheckClusTrackMatching()
{
  
  if(!fTracksCont || !fCaloClustersCont)
    return;

  Double_t deta = 999;
  Double_t dphi = 999;

  //Get closest cluster to track
  AliVTrack *track = static_cast<AliVTrack*>(fTracksCont->GetNextAcceptParticle(0)); 
  while(track) {
    //Get matched cluster
    Int_t emc1 = track->GetEMCALcluster();
    if(fCaloClustersCont && emc1>=0) {
      AliVCluster *clusMatch = fCaloClustersCont->GetCluster(emc1);
      if(clusMatch) {
	AliPicoTrack::GetEtaPhiDiff(track, clusMatch, dphi, deta);
	fHistPtDEtaDPhiTrackClus->Fill(track->Pt(),deta,dphi);
      }
    }
    track = static_cast<AliVTrack*>(fTracksCont->GetNextAcceptParticle());
  }
  
  //Get closest track to cluster
  AliVCluster *cluster = fCaloClustersCont->GetNextAcceptCluster(0); 
  while(cluster) {
    TLorentzVector nPart;
    cluster->GetMomentum(nPart, fVertex);
    fHistClustersPt[fCentBin]->Fill(nPart.Pt());
    
    //Get matched track
    AliVTrack *mt = NULL;      
    AliAODCaloCluster *acl = dynamic_cast<AliAODCaloCluster*>(cluster);
    if(acl) {
      if(acl->GetNTracksMatched()>1)
	mt = static_cast<AliVTrack*>(acl->GetTrackMatched(0));
    }
    else {
      AliESDCaloCluster *ecl = dynamic_cast<AliESDCaloCluster*>(cluster);
      Int_t im = ecl->GetTrackMatchedIndex();
      if(fTracksCont && im>=0) {
	mt = static_cast<AliVTrack*>(fTracksCont->GetParticle(im));
      }
    }
    if(mt) {
      AliPicoTrack::GetEtaPhiDiff(mt, cluster, dphi, deta);
      fHistPtDEtaDPhiClusTrack->Fill(nPart.Pt(),deta,dphi);
      
      /* //debugging
	 if(mt->IsEMCAL()) {
	 Int_t emc1 = mt->GetEMCALcluster();
	 Printf("current id: %d  emc1: %d",fCaloClustersCont->GetCurrentID(),emc1);
	 AliVCluster *clm = fCaloClustersCont->GetCluster(emc1);
	 AliPicoTrack::GetEtaPhiDiff(mt, clm, dphi, deta);
	 Printf("deta: %f dphi: %f",deta,dphi);
	 }
      */
    }
    cluster = fCaloClustersCont->GetNextAcceptCluster();
  }
}

//________________________________________________________________________
void AliAnalysisTaskEmcalSample::ExecOnce() {

  AliAnalysisTaskEmcal::ExecOnce();

  if (fTracksCont && fTracksCont->GetArray() == 0) fTracksCont = 0;
  if (fCaloClustersCont && fCaloClustersCont->GetArray() == 0) fCaloClustersCont = 0;

}

//________________________________________________________________________
Bool_t AliAnalysisTaskEmcalSample::Run()
{
  // Run analysis code here, if needed. It will be executed before FillHistograms().

  return kTRUE;  // If return kFALSE FillHistogram() will NOT be executed.
}

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