Adding operator functions for manipulation of counters, adding copy constructor and...
authorrichterm <richterm@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 4 Sep 2009 00:38:01 +0000 (00:38 +0000)
committerrichterm <richterm@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 4 Sep 2009 00:38:01 +0000 (00:38 +0000)
HLT/BASE/AliHLTCTPData.cxx
HLT/BASE/AliHLTCTPData.h

index 6611f3271633946fee8b7f9db8c4d31f5aaac8b9..2d45479ae3d3851bc48644d7f5f9cf9a6060a160 100644 (file)
@@ -5,7 +5,6 @@
 //* ALICE Experiment at CERN, All rights reserved.                         *
 //*                                                                        *
 //* Primary Authors: Matthias Richter <Matthias.Richter@ift.uib.no>        *
-//*                  Timm Steinbeck <timm@kip.uni-heidelberg.de>           *
 //*                  for The ALICE HLT Project.                            *
 //*                                                                        *
 //* Permission to use, copy, modify and distribute this software and its   *
@@ -37,7 +36,7 @@ AliHLTCTPData::AliHLTCTPData()
   , AliHLTLogging()
   , fMask(0)
   , fClassIds(AliHLTReadoutList::Class(), gkNCTPTriggerClasses)
-  , fCounters()
+  , fCounters(gkNCTPTriggerClasses)
 {
   // see header file for class documentation
   // or
@@ -51,7 +50,7 @@ AliHLTCTPData::AliHLTCTPData(const char* parameter)
   , AliHLTLogging()
   , fMask(0)
   , fClassIds(AliHLTReadoutList::Class(), gkNCTPTriggerClasses)
-  , fCounters()
+  , fCounters(gkNCTPTriggerClasses)
 {
   // see header file for class documentation
   InitCTPTriggerClasses(parameter);
@@ -63,6 +62,95 @@ AliHLTCTPData::~AliHLTCTPData()
   fClassIds.Delete();
 }
 
+AliHLTCTPData::AliHLTCTPData(const AliHLTCTPData& src)
+  : TNamed(src.GetName(), src.GetTitle())
+  , AliHLTLogging()
+  , fMask(src.Mask())
+  , fClassIds(src.fClassIds)
+  , fCounters(src.Counters())
+{
+  // see header file for class documentation
+}
+
+AliHLTCTPData& AliHLTCTPData::operator=(const AliHLTCTPData& src)
+{
+  // see header file for class documentation
+  if (this!=&src) {
+    SetName(src.GetName());
+    SetTitle(src.GetTitle());
+    fMask=src.Mask();
+    fClassIds.Delete();
+    fClassIds.ExpandCreate(gkNCTPTriggerClasses);
+    for (int i=0; i<gkNCTPTriggerClasses; i++) {
+      ((TNamed*)fClassIds.At(i))->SetName(src.fClassIds.At(i)->GetName());
+      ((TNamed*)fClassIds.At(i))->SetTitle(src.fClassIds.At(i)->GetTitle());
+    }
+    fCounters=src.Counters();
+  }
+
+  return *this;
+}
+
+int AliHLTCTPData::Add(const AliHLTCTPData& src, int factor, int &skipped)
+{
+  // see header file for class documentation
+  
+  skipped=0;
+  for (int i=0; i<gkNCTPTriggerClasses; i++) {
+    TString c;
+    c=fClassIds.At(i)->GetName();
+    if (c.IsNull()) continue;
+    if (c.CompareTo(src.fClassIds.At(i)->GetName())==0) {
+      fCounters[i]+=factor*src.Counter(i);
+    } else {
+      skipped++;
+    }
+  }
+  return 0;
+}
+
+AliHLTCTPData& AliHLTCTPData::operator += (const AliHLTCTPData& src)
+{
+  // see header file for class documentation
+  
+  int nofInconsistencies=0;
+  Add(src, 1, nofInconsistencies);
+  if (nofInconsistencies>0) {
+    HLTError("Inconsistent operants: skipping %d of %d CTP classes for operation", nofInconsistencies, gkNCTPTriggerClasses);
+  }
+  return *this;
+}
+
+AliHLTCTPData& AliHLTCTPData::operator -= (const AliHLTCTPData& src)
+{
+  // see header file for class documentation
+  
+  int nofInconsistencies=0;
+  Add(src, -1, nofInconsistencies);
+  if (nofInconsistencies>0) {
+    HLTError("Inconsistent operants: skipping %d of %d CTP classes for operation", nofInconsistencies, gkNCTPTriggerClasses);
+  }
+  return *this;
+}
+
+AliHLTCTPData AliHLTCTPData::operator + (const AliHLTCTPData& src) const
+{
+  // see header file for class documentation
+
+  AliHLTCTPData result(*this);
+  result+=src;
+  return result;
+}
+
+AliHLTCTPData AliHLTCTPData::operator - (const AliHLTCTPData& src) const
+{
+  // see header file for class documentation
+
+  AliHLTCTPData result(*this);
+  result-=src;
+  return result;
+}
+
 int AliHLTCTPData::InitCTPTriggerClasses(const char* ctpString)
 {
   // see header file for function documentation
@@ -312,7 +400,7 @@ AliHLTEventDDL AliHLTCTPData::ReadoutList(const AliHLTComponentTriggerData& trig
 void AliHLTCTPData::Print(Option_t* /*option*/) const
 {
   // see header file for function documentation
-  cout << "CTP counters:" << endl;
+  cout << GetTitle() << endl;
   int count=0;
   for (int i=0; i<gkNCTPTriggerClasses; i++) {
     if (i>=Counters().GetSize()) break;
index ee5fbf9556b2397cd2a7414a9e88335887edb7d0..4cfc95a0fa225117688714838597d76befd219b9 100644 (file)
@@ -46,9 +46,23 @@ class AliHLTCTPData: public TNamed, public AliHLTLogging
   AliHLTCTPData();
   /// standard constructor including initialization from CTP_TRIGGER_CLASS
   AliHLTCTPData(const char* parameter);
+  /// copy constructor
+  AliHLTCTPData(const AliHLTCTPData&);
+  ///assignment operator
+  AliHLTCTPData& operator=(const AliHLTCTPData&);
   /// destructor
   virtual ~AliHLTCTPData();
 
+  /// Add counters
+  AliHLTCTPData& operator += (const AliHLTCTPData&);
+  /// Add counters
+  AliHLTCTPData operator + (const AliHLTCTPData&) const;
+
+  /// Subtract counters
+  AliHLTCTPData& operator -= (const AliHLTCTPData&);
+  /// Subtract counters
+  AliHLTCTPData operator - (const AliHLTCTPData&) const;
+
   /**
    * Init the class ids and mapping from the CTP_TRIGGER_CLASS parameter.
    * The general format of the parameter is as follows:
@@ -114,10 +128,14 @@ class AliHLTCTPData: public TNamed, public AliHLTLogging
 
  protected:
  private:
-  /// copy constructor prohibited
-  AliHLTCTPData(const AliHLTCTPData&);
-  ///assignment operator prohibited
-  AliHLTCTPData& operator=(const AliHLTCTPData&);
+  /**
+   * Add counters.
+   * Base methods for operators.
+   * @param src    instance to add
+   * @param factor +1/-1 for addition/subtraction
+   * @skipped      target to get the numner of not matching class names
+   */
+  int Add(const AliHLTCTPData& src, int factor, int &skipped);
 
   AliHLTUInt64_t fMask;      /// mask of initialized trigger classes
   TClonesArray   fClassIds;  /// array of trigger class ids