Improving the time performance of alimdc: 1. disabling support for pointer tracking...
authorhristov <hristov@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 9 Sep 2008 12:22:01 +0000 (12:22 +0000)
committerhristov <hristov@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 9 Sep 2008 12:22:01 +0000 (12:22 +0000)
RAW/AliMDC.cxx
RAW/AliRawDB.cxx
RAW/AliRawEventHeaderBase.cxx
RAW/AliRawEventHeaderBase.h
RAW/AliTagDB.cxx

index 618bfff..e2bf176 100644 (file)
@@ -50,6 +50,7 @@
 #include <TROOT.h>
 #include <TStopwatch.h>
 #include <TPluginManager.h>
+#include <TBufferFile.h>
 
 #include <sys/uio.h>
 #ifdef USE_EB
@@ -125,6 +126,8 @@ AliMDC::AliMDC(Int_t compress, Bool_t deleteFiles, EFilterMode filterMode,
   // Set the maximum tree size to 19GB
   // in order to allow big raw data files
   TTree::SetMaxTreeSize(20000000000LL);
+
+  TBufferFile::SetGlobalReadParam(5);
  
   // This line is needed in case of a stand-alone application w/o
   // $ROOTSYS/etc/system.rootrc file
index 825a445..719d97c 100644 (file)
@@ -36,6 +36,8 @@
 
 #include <TObjString.h>
 
+#include <TBranch.h>
+
 #include "AliESDEvent.h"
 #include "AliRawEvent.h"
 #include "AliRawDataArray.h"
@@ -263,6 +265,18 @@ again:
    return kTRUE;
 }
 
+static void BranchResetBit(TBranch *b) 
+{
+  // Reset MapObject on this branch and all the sub-branches
+
+  b->ResetBit( kBranchObject | kBranchAny ); // Or in newer ROOT: b->ResetBit( kMapObject )
+  TIter next( b->GetListOfBranches() );
+  TBranch *sub = 0;
+  while ( (sub = (TBranch*)next() ) ) {
+    BranchResetBit( sub );
+  }
+}
+
 //______________________________________________________________________________
 void AliRawDB::MakeTree()
 {
@@ -276,18 +290,23 @@ void AliRawDB::MakeTree()
    // splitting 29.6 MB/s, no splitting 35.3 MB/s on P4 2GHz 15k SCSI
    //Int_t split   = 1;
    Int_t split   = 0;
-   fTree->Branch("rawevent", "AliRawEvent", &fEvent, fBasketSize, split);
+   TBranch *b = fTree->Branch("rawevent", "AliRawEvent", &fEvent, fBasketSize, split);
+   BranchResetBit(b);
 
    // Make brach for each sub-detector
    for (Int_t iDet = 0; iDet < AliDAQ::kNDetectors; iDet++) {
-     for (Int_t iBranch = 0; iBranch < fgkDetBranches[iDet]; iBranch++)
-       fTree->Branch(Form("%s%d",AliDAQ::DetectorName(iDet),iBranch),"AliRawDataArray",
-                    &fDetRawData[iDet][iBranch],fBasketSize,split);
+     for (Int_t iBranch = 0; iBranch < fgkDetBranches[iDet]; iBranch++) {
+       b = fTree->Branch(Form("%s%d",AliDAQ::DetectorName(iDet),iBranch),"AliRawDataArray",
+                        &fDetRawData[iDet][iBranch],fBasketSize,split);
+       BranchResetBit(b);
+     }
    }
    // Make special branch for unrecognized raw-data payloads
-   for (Int_t iBranch = 0; iBranch < fgkDetBranches[AliDAQ::kNDetectors]; iBranch++)
-     fTree->Branch(Form("Common%d",iBranch),"AliRawDataArray",
-                  &fDetRawData[AliDAQ::kNDetectors][iBranch],fBasketSize,split);
+   for (Int_t iBranch = 0; iBranch < fgkDetBranches[AliDAQ::kNDetectors]; iBranch++) {
+     b = fTree->Branch(Form("Common%d",iBranch),"AliRawDataArray",
+                      &fDetRawData[AliDAQ::kNDetectors][iBranch],fBasketSize,split);
+     BranchResetBit(b);
+   }
 
    // Create tree which will contain the HLT ESD information
 
index b70c775..dccd36a 100644 (file)
@@ -49,7 +49,8 @@ fVersion(0),
 fExtendedDataSize(0),
 fExtendedAllocSize(0),
 fExtendedData(NULL),
-fIsSwapped(kFALSE)
+fIsSwapped(kFALSE),
+fHeaderSize(0)
 {
   // Default constructor
 }
@@ -76,6 +77,8 @@ Int_t AliRawEventHeaderBase::HeaderSize() const
   // Returns the size of the data members list
   // beyond the base class data members
 
+  if (fHeaderSize) return fHeaderSize;
+
   Int_t size = 0;
 
   TList *datalist = IsA()->GetListOfDataMembers();
@@ -91,6 +94,8 @@ Int_t AliRawEventHeaderBase::HeaderSize() const
       for(UInt_t i=0;i<ndim;i++) size += member->GetMaxIndex(i)*unitsize;
   }
 
+  const_cast<AliRawEventHeaderBase*>(this)->fHeaderSize = size;
+
   return size;
 }
 
index 97d6536..966a5da 100644 (file)
@@ -86,11 +86,12 @@ private:
    char  *fExtendedData;  //[fExtendedDataSize] pointer to header extension data 
 
    Bool_t fIsSwapped;     // is data swapped
+   Int_t  fHeaderSize;    //! cache for the header size estimate
 
    static const UInt_t fgkEventMagicNumber        = 0xDA1E5AFE; // magic word
    static const UInt_t fgkEventMagicNumberSwapped = 0xFE5A1EDA; // swapped magic word
 
-   ClassDef(AliRawEventHeaderBase,2)  // Alice raw event header base class
+   ClassDef(AliRawEventHeaderBase,3)  // Alice raw event header base class
 };
 
 #define EVENT_HEADER_VERSION(AA,BB) AliRawEventHeaderV##AA##_##BB
index a2f64f8..797c13b 100644 (file)
@@ -26,6 +26,7 @@
 
 #include <TSystem.h>
 #include <TTimeStamp.h>
+#include <TBranch.h>
 
 #include "AliESD.h"
 
@@ -55,6 +56,18 @@ AliTagDB::AliTagDB(AliRawEventTag *eventTag, const char* fileName) :
    }
 }
 
+static void BranchResetBit(TBranch *b) 
+{
+  // Reset MapObject on this branch and all the sub-branches
+
+  b->ResetBit( kBranchObject | kBranchAny ); // Or in newer ROOT: b->ResetBit( kMapObject )
+  TIter next( b->GetListOfBranches() );
+  TBranch *sub = 0;
+  while ( (sub = (TBranch*)next() ) ) {
+    BranchResetBit( sub );
+  }
+}
+
 //______________________________________________________________________________
 Bool_t AliTagDB::Create(const char* fileName)
 {
@@ -83,7 +96,8 @@ Bool_t AliTagDB::Create(const char* fileName)
    Int_t bufsize = 32000;
    Int_t split   = 1;
    const char *tagname = fEventTag->GetName();
-   fTree->Branch("TAG", tagname, &fEventTag, bufsize, split);
+   TBranch * b = fTree->Branch("TAG", tagname, &fEventTag, bufsize, split);
+   BranchResetBit(b);
 
    return kTRUE;
 }