]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ANALYSIS/AliAnalysisDataContainer.cxx
Magnetic field map based on measured data (R. Shahoyan)
[u/mrichter/AliRoot.git] / ANALYSIS / AliAnalysisDataContainer.cxx
index d551dd36cc676c3a519ca05656ec6ed1f6eea000..b1afadcaba7174243966a537e281856a68ed8524 100644 (file)
@@ -47,6 +47,7 @@
 
 #include <TClass.h>
 #include <TTree.h>
+#include <TH1.h>
 #include <TROOT.h>
 
 #include "AliAnalysisDataContainer.h"
@@ -373,11 +374,29 @@ void AliAnalysisDataContainer::ImportData(AliAnalysisDataWrapper *pack)
    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)
 {
@@ -394,36 +413,11 @@ Long64_t AliAnalysisDataWrapper::Merge(TCollection *list)
 {
 // 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()) {
@@ -431,15 +425,16 @@ Long64_t AliAnalysisDataWrapper::Merge(TCollection *list)
       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++;
    }