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

/**********************************
 * analysis task for nested loops * 
 *                                * 
 * authors: Naomi van der Kolk    *
 *           (kolk@nikhef.nl)     *  
 *          Raimond Snellings     *
 *           (snelling@nikhef.nl) * 
 *          Ante Bilandzic        *
 *           (anteb@nikhef.nl)    * 
 * *******************************/
 
class TFile;
class TString;
class TList;
class AliAnalysisTaskSE; 
 
#include "Riostream.h"
#include "AliFlowEventSimple.h"
#include "AliAnalysisTaskNestedLoops.h"
#include "AliFlowAnalysisWithNestedLoops.h"

using std::cout;
using std::endl;
ClassImp(AliAnalysisTaskNestedLoops)

//================================================================================================================

AliAnalysisTaskNestedLoops::AliAnalysisTaskNestedLoops(const char *name, Bool_t useParticleWeights): 
AliAnalysisTaskSE(name), 
fEvent(NULL),
fNL(NULL), 
fListHistos(NULL),
fHarmonic(0),
fOppositeChargesPOI(kFALSE),
fEvaluateDifferential3pCorrelator(kFALSE),
fUseParticleWeights(useParticleWeights),
fUsePhiWeights(kFALSE),
fUsePtWeights(kFALSE),
fUseEtaWeights(kFALSE),
fWeightsList(NULL),
fEvaluateNestedLoopsForRAD(kTRUE),
fEvaluateNestedLoopsForQC(kFALSE),
fEvaluateNestedLoopsForMH(kFALSE)
{
 // constructor
 cout<<"AliAnalysisTaskNestedLoops::AliAnalysisTaskNestedLoops(const char *name, Bool_t useParticleWeights)"<<endl;
 
 // Define input and output slots here
 // Input slot #0 works with an AliFlowEventSimple
 DefineInput(0, AliFlowEventSimple::Class());  
 // Input slot #1 is needed for the weights input file:
 if(useParticleWeights)
 {
  DefineInput(1, TList::Class());   
 }  
 // Output slot #0 is reserved              
 // Output slot #1 writes into a TList container
 DefineOutput(1, TList::Class());  
}

AliAnalysisTaskNestedLoops::AliAnalysisTaskNestedLoops(): 
AliAnalysisTaskSE(),
fEvent(NULL),
fNL(NULL),
fListHistos(NULL),
fHarmonic(0),
fOppositeChargesPOI(kFALSE),
fEvaluateDifferential3pCorrelator(kFALSE),
fUseParticleWeights(kFALSE),
fUsePhiWeights(kFALSE),
fUsePtWeights(kFALSE),
fUseEtaWeights(kFALSE),
fWeightsList(NULL),
fEvaluateNestedLoopsForRAD(kFALSE),
fEvaluateNestedLoopsForQC(kFALSE),
fEvaluateNestedLoopsForMH(kFALSE)
{
 // Dummy constructor
 cout<<"AliAnalysisTaskNestedLoops::AliAnalysisTaskNestedLoops()"<<endl;
}

//================================================================================================================

void AliAnalysisTaskNestedLoops::UserCreateOutputObjects() 
{
 // Called at every worker node to initialize
 cout<<"AliAnalysisTaskNestedLoops::UserCreateOutputObjects()"<<endl;

 // Analyser:
 fNL = new AliFlowAnalysisWithNestedLoops();

 fNL->SetHarmonic(fHarmonic);
 fNL->SetOppositeChargesPOI(fOppositeChargesPOI);
 fNL->SetEvaluateDifferential3pCorrelator(fEvaluateDifferential3pCorrelator);

 if(fUseParticleWeights)
 {
  // Pass the flags to class:
  if(fUsePhiWeights) fNL->SetUsePhiWeights(fUsePhiWeights);
  if(fUsePtWeights) fNL->SetUsePtWeights(fUsePtWeights);
  if(fUseEtaWeights) fNL->SetUseEtaWeights(fUseEtaWeights);
  // Get data from input slot #1 which is used for weights:
  if(GetNinputs()==2) 
  {                   
   fWeightsList = (TList*)GetInputData(1); 
  }
  // Pass the list with weights to class:
  if(fWeightsList) fNL->SetWeightsList(fWeightsList);
 }
 
 fNL->SetEvaluateNestedLoopsForRAD(fEvaluateNestedLoopsForRAD);
 fNL->SetEvaluateNestedLoopsForQC(fEvaluateNestedLoopsForQC);
 fNL->SetEvaluateNestedLoopsForMH(fEvaluateNestedLoopsForMH);
 
 fNL->Init();
 
 if(fNL->GetHistList()) 
 {
  fListHistos = fNL->GetHistList();
  // fListHistos->Print();
 } else 
   {
    Printf("ERROR: Could not retrieve histogram list (NL, Task::UserCreateOutputObjects()) !!!!"); 
   }
  
 PostData(1,fListHistos);
 
} // end of void AliAnalysisTaskNestedLoops::UserCreateOutputObjects() 

//================================================================================================================

void AliAnalysisTaskNestedLoops::UserExec(Option_t *) 
{
 // main loop (called for each event)
 fEvent = dynamic_cast<AliFlowEventSimple*>(GetInputData(0));

 // Nested Loops:
 if(fEvent) 
 {
  fNL->Make(fEvent);
 } else 
   {
    cout<<"WARNING: No input data (NL, Task::UserExec()) !!!!"<<endl;
    cout<<endl;
   }
  
 PostData(1,fListHistos);
}

//================================================================================================================

void AliAnalysisTaskNestedLoops::Terminate(Option_t *) 
{
 //accessing the merged output list: 
 fListHistos = (TList*)GetOutputData(1);
 
 fNL = new AliFlowAnalysisWithNestedLoops(); 
 
 if(fListHistos) 
 {
  fNL->GetOutputHistograms(fListHistos);
  fNL->Finish();
  PostData(1,fListHistos);
 } else
   {
    cout<<" WARNING: histogram list pointer is empty (NL, Task::Terminate()) !!!!"<<endl;
    cout<<endl;
   }
    
} // end of void AliAnalysisTaskNestedLoops::Terminate(Option_t *)





















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