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 mixed harmomics  * 
 *                                    * 
 * 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 "AliAnalysisTaskMixedHarmonics.h"
#include "AliFlowAnalysisWithMixedHarmonics.h"

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

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

AliAnalysisTaskMixedHarmonics::AliAnalysisTaskMixedHarmonics(const char *name, Bool_t useParticleWeights): 
AliAnalysisTaskSE(name), 
fEvent(NULL),
fMH(NULL), 
fListHistos(NULL),
fHarmonic(1),
fNoOfMultipicityBins(100),
fMultipicityBinWidth(1.),
fMinMultiplicity(3.),
fOppositeChargesPOI(kFALSE),
fEvaluateDifferential3pCorrelator(kFALSE),
fCorrectForDetectorEffects(kFALSE),
fPrintOnTheScreen(kTRUE),
fCalculateVsM(kFALSE),
fShowBinLabelsVsM(kFALSE),
fUseParticleWeights(useParticleWeights),
fUsePhiWeights(kFALSE),
fUsePtWeights(kFALSE),
fUseEtaWeights(kFALSE),
fWeightsList(NULL)
{
 // constructor
 cout<<"AliAnalysisTaskMixedHarmonics::AliAnalysisTaskMixedHarmonics(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());  
}

AliAnalysisTaskMixedHarmonics::AliAnalysisTaskMixedHarmonics(): 
AliAnalysisTaskSE(),
fEvent(NULL),
fMH(NULL),
fListHistos(NULL),
fHarmonic(0),
fNoOfMultipicityBins(0),
fMultipicityBinWidth(0),
fMinMultiplicity(0),
fOppositeChargesPOI(kFALSE),
fEvaluateDifferential3pCorrelator(kFALSE),
fCorrectForDetectorEffects(kFALSE),
fPrintOnTheScreen(kFALSE),
fCalculateVsM(kFALSE),
fShowBinLabelsVsM(kFALSE),
fUseParticleWeights(kFALSE),
fUsePhiWeights(kFALSE),
fUsePtWeights(kFALSE),
fUseEtaWeights(kFALSE),
fWeightsList(NULL)
{
 // Dummy constructor
 cout<<"AliAnalysisTaskMixedHarmonics::AliAnalysisTaskMixedHarmonics()"<<endl;
}

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

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

 // Analyser:
 fMH = new AliFlowAnalysisWithMixedHarmonics();
  
 // Common:
 fMH->SetHarmonic(fHarmonic);
 fMH->SetNoOfMultipicityBins(fNoOfMultipicityBins);
 fMH->SetMultipicityBinWidth(fMultipicityBinWidth);
 fMH->SetMinMultiplicity(fMinMultiplicity);
 fMH->SetOppositeChargesPOI(fOppositeChargesPOI);
 fMH->SetEvaluateDifferential3pCorrelator(fEvaluateDifferential3pCorrelator); 
 fMH->SetCorrectForDetectorEffects(fCorrectForDetectorEffects);
 fMH->SetPrintOnTheScreen(fPrintOnTheScreen); 
 fMH->SetCalculateVsM(fCalculateVsM); 
 fMH->SetShowBinLabelsVsM(fShowBinLabelsVsM);
 if(fUseParticleWeights)
 {
  // Pass the flags to class:
  if(fUsePhiWeights) fMH->SetUsePhiWeights(fUsePhiWeights);
  if(fUsePtWeights) fMH->SetUsePtWeights(fUsePtWeights);
  if(fUseEtaWeights) fMH->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) fMH->SetWeightsList(fWeightsList);
 }
 
 fMH->Init();
 
 if(fMH->GetHistList()) 
 {
  fListHistos = fMH->GetHistList();
  // fListHistos->Print();
 } else 
   {
    Printf("ERROR: Could not retrieve histogram list (MH, Task::UserCreateOutputObjects()) !!!!"); 
   }
 
 PostData(1,fListHistos);
  
} // end of void AliAnalysisTaskMixedHarmonics::UserCreateOutputObjects() 

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

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

 // Mixed Harmonics:
 if(fEvent) 
 {
  fMH->Make(fEvent);
 } else 
   {
    cout<<"WARNING: No input data (MH, Task::UserExec()) !!!!"<<endl;
    cout<<endl;
   }
  
 PostData(1,fListHistos);
}

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

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





















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