#include <TTree.h>
#include <TFolder.h>
#include <TFriendElement.h>
-
+#include <TProcessID.h>
+#include <TCollection.h>
#include "AliAODEvent.h"
#include "AliAODHeader.h"
return;
}
+void AliAODEvent::MakeEntriesReferencable()
+{
+ // Make all entries referencable in a subsequent process
+ //
+ TIter next(fAODObjects);
+ TObject* obj;
+ while ((obj = next()))
+ {
+ if(obj->InheritsFrom("TCollection"))
+ {
+ AssignIDtoCollection((TCollection*)obj);
+ }
+ }
+}
+
//______________________________________________________________________________
void AliAODEvent::SetStdNames()
{
fPmdClusters ->Clear();
}
+//_________________________________________________________________
+Int_t AliAODEvent::GetPHOSClusters(TRefArray *clusters) const
+{
+ // fills the provided TRefArray with all found phos clusters
+
+ clusters->Clear();
+
+ AliAODCaloCluster *cl = 0;
+ for (Int_t i = 0; i < GetNCaloClusters() ; i++) {
+
+ if ( (cl = GetCaloCluster(i)) ) {
+ if (cl->IsPHOSCluster()){
+ clusters->Add(cl);
+ //AliDebug(1,Form("IsPHOS cluster %d Size: %d \n",i,clusters->GetEntriesFast()));
+ }
+ }
+ }
+ return clusters->GetEntriesFast();
+}
+
+//_________________________________________________________________
+Int_t AliAODEvent::GetEMCALClusters(TRefArray *clusters) const
+{
+ // fills the provided TRefArray with all found emcal clusters
+
+ clusters->Clear();
+
+ AliAODCaloCluster *cl = 0;
+ for (Int_t i = 0; i < GetNCaloClusters(); i++) {
+
+ if ( (cl = GetCaloCluster(i)) ) {
+ if (cl->IsEMCALCluster()){
+ clusters->Add(cl);
+ //AliDebug(1,Form("IsEMCAL cluster %d Size: %d \n",i,clusters->GetEntriesFast()));
+ }
+ }
+ }
+ return clusters->GetEntriesFast();
+}
+
+
//______________________________________________________________________________
Int_t AliAODEvent::GetMuonTracks(TRefArray *muonTracks) const
{
}
-void AliAODEvent::ReadFromTree(TTree *tree)
+void AliAODEvent::ReadFromTree(TTree *tree, Option_t* opt /*= ""*/)
{
- // connects aod event to tree
+ // Connects aod event to tree
if(!tree){
Printf("%s %d AliAODEvent::ReadFromTree() Zero Pointer to Tree \n",(char*)__FILE__,__LINE__);
if(aodEvent){
// Check if already connected to tree
TList* connectedList = (TList*) (tree->GetUserInfo()->FindObject("AODObjectsConnectedToTree"));
- if (connectedList) {
- // If connected use the connected list if objects
- fAODObjects->Delete();
- fAODObjects = connectedList;
- GetStdContent();
- return;
+ if (connectedList && (strcmp(opt, "reconnect"))) {
+ // If connected use the connected list if objects
+ fAODObjects->Delete();
+ fAODObjects = connectedList;
+ GetStdContent();
+ return;
}
// Connect to tree
// prevent a memory leak when reading back the TList
}
//
// Let's find out whether we have friends
- TList* friendL = tree->GetListOfFriends();
+ TList* friendL = tree->GetTree()->GetListOfFriends();
if (friendL)
{
TIter next(friendL);
printf("Get list of object from tree %d !!\n", objL->GetEntries());
TIter nextobject(objL);
TObject* obj = 0;
- while(obj = nextobject())
+ while((obj = nextobject()))
{
printf("Adding object from friend %s !\n", obj->GetName());
fAODObjects->Add(obj);
while((el=(TNamed*)next())){
TString bname(el->GetName());
// check if branch exists under this Name
- TBranch *br = tree->GetBranch(bname.Data());
+ TBranch *br = tree->GetTree()->GetBranch(bname.Data());
if(br){
tree->SetBranchAddress(bname.Data(),fAODObjects->GetObjectRef(el));
- }
- else{
+ } else {
br = tree->GetBranch(Form("%s.",bname.Data()));
if(br){
tree->SetBranchAddress(Form("%s.",bname.Data()),fAODObjects->GetObjectRef(el));
return;
}
+
+void AliAODEvent::AssignIDtoCollection(TCollection* col)
+{
+ // Static method which assigns a ID to each object in a collection
+ // In this way the objects are marked as referenced and written with
+ // an ID. This has the advantage that TRefs to this objects can be
+ // written by a subsequent process.
+ TIter next(col);
+ TObject* obj;
+ while ((obj = next()))
+ TProcessID::AssignID(obj);
+}