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   *f
* 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 fitting       * 
 *         q-distribution             *
 *                                    * 
 * authors: Naomi van der Kolk        *
 *           (kolk@nikhef.nl)         *  
 *          Raimond Snellings         *
 *           (snelling@nikhef.nl)     * 
 *          Ante Bilandzic            *
 *           (abilandzic@gmail.com)   * 
 * ***********************************/
 
class TFile;
class TString;
class TList;
class AliAnalysisTaskSE; 
 
#include "Riostream.h"
#include "AliFlowEventSimple.h"
#include "AliAnalysisTaskFittingQDistribution.h"
#include "AliFlowAnalysisWithFittingQDistribution.h"
#include "TH2D.h"

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

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

AliAnalysisTaskFittingQDistribution::AliAnalysisTaskFittingQDistribution(const char *name, Bool_t useWeights): 
 AliAnalysisTaskSE(name), 
 fEvent(NULL),
 fFQD(NULL),
 fListHistos(NULL),
 fBookOnlyBasicCCH(kTRUE), 
 fUseWeights(useWeights),
 fUsePhiWeights(kFALSE),
 fListWeights(NULL),
 fHarmonic(2), 
 fqMin(0.),
 fqMax(100.),
 fqNbins(10000),
 fStoreqDistributionVsMult(kFALSE),
 fqDistributionVsMult(NULL),
 fMinMult(0.),
 fMaxMult(10000.),
 fnBinsMult(1000),
 fDoFit(kTRUE),
 fExactNoRPs(0),
 fMultiplicityIs(AliFlowCommonConstants::kRP)  
 {
  //constructor
  //cout<<"AliAnalysisTaskFittingQDistribution::AliAnalysisTaskFittingQDistribution(const char *name, Bool_t useWeights)"<<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 files 
  if(useWeights) 
  {
   DefineInput(1, TList::Class());   
  }
  // Output slot #0 is reserved
  // Output slot #1 writes into a TList container
  DefineOutput(1, TList::Class());  
 }

AliAnalysisTaskFittingQDistribution::AliAnalysisTaskFittingQDistribution(): 
 AliAnalysisTaskSE(),
 fEvent(NULL),
 fFQD(NULL),
 fListHistos(NULL), 
 fBookOnlyBasicCCH(kFALSE),   
 fUseWeights(kFALSE),
 fUsePhiWeights(kFALSE),
 fListWeights(NULL),
 fHarmonic(0), 
 fqMin(0.),
 fqMax(0.),
 fqNbins(0),
 fStoreqDistributionVsMult(kFALSE),
 fqDistributionVsMult(NULL),
 fMinMult(0.),
 fMaxMult(0.),
 fnBinsMult(0),
 fDoFit(kTRUE),
 fExactNoRPs(0),
 fMultiplicityIs(AliFlowCommonConstants::kRP)  
 {
  // Dummy constructor
  //cout<<"AliAnalysisTaskFittingQDistribution::AliAnalysisTaskFittingQDistribution()"<<endl;
 }

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

void AliAnalysisTaskFittingQDistribution::UserCreateOutputObjects() 
{
  // Called at every worker node to initialize
  cout<<"AliAnalysisTaskFittingQDistribution::UserCreateOutputObjects()"<<endl;
  
  // Analyser:
  fFQD = new AliFlowAnalysisWithFittingQDistribution();
  
  fFQD->SetBookOnlyBasicCCH(fBookOnlyBasicCCH);
  // Particle weights:
  if(fUseWeights) 
  {
   // Pass the flags to class:
   if(fUsePhiWeights) fFQD->SetUsePhiWeights(fUsePhiWeights);
   // Get data from input slot #1 which is used for weights:
   if(GetNinputs()==2) 
   {                   
    fListWeights = (TList*)GetInputData(1); 
   }
   // Pass the list with weights to class:
   if(fListWeights) fFQD->SetWeightsList(fListWeights);
  }
  fFQD->SetHarmonic(fHarmonic);
  // Settings for q-distribution:
  fFQD->SetqMin(fqMin);
  fFQD->SetqMax(fqMax);
  fFQD->SetqNbins(fqNbins); 
  fFQD->SetStoreqDistributionVsMult(fStoreqDistributionVsMult);
  fFQD->SetqDistributionVsMult(fqDistributionVsMult);
  fFQD->SetMinMult(fMinMult);
  fFQD->SetMaxMult(fMaxMult);
  fFQD->SetnBinsMult(fnBinsMult);
  fFQD->SetDoFit(fDoFit);
  fFQD->SetExactNoRPs(fExactNoRPs);
  fFQD->SetMultiplicityIs(fMultiplicityIs);

  fFQD->Init();
  
  if(fFQD->GetHistList()) 
  {
   fListHistos = fFQD->GetHistList();
   //fListHistos->Print();
  } else 
    {
      Printf("ERROR: Could not retrieve histogram list (FQD, Task::UserCreateOutputObjects()) !!!!"); 
    }

 PostData(1,fListHistos);
  
} // end of void AliAnalysisTaskFittingQDistribution::UserCreateOutputObjects()

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

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

  // Fitting q-distribution: 
  if(fEvent) 
  {
   fFQD->Make(fEvent);
  } else 
    {
     cout<<"WARNING: No input data (FQD, Task::UserExec()) !!!!"<<endl;
    }
  
 PostData(1,fListHistos); 
}

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

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

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



















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