]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - HLT/BASE/AliHLTDataSource.cxx
ALIROOT-5600 - skip non-participating detector modules
[u/mrichter/AliRoot.git] / HLT / BASE / AliHLTDataSource.cxx
index 70ecb7d0f4ee6e3fd9926dda45fd03cd25859e20..229faba557b26c89dfff4d1ea6ee24e5cb2ac8e8 100644 (file)
 // $Id$
 
-/**************************************************************************
- * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
- *                                                                        *
- * Authors: Matthias Richter <Matthias.Richter@ift.uib.no>                *
- *          for The ALICE Off-line 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   AliHLTDataSource.cxx
-    @author Matthias Richter
-    @date   
-    @brief  Base class implementation for HLT data source components. */
-
-#if __GNUC__>= 3
-using namespace std;
-#endif
+//**************************************************************************
+//* This file is property of and copyright by the                          * 
+//* 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   AliHLTDataSource.cxx
+/// @author Matthias Richter
+/// @date   
+/// @brief  Base class implementation for HLT data source components.
+///
 
 #include "AliHLTDataSource.h"
 
+/** ROOT macro for the implementation of ROOT specific class methods */
 ClassImp(AliHLTDataSource)
 
 AliHLTDataSource::AliHLTDataSource()
-{ 
+{
+  // Base class of HLT data source components.
+  // The class provides a common interface for the implementation of HLT data
+  // source components.
+  // Source components do not consume any input consequently the processing
+  // function is called 'GetEvent'.
 }
 
 AliHLTDataSource::~AliHLTDataSource()
 { 
+  // destructor
 }
 
-int AliHLTDataSource::ProcessEvent( const AliHLTComponent_EventData& evtData,
-                                   const AliHLTComponent_BlockData* blocks, 
-                                   AliHLTComponent_TriggerData& trigData,
+void AliHLTDataSource::GetInputDataTypes( AliHLTComponentDataTypeList& list)
+{
+  // default method as source components do not consume input
+  list.clear(); // there are no input data types
+}
+
+
+int AliHLTDataSource::DoProcessing( const AliHLTComponentEventData& evtData,
+                                   const AliHLTComponentBlockData* blocks, 
+                                   AliHLTComponentTriggerData& trigData,
                                    AliHLTUInt8_t* outputPtr, 
                                    AliHLTUInt32_t& size,
-                                   AliHLTUInt32_t& outputBlockCnt, 
-                                   AliHLTComponent_BlockData*& outputBlocks,
-                                   AliHLTComponent_EventDoneData*& edd )
+                                   AliHLTComponentBlockDataList& outputBlocks,
+                                   AliHLTComponentEventDoneData*& edd )
 {
+  // Processing method, calls child's GetEvent
   int iResult=0;
-  vector<AliHLTComponent_BlockData> blockData;
   if (evtData.fBlockCnt > 0) {
-    HLTWarning("Data source component skips imput data blocks");
-  }
-  iResult=GetEvent(evtData, trigData, outputPtr, size, blockData);
-  if (iResult>=0) {
-    iResult=MakeOutputDataBlockList(blockData, &outputBlockCnt, &outputBlocks);
+    int unknown=-1;
+    for (unsigned int block=0; block<evtData.fBlockCnt; block++) {
+      if (blocks[block].fDataType==kAliHLTDataTypeSOR ||
+         blocks[block].fDataType==kAliHLTDataTypeEOR ||
+         blocks[block].fDataType==kAliHLTDataTypeEvent ||
+         blocks[block].fDataType==kAliHLTDataTypeRunType ||
+         blocks[block].fDataType==kAliHLTDataTypeComponentStatistics ||
+         blocks[block].fDataType==kAliHLTDataTypeComponentTable ||
+         blocks[block].fDataType==kAliHLTDataTypeECSParam) {
+       continue;
+      }
+      unknown=block;
+      break;
+    }
+    static int warningCount=0;
+    if (unknown>=0 && warningCount++<5) {
+      HLTWarning("Data source component skips input data blocks: first unknown block %s",
+                DataType2Text(blocks[unknown].fDataType).c_str());
+    }
   }
+  iResult=GetEvent(evtData, trigData, outputPtr, size, outputBlocks);
+  HLTDebug("component %s (%p) GetEvent finished (%d)", GetComponentID(), this, iResult);
   edd = NULL;
   return iResult;
 }
+
+int AliHLTDataSource::GetEvent( const AliHLTComponentEventData& evtData,
+                               AliHLTComponentTriggerData& trigData,
+                               AliHLTUInt8_t* /*outputPtr*/, 
+                               AliHLTUInt32_t& size,
+                               AliHLTComponentBlockDataList& /*outputBlocks*/ )
+{
+  // we just forward to the high level method, all other parameters already
+  // have been stored internally
+  size=0;
+  return GetEvent(evtData, trigData);
+}
+
+int AliHLTDataSource::GetEvent( const AliHLTComponentEventData& /*evtData*/, AliHLTComponentTriggerData& /*trigData*/)
+{
+  // default method: one of GetEvent methods must be implemented
+  HLTFatal("no processing method implemented");
+  return -ENOSYS;
+}