ROOT logo
// $Id$
//
// Class to make emcal particles in AOD/ESD events.
//
// Author: S.Aiola

#include <TClonesArray.h>

#include "AliLog.h"
#include "AliVTrack.h"
#include "AliVCluster.h"
#include "AliEmcalParticle.h"

#include "AliEmcalParticleMaker.h"

ClassImp(AliEmcalParticleMaker)

//________________________________________________________________________
AliEmcalParticleMaker::AliEmcalParticleMaker() : 
  AliAnalysisTaskEmcal("AliEmcalParticleMaker",kFALSE),
  fTracksOutName("EmcalTracks"),
  fCaloOutName("EmcalClusters"),
  fTracksOut(0),
  fCaloClustersOut(0)
{
  // Constructor.
}

//________________________________________________________________________
AliEmcalParticleMaker::AliEmcalParticleMaker(const char *name) : 
  AliAnalysisTaskEmcal(name,kFALSE),
  fTracksOutName("EmcalTracks"),
  fCaloOutName("EmcalClusters"),
  fTracksOut(0),
  fCaloClustersOut(0)
{
  // Constructor.
}

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

//________________________________________________________________________
void AliEmcalParticleMaker::ExecOnce()
{
  // Init the analysis.

  AliAnalysisTaskEmcal::ExecOnce();

  if (!fInitialized)
    return;

  if (!fTracksOutName.IsNull()) {
    fTracksOut = new TClonesArray("AliEmcalParticle");
    fTracksOut->SetName(fTracksOutName);
    AddObjectToEvent(fTracksOut);
  }

  if (!fCaloOutName.IsNull()) {
    fCaloClustersOut = new TClonesArray("AliEmcalParticle");
    fCaloClustersOut->SetName(fCaloOutName);
    AddObjectToEvent(fCaloClustersOut);    
  }
}

//________________________________________________________________________
Bool_t AliEmcalParticleMaker::Run() 
{
  // Create the emcal particles

  if (fTracks && fTracksOut) {
    // clear container (normally a null operation as the event should clean it already)
    fTracksOut->Delete();
    const Int_t Ntracks = fTracks->GetEntries();
    for (Int_t iTracks = 0; iTracks < Ntracks; ++iTracks) {
      AliVTrack *track = static_cast<AliVTrack*>(fTracks->At(iTracks));
      AliEmcalParticle *ep = new ((*fTracksOut)[iTracks]) AliEmcalParticle(track, iTracks);
      if (0&&fCaloClusters)
	ep->SetMatchedPtr(fCaloClusters);
    }
  }

  if (fCaloClusters && fCaloClustersOut) {
    // clear container (normally a null operation as the event should clean it already)
    fCaloClustersOut->Delete();
    const Int_t Nclusters = fCaloClusters->GetEntries();
    for (Int_t iClusters = 0, iN=0; iClusters < Nclusters; ++iClusters) {
      AliVCluster *cluster = static_cast<AliVCluster*>(fCaloClusters->At(iClusters));
      /* Commented because for simplicity prefer to keep indices aligned with clusters (CL)
        if (!cluster->IsEMCAL()) continue;
      */
      AliEmcalParticle *ep = new ((*fCaloClustersOut)[iN++]) AliEmcalParticle(cluster, iClusters, fVertex[0], fVertex[1], fVertex[2]);
      if (0&&fTracks)
	ep->SetMatchedPtr(fTracks);
    }
  }
  return kTRUE;
}
 AliEmcalParticleMaker.cxx:1
 AliEmcalParticleMaker.cxx:2
 AliEmcalParticleMaker.cxx:3
 AliEmcalParticleMaker.cxx:4
 AliEmcalParticleMaker.cxx:5
 AliEmcalParticleMaker.cxx:6
 AliEmcalParticleMaker.cxx:7
 AliEmcalParticleMaker.cxx:8
 AliEmcalParticleMaker.cxx:9
 AliEmcalParticleMaker.cxx:10
 AliEmcalParticleMaker.cxx:11
 AliEmcalParticleMaker.cxx:12
 AliEmcalParticleMaker.cxx:13
 AliEmcalParticleMaker.cxx:14
 AliEmcalParticleMaker.cxx:15
 AliEmcalParticleMaker.cxx:16
 AliEmcalParticleMaker.cxx:17
 AliEmcalParticleMaker.cxx:18
 AliEmcalParticleMaker.cxx:19
 AliEmcalParticleMaker.cxx:20
 AliEmcalParticleMaker.cxx:21
 AliEmcalParticleMaker.cxx:22
 AliEmcalParticleMaker.cxx:23
 AliEmcalParticleMaker.cxx:24
 AliEmcalParticleMaker.cxx:25
 AliEmcalParticleMaker.cxx:26
 AliEmcalParticleMaker.cxx:27
 AliEmcalParticleMaker.cxx:28
 AliEmcalParticleMaker.cxx:29
 AliEmcalParticleMaker.cxx:30
 AliEmcalParticleMaker.cxx:31
 AliEmcalParticleMaker.cxx:32
 AliEmcalParticleMaker.cxx:33
 AliEmcalParticleMaker.cxx:34
 AliEmcalParticleMaker.cxx:35
 AliEmcalParticleMaker.cxx:36
 AliEmcalParticleMaker.cxx:37
 AliEmcalParticleMaker.cxx:38
 AliEmcalParticleMaker.cxx:39
 AliEmcalParticleMaker.cxx:40
 AliEmcalParticleMaker.cxx:41
 AliEmcalParticleMaker.cxx:42
 AliEmcalParticleMaker.cxx:43
 AliEmcalParticleMaker.cxx:44
 AliEmcalParticleMaker.cxx:45
 AliEmcalParticleMaker.cxx:46
 AliEmcalParticleMaker.cxx:47
 AliEmcalParticleMaker.cxx:48
 AliEmcalParticleMaker.cxx:49
 AliEmcalParticleMaker.cxx:50
 AliEmcalParticleMaker.cxx:51
 AliEmcalParticleMaker.cxx:52
 AliEmcalParticleMaker.cxx:53
 AliEmcalParticleMaker.cxx:54
 AliEmcalParticleMaker.cxx:55
 AliEmcalParticleMaker.cxx:56
 AliEmcalParticleMaker.cxx:57
 AliEmcalParticleMaker.cxx:58
 AliEmcalParticleMaker.cxx:59
 AliEmcalParticleMaker.cxx:60
 AliEmcalParticleMaker.cxx:61
 AliEmcalParticleMaker.cxx:62
 AliEmcalParticleMaker.cxx:63
 AliEmcalParticleMaker.cxx:64
 AliEmcalParticleMaker.cxx:65
 AliEmcalParticleMaker.cxx:66
 AliEmcalParticleMaker.cxx:67
 AliEmcalParticleMaker.cxx:68
 AliEmcalParticleMaker.cxx:69
 AliEmcalParticleMaker.cxx:70
 AliEmcalParticleMaker.cxx:71
 AliEmcalParticleMaker.cxx:72
 AliEmcalParticleMaker.cxx:73
 AliEmcalParticleMaker.cxx:74
 AliEmcalParticleMaker.cxx:75
 AliEmcalParticleMaker.cxx:76
 AliEmcalParticleMaker.cxx:77
 AliEmcalParticleMaker.cxx:78
 AliEmcalParticleMaker.cxx:79
 AliEmcalParticleMaker.cxx:80
 AliEmcalParticleMaker.cxx:81
 AliEmcalParticleMaker.cxx:82
 AliEmcalParticleMaker.cxx:83
 AliEmcalParticleMaker.cxx:84
 AliEmcalParticleMaker.cxx:85
 AliEmcalParticleMaker.cxx:86
 AliEmcalParticleMaker.cxx:87
 AliEmcalParticleMaker.cxx:88
 AliEmcalParticleMaker.cxx:89
 AliEmcalParticleMaker.cxx:90
 AliEmcalParticleMaker.cxx:91
 AliEmcalParticleMaker.cxx:92
 AliEmcalParticleMaker.cxx:93
 AliEmcalParticleMaker.cxx:94
 AliEmcalParticleMaker.cxx:95
 AliEmcalParticleMaker.cxx:96
 AliEmcalParticleMaker.cxx:97
 AliEmcalParticleMaker.cxx:98
 AliEmcalParticleMaker.cxx:99
 AliEmcalParticleMaker.cxx:100
 AliEmcalParticleMaker.cxx:101