ROOT logo
/**************************************************************************
 * Copyright(c) 1998-2014, 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.                  *
 **************************************************************************/
/*
 * Re-structured analysis task of the pt analysis on EMCal-triggered events:
 * Analysis steps are moved to analysis components, which are grouped by a common
 * event selection. The analysis task steers the event builder, runs each group,
 * and collects the output of all groups.
 *
 *   Author: Markus Fasel
 */
#include "AliInputEventHandler.h"
#include "AliParticleContainer.h"
#include "AliJetContainer.h"

#include "AliEMCalTriggerBinningComponent.h"
#include "AliEMCalTriggerBinningFactory.h"
#include "AliEMCalTriggerEventData.h"
#include "AliEMCalTriggerTaskGroup.h"
#include "AliEMCalTriggerAnaTriggerDecision.h"
#include "AliEMCalHistoContainer.h"
#include "AliAnalysisTaskPtEMCalTriggerV1.h"

ClassImp(EMCalTriggerPtAnalysis::AliAnalysisTaskPtEMCalTriggerV1)

namespace EMCalTriggerPtAnalysis {

//______________________________________________________________________________
AliAnalysisTaskPtEMCalTriggerV1::AliAnalysisTaskPtEMCalTriggerV1() :
    AliAnalysisTaskEmcalJet(),
    fTaskGroups(NULL),
    fBinning(NULL),
    fMCJetContainer(),
    fDataJetContainer()
{
  /*
   * Dummy constructor
   */
}

//______________________________________________________________________________
AliAnalysisTaskPtEMCalTriggerV1::AliAnalysisTaskPtEMCalTriggerV1(const char* name) :
    AliAnalysisTaskEmcalJet(name, kTRUE),
    fTaskGroups(NULL),
    fBinning(NULL),
    fMCJetContainer(),
    fDataJetContainer()
{
  /*
   * Main Constructor
   */
  fTaskGroups = new TObjArray;
  fTaskGroups->SetOwner();
  fBinning = new AliEMCalTriggerBinningComponent();
  SetMakeGeneralHistograms(kTRUE);
}

//______________________________________________________________________________
AliAnalysisTaskPtEMCalTriggerV1::~AliAnalysisTaskPtEMCalTriggerV1() {
  /*
   * Destructor
   */
  delete fTaskGroups;
  delete fBinning;
}

//______________________________________________________________________________
void AliAnalysisTaskPtEMCalTriggerV1::UserCreateOutputObjects() {
  /*
   * Initialise all analysis components
   */
  AliAnalysisTaskEmcal::UserCreateOutputObjects();
  SetCaloTriggerPatchInfoName("EmcalTriggers");

  AliEMCalTriggerBinningFactory binmaker;
  binmaker.Create(fBinning);

  TIter groupIter(fTaskGroups);
  AliEMCalTriggerTaskGroup *mygroup(NULL);
  TList *outputList = new TList;
  outputList->SetName(Form("histos%s", GetName()));
  while((mygroup = dynamic_cast<AliEMCalTriggerTaskGroup *>(groupIter()))){
    mygroup->SetGlobalBinning(fBinning);
    TList *ltmp = mygroup->InitialiseAnalysisComponents();
    // Collect output list and append it to the global output list
    TIter listIter(ltmp);
    TObject *hist(NULL);
    while((hist = listIter())) outputList->Add(hist);
  }
  fOutput->Add(outputList);
  PostData(1, fOutput);

}

//______________________________________________________________________________
Bool_t AliAnalysisTaskPtEMCalTriggerV1::Run() {
  /*
   * Run the analysis:
   * 1st build the event data shared among the tasks
   * 2nd loop over task groups and run them
   */
  AliEMCalTriggerEventData *event = BuildEvent();
  AliEMCalTriggerAnaTriggerDecision triggerDecision;
  triggerDecision.Create(event);
  triggerDecision.SetIsMinBias(fInputHandler->IsEventSelected() & AliVEvent::kINT7);
  TIter groupIter(fTaskGroups);
  AliEMCalTriggerTaskGroup *mygroup(NULL);
  while((mygroup = dynamic_cast<AliEMCalTriggerTaskGroup *>(groupIter()))){
    mygroup->SetTriggerDecision(&triggerDecision);
    mygroup->Process(event);
  }

  delete event;

  PostData(1, fOutput);
  return kTRUE;
}

//______________________________________________________________________________
void AliAnalysisTaskPtEMCalTriggerV1::SetBinning(const char* dimname, int nbins, double* binning) {
  /*
   * Set binning for a give dimension
   *
   * @param dimname: name of the axis
   * @param nbins: number of bins
   * @param binning: the bin limits
   */
  fBinning->SetBinning(dimname, nbins, binning);
}

//______________________________________________________________________________
void AliAnalysisTaskPtEMCalTriggerV1::SetBinning(const char* dimname, const TArrayD &binning) {
  /*
   * Set binning for a give dimension
   *
   * @param binning: the bin limits
   */
  fBinning->SetBinning(dimname, binning);
}

//______________________________________________________________________________
AliEMCalTriggerEventData* AliAnalysisTaskPtEMCalTriggerV1::BuildEvent() const {
  /*
   * Build event structure. Take the information about the different containers
   * from the base analysis task.
   *
   * @return: the resulting event structure
   */
  AliEMCalTriggerEventData *eventstruct = new AliEMCalTriggerEventData;
  eventstruct->SetRecEvent(fInputEvent);
  eventstruct->SetMCEvent(fMCEvent);
  eventstruct->SetTriggerPatchContainer(fTriggerPatchInfo);
  eventstruct->SetClusterContainer(fCaloClusters);
  eventstruct->SetTrackContainer(fTracks);
  if(fMCJetContainer.Length()){
    AliJetContainer *jcmc = dynamic_cast<AliJetContainer *>(fJetCollArray.FindObject(fMCJetContainer.Data()));
    eventstruct->SetParticleContainer(jcmc->GetParticleContainer()->GetArray());
    eventstruct->SetMCJetContainer(jcmc);
  }
  if(fDataJetContainer.Length()){
    AliJetContainer *jcdat = dynamic_cast<AliJetContainer *>(fJetCollArray.FindObject(fDataJetContainer.Data()));
    eventstruct->SetDataJetContainer(jcdat);
  }
  return eventstruct;
}

//______________________________________________________________________________
void AliAnalysisTaskPtEMCalTriggerV1::AddAnalysisGroup(AliEMCalTriggerTaskGroup *taskGroup) {
  /*
   * Add group of analysis components to the task
   *
   * @param taskGroup: Group of analysis components
   */
  fTaskGroups->Add(taskGroup);
}

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