Added base class for HLT space point data block handlers
authorrichterm <richterm@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 2 May 2011 19:22:14 +0000 (19:22 +0000)
committerrichterm <richterm@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 2 May 2011 19:22:14 +0000 (19:22 +0000)
HLT/BASE/AliHLTSpacePointContainer.cxx [new file with mode: 0644]
HLT/BASE/AliHLTSpacePointContainer.h [new file with mode: 0644]
HLT/BASE/HLTbaseLinkDef.h
HLT/CMakelibHLTbase.pkg

diff --git a/HLT/BASE/AliHLTSpacePointContainer.cxx b/HLT/BASE/AliHLTSpacePointContainer.cxx
new file mode 100644 (file)
index 0000000..0ca0885
--- /dev/null
@@ -0,0 +1,210 @@
+// $Id$
+
+//**************************************************************************
+//* This file is property of and copyright by the ALICE HLT Project        * 
+//* ALICE Experiment at CERN, All rights reserved.                         *
+//*                                                                        *
+//* Primary Authors: Matthias Richter <Matthias.Richter@ift.uib.no>        *
+//*                  for The ALICE HLT Project.                            *
+//*                                                                        *
+//* Permission to use, copy, modify and distribute this software and its   *
+//* documentation strictly for non-commercial purposes is hereby granted   *
+//* without fee, provided that the above copyright notice appears in all   *
+//* copies and that both the copyright notice and this permission notice   *
+//* appear in the supporting documentation. The authors make no claims     *
+//* about the suitability of this software for any purpose. It is          *
+//* provided "as is" without express or implied warranty.                  *
+//**************************************************************************
+
+/// @file   AliHLTSpacePointContainer.cxx
+/// @author Matthias Richter
+/// @date   2011-04-29
+/// @brief  Base helper class for handling of HLT space point data blocks
+///
+
+#include "AliHLTSpacePointContainer.h"
+#include "AliHLTComponent.h"
+#include "TFile.h"
+#include "TString.h"
+#include "TArrayC.h"
+#include "TObjArray.h"
+#include <memory>
+#include <iostream>
+
+/** ROOT macro for the implementation of ROOT specific class methods */
+ClassImp(AliHLTSpacePointContainer)
+
+AliHLTSpacePointContainer::AliHLTSpacePointContainer()
+  : TObject(), AliHLTLogging()
+  , fBuffers()
+{
+  // see header file for class documentation
+  // or
+  // refer to README to build package
+  // or
+  // visit http://web.ift.uib.no/~kjeks/doc/alice-hlt
+}
+
+AliHLTSpacePointContainer::AliHLTSpacePointContainer(const AliHLTSpacePointContainer& c)
+  : TObject(c), AliHLTLogging()
+  , fBuffers()
+{
+  /// copy constructor
+
+  // currently no need to copy or allocate, the fBuffers of the source object are expected
+  // to be persistent throughout the lifetime of the new object. Only pointers are copied.
+}
+
+AliHLTSpacePointContainer& AliHLTSpacePointContainer::operator=(const AliHLTSpacePointContainer& c)
+{
+  /// assignment operator
+  if (&c==this) return *this;
+
+  // currently no need to copy or allocate
+  return *this;
+}
+
+AliHLTSpacePointContainer::~AliHLTSpacePointContainer()
+{
+  // destructor
+  Clear();
+}
+
+void AliHLTSpacePointContainer::Clear(Option_t * /*option*/)
+{
+  // internal cleanup
+  vector<TArrayC*>::iterator element=fBuffers.begin();
+  while (element!=fBuffers.end()) {
+    TArrayC* pBuffer=*element;
+    element=fBuffers.erase(element);
+    delete pBuffer;
+  }
+}
+
+void AliHLTSpacePointContainer::Print(Option_t *option) const
+{
+  // print info
+  Print(cout, option);
+}
+
+void AliHLTSpacePointContainer::Print(ostream& out, Option_t */*option*/) const
+{
+  // print to stream
+  out << "AliHLTSpacePointContainer::Print" << endl;
+}
+
+int AliHLTSpacePointContainer::AddInputBlock(const char* filename, AliHLTComponentDataType dt, unsigned specification)
+{
+  // open block from file and add to collection
+  if (!filename) return -EINVAL;
+  
+  TString input=filename;
+  input+="?filetype=raw";
+  std::auto_ptr<TFile> pFile(new TFile(input));
+  if (!pFile.get()) return -ENOMEM;
+  if (pFile->IsZombie()) return -ENOENT;
+
+  int iResult=0;
+  pFile->Seek(0);
+  std::auto_ptr<TArrayC> buffer(new TArrayC);
+  if (!buffer.get()) return -ENOMEM;
+
+  buffer->Set(pFile->GetSize());
+  if (pFile->ReadBuffer(buffer->GetArray(), buffer->GetSize())==0) {
+    AliHLTComponentBlockData bd;
+    AliHLTComponent::FillBlockData(bd);
+    bd.fPtr=buffer->GetArray();
+    bd.fSize=buffer->GetSize();
+    bd.fDataType=dt;
+    bd.fSpecification=specification;
+    HLTDebug("adding data block %d byte(s) from file %s", pFile->GetSize(), filename);
+    iResult=AddInputBlock(&bd);
+  } else {
+    HLTError("failed reading %d byte(s) from file %s", pFile->GetSize(), filename);
+    iResult=-ENODATA;
+  }
+
+  fBuffers.push_back(buffer.release());
+  return iResult;
+}
+
+int AliHLTSpacePointContainer::AddInputBlocks(const char* listfile, AliHLTComponentDataType dt)
+{
+  // open blank separated list of files and add data
+  ifstream list(listfile);
+  if (!list.good()) return -ENOENT;
+
+  int count=0;
+  TString file;
+  while (file.ReadLine(list)) {
+    HLTInfo("adding data from file %s", file.Data());
+    int iResult=AddInputBlock(file.Data(), dt, kAliHLTVoidDataSpec);
+    if (iResult<0) {
+      HLTInfo("failed to add data from file %s: error %d", file.Data(), iResult);
+      return iResult;
+    }
+    count+=iResult;
+  }
+
+  // std::auto_ptr<TObjArray> tokens(files.Tokenize(" "));
+  // if (!tokens.get()) return 0;
+  // for (int i=0; i<tokens->GetEntriesFast(); i++) {
+  //   if (!tokens->At(i)) continue;
+  //   cout << "adding data from file " << tokens->At(i)->GetName() << endl;
+  //   AddInputBlock(tokens->At(i)->GetName(), dt, kAliHLTVoidDataSpec);
+  // }
+
+  return count;
+}
+
+AliHLTSpacePointContainer* AliHLTSpacePointContainer::SelectByTrack(int /*trackId*/, bool /*bAlloc*/) const
+{
+  /// create a collection of clusters for a specific track
+  /// default implementation, nothing to do
+  return NULL;
+}
+
+AliHLTSpacePointContainer* AliHLTSpacePointContainer::SelectByMC(int /*mcId*/, bool /*bAlloc*/) const
+{
+  /// create a collection of clusters for a specific MC track
+  /// default implementation, nothing to do
+  return NULL;
+}
+
+AliHLTSpacePointContainer* AliHLTSpacePointContainer::UsedClusters(bool /*bAlloc*/) const
+{
+  /// create a collection of all used clusters
+  /// default implementation, nothing to do
+  return NULL;
+}
+
+AliHLTSpacePointContainer* AliHLTSpacePointContainer::UnusedClusters(bool /*bAlloc*/) const
+{
+  /// create a collection of all unused clusters
+  /// default implementation, nothing to do
+  return NULL;
+}
+
+int AliHLTSpacePointContainer::MarkUsed(const AliHLTUInt32_t* /*clusterIDs*/, int /*arraySize*/)
+{
+  /// default implementation, nothing to do
+  return -ENOSYS;
+}
+
+int AliHLTSpacePointContainer::SetTrackID(int /*trackID*/, const AliHLTUInt32_t* /*clusterIDs*/, int /*arraySize*/)
+{
+  /// default implementation, nothing to do
+  return -ENOSYS;
+}
+
+int AliHLTSpacePointContainer::SetMCID(int /*mcID*/, const AliHLTUInt32_t* /*clusterIDs*/, int /*arraySize*/)
+{
+  /// default implementation, nothing to do
+  return -ENOSYS;
+}
+
+ostream& operator<<(ostream &out, const AliHLTSpacePointContainer& c)
+{
+  c.Print(out);
+  return out;
+}
diff --git a/HLT/BASE/AliHLTSpacePointContainer.h b/HLT/BASE/AliHLTSpacePointContainer.h
new file mode 100644 (file)
index 0000000..3e914a3
--- /dev/null
@@ -0,0 +1,105 @@
+//-*- Mode: C++ -*-
+// $Id$
+#ifndef ALIHLTSPACEPOINTCONTAINER_H
+#define ALIHLTSPACEPOINTCONTAINER_H
+//* This file is property of and copyright by the ALICE HLT Project        * 
+//* ALICE Experiment at CERN, All rights reserved.                         *
+//* See cxx source for full Copyright notice                               *
+
+/// @file   AliHLTSpacePointContainer.h
+/// @author Matthias Richter
+/// @date   2011-04-29
+/// @brief  Base helper class for handling of HLT space point data blocks
+///
+
+#include <vector>
+#include <TObject.h>
+#include "AliHLTLogging.h"
+#include "AliHLTDataTypes.h"
+#include "AliHLTStdIncludes.h"
+
+class TArrayC;
+
+/**
+ * @class AliHLTSpacePointContainer
+ * Base class of helper classes for space point data blocks.
+ * The class implements a couple of interface methods to be commonly used
+ * for space point data blocks.
+ *
+ * @ingroup alihlt_base
+ */
+class AliHLTSpacePointContainer : public TObject, public AliHLTLogging
+{
+ public:
+  /// standard constructor
+  AliHLTSpacePointContainer();
+  /// copy constructor
+  AliHLTSpacePointContainer(const AliHLTSpacePointContainer&);
+  /// assignment operator
+  AliHLTSpacePointContainer& operator=(const AliHLTSpacePointContainer&);
+
+  /// destructor
+  ~AliHLTSpacePointContainer();
+
+  /// add input block to the collection
+  virtual int AddInputBlock(const AliHLTComponentBlockData* pDesc)=0;
+
+  virtual int GetClusterIDs(vector<AliHLTUInt32_t>& tgt) const = 0;
+  virtual float GetX(AliHLTUInt32_t clusterID) const = 0;
+  virtual float GetXWidth(AliHLTUInt32_t clusterID) const = 0;
+  virtual float GetY(AliHLTUInt32_t clusterID) const = 0;
+  virtual float GetYWidth(AliHLTUInt32_t clusterID) const = 0;
+  virtual float GetZ(AliHLTUInt32_t clusterID) const = 0;
+  virtual float GetZWidth(AliHLTUInt32_t clusterID) const = 0;
+  virtual float GetCharge(AliHLTUInt32_t clusterID) const = 0;
+
+  /// create a collection of clusters for a specific track
+  virtual AliHLTSpacePointContainer* SelectByTrack(int trackId, bool bAlloc=false) const;
+
+  /// create a collection of clusters for a specific MC track
+  virtual AliHLTSpacePointContainer* SelectByMC(int mcId, bool bAlloc=false) const;
+
+  /// create a collection of all used clusters
+  virtual AliHLTSpacePointContainer* UsedClusters(bool bAlloc=false) const;
+
+  /// create a collection of all unused clusters
+  virtual AliHLTSpacePointContainer* UnusedClusters(bool bAlloc=false) const;
+
+  int MarkUsed(AliHLTUInt32_t clusterID) {return MarkUsed(&clusterID, sizeof(clusterID));}
+  virtual int MarkUsed(const AliHLTUInt32_t* clusterIDs, int arraySize);
+
+  int SetTrackID(int trackID, AliHLTUInt32_t clusterID) {
+    return SetTrackID(trackID, &clusterID, sizeof(clusterID));
+  }
+  virtual int SetTrackID(int trackID, const AliHLTUInt32_t* clusterIDs, int arraySize);
+
+  int SetMCID(int mcID, AliHLTUInt32_t clusterID) {
+    return SetMCID(mcID, &clusterID, sizeof(clusterID));
+  }
+  virtual int SetMCID(int clusterID, const AliHLTUInt32_t* clusterIDs, int arraySize);
+
+  /// add input block from file to collection
+  int AddInputBlock(const char* filename, AliHLTComponentDataType dt, unsigned specification);
+
+  /// add input block from list of blank separated files to collection
+  int AddInputBlocks(const char* filenames, AliHLTComponentDataType dt);
+
+  /// inherited from TObject: clear the object and reset pointer references
+  virtual void Clear(Option_t * /*option*/ ="");
+
+  /// inherited from TObject
+  virtual void Print(Option_t *option="") const;
+
+  virtual void Print(ostream& out, Option_t *option="") const;
+
+ protected:
+
+ private:
+  vector<TArrayC*> fBuffers; //! buffers of loaded files
+
+  ClassDef(AliHLTSpacePointContainer, 0)
+};
+
+ostream& operator<<(ostream &out, const AliHLTSpacePointContainer& c);
+
+#endif
index 93e4470..84e69af 100644 (file)
 
 #pragma link C++ class AliHLTTriggerMenuSymbol+;
 #pragma link C++ class AliHLTRunStatistics+;
+#pragma link C++ class AliHLTSpacePointContainer+;
 #pragma link C++ class AliHLTMisc+;
 #pragma link C++ class AliHLTCTPData+;
 #pragma link C++ class AliHLTScalars+;
 #pragma link C++ function AliHLTComponentDataTypeInitializer(const char*, const char*);
 #pragma link C++ function AliHLTComponentDataTypeInitializer(const AliHLTComponentDataType, const char*);
 #pragma link C++ function operator<<(ostream &, const AliHLTComponentDataType &);
+#pragma link C++ function operator<<(ostream &, const AliHLTSpacePointContainer &);
 
 #pragma link C++ global kAliHLTComponentDataTypefOriginSize;
 #pragma link C++ global kAliHLTComponentDataTypefIDsize;
index b67eb87..8a60fe8 100644 (file)
@@ -88,6 +88,7 @@ set ( CLASS_HDRS
     AliHLTCTPData.h
     AliHLTScalars.h
     AliHLTRunStatistics.h
+    AliHLTSpacePointContainer.h
     )
 
 string ( REPLACE ".h" ".cxx" MODULE_SRCS "${CLASS_HDRS}")