#include <TClass.h>
#include <TTree.h>
+#include <TH1.h>
#include <TROOT.h>
#include "AliAnalysisDataContainer.h"
if (pack) {
fData = pack->Data();
fDataReady = kTRUE;
+ // Imported wrappers do not own data anymore (AG 13-11-07)
+ pack->SetDeleteData(kFALSE);
}
}
ClassImp (AliAnalysisDataWrapper)
+//______________________________________________________________________________
+AliAnalysisDataWrapper::AliAnalysisDataWrapper(TObject *data)
+ :TNamed(),
+ fData(data)
+{
+// Ctor.
+ if (data) SetName(data->GetName());
+}
+
+//______________________________________________________________________________
+AliAnalysisDataWrapper::~AliAnalysisDataWrapper()
+{
+// Dtor.
+ if (fData && TObject::TestBit(kDeleteData)) delete fData;
+}
+
//______________________________________________________________________________
AliAnalysisDataWrapper &AliAnalysisDataWrapper::operator=(const AliAnalysisDataWrapper &other)
{
{
// Merge a list of containers with this one. Containers in the list must have
// data of the same type.
+ if (TH1::AddDirectoryStatus()) TH1::AddDirectory(kFALSE);
if (!fData) return 0;
if (!list || list->IsEmpty()) return 1;
- printf("Merging %d data wrappers %s\n", list->GetSize()+1, GetName());
TMethodCall callEnv;
- if (fData->InheritsFrom(TSeqCollection::Class())) {
- TSeqCollection *coll = (TSeqCollection*)fData;
- if (coll->IsEmpty()) return 0;
- Int_t nentries = coll->GetEntries();
- AliAnalysisDataWrapper *top;
- TIter next(list);
- TSeqCollection *collcrt = 0;
- TList *list1 = 0;
- for (Int_t i=0; i<nentries; i++) {
- list1 = new TList();
- top = new AliAnalysisDataWrapper(coll->At(i));
- next.Reset();
- while ((collcrt=(TSeqCollection*)next()))
- list1->Add(new AliAnalysisDataWrapper(collcrt->At(i)));
- if (!top->Merge(list1)) {
- list1->Delete();
- delete list1;
- return 0;
- }
- list1->Delete();
- delete list1;
- }
- return nentries;
- }
-
if (fData->IsA())
callEnv.InitWithPrototype(fData->IsA(), "Merge", "TCollection*");
if (!callEnv.IsValid()) {
return 1;
}
- TIter next(list);
+ TIter next1(list);
AliAnalysisDataWrapper *cont;
// Make a list where to temporary store the data to be merged.
TList *collectionData = new TList();
Int_t count = 0; // object counter
- while ((cont=(AliAnalysisDataWrapper*)next())) {
+ // printf("Wrapper %s 0x%lx (data=%s) merged with:\n", GetName(), (ULong_t)this, fData->ClassName());
+ while ((cont=(AliAnalysisDataWrapper*)next1())) {
TObject *data = cont->Data();
if (!data) continue;
- if (strcmp(cont->GetName(), GetName())) continue;
+ // printf(" - %s 0x%lx (data=%s)\n", cont->GetName(), (ULong_t)cont, data->ClassName());
collectionData->Add(data);
count++;
}