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

////////////////////////////////////////////////////
// AliAnalysisTaskFlowEventforRP:
//
// analysis task for filling the flow event
// from MCEvent, ESD
// and put it in an output stream so the calculated
// Reaction Plane can be stored in the AODHeader
// when the AOD is made from the ESD 
// for cuts the correction framework is used
// which also outputs QA histograms to view
// the effects of the cuts
////////////////////////////////////////////////////

#include "Riostream.h" //needed as include
#include "TChain.h"
#include "TTree.h"
#include "TFile.h" //needed as include
#include "TList.h"
#include "TRandom3.h"
#include "TTimeStamp.h"

// ALICE Analysis Framework
#include "AliAnalysisTaskSE.h"
#include "AliAnalysisManager.h"

// ESD interface
#include "AliESDEvent.h"
#include "AliESDInputHandler.h"

// AOD interface
#include "AliAODEvent.h"
#include "AliAODInputHandler.h"

// Monte Carlo Eventp
#include "AliAODHandler.h"
#include "AliMCEventHandler.h"
#include "AliMCEvent.h"

// ALICE Correction Framework
#include "AliCFManager.h"

// Interface to Event generators to get Reaction Plane Angle
#include "AliGenCocktailEventHeader.h"
#include "AliGenHijingEventHeader.h"
#include "AliGenGeVSimEventHeader.h"
#include "AliGenEposEventHeader.h"

// Interface to make the Flow Event Simple used in the flow analysis methods
#include "AliFlowEvent.h"
#include "AliFlowVector.h"
#include "AliAnalysisTaskFlowEventforRP.h"

using std::cout;
using std::endl;
ClassImp(AliAnalysisTaskFlowEventforRP)
  
//________________________________________________________________________
AliAnalysisTaskFlowEventforRP::AliAnalysisTaskFlowEventforRP(const char *name) : 
  AliAnalysisTaskSE(name), 
  fAnalysisType("ESD"),
  fCFManager1(NULL),
  fCFManager2(NULL),
  fMinMult(0),
  fMaxMult(10000000),
  fMCReactionPlaneAngle(0.)
    
{
  // Constructor
  cout<<"AliAnalysisTaskFlowEventforRP::AliAnalysisTaskFlowEventforRP(const char *name)"<<endl;

  // Define input and output slots here
  // Input slot #0 works with a TChain
  DefineInput(0, TChain::Class());
  // Define here the flow event output
  DefineOutput(0, AliFlowEventSimple::Class());  
  
}

//________________________________________________________________________
AliAnalysisTaskFlowEventforRP::AliAnalysisTaskFlowEventforRP() : 
  fAnalysisType("ESD"),
  fCFManager1(NULL),
  fCFManager2(NULL),
  fMinMult(0),
  fMaxMult(10000000),
  fMCReactionPlaneAngle(0.)
{
  // Constructor
  cout<<"AliAnalysisTaskFlowEventforRP::AliAnalysisTaskFlowEventforRP()"<<endl;
}


//________________________________________________________________________
AliAnalysisTaskFlowEventforRP::~AliAnalysisTaskFlowEventforRP()
{
  //
  // Destructor
  //
  
}


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

  if (!(fAnalysisType == "ESD")) {
    cout<<"WRONG ANALYSIS TYPE! only ESD for this method."<<endl;
    exit(1);
  }
    
}

//________________________________________________________________________
void AliAnalysisTaskFlowEventforRP::UserExec(Option_t *) 
{
  // Main loop

  AliESDEvent* esd = dynamic_cast<AliESDEvent*>(InputEvent());
  AliFlowEvent* fEvent = NULL;
  AliMCEvent* mcEvent  = MCEvent();
  Double_t fRP = 0.; // the monte carlo reaction plane angle
  
  // Fill the FlowEventSimple for ESD input  
  if (fAnalysisType == "ESD") {
    if (!(fCFManager1&&fCFManager2))
      {
	cout << "ERROR: No pointer to correction framework cuts! " << endl; 
	return; 
      }
    if (!esd)
      {
	AliError("ERROR: ESD not available");
	return;
      }
    
    //check the offline trigger (check if the event has the correct trigger)
    //AliInfo(Form("ESD has %d tracks", fInputEvent->GetNumberOfTracks()));
    
    //check multiplicity
    if (!fCFManager1->CheckEventCuts(AliCFManager::kEvtRecCuts,esd))
      {
	cout << "Event does not pass multiplicity cuts" << endl;
	return;
      }
    
    // make the flowevent
    fEvent = new AliFlowEvent(esd,fCFManager1,fCFManager2);
    
    if (mcEvent && mcEvent->GenEventHeader()) 
      {
	fEvent->SetMCReactionPlaneAngle(mcEvent);
	fRP = fEvent->GetMCReactionPlaneAngle();
      }
    
    //check final event cuts
    Int_t mult = fEvent->NumberOfTracks();
    cout << "FlowEvent has "<<mult<<" tracks"<<endl;
    if (mult<fMinMult || mult>fMaxMult)
      {
	cout << "FlowEvent cut on multiplicity" << endl;
	return;
      }

  
    // get the flow vector     
    AliFlowVector vQ = fEvent->GetQ();                      
    Double_t dRP[1] = {0.0};   
    // Phi is a Double_t, but SetQTheta() needs as input Double_t*, 
    // an array of doubles. 
    dRP[0] = vQ.Phi()/2; 
      
    cout<<"The reaction plane from MC is "<<fRP<<endl;
    cout<<"The calculated reaction plane is "<<dRP[0]<<endl;

    
    // Update the header
    AliAODHeader* header = dynamic_cast<AliAODHeader*>(AODEvent()->GetHeader());
    if(!header) AliFatal("Not a standard AOD");
    header->SetRunNumber(esd->GetRunNumber());
    header->SetQTheta(dRP,1);
        
  }
    
  PostData(0,fEvent);
  
  
} 

//________________________________________________________________________
void AliAnalysisTaskFlowEventforRP::Terminate(Option_t *) 
{
  // Called once at the end of the query -- do not call in case of CAF
  
}


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