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.                  * 
**************************************************************************/

///////////////////////////////////////////////
// AliAnalysisTaskScalarProduct:
//
// analysis task for Scalar Product Method
//
// Author: Naomi van der Kolk (kolk@nikhef.nl)
///////////////////////////////////////////////


#include "Riostream.h" //needed as include

class TFile;
class TList;
class AliAnalysisTaskSE;

#include "TProfile.h"  //needed as include
#include "AliAnalysisManager.h"
#include "AliFlowEventSimple.h"

#include "AliAnalysisTaskScalarProduct.h"
#include "AliFlowAnalysisWithScalarProduct.h"
#include "AliFlowCommonHist.h"
#include "AliFlowCommonHistResults.h"

#include "AliLog.h"

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

//________________________________________________________________________
AliAnalysisTaskScalarProduct::AliAnalysisTaskScalarProduct(const char *name, Bool_t usePhiWeights) : 
  AliAnalysisTaskSE(name), 
  fEvent(NULL),
  fSP(NULL),
  fListHistos(NULL),
  fMinimalBook(kFALSE),
  fUsePhiWeights(usePhiWeights),
  fListWeights(NULL),
  fRelDiffMsub(1.0),
  fApplyCorrectionForNUA(kFALSE),
  fHarmonic(2),
  fNormalizationType(1),
  fTotalQvector(NULL) 
{
  // Constructor
  AliDebug(2,"AliAnalysisTaskScalarProduct::AliAnalysisTaskScalarProduct(const char *name)");

  // 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(usePhiWeights) {
    DefineInput(1, TList::Class()); }
  // Output slot #0 writes into a TList container
  DefineOutput(1, TList::Class());

  // Total Q-vector is: "QaQb" (means Qa+Qb), "Qa"  or "Qb"
  fTotalQvector = new TString("QaQb");
}

//________________________________________________________________________
AliAnalysisTaskScalarProduct::AliAnalysisTaskScalarProduct() : 
  AliAnalysisTaskSE(), 
  fEvent(NULL),
  fSP(NULL),
  fListHistos(NULL),
  fMinimalBook(kFALSE),
  fUsePhiWeights(kFALSE),
  fListWeights(NULL),
  fRelDiffMsub(1.0),
  fApplyCorrectionForNUA(kFALSE),
  fHarmonic(0),
  fNormalizationType(1),
  fTotalQvector(NULL) 
  {
  // Constructor
    AliDebug(2,"AliAnalysisTaskScalarProduct::AliAnalysisTaskScalarProduct()");
}

//________________________________________________________________________
AliAnalysisTaskScalarProduct::~AliAnalysisTaskScalarProduct()
{
  //
  // Destructor
  //

  // histograms are in the output list and deleted when the output
  // list is deleted by the TSelector dtor

  //  if (ListHistos) {
  //    delete fListHistos;
  //    fListHistos = NULL;
  //  }
}

//________________________________________________________________________
void AliAnalysisTaskScalarProduct::UserCreateOutputObjects() 
{
  // Called at every worker node to initialize
  AliDebug(2,"AliAnalysisTaskScalarProduct::CreateOutputObjects()");
  
  //Analyser
  fSP = new AliFlowAnalysisWithScalarProduct();
  fSP->SetBookOnlyBasicCCH(fMinimalBook);

  //set the allowed relative difference in the subevent multiplicities
  //fSP->SetRelDiffMsub(fRelDiffMsub); 
    
  //apply automatic correction for non-uniform acceptance:
  if (fApplyCorrectionForNUA) {
    AliDebug(2,"Corrections for non-uniform acceptance applied in the Scalar Product method");
  }
  fSP->SetApplyCorrectionForNUA(fApplyCorrectionForNUA);
  // harmonic: 
  fSP->SetHarmonic(fHarmonic);
  fSP->SetNormalizationType( fNormalizationType );
  // total Q-vector:
  Int_t totalQ = 0;
  if( fTotalQvector->Contains("Qa") ) totalQ += 1;
  if( fTotalQvector->Contains("Qb") ) totalQ += 2;
  fSP->SetTotalQvector( totalQ );
  //for using phi weights:
  if(fUsePhiWeights) {
    //pass the flag to the analysis class:
    fSP->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 the analysis class:
    if(fListWeights) fSP->SetWeightsList(fListWeights);
  }
  
  fSP-> Init();

  if (fSP->GetHistList()) {
    fListHistos = fSP->GetHistList();
  }
  else {Printf("ERROR: Could not retrieve histogram list"); }

  PostData(1,fListHistos);

}

//________________________________________________________________________
void AliAnalysisTaskScalarProduct::UserExec(Option_t *) 
{
  // Main loop
  // Called for each event


  fEvent = dynamic_cast<AliFlowEventSimple*>(GetInputData(0));
  if (fEvent){
    fSP->ProcessEvent(fEvent);
  }
  else {
    cout << "Warning no input data for Scalar Product task!!!" << endl;
  }
    
  //fListHistos->Print();	
  PostData(1,fListHistos);
  
} 

//________________________________________________________________________
void AliAnalysisTaskScalarProduct::Terminate(Option_t *) 
{
  // Called once at the end of the query
  AliFlowAnalysisWithScalarProduct* fSPTerm = new AliFlowAnalysisWithScalarProduct() ;
  fListHistos = (TList*)GetOutputData(1);
  if (fListHistos) {
      fSPTerm -> GetOutputHistograms(fListHistos);
      fSPTerm -> Finish();
      PostData(1,fListHistos);
    }
    
  else { cout << "histgram list pointer is empty in Scalar Product" << endl; }

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