LCOV - code coverage report
Current view: top level - HLT/BASE/util - AliHLTBlockFilterComponent.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 2 3 66.7 %
Date: 2016-06-14 17:26:59 Functions: 2 7 28.6 %

          Line data    Source code
       1             : // -*- Mode: C++ -*-
       2             : // $Id$
       3             : 
       4             : #ifndef ALIHLTBLOCKFILTERCOMPONENT_H
       5             : #define ALIHLTBLOCKFILTERCOMPONENT_H
       6             : //* This file is property of and copyright by the                          * 
       7             : //* ALICE Experiment at CERN, All rights reserved.                         *
       8             : //* See cxx source for full Copyright notice                               *
       9             : 
      10             : /// @file   AliHLTBlockFilterComponent.h
      11             : /// @author Matthias Richter
      12             : /// @date   
      13             : /// @brief  A simple data block filter and merger, merges block descriptors
      14             : ///
      15             : 
      16             : #include "AliHLTProcessor.h"
      17             : 
      18             : /**
      19             :  * @class AliHLTBlockFilterComponent
      20             :  * A data block merger and filter.
      21             :  * It merges data block descriptors fulfilling the filtering rules and
      22             :  * forwards the descriptors to the output. The actual data is not touched.
      23             :  *
      24             :  * <h2>General properties:</h2>
      25             :  *
      26             :  * Component ID: \b BlockFilter                                         <br>
      27             :  * Library: \b libAliHLTUtil.so                                         <br>
      28             :  * Input Data Types: kAliHLTAnyDataType                                 <br>
      29             :  * Output Data Types: according to parameter and input blocks           <br>
      30             :  *
      31             :  * <h2>Mandatory arguments:</h2>
      32             :  * <!-- NOTE: ignore the \li. <i> and </i>: it's just doxygen formatting -->
      33             :  *      
      34             :  * <h2>Optional arguments:</h2>
      35             :  * <!-- NOTE: ignore the \li. <i> and </i>: it's just doxygen formatting -->
      36             :  * \li -datatype     <i> id origin      </i>                            <br>
      37             :  *      e.g. <tt> -datatype 'ESD_TREE' 'TPC ' </tt>                     <br>
      38             :  *      \b Note: due to the 4-character data origin it might be necessary to
      39             :  *      append a blank to the detectorname, e.g. <tt>TPC -> 'TPC '</tt>
      40             :  *
      41             :  * \li -origin  <i> origin  </i>                                        <br>
      42             :  *      e.g. -origin 'TPC ', \b Note:  the filter rule has type id 'ANY'
      43             :  *
      44             :  * \li -typeid  <i> id      </i>                                        <br>
      45             :  *      e.g. -typeid ESD_TREE, \b Note: the filter rule has origin 'ANY'
      46             :  *
      47             :  * \li -dataspec     <i> specification </i>                             <br>
      48             :  *      data specification treated as decimal number or hex number if
      49             :  *      prepended by '0x'
      50             :  *
      51             :  * \li -prescalar  <i> scalar      </i>                                 <br>
      52             :  *      a prescalar value, forwarding only if eventcount%scalar is zero
      53             :  *
      54             :  * \li -skip-events  <i> count      </i>                                <br>
      55             :  *      skip count events in the beginning
      56             :  *
      57             :  * \li -verbose                                                         <br>
      58             :  *      print out some more info messages, mainly for the sake of tutorials
      59             :  *
      60             :  * <h2>Configuration:</h2>
      61             :  * <!-- NOTE: ignore the \li. <i> and </i>: it's just doxygen formatting -->
      62             :  * Configuration by component arguments.
      63             :  *
      64             :  * <h2>Default CDB entries:</h2>
      65             :  * The component loads no CDB entries.
      66             :  *
      67             :  * <h2>Performance:</h2>
      68             :  * The component does not process any event data.
      69             :  *
      70             :  * <h2>Memory consumption:</h2>
      71             :  * The component does not process any event data.
      72             :  *
      73             :  * <h2>Output size:</h2>
      74             :  * No additional data is produced. Data blocks are just forwarded.
      75             :  *
      76             :  * By default, all blocks will be published. By means of the \em -datatype,
      77             :  * \em -origin, and \em -typeid arguments, the blocks can be selected. A list
      78             :  * of filter rules can be built up by multiple usage of the arguments. Each
      79             :  * time a new filter rule is added.
      80             :  *
      81             :  * No filtering by the data specification is applied unless then \em
      82             :  * -specification argument is used. The specification applies to to the
      83             :  * current filter rule, regardless of the sequence of -datatype/-specification
      84             :  * arguments.
      85             :  *
      86             :  * @ingroup alihlt_util_components
      87             :  */
      88             : class AliHLTBlockFilterComponent : public AliHLTProcessor
      89             : {
      90             :  public:
      91             :   /** standard constructor */
      92             :   AliHLTBlockFilterComponent();
      93             :   /** destructor */
      94             :   virtual ~AliHLTBlockFilterComponent();
      95             : 
      96             :   /**
      97             :    * The id of the component.
      98             :    * @return component id (string)
      99             :    */
     100         618 :   virtual const char* GetComponentID() {return "BlockFilter";};
     101             : 
     102             :   /**
     103             :    * Get the input data types of the component.
     104             :    * @return list of data types in the vector reference
     105             :    */
     106             :   void GetInputDataTypes( AliHLTComponentDataTypeList& );
     107             : 
     108             :   /**
     109             :    * Get the output data type of the component.
     110             :    * If @ref kAliHLTMultipleDataType is returned, the framework invokes
     111             :    * @ref GetOutputDataTypes.
     112             :    * @return output data type
     113             :    */
     114             :   AliHLTComponentDataType GetOutputDataType();
     115             : 
     116             :   /**
     117             :    * Get the output data types of the component.
     118             :    * The function can be implemented to indicate multiple output data types
     119             :    * in the target array.
     120             :    * @ref GetOutputDataType must return @ref kAliHLTMultipleDataType in order
     121             :    * to invoke this method.
     122             :    * @param tgtList          list to receive the data types
     123             :    * @return no of output data types, data types in the target list
     124             :    */
     125             :   int GetOutputDataTypes(AliHLTComponentDataTypeList& tgtList);
     126             : 
     127             :   /**
     128             :    * Get a ratio by how much the data volume is shrinked or enhanced.
     129             :    * @param constBase        <i>return</i>: additive part, independent of the
     130             :    *                                   input data volume  
     131             :    * @param inputMultiplier  <i>return</i>: multiplication ratio
     132             :    * @return values in the reference variables
     133             :    */
     134             :   void GetOutputDataSize( unsigned long& constBase, double& inputMultiplier );
     135             : 
     136             :   /**
     137             :    * Spawn function.
     138             :    * @return new class instance
     139             :    */
     140           0 :   virtual AliHLTComponent* Spawn() {return new AliHLTBlockFilterComponent;}
     141             : 
     142             :  protected:
     143             : 
     144             :   /**
     145             :    * Data processing method for the component.
     146             :    * Filters the incoming data descriptors according to the rules and forwards
     147             :    * them into the output.
     148             :    * @return neg. error code if failed 
     149             :    */
     150             :   int DoEvent( const AliHLTComponentEventData& evtData,
     151             :                const AliHLTComponentBlockData* blocks, 
     152             :                AliHLTComponentTriggerData& trigData,
     153             :                AliHLTUInt8_t* outputPtr, 
     154             :                AliHLTUInt32_t& size,
     155             :                AliHLTComponentBlockDataList& outputBlocks );
     156             :   
     157             :   using AliHLTProcessor::DoEvent;
     158             : 
     159             :   /**
     160             :    * Component initialisation and argument scan.
     161             :    */
     162             :   int DoInit( int argc, const char** argv );
     163             : 
     164             :   /**
     165             :    * Component cleanup.
     166             :    */
     167             :   int DoDeinit();
     168             : 
     169             :  private:
     170             :   /** copy constructor prohibited */
     171             :   AliHLTBlockFilterComponent(const AliHLTBlockFilterComponent&);
     172             :   /** assignment operator prohibited */
     173             :   AliHLTBlockFilterComponent& operator=(const AliHLTBlockFilterComponent&);
     174             : 
     175             :   /**
     176             :    * Check if the data block is selected by the filter rules.
     177             :    * @return 1 if selected
     178             :    */
     179             :   int IsSelected(const AliHLTComponentBlockData& block);
     180             : 
     181             :   /** filtering rules, only the data type and specification members are use */
     182             :   AliHLTComponentBlockDataList fFilterRules;                       //! transient
     183             :   AliHLTUInt32_t fPrescalar;                                       //! transient
     184             :   AliHLTUInt32_t fFirstEvent;                                      //! transient
     185             : 
     186           8 :   ClassDef(AliHLTBlockFilterComponent, 0)
     187             : };
     188             : #endif

Generated by: LCOV version 1.11