X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=JETAN%2FAliAnalysisTaskJets.cxx;h=dd48fe8433f17d621e88ca85c5a220f3fcb589a3;hb=987ff6efc73ced74dd5f6f833331622d0498be5f;hp=29b1d2fe253fbc5d9aee10cf15fad2da57ec08b9;hpb=c98859dd5d49a1c7db39c10b27accdfcb1787350;p=u%2Fmrichter%2FAliRoot.git diff --git a/JETAN/AliAnalysisTaskJets.cxx b/JETAN/AliAnalysisTaskJets.cxx index 29b1d2fe253..dd48fe8433f 100644 --- a/JETAN/AliAnalysisTaskJets.cxx +++ b/JETAN/AliAnalysisTaskJets.cxx @@ -21,6 +21,7 @@ #include #include #include +#include #include "AliAnalysisTaskJets.h" #include "AliAnalysisManager.h" @@ -32,6 +33,7 @@ #include "AliESDEvent.h" #include "AliESD.h" #include "AliAODEvent.h" +#include "AliAODJetEventBackground.h" #include "AliAODHandler.h" #include "AliMCEventHandler.h" #include "AliESDInputHandler.h" @@ -47,11 +49,14 @@ AliAnalysisTaskJets::AliAnalysisTaskJets(): AliAnalysisTaskSE(), fConfigFile("ConfigJetAnalysis.C"), fNonStdBranch(""), + fNonStdFile(""), fJetFinder(0x0), fHistos(0x0), + fAODExtension(0x0), fListOfHistos(0x0), fChain(0x0), - fOpt(0) + fOpt(0), + fReadAODFromOutput(0) { // Default constructor } @@ -60,11 +65,14 @@ AliAnalysisTaskJets::AliAnalysisTaskJets(const char* name): AliAnalysisTaskSE(name), fConfigFile("ConfigJetAnalysis.C"), fNonStdBranch(""), + fNonStdFile(""), fJetFinder(0x0), fHistos(0x0), + fAODExtension(0x0), fListOfHistos(0x0), fChain(0x0), - fOpt(0) + fOpt(0), + fReadAODFromOutput(0) { // Default constructor DefineOutput(1, TList::Class()); @@ -74,11 +82,14 @@ AliAnalysisTaskJets::AliAnalysisTaskJets(const char* name, TChain* chain): AliAnalysisTaskSE(name), fConfigFile("ConfigJetAnalysis.C"), fNonStdBranch(""), + fNonStdFile(""), fJetFinder(0x0), fHistos(0x0), + fAODExtension(0x0), fListOfHistos(0x0), fChain(chain), - fOpt(0) + fOpt(0), + fReadAODFromOutput(0) { // Default constructor DefineOutput(1, TList::Class()); @@ -90,10 +101,16 @@ void AliAnalysisTaskJets::UserCreateOutputObjects() // Create the output container // if (fDebug > 1) printf("AnalysisTaskJets::CreateOutPutData() \n"); - + if(fNonStdBranch.Length()==0) { // Connec default AOD to jet finder + // create a new branch for the background + if(!AODEvent()->FindListObject(AliAODJetEventBackground::StdBranchName())){ + AliAODJetEventBackground* evBkg = new AliAODJetEventBackground(); + evBkg->SetName(AliAODJetEventBackground::StdBranchName()); + AddAODBranch("AliAODJetEventBackground",&evBkg); + } fJetFinder->ConnectAOD(AODEvent()); } else @@ -101,16 +118,52 @@ void AliAnalysisTaskJets::UserCreateOutputObjects() // Create a new branch for jets... // how is this reset? -> cleared in the UserExec.... // Can this be handled by the framework? + // here we can also have the case that the brnaches are written to a separate file + TClonesArray *tca = new TClonesArray("AliAODJet", 0); - tca->SetName(fNonStdBranch); - AddAODBranch("TClonesArray",&tca); - fJetFinder->ConnectAODNonStd(AODEvent(), fNonStdBranch.Data()); + tca->SetName(fNonStdBranch.Data()); + AddAODBranch("TClonesArray",&tca,fNonStdFile.Data()); + if(!AODEvent() || !AODEvent()->FindListObject(Form("%s_%s",AliAODJetEventBackground::StdBranchName(),fNonStdBranch.Data()))){ + AliAODJetEventBackground* evBkg = new AliAODJetEventBackground(); + evBkg->SetName(Form("%s_%s",AliAODJetEventBackground::StdBranchName(),fNonStdBranch.Data())); + AddAODBranch("AliAODJetEventBackground",&evBkg,fNonStdFile.Data()); + } + + if(fNonStdFile.Length()!=0){ + // + // case that we have an AOD extension we need to fetch the jets from the extended output + // we identifay the extension aod event by looking for the branchname + AliAODHandler *aodH = dynamic_cast(AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler()); + TObjArray* extArray = aodH->GetExtensions(); + if (extArray) { + TIter next(extArray); + while ((fAODExtension=(AliAODExtension*)next())){ + TObject *obj = fAODExtension->GetAOD()->FindListObject(fNonStdBranch.Data()); + if(fDebug>10){ + Printf("%s:%d Dumping..",(char*)__FILE__,__LINE__); + fAODExtension->GetAOD()->Dump(); + } + if(obj){ + if(fDebug>1)Printf("AODExtension found for %s",fNonStdBranch.Data()); + break; + } + fAODExtension = 0; + } + } + if(fAODExtension)fJetFinder->ConnectAODNonStd(fAODExtension->GetAOD(), fNonStdBranch.Data()); + } + else{ + fJetFinder->ConnectAODNonStd(AODEvent(), fNonStdBranch.Data()); + } } - AliAODJetEventBackground* evBkg = fJetFinder->GetEventBackground(); - if (evBkg) AddAODBranch("AliAODJetEventBackground",&evBkg); + + // do not add the histograms in the directory + // all handled by the list + Bool_t oldStatus = TH1::AddDirectoryStatus(); + TH1::AddDirectory(kFALSE); + // Histograms - OpenFile(1); fListOfHistos = new TList(); fHistos = new AliJetHistos(); fHistos->AddHistosToList(fListOfHistos); @@ -128,7 +181,12 @@ void AliAnalysisTaskJets::UserCreateOutputObjects() fH->SetName(Form("AliJetHeader_%s",fNonStdBranch.Data())); } } - OutputTree()->GetUserInfo()->Add(fH); + + TH1::AddDirectory(oldStatus); + + + if(!fAODExtension)OutputTree()->GetUserInfo()->Add(fH); + else fAODExtension->GetTree()->GetUserInfo()->Add(fH); } //---------------------------------------------------------------- @@ -148,11 +206,9 @@ void AliAnalysisTaskJets::Init() // Initialise Jet Analysis if(fOpt == 0) fJetFinder->Init(); else fJetFinder->InitTask(fChain); // V2 - - // Write header information to local file - fJetFinder->WriteHeaders(); } + //---------------------------------------------------------------- void AliAnalysisTaskJets::UserExec(Option_t */*option*/) { @@ -160,17 +216,27 @@ void AliAnalysisTaskJets::UserExec(Option_t */*option*/) // // Fill control histos TClonesArray* jarray = 0; + AliAODJetEventBackground* evBkg = 0; if(fNonStdBranch.Length()==0) { jarray = AODEvent()->GetJets(); + evBkg = (AliAODJetEventBackground*)(AODEvent()->FindListObject(AliAODJetEventBackground::StdBranchName())); + evBkg->Reset(); } else { - jarray = dynamic_cast(AODEvent()->FindListObject(fNonStdBranch.Data())); - jarray->Delete(); // this is our responsibility, clear before filling again + if(AODEvent())jarray = (TClonesArray*)(AODEvent()->FindListObject(fNonStdBranch.Data())); + if(!jarray)jarray = (TClonesArray*)(fAODExtension->GetAOD()->FindListObject(fNonStdBranch.Data())); + if(jarray)jarray->Delete(); // this is our responsibility, clear before filling again + if(AODEvent())evBkg = (AliAODJetEventBackground*)(AODEvent()->FindListObject(Form("%s_%s",AliAODJetEventBackground::StdBranchName(),fNonStdBranch.Data()))); + if(!evBkg) evBkg = (AliAODJetEventBackground*)(fAODExtension->GetAOD()->FindListObject(Form("%s_%s",AliAODJetEventBackground::StdBranchName(),fNonStdBranch.Data()))); + if(evBkg)evBkg->Reset(); } - if (dynamic_cast(InputEvent()) != 0) { + + if (dynamic_cast(InputEvent()) != 0 && !fReadAODFromOutput) { +// AOD is input event..........................................V fJetFinder->GetReader()->SetInputEvent(InputEvent(), InputEvent(), MCEvent()); } else { +// AOD is read from output ....................................V fJetFinder->GetReader()->SetInputEvent(InputEvent(), AODEvent(), MCEvent()); } @@ -180,10 +246,11 @@ void AliAnalysisTaskJets::UserExec(Option_t */*option*/) else fJetFinder->ProcessEvent2(); // V2 // Fill control histos - fHistos->FillHistos(jarray); + if(jarray)fHistos->FillHistos(jarray); // Post the data PostData(1, fListOfHistos); + return; }