14-nov-2007 NvE Copy constructor and Clone() memberfunction introduced in AliObjMatrix.
authornick <nick@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 14 Nov 2007 10:26:55 +0000 (10:26 +0000)
committernick <nick@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 14 Nov 2007 10:26:55 +0000 (10:26 +0000)
14-nov-2007 NvE Bug fix in IceDB2Root in the creation of the JEBTDaq database.
                The new Clone() memberfunction of AliObjMatrix is now used and a memory
                leak has been removed. Also GetOMdbase() has been updated for JEBTDaq.

RALICE/AliObjMatrix.cxx
RALICE/AliObjMatrix.h
RALICE/history.txt
RALICE/icepack/iceconvert/IceDB2Root.cxx
RALICE/icepack/iceconvert/history.txt

index 1aae18f..1d93c7b 100644 (file)
@@ -110,6 +110,40 @@ AliObjMatrix::~AliObjMatrix()
  }
 }
 ///////////////////////////////////////////////////////////////////////////
+AliObjMatrix::AliObjMatrix(const AliObjMatrix& m) : TNamed(m)
+{
+// Copy constructor
+
+ fRows=0;
+ fMaxrow=0;
+ fMaxcol=0;
+ fObjects=0;
+
+ fOwn=m.fOwn;
+ fSwap=m.fSwap;
+
+ Int_t maxrow=m.GetMaxRow();
+ Int_t maxcol=m.GetMaxColumn();
+ for (Int_t irow=1; irow<=maxrow; irow++)
+ {
+  for (Int_t icol=1; icol<=maxcol; icol++)
+  {
+   TObject* obj=m.GetObject(irow,icol);
+   if (obj)
+   {
+    if (!fOwn)
+    {
+     EnterObject(irow,icol,obj);
+    }
+    else
+    {
+     EnterObject(irow,icol,obj->Clone());
+    }
+   }
+  }
+ }
+}
+///////////////////////////////////////////////////////////////////////////
 void AliObjMatrix::Reset()
 {
 // Reset the whole matrix structure.
@@ -730,3 +764,18 @@ Int_t AliObjMatrix::GetIndices(TObject* obj,TArrayI& rows,Int_t col) const
  return jref;
 }
 ///////////////////////////////////////////////////////////////////////////
+TObject* AliObjMatrix::Clone(const char* name) const
+{
+// Make a deep copy of the current object and provide the pointer to the copy.
+// This memberfunction enables automatic creation of new objects of the
+// correct type depending on the object type, a feature which may be very useful
+// for containers when adding objects in case the container owns the objects.
+
+ AliObjMatrix* m=new AliObjMatrix(*this);
+ if (name)
+ {
+  if (strlen(name)) m->SetName(name);
+ }
+ return m;
+}
+///////////////////////////////////////////////////////////////////////////
index 412898d..1af1019 100644 (file)
@@ -14,6 +14,8 @@ class AliObjMatrix : public TNamed
  public:
   AliObjMatrix();                                                   // Default constructor
   virtual ~AliObjMatrix();                                          // Default destructor
+  AliObjMatrix(const AliObjMatrix& m);                              // Copy constructor
+  virtual TObject* Clone(const char* name="") const;                // Make a deep copy and provide its pointer
   virtual void Reset();                                             // Reset the whole matrix structure
   virtual void SetOwner(Int_t own=1);                               // Set the owner flag for the stored objects
   virtual Int_t GetOwner() const;                                   // Provide the owner flag for the stored objects
@@ -41,6 +43,6 @@ class AliObjMatrix : public TNamed
   Int_t fMaxcol;       // The maximum column number index
   TObjArray* fObjects; // Linear reference array for fast looping over the stored objects
  
- ClassDef(AliObjMatrix,6) // Handling of a matrix structure of objects.
+ ClassDef(AliObjMatrix,7) // Handling of a matrix structure of objects.
 };
 #endif
index c3ea26f..e432550 100644 (file)
 09-nov-2007 GdV Automatic central meridian setting only activated when meridian
                 has a value smaller than -pi. This will allow also negative values
                 as user input.
+14-nov-2007 NvE Copy constructor and Clone() memberfunction introduced in AliObjMatrix.
 
 
index 3d348ed..4cdb6cb 100644 (file)
@@ -252,7 +252,7 @@ AliObjMatrix* IceDB2Root::GetOMdbase(TString name)
 
  if (name=="MuDaq") return fMuDaqdb;
  if (name=="TWRDaq") return fTWRDaqdb;
- if (name=="JEBTDaq") return fTWRDaqdb; // Update this line when different calibration constants are needed for JEBTDaq
+ if (name=="JEBTDaq") return fJEBTDaqdb;
  if (name=="JEBADaq") return fJEBADaqdb;
  return 0;
 }
@@ -1205,18 +1205,17 @@ void IceDB2Root::GetJEBTDaqData()
  // The JEBTDaq OM database object
  if (fJEBTDaqdb)
  {
-  fJEBTDaqdb->Reset();
+  delete fJEBTDaqdb;
+  fJEBTDaqdb=0;
  }
- else
+
+ // Copy TWRDaq database to JEBTDaq database via the Clone() function
+ if(!fTWRDaqdb) GetTWRDaqData();
+ if(fTWRDaqdb)
  {
-  fJEBTDaqdb=new AliObjMatrix();
-  fJEBTDaqdb->SetOwner();
+  fJEBTDaqdb=(AliObjMatrix*)fTWRDaqdb->Clone();
+  fJEBTDaqdb->SetNameTitle("JEBTDaq-OMDBASE","The JEBTDaq OM geometry, calib. etc... database");
  }
-
- // Copy TWRDaq database to JEBTDaq database
- fTWRDaqdb->Copy(*fJEBTDaqdb);
- fJEBTDaqdb->SetNameTitle("JEBTDaq-OMDBASE","The JEBTDaq OM geometry, calib. etc... database");
-
 }
 ///////////////////////////////////////////////////////////////////////////
 void IceDB2Root::GetJEBADaqData()
index 432d8ff..77066f1 100644 (file)
                 The class IceRoot has been updated so that it matches the new walnut
                 data format.
 13-nov-2007 GdV Bug fix in IceRoot by completely re-building the Daq device.
+14-nov-2007 NvE Bug fix in IceDB2Root in the creation of the JEBTDaq database.
+                The new Clone() memberfunction of AliObjMatrix is now used and a memory
+                leak has been removed. Also GetOMdbase() has been updated for JEBTDaq.