Reuse the TClonesArray
authormarian <marian@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 15 Jul 2010 09:29:34 +0000 (09:29 +0000)
committermarian <marian@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 15 Jul 2010 09:29:34 +0000 (09:29 +0000)
TPC/AliClusters.cxx
TPC/AliClusters.h
TPC/AliTPCClustersRow.cxx
TPC/AliTPCClustersRow.h
TPC/AliTPCQADataMakerRec.cxx
TPC/AliTPCclusterMI.h
TPC/AliTPCclusterer.cxx
TPC/AliTPCclustererMI.cxx
TPC/AliTPCtracker.cxx
TPC/AliTPCtrackerMI.cxx

index c55e9e7..eedd280 100644 (file)
@@ -63,6 +63,28 @@ AliClusters::AliClusters(const AliClusters &param)
   //
   fNclusters = param.fNclusters;
 }
+
+//________________________________________________________________________
+AliClusters::AliClusters(const char *classname)
+            :AliSegmentID(),
+             fClusters(0),
+             fNclusters(0),
+             fClass(0)
+{
+//
+// Special constructor
+//          
+  fClass = gROOT->GetClass(classname);
+  
+  if (!fClass)
+        Error("AliClusters", "%s is not a valid class name", classname);
+  if (!fClass->InheritsFrom(TObject::Class())) 
+       Error("AliClusters", "%s does not inherit from TObject", classname);
+                                                 
+  fClusters = new TClonesArray(fClass->GetName(),100);
+}
+
+//______________________________________________________________________                                                          
 AliClusters & AliClusters::operator =(const AliClusters & param)
 {
   //
@@ -149,7 +171,7 @@ TObject * AliClusters::InsertCluster( const TObject * c)
     Error("AliClusters", "class type not specified");
     return 0; 
   }
-  if(!fClusters) fClusters=new TClonesArray(fClass->GetName(),1000);
+  if(!fClusters) fClusters=new TClonesArray(fClass->GetName(),100);
   TClonesArray &lclusters = *fClusters;
   return new(lclusters[fNclusters++]) AliComplexCluster(*((AliComplexCluster*)c));
 }
index 0aef7d4..e756b7c 100644 (file)
@@ -19,6 +19,7 @@ class TObjArray;
 class AliClusters : public AliSegmentID{
 public:
   AliClusters();
+  AliClusters(const char *classname); // special constructor
   AliClusters(const AliClusters &param); // copy constructor
   AliClusters &operator = (const AliClusters & param); 
   ~AliClusters();
@@ -31,7 +32,7 @@ public:
   void DrawClusters(Float_t shiftx, Float_t shifty, Int_t color, Int_t size, Int_t style);
   Bool_t SetClass(const Text_t *classname);
 protected:
-  TClonesArray * fClusters;  
+  TClonesArray * fClusters; //->array of clusters 
   Int_t  fNclusters;  
   TClass * fClass; //!type of cluster class 
   ClassDef(AliClusters,1) // Cluster manager
index f261759..b997ba3 100644 (file)
@@ -48,6 +48,13 @@ AliTPCClustersRow::AliTPCClustersRow()
   fNclusters=0;
 }
 
+//____________________________________________________________________________
+AliTPCClustersRow::AliTPCClustersRow(const char *classname) : AliClusters(classname)
+{
+ // special constructor
+ fNclusters=0;
+}
+
 //_____________________________________________________________________________
 TObject *AliTPCClustersRow::InsertCluster(const TObject *c) 
 {    
index ce906d8..91be940 100644 (file)
@@ -18,6 +18,7 @@ class TObject;
 class AliTPCClustersRow : public AliClusters{
 public:
   AliTPCClustersRow();
+  AliTPCClustersRow(const char *classname); // special constructor
   virtual TObject *InsertCluster(const TObject *c);
   virtual TObject *Append();  //create new object return pointer to this object
 
index 5155fb5..f6f4315 100644 (file)
@@ -509,11 +509,8 @@ void AliTPCQADataMakerRec::MakeDigits(TTree* digitTree)
 void AliTPCQADataMakerRec::MakeRecPoints(TTree* recTree)
 {
 
-  AliTPCClustersRow clrow;
-  clrow.SetClass("AliTPCclusterMI");
-  clrow.SetArray(0);
-  clrow.GetArray()->ExpandCreateFast(10000);
-  AliTPCClustersRow * pclrow = &clrow;
+  AliTPCClustersRow clrow, *pclrow = &clrow;
+  pclrow = new AliTPCClustersRow("AliTPCclusterMI");
   TBranch* branch = recTree->GetBranch("Segment");
   
   branch->SetAddress(&pclrow);
@@ -553,7 +550,7 @@ void AliTPCQADataMakerRec::MakeRecPoints(TTree* recTree)
       GetRecPointsData(kRow)->Fill(row);
     } // end loop over clusters
   } // end loop over tree
-
+  clrow.GetArray()->Clear("C");
 }
 
 //____________________________________________________________________________
index a9f0a2c..ca72104 100644 (file)
@@ -21,6 +21,7 @@ public:
   AliTPCclusterMI &operator = (const AliTPCclusterMI & cluster); //assignment operator
   AliTPCclusterMI(Int_t *lab, Float_t *hit);
   virtual ~AliTPCclusterMI();
+  virtual void Clear() { delete fInfo; }
   virtual Bool_t IsSortable() const; 
   virtual Int_t Compare(const TObject* obj) const;
   inline  void Use(Int_t inc=10);
index f9849eb..95c82f4 100644 (file)
@@ -119,7 +119,7 @@ Int_t AliTPCclusterer::Digits2Clusters(TTree *dTree, TTree *cTree) {
   branch->SetAddress(&dummy);
   
   AliTPCClustersRow ddd,*clrow=&ddd;
-  clrow->SetClass("AliTPCcluster"); clrow->SetArray(1);
+  clrow = new AliTPCClustersRow("AliTPCcluster");
   cTree->Branch("Segment","AliTPCClustersRow",&clrow,32000,200);    
 
   const Int_t kMAXZ=fPar->GetMaxTBin()+2;
@@ -137,9 +137,6 @@ Int_t AliTPCclusterer::Digits2Clusters(TTree *dTree, TTree *cTree) {
        continue;
     }
 
-    clrow=new AliTPCClustersRow();
-
-    clrow->SetClass("AliTPCcluster"); clrow->SetArray(1);
     clrow->SetID(digarr.GetID());
 
     cTree->GetBranch("Segment")->SetAddress(&clrow);
@@ -253,7 +250,7 @@ Int_t AliTPCclusterer::Digits2Clusters(TTree *dTree, TTree *cTree) {
     }
     cTree->Fill();
 
-    delete clrow;
+    clrow->GetArray()->Clear();
 
     nclusters+=ncl;
 
index cf06db9..b006ec8 100644 (file)
@@ -132,9 +132,7 @@ AliTPCclustererMI::AliTPCclustererMI(const AliTPCParam* par, const AliTPCRecoPar
   }
 
   //  Int_t nPoints = fRecoParam->GetLastBin()-fRecoParam->GetFirstBin();
-  fRowCl= new AliTPCClustersRow();
-  fRowCl->SetClass("AliTPCclusterMI");
-  fRowCl->SetArray(1);
+  fRowCl= new AliTPCClustersRow("AliTPCclusterMI");
 
   // Non-persistent arrays
   //
@@ -223,6 +221,11 @@ AliTPCclustererMI::~AliTPCclustererMI(){
     delete fOutputClonesArray;
   }
 
+  if (fRowCl) {
+    fRowCl->GetArray()->Delete();
+    delete fRowCl;
+  }
+
   AliTPCROC * roc = AliTPCROC::Instance();
   Int_t nRowsMax = roc->GetNRows(roc->GetNSector()-1);
   for (Int_t iRow = 0; iRow < nRowsMax; iRow++) {
@@ -255,10 +258,8 @@ void AliTPCclustererMI::SetOutput(TTree * tree)
   //
   if (!tree) return;
   fOutput= tree;
-  AliTPCClustersRow clrow;
-  AliTPCClustersRow *pclrow=&clrow;  
-  clrow.SetClass("AliTPCclusterMI");
-  clrow.SetArray(1); // to make Clones array
+  AliTPCClustersRow clrow, *pclrow=&clrow;  
+  pclrow = new AliTPCClustersRow("AliTPCclusterMI");
   fOutput->Branch("Segment","AliTPCClustersRow",&pclrow,32000,200);    
 }
 
@@ -774,7 +775,7 @@ void AliTPCclustererMI::Digits2Clusters()
 
     FindClusters(noiseROC);
     FillRow();
-    fRowCl->GetArray()->Clear();    
+    fRowCl->GetArray()->Clear("C");    
     nclusters+=fNcluster;    
 
     delete[] fBins;
@@ -911,7 +912,7 @@ void AliTPCclustererMI::ProcessSectorData(){
     FindClusters(noiseROC);
     
     FillRow();
-    if(fBClonesArray == kFALSE) fRowCl->GetArray()->Clear();
+    if(fBClonesArray == kFALSE) fRowCl->GetArray()->Clear("C");
     fNclusters += fNcluster;
     
   } // End of loop to find clusters
index 5ab1fd4..b4ff375 100644 (file)
@@ -149,8 +149,7 @@ Int_t AliTPCtracker::LoadClusters(TTree *cTree) {
   }
 
   AliClusters carray, *addr=&carray;
-  carray.SetClass("AliTPCcluster");
-  carray.SetArray(0);
+  addr = new AliClusters("AliTPCcluster");
   branch->SetAddress(&addr);
 
   Int_t nentr=(Int_t)cTree->GetEntries();
index ffe4b34..6ffa8a5 100644 (file)
@@ -1127,7 +1127,7 @@ Int_t  AliTPCtrackerMI::LoadClusters(const TObjArray *arr)
 {
   //
   // load clusters to the memory
-  AliTPCClustersRow *clrow = 0x0; 
+  AliTPCClustersRow *clrow = new AliTPCClustersRow("AliTPCclusterMI");
   Int_t lower   = arr->LowerBound();
   Int_t entries = arr->GetEntriesFast();
   
@@ -1167,6 +1167,7 @@ Int_t  AliTPCtrackerMI::LoadClusters(const TObjArray *arr)
       for (Int_t j=0;j<tpcrow->GetN2();++j) 
        tpcrow->SetCluster2(j,*(AliTPCclusterMI*)(clrow->GetArray()->At(j)));
     }
+    clrow->GetArray()->Clear("C");
   }
   //
   delete clrow;
@@ -1237,10 +1238,7 @@ Int_t  AliTPCtrackerMI::LoadClusters()
 {
   //
   // load clusters to the memory
-  AliTPCClustersRow *clrow= new AliTPCClustersRow;
-  clrow->SetClass("AliTPCclusterMI");
-  clrow->SetArray(0);
-  clrow->GetArray()->ExpandCreateFast(10000);
+  AliTPCClustersRow *clrow= new AliTPCClustersRow("AliTPCclusterMI");
   //
   //  TTree * tree = fClustersArray.GetTree();