ROOT logo

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

/*$Id$*/

//-------------------------------------------------------------------------
//
//     Implementation of the Virtual Event Handler Interface for ESD
//
//-------------------------------------------------------------------------


#include <TTree.h>
#include <TFile.h>
#include <TString.h>
#include <TROOT.h>

#include "AliLog.h"
#include "AliESDHandler.h"
#include "AliESDEvent.h"
#include "AliESDfriend.h"

ClassImp(AliESDHandler)

//______________________________________________________________________________
AliESDHandler::AliESDHandler() :
	AliVEventHandler(),
	fesdf(NULL),
	fTreeEF(NULL),
	fFileEF(NULL),
	fFileName("AliESDfriends_v1.root"),
	fIsEventSelectedForFriends(kFALSE)
{

	// default constructor
}

//______________________________________________________________________________
AliESDHandler::AliESDHandler(const char* name, const char* title):
	AliVEventHandler(name, title),
	fesdf(NULL),
	fTreeEF(NULL),
	fFileEF(NULL),
	fFileName("AliESDfriends_v1.root"),
	fIsEventSelectedForFriends(kFALSE)
{

	// constructor with name and title

}

//______________________________________________________________________________
AliESDHandler::~AliESDHandler() 
{
	// Destructor.
	delete fesdf;
	if(fFileEF){
		// is already handled in TerminateIO
		fFileEF->Close();
		delete fFileEF;
	}
	delete fTreeEF;
}

//______________________________________________________________________________
Bool_t AliESDHandler::Init(Option_t* opt)
{
	//
	// Initialize IO
	//
	
	// File opening according to execution mode
	TString option(opt);
	option.ToLower();
	TDirectory *owd = gDirectory;

	fesdf = new AliESDfriend();

	// Open the file with friends
	if (option.Contains("proof")) {
		// proof
		// Merging via files. Need to access analysis manager via interpreter.
		gROOT->ProcessLine(Form("AliAnalysisManager::GetAnalysisManager()->OpenProofFile(\"%s\", \"RECREATE\");", fFileName.Data()));
		gROOT->ProcessLine(Form("AliAnalysisManager::GetAnalysisManager()->GetCommonOutputContainer()->SetFile((TFile*)0x%p);", gFile));
		fFileEF = gFile;
	} else {
		// local and grid
		fFileEF = new TFile(fFileName.Data(), "RECREATE");
	}

	// Create the friends tree
	fFileEF->cd();
	fTreeEF = new TTree("esdFriendTree", "Tree with ESD friends");
      	fTreeEF->Branch("ESDfriend.","AliESDfriend", &fesdf);

	owd->cd();
	
	return kTRUE;
}


//______________________________________________________________________________
Bool_t AliESDHandler::FinishEvent()
{
	//
	// Fill the tree 
	//

	FillTree();
	
	// resetting
	if (fesdf) fesdf->~AliESDfriend();
	new(fesdf) AliESDfriend();  
	return kTRUE;
}

//______________________________________________________________________________
Bool_t AliESDHandler::Terminate()
{
	//
	// Terminate 
	//

	return kTRUE;
}

//______________________________________________________________________________
Bool_t AliESDHandler::TerminateIO()
{
	//
	// Terminate IO
	//

	if (fFileEF) {
		fFileEF->cd();
		fTreeEF->Write();
		fFileEF->Close();
		delete fFileEF;
		fFileEF = 0;
	}

	return kTRUE;
}

//______________________________________________________________________________
void AliESDHandler::FillTree()
{
	//
	// Fill the ESD Tree
	//
	if (fIsEventSelectedForFriends){
		AliDebug(2,Form("number of friend tracks = %d\n",fesdf->GetNumberOfTracks()));
	}
	else {
		fesdf->SetSkipBit(kTRUE);
	}
	AliDebug(2,Form("friend = %p",fesdf));
	fFileEF->cd();
	fTreeEF->Fill();
}
 AliESDHandler.cxx:1
 AliESDHandler.cxx:2
 AliESDHandler.cxx:3
 AliESDHandler.cxx:4
 AliESDHandler.cxx:5
 AliESDHandler.cxx:6
 AliESDHandler.cxx:7
 AliESDHandler.cxx:8
 AliESDHandler.cxx:9
 AliESDHandler.cxx:10
 AliESDHandler.cxx:11
 AliESDHandler.cxx:12
 AliESDHandler.cxx:13
 AliESDHandler.cxx:14
 AliESDHandler.cxx:15
 AliESDHandler.cxx:16
 AliESDHandler.cxx:17
 AliESDHandler.cxx:18
 AliESDHandler.cxx:19
 AliESDHandler.cxx:20
 AliESDHandler.cxx:21
 AliESDHandler.cxx:22
 AliESDHandler.cxx:23
 AliESDHandler.cxx:24
 AliESDHandler.cxx:25
 AliESDHandler.cxx:26
 AliESDHandler.cxx:27
 AliESDHandler.cxx:28
 AliESDHandler.cxx:29
 AliESDHandler.cxx:30
 AliESDHandler.cxx:31
 AliESDHandler.cxx:32
 AliESDHandler.cxx:33
 AliESDHandler.cxx:34
 AliESDHandler.cxx:35
 AliESDHandler.cxx:36
 AliESDHandler.cxx:37
 AliESDHandler.cxx:38
 AliESDHandler.cxx:39
 AliESDHandler.cxx:40
 AliESDHandler.cxx:41
 AliESDHandler.cxx:42
 AliESDHandler.cxx:43
 AliESDHandler.cxx:44
 AliESDHandler.cxx:45
 AliESDHandler.cxx:46
 AliESDHandler.cxx:47
 AliESDHandler.cxx:48
 AliESDHandler.cxx:49
 AliESDHandler.cxx:50
 AliESDHandler.cxx:51
 AliESDHandler.cxx:52
 AliESDHandler.cxx:53
 AliESDHandler.cxx:54
 AliESDHandler.cxx:55
 AliESDHandler.cxx:56
 AliESDHandler.cxx:57
 AliESDHandler.cxx:58
 AliESDHandler.cxx:59
 AliESDHandler.cxx:60
 AliESDHandler.cxx:61
 AliESDHandler.cxx:62
 AliESDHandler.cxx:63
 AliESDHandler.cxx:64
 AliESDHandler.cxx:65
 AliESDHandler.cxx:66
 AliESDHandler.cxx:67
 AliESDHandler.cxx:68
 AliESDHandler.cxx:69
 AliESDHandler.cxx:70
 AliESDHandler.cxx:71
 AliESDHandler.cxx:72
 AliESDHandler.cxx:73
 AliESDHandler.cxx:74
 AliESDHandler.cxx:75
 AliESDHandler.cxx:76
 AliESDHandler.cxx:77
 AliESDHandler.cxx:78
 AliESDHandler.cxx:79
 AliESDHandler.cxx:80
 AliESDHandler.cxx:81
 AliESDHandler.cxx:82
 AliESDHandler.cxx:83
 AliESDHandler.cxx:84
 AliESDHandler.cxx:85
 AliESDHandler.cxx:86
 AliESDHandler.cxx:87
 AliESDHandler.cxx:88
 AliESDHandler.cxx:89
 AliESDHandler.cxx:90
 AliESDHandler.cxx:91
 AliESDHandler.cxx:92
 AliESDHandler.cxx:93
 AliESDHandler.cxx:94
 AliESDHandler.cxx:95
 AliESDHandler.cxx:96
 AliESDHandler.cxx:97
 AliESDHandler.cxx:98
 AliESDHandler.cxx:99
 AliESDHandler.cxx:100
 AliESDHandler.cxx:101
 AliESDHandler.cxx:102
 AliESDHandler.cxx:103
 AliESDHandler.cxx:104
 AliESDHandler.cxx:105
 AliESDHandler.cxx:106
 AliESDHandler.cxx:107
 AliESDHandler.cxx:108
 AliESDHandler.cxx:109
 AliESDHandler.cxx:110
 AliESDHandler.cxx:111
 AliESDHandler.cxx:112
 AliESDHandler.cxx:113
 AliESDHandler.cxx:114
 AliESDHandler.cxx:115
 AliESDHandler.cxx:116
 AliESDHandler.cxx:117
 AliESDHandler.cxx:118
 AliESDHandler.cxx:119
 AliESDHandler.cxx:120
 AliESDHandler.cxx:121
 AliESDHandler.cxx:122
 AliESDHandler.cxx:123
 AliESDHandler.cxx:124
 AliESDHandler.cxx:125
 AliESDHandler.cxx:126
 AliESDHandler.cxx:127
 AliESDHandler.cxx:128
 AliESDHandler.cxx:129
 AliESDHandler.cxx:130
 AliESDHandler.cxx:131
 AliESDHandler.cxx:132
 AliESDHandler.cxx:133
 AliESDHandler.cxx:134
 AliESDHandler.cxx:135
 AliESDHandler.cxx:136
 AliESDHandler.cxx:137
 AliESDHandler.cxx:138
 AliESDHandler.cxx:139
 AliESDHandler.cxx:140
 AliESDHandler.cxx:141
 AliESDHandler.cxx:142
 AliESDHandler.cxx:143
 AliESDHandler.cxx:144
 AliESDHandler.cxx:145
 AliESDHandler.cxx:146
 AliESDHandler.cxx:147
 AliESDHandler.cxx:148
 AliESDHandler.cxx:149
 AliESDHandler.cxx:150
 AliESDHandler.cxx:151
 AliESDHandler.cxx:152
 AliESDHandler.cxx:153
 AliESDHandler.cxx:154
 AliESDHandler.cxx:155
 AliESDHandler.cxx:156
 AliESDHandler.cxx:157
 AliESDHandler.cxx:158
 AliESDHandler.cxx:159
 AliESDHandler.cxx:160
 AliESDHandler.cxx:161
 AliESDHandler.cxx:162
 AliESDHandler.cxx:163
 AliESDHandler.cxx:164
 AliESDHandler.cxx:165
 AliESDHandler.cxx:166
 AliESDHandler.cxx:167
 AliESDHandler.cxx:168
 AliESDHandler.cxx:169
 AliESDHandler.cxx:170
 AliESDHandler.cxx:171
 AliESDHandler.cxx:172
 AliESDHandler.cxx:173