#include <TSystem.h>
#include <TTree.h>
#include <TList.h>
#include <TNamed.h>
#include <TFile.h>
#include <TH2.h>
#include "AliAODInputHandler.h"
#include "AliAODEvent.h"
#include "AliVCuts.h"
#include "AliMCEvent.h"
#include "AliAODpidUtil.h"
#include "AliAODMCHeader.h"
ClassImp(AliAODInputHandler)
static Option_t *gAODDataType = "AOD";
AliAODInputHandler::AliAODInputHandler() :
AliInputEventHandler(),
fEvent(0),
fMCEvent(0),
fFriends(0),
fAODpidUtil(0x0),
fMergeEvents(kFALSE),
fMergeTracks(kTRUE),
fMergeEMCALClusters(kTRUE),
fMergePHOSClusters(kTRUE),
fMergeEMCALCells(kTRUE),
fMergePHOSCells(kTRUE),
fMergeEMCALTrigger(kTRUE),
fMergePHOSTrigger(kTRUE),
fMergeHMPIDrings(kTRUE),
fFriendsConnected(kFALSE),
fFileToMerge(0),
fTreeToMerge(0),
fAODEventToMerge(0),
fMergeOffset(0)
{
fHistStatistics[0] = fHistStatistics[1] = NULL;
}
AliAODInputHandler::AliAODInputHandler(const char* name, const char* title):
AliInputEventHandler(name, title),
fEvent(0),
fMCEvent(new AliMCEvent()),
fFriends(new TList()),
fAODpidUtil(0x0),
fMergeEvents(kFALSE),
fMergeTracks(kTRUE),
fMergeEMCALClusters(kTRUE),
fMergePHOSClusters(kTRUE),
fMergeEMCALCells(kTRUE),
fMergePHOSCells(kTRUE),
fMergeEMCALTrigger(kTRUE),
fMergePHOSTrigger(kTRUE),
fMergeHMPIDrings(kTRUE),
fFriendsConnected(kFALSE),
fFileToMerge(0),
fTreeToMerge(0),
fAODEventToMerge(0),
fMergeOffset(0)
{
fHistStatistics[0] = fHistStatistics[1] = NULL;
}
AliAODInputHandler::~AliAODInputHandler()
{
if (fFriends) fFriends->Delete();
delete fFriends;
delete fHistStatistics[0];
delete fHistStatistics[1];
delete fAODpidUtil;
}
Bool_t AliAODInputHandler::Init(TTree* tree, Option_t* opt)
{
fTree = tree;
if (!fTree) return kFALSE;
fTree->GetEntries();
ConnectFriends();
SwitchOffBranches();
SwitchOnBranches();
if (!fEvent) fEvent = new AliAODEvent();
fEvent->ReadFromTree(fTree);
if (fMixingHandler) fMixingHandler->Init(tree, opt);
return kTRUE;
}
Bool_t AliAODInputHandler::BeginEvent(Long64_t entry)
{
static Int_t prevRunNumber = -1;
if (prevRunNumber != fEvent->GetRunNumber() && NeedField()) {
fEvent->InitMagneticField();
prevRunNumber = fEvent->GetRunNumber();
}
AliAODMCHeader* mcHeader = (AliAODMCHeader*) fEvent->GetList()->FindObject(AliAODMCHeader::StdBranchName());
TClonesArray* mcParticles = (TClonesArray*) (fEvent->FindListObject("mcparticles"));
if (mcParticles && mcHeader) {
if (!fMCEvent) fMCEvent = new AliMCEvent();
fMCEvent->SetExternalHeader(mcHeader);
fMCEvent->SetParticleArray(mcParticles);
}
if (fTreeToMerge) fTreeToMerge->GetEntry(GetReadEntry() + fMergeOffset);
if (fEventCuts)
fIsSelectedResult = fEventCuts->GetSelectionMask(fEvent);
else
fIsSelectedResult = static_cast<AliVAODHeader*>(fEvent->GetHeader())->GetOfflineTrigger();
if (fMixingHandler) fMixingHandler->BeginEvent(entry);
fEvent->ConnectTracks();
return kTRUE;
}
Bool_t AliAODInputHandler::Notify(const char* path)
{
if (fMixingHandler) fMixingHandler->Notify(path);
if (!fFriendsConnected) {
ConnectFriends();
fEvent->ReadFromTree(fTree, "reconnect");
}
fFriendsConnected = kFALSE;
fUserInfo=fTree->GetTree()->GetUserInfo();
TTree *ttree = fTree->GetTree();
if (!ttree) ttree = fTree;
TString statFname(ttree->GetCurrentFile()->GetName());
AliInfo(Form("Moving to file %s", statFname.Data()));
Int_t indarchive = statFname.Index("#");
if (indarchive<0) {
statFname = gSystem->DirName(statFname);
statFname += "/";
} else {
statFname.Remove(indarchive+1);
}
statFname += "EventStat_temp.root";
TFile *statFile = 0;
if (IsCheckStatistics()) statFile = TFile::Open(statFname, "READ");
if (statFile) {
TList *list = (TList*)statFile->Get("cstatsout");
if (list) {
AliVCuts *physSel = (AliVCuts*)list->At(0);
if (physSel) {
TH2F *hAll = dynamic_cast<TH2F*>(physSel->GetStatistics("ALL"));
TH2F *hBin0 = dynamic_cast<TH2F*>(physSel->GetStatistics("BIN0"));
if (fHistStatistics[0] && hAll) {
TList tmplist;
tmplist.Add(hAll);
fHistStatistics[0]->Merge(&tmplist);
tmplist.Clear();
tmplist.Add(hBin0);
if (fHistStatistics[1] && hBin0) fHistStatistics[1]->Merge(&tmplist);
} else {
if (hAll && hBin0) {
fHistStatistics[0] = static_cast<TH2F*>(hAll->Clone());
fHistStatistics[1] = static_cast<TH2F*>(hBin0->Clone());
fHistStatistics[0]->SetDirectory(0);
fHistStatistics[1]->SetDirectory(0);
}
}
}
delete list;
}
delete statFile;
}
return kTRUE;
}
Bool_t AliAODInputHandler::FinishEvent()
{
if (fMixingHandler) fMixingHandler->FinishEvent();
if (fEvent) fEvent->Reset();
return kTRUE;
}
void AliAODInputHandler::AddFriend(char* filename)
{
TNamed* obj = new TNamed(filename, filename);
if (!fFriends) fFriends = new TList();
fFriends->Add(obj);
}
Option_t *AliAODInputHandler::GetDataType() const
{
return gAODDataType;
}
TObject *AliAODInputHandler::GetStatistics(Option_t *option) const
{
TString opt(option);
opt.ToUpper();
if (opt=="BIN0") return fHistStatistics[1];
return fHistStatistics[0];
}
void AliAODInputHandler::ConnectFriends()
{
if (!fFriends) return;
if (!fMergeEvents) {
TIter next(fFriends);
TNamed* obj;
TString aodTreeFName,aodFriendTreeFName;
TTree *ttree = fTree->GetTree();
if (!ttree) ttree = fTree;
if(!ttree->GetCurrentFile()){
AliWarning("Couldn't get current AOD file, not connecting friends");
return;
}
aodTreeFName = ttree->GetCurrentFile()->GetName();
while((obj = (TNamed*)next())) {
aodFriendTreeFName = aodTreeFName;
if (strlen(GetInputFileName())) aodFriendTreeFName.ReplaceAll(GetInputFileName(),obj->GetName());
aodFriendTreeFName.ReplaceAll("AliAOD.root",obj->GetName());
aodFriendTreeFName.ReplaceAll("AliAODs.root",obj->GetName());
ttree->AddFriend("aodTree", aodFriendTreeFName.Data());
}
} else {
TNamed* filename = (TNamed*) (fFriends->At(0));
fFileToMerge = TFile::Open(filename->GetName());
if (fFileToMerge) {
fFileToMerge->GetObject("aodTree", fTreeToMerge);
if (!fAODEventToMerge) fAODEventToMerge = new AliAODEvent();
fAODEventToMerge->ReadFromTree(fTreeToMerge);
}
}
fFriendsConnected = kTRUE;
}
void AliAODInputHandler::CreatePIDResponse(Bool_t isMC)
{
if (fAODpidUtil) return;
fAODpidUtil=new AliAODpidUtil(isMC);
}
AliAODInputHandler.cxx:10 AliAODInputHandler.cxx:11 AliAODInputHandler.cxx:12 AliAODInputHandler.cxx:13 AliAODInputHandler.cxx:14 AliAODInputHandler.cxx:15 AliAODInputHandler.cxx:16 AliAODInputHandler.cxx:17 AliAODInputHandler.cxx:18 AliAODInputHandler.cxx:19 AliAODInputHandler.cxx:20 AliAODInputHandler.cxx:21 AliAODInputHandler.cxx:22 AliAODInputHandler.cxx:23 AliAODInputHandler.cxx:24 AliAODInputHandler.cxx:25 AliAODInputHandler.cxx:26 AliAODInputHandler.cxx:27 AliAODInputHandler.cxx:28 AliAODInputHandler.cxx:29 AliAODInputHandler.cxx:30 AliAODInputHandler.cxx:31 AliAODInputHandler.cxx:32 AliAODInputHandler.cxx:33 AliAODInputHandler.cxx:34 AliAODInputHandler.cxx:35 AliAODInputHandler.cxx:36 AliAODInputHandler.cxx:37 AliAODInputHandler.cxx:38 AliAODInputHandler.cxx:39 AliAODInputHandler.cxx:40 AliAODInputHandler.cxx:41 AliAODInputHandler.cxx:42 AliAODInputHandler.cxx:43 AliAODInputHandler.cxx:44 AliAODInputHandler.cxx:45 AliAODInputHandler.cxx:46 AliAODInputHandler.cxx:47 AliAODInputHandler.cxx:48 AliAODInputHandler.cxx:49 AliAODInputHandler.cxx:50 AliAODInputHandler.cxx:51 AliAODInputHandler.cxx:52 AliAODInputHandler.cxx:53 AliAODInputHandler.cxx:54 AliAODInputHandler.cxx:55 AliAODInputHandler.cxx:56 AliAODInputHandler.cxx:57 AliAODInputHandler.cxx:58 AliAODInputHandler.cxx:59 AliAODInputHandler.cxx:60 AliAODInputHandler.cxx:61 AliAODInputHandler.cxx:62 AliAODInputHandler.cxx:63 AliAODInputHandler.cxx:64 AliAODInputHandler.cxx:65 AliAODInputHandler.cxx:66 AliAODInputHandler.cxx:67 AliAODInputHandler.cxx:68 AliAODInputHandler.cxx:69 AliAODInputHandler.cxx:70 AliAODInputHandler.cxx:71 AliAODInputHandler.cxx:72 AliAODInputHandler.cxx:73 AliAODInputHandler.cxx:74 AliAODInputHandler.cxx:75 AliAODInputHandler.cxx:76 AliAODInputHandler.cxx:77 AliAODInputHandler.cxx:78 AliAODInputHandler.cxx:79 AliAODInputHandler.cxx:80 AliAODInputHandler.cxx:81 AliAODInputHandler.cxx:82 AliAODInputHandler.cxx:83 AliAODInputHandler.cxx:84 AliAODInputHandler.cxx:85 AliAODInputHandler.cxx:86 AliAODInputHandler.cxx:87 AliAODInputHandler.cxx:88 AliAODInputHandler.cxx:89 AliAODInputHandler.cxx:90 AliAODInputHandler.cxx:91 AliAODInputHandler.cxx:92 AliAODInputHandler.cxx:93 AliAODInputHandler.cxx:94 AliAODInputHandler.cxx:95 AliAODInputHandler.cxx:96 AliAODInputHandler.cxx:97 AliAODInputHandler.cxx:98 AliAODInputHandler.cxx:99 AliAODInputHandler.cxx:100 AliAODInputHandler.cxx:101 AliAODInputHandler.cxx:102 AliAODInputHandler.cxx:103 AliAODInputHandler.cxx:104 AliAODInputHandler.cxx:105 AliAODInputHandler.cxx:106 AliAODInputHandler.cxx:107 AliAODInputHandler.cxx:108 AliAODInputHandler.cxx:109 AliAODInputHandler.cxx:110 AliAODInputHandler.cxx:111 AliAODInputHandler.cxx:112 AliAODInputHandler.cxx:113 AliAODInputHandler.cxx:114 AliAODInputHandler.cxx:115 AliAODInputHandler.cxx:116 AliAODInputHandler.cxx:117 AliAODInputHandler.cxx:118 AliAODInputHandler.cxx:119 AliAODInputHandler.cxx:120 AliAODInputHandler.cxx:121 AliAODInputHandler.cxx:122 AliAODInputHandler.cxx:123 AliAODInputHandler.cxx:124 AliAODInputHandler.cxx:125 AliAODInputHandler.cxx:126 AliAODInputHandler.cxx:127 AliAODInputHandler.cxx:128 AliAODInputHandler.cxx:129 AliAODInputHandler.cxx:130 AliAODInputHandler.cxx:131 AliAODInputHandler.cxx:132 AliAODInputHandler.cxx:133 AliAODInputHandler.cxx:134 AliAODInputHandler.cxx:135 AliAODInputHandler.cxx:136 AliAODInputHandler.cxx:137 AliAODInputHandler.cxx:138 AliAODInputHandler.cxx:139 AliAODInputHandler.cxx:140 AliAODInputHandler.cxx:141 AliAODInputHandler.cxx:142 AliAODInputHandler.cxx:143 AliAODInputHandler.cxx:144 AliAODInputHandler.cxx:145 AliAODInputHandler.cxx:146 AliAODInputHandler.cxx:147 AliAODInputHandler.cxx:148 AliAODInputHandler.cxx:149 AliAODInputHandler.cxx:150 AliAODInputHandler.cxx:151 AliAODInputHandler.cxx:152 AliAODInputHandler.cxx:153 AliAODInputHandler.cxx:154 AliAODInputHandler.cxx:155 AliAODInputHandler.cxx:156 AliAODInputHandler.cxx:157 AliAODInputHandler.cxx:158 AliAODInputHandler.cxx:159 AliAODInputHandler.cxx:160 AliAODInputHandler.cxx:161 AliAODInputHandler.cxx:162 AliAODInputHandler.cxx:163 AliAODInputHandler.cxx:164 AliAODInputHandler.cxx:165 AliAODInputHandler.cxx:166 AliAODInputHandler.cxx:167 AliAODInputHandler.cxx:168 AliAODInputHandler.cxx:169 AliAODInputHandler.cxx:170 AliAODInputHandler.cxx:171 AliAODInputHandler.cxx:172 AliAODInputHandler.cxx:173 AliAODInputHandler.cxx:174 AliAODInputHandler.cxx:175 AliAODInputHandler.cxx:176 AliAODInputHandler.cxx:177 AliAODInputHandler.cxx:178 AliAODInputHandler.cxx:179 AliAODInputHandler.cxx:180 AliAODInputHandler.cxx:181 AliAODInputHandler.cxx:182 AliAODInputHandler.cxx:183 AliAODInputHandler.cxx:184 AliAODInputHandler.cxx:185 AliAODInputHandler.cxx:186 AliAODInputHandler.cxx:187 AliAODInputHandler.cxx:188 AliAODInputHandler.cxx:189 AliAODInputHandler.cxx:190 AliAODInputHandler.cxx:191 AliAODInputHandler.cxx:192 AliAODInputHandler.cxx:193 AliAODInputHandler.cxx:194 AliAODInputHandler.cxx:195 AliAODInputHandler.cxx:196 AliAODInputHandler.cxx:197 AliAODInputHandler.cxx:198 AliAODInputHandler.cxx:199 AliAODInputHandler.cxx:200 AliAODInputHandler.cxx:201 AliAODInputHandler.cxx:202 AliAODInputHandler.cxx:203 AliAODInputHandler.cxx:204 AliAODInputHandler.cxx:205 AliAODInputHandler.cxx:206 AliAODInputHandler.cxx:207 AliAODInputHandler.cxx:208 AliAODInputHandler.cxx:209 AliAODInputHandler.cxx:210 AliAODInputHandler.cxx:211 AliAODInputHandler.cxx:212 AliAODInputHandler.cxx:213 AliAODInputHandler.cxx:214 AliAODInputHandler.cxx:215 AliAODInputHandler.cxx:216 AliAODInputHandler.cxx:217 AliAODInputHandler.cxx:218 AliAODInputHandler.cxx:219 AliAODInputHandler.cxx:220 AliAODInputHandler.cxx:221 AliAODInputHandler.cxx:222 AliAODInputHandler.cxx:223 AliAODInputHandler.cxx:224 AliAODInputHandler.cxx:225 AliAODInputHandler.cxx:226 AliAODInputHandler.cxx:227 AliAODInputHandler.cxx:228 AliAODInputHandler.cxx:229 AliAODInputHandler.cxx:230 AliAODInputHandler.cxx:231 AliAODInputHandler.cxx:232 AliAODInputHandler.cxx:233 AliAODInputHandler.cxx:234 AliAODInputHandler.cxx:235 AliAODInputHandler.cxx:236 AliAODInputHandler.cxx:237 AliAODInputHandler.cxx:238 AliAODInputHandler.cxx:239 AliAODInputHandler.cxx:240 AliAODInputHandler.cxx:241 AliAODInputHandler.cxx:242 AliAODInputHandler.cxx:243 AliAODInputHandler.cxx:244 AliAODInputHandler.cxx:245 AliAODInputHandler.cxx:246 AliAODInputHandler.cxx:247 AliAODInputHandler.cxx:248 AliAODInputHandler.cxx:249 AliAODInputHandler.cxx:250 AliAODInputHandler.cxx:251 AliAODInputHandler.cxx:252 AliAODInputHandler.cxx:253 AliAODInputHandler.cxx:254 AliAODInputHandler.cxx:255 AliAODInputHandler.cxx:256 AliAODInputHandler.cxx:257 AliAODInputHandler.cxx:258 AliAODInputHandler.cxx:259 AliAODInputHandler.cxx:260 AliAODInputHandler.cxx:261 AliAODInputHandler.cxx:262 AliAODInputHandler.cxx:263 AliAODInputHandler.cxx:264 AliAODInputHandler.cxx:265 AliAODInputHandler.cxx:266 AliAODInputHandler.cxx:267 AliAODInputHandler.cxx:268 AliAODInputHandler.cxx:269 AliAODInputHandler.cxx:270 AliAODInputHandler.cxx:271 AliAODInputHandler.cxx:272 AliAODInputHandler.cxx:273 AliAODInputHandler.cxx:274 AliAODInputHandler.cxx:275 AliAODInputHandler.cxx:276 AliAODInputHandler.cxx:277 AliAODInputHandler.cxx:278 AliAODInputHandler.cxx:279 AliAODInputHandler.cxx:280 AliAODInputHandler.cxx:281 AliAODInputHandler.cxx:282 AliAODInputHandler.cxx:283 AliAODInputHandler.cxx:284 AliAODInputHandler.cxx:285 AliAODInputHandler.cxx:286 AliAODInputHandler.cxx:287 AliAODInputHandler.cxx:288 AliAODInputHandler.cxx:289 AliAODInputHandler.cxx:290 AliAODInputHandler.cxx:291 AliAODInputHandler.cxx:292 AliAODInputHandler.cxx:293 AliAODInputHandler.cxx:294 AliAODInputHandler.cxx:295 AliAODInputHandler.cxx:296 AliAODInputHandler.cxx:297 AliAODInputHandler.cxx:298 AliAODInputHandler.cxx:299 AliAODInputHandler.cxx:300 AliAODInputHandler.cxx:301