ROOT logo
/**************************************************************************
* Copyright(c) 1998-1999, 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.                  *
**************************************************************************/

#include "iostream"

#include "TChain.h"
#include "TTree.h"
#include "TH1F.h"
#include "TCanvas.h"
#include "TList.h"
#include "TFile.h"

#include "AliAnalysisTask.h"
#include "AliAnalysisManager.h"
#include "AliESDEvent.h"
#include "AliESDInputHandler.h"
#include "AliESDVertex.h"
#include "AliTracker.h"
#include "AliGeomManager.h"

#include "AliCentrality.h"
#include "AliESDVZERO.h"
#include "AliMultiplicity.h"

#include "AliESDtrackCuts.h"
#include "AliMCEventHandler.h"
#include "AlidNdPt.h"
#include "AlidNdPtEventCuts.h"
#include "AlidNdPtAcceptanceCuts.h"

#include "AlidNdPtTask.h"

using namespace std;

ClassImp(AlidNdPtTask)

//_____________________________________________________________________________
AlidNdPtTask::AlidNdPtTask(const char *name) 
  : AliAnalysisTaskSE(name)
  , fESD(0)
  , fMC(0)
  , fOutput(0)
  , fPitList(0)
  , fCompList(0)
  , fUseMCInfo(kFALSE)
{
  // Constructor

  // Define input and output slots here
  DefineOutput(1, TList::Class());

  // create the list for comparison objects
  fCompList = new TList;
}

//_____________________________________________________________________________
AlidNdPtTask::~AlidNdPtTask()
{
  if(fOutput) delete fOutput;  fOutput =0; 
  if(fCompList) delete fCompList;  fCompList =0; 
}

//____________________________________________________________________________
Bool_t AlidNdPtTask::Notify()
{
  static Int_t count = 0;
  count++;
  //Printf("Processing %d. file: %s", count, ((TTree*) GetInputData(0))->GetCurrentFile()->GetName());
  TTree *chain = (TChain*)GetInputData(0);
  if(chain)
    Printf("Processing %d. file: %s", count, chain->GetCurrentFile()->GetName());

  /*
  TChain *chain = (TChain*)GetInputData(0);
  AliESDInputHandler *esdH = dynamic_cast<AliESDInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
  if (!esdH) {
    Printf("ERROR: Could not get ESDInputHandler");
    return kFALSE;
  } else {
    if(chain)
    Printf("chain->GetCurrentFile()->GetName() %s", chain->GetCurrentFile()->GetName());
  }
  */

return kTRUE;
}

//_____________________________________________________________________________
Bool_t AlidNdPtTask::AddAnalysisObject(AlidNdPt *pObj) 
{
  // add analysis object to the list
  if(pObj == 0) {
    Printf("ERROR: Could not add comparison object");
    return kFALSE;
  }

  // add object to the list
  fCompList->AddLast(pObj);
       
return kTRUE;
}

//_____________________________________________________________________________
void AlidNdPtTask::UserCreateOutputObjects()
{
  // Create histograms
  // Called once

  OpenFile(1, "RECREATE");

  //
  // create output list
  //
  fOutput = new TList;
  fOutput->SetOwner();
  fPitList = fOutput->MakeIterator();

  // add dNdPt analysis objects to the output
  AlidNdPt *pObj=0;
  Int_t count=0;
  TIterator *pitCompList = fCompList->MakeIterator();
  pitCompList->Reset();
  while(( pObj = (AlidNdPt *)pitCompList->Next()) != NULL) {
    fOutput->Add(pObj);
    count++;
  }
  Printf("UserCreateOutputObjects(): Number of output objects: %d \n", count);

  PostData(1, fOutput);
}

//_____________________________________________________________________________
void AlidNdPtTask::UserExec(Option_t *) 
{
  //
  // Called for each event
  //

  // ESD event
  fESD = (AliESDEvent*) (InputEvent());
  if (!fESD) {
    Printf("ERROR: ESD event not available");
    return;
  }

  // MC event
  if(fUseMCInfo) {
    fMC = MCEvent();
    if (!fMC) {
      Printf("ERROR: MC event not available");
      return;
    }
  }


    AlidNdPt *pObj = 0;
    fPitList->Reset();
    while((pObj = (AlidNdPt *)fPitList->Next()) != NULL) {
      pObj->Process(fESD,fMC);
    }


  // Post output data.
  PostData(1, fOutput);
}

//_____________________________________________________________________________
void AlidNdPtTask::FinishTaskOutput() 
{
  //
  // Called one at the end 
  // locally on working node
  //
   // check output data
  fOutput = dynamic_cast<TList*> (GetOutputData(1));
  if (!fOutput) {
    Printf("ERROR: AlidNdPtTask::FinishTaskOutput(): Output data not avaiable GetOutputData(1)==0x0 ..." );
    return;
  }

  AlidNdPt* pObj=0;
  TIterator* itOut = fOutput->MakeIterator();
  itOut->Reset();
  while(( pObj = dynamic_cast<AlidNdPt*>(itOut->Next())) != NULL) {
    if(pObj->GetAnalyseOutput()) { 
      pObj->Analyse();
    }
  }

  // Post output data.
  PostData(1, fOutput);
}

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