LCOV - code coverage report
Current view: top level - HLT/MUON/OnlineAnalysis - AliHLTMUONTriggerReconstructorComponent.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 1 1 100.0 %
Date: 2016-06-14 17:26:59 Functions: 1 5 20.0 %

          Line data    Source code
       1             : #ifndef AliHLTMUONTRIGGERRECONSTRUCTORCOMPONENT_H
       2             : #define AliHLTMUONTRIGGERRECONSTRUCTORCOMPONENT_H
       3             : /* This file is property of and copyright by the ALICE HLT Project        *
       4             :  * ALICE Experiment at CERN, All rights reserved.                         *
       5             :  * See cxx source for full Copyright notice                               */
       6             : 
       7             : // $Id$
       8             : 
       9             : ///
      10             : /// @file   AliHLTMUONTriggerReconstructorComponent.h
      11             : /// @author Indranil Das <indra.das@saha.ac.in>, Artur Szostak <artursz@iafrica.com>
      12             : /// @date   18 Sep 2007
      13             : /// @brief  A processing component for the dHLT trigger DDL reconstruction.
      14             : ///
      15             : 
      16             : #include "AliHLTMUONProcessor.h"
      17             : #include "AliHLTMUONDataTypes.h"
      18             : 
      19             : #if __GNUC__ && __GNUC__ < 3
      20             : #define std
      21             : #endif
      22             : 
      23             : class AliHLTMUONTriggerReconstructor;
      24             : 
      25             : /**
      26             :  * @class AliHLTMUONTriggerReconstructorComponent
      27             :  * @brief A processing component for the dHLT trigger DDL reconstruction.
      28             :  *
      29             :  * The trigger reconstructor component is used to decode the raw data coming
      30             :  * from the trigger chambers and electronics of the muon spectrometer.
      31             :  * The local trigger decisions are converted into trigger records which is a
      32             :  * usable format by the tracking stage.
      33             :  * No full cluster finding is performed, rather just the fired strip information
      34             :  * as received from the trigger electronics is converted into global coordinates
      35             :  * to be used by the tracker as track seeds.
      36             :  *
      37             :  * <h2>General properties:</h2>
      38             :  *
      39             :  * Component ID: \b MUONTriggerReconstructor <br>
      40             :  * Library: \b libAliHLTMUON.so   <br>
      41             :  * Input Data Types: AliHLTMUONConstants::DDLRawDataType() = "DDL_RAW :MUON" <br>
      42             :  * Output Data Types: \li AliHLTMUONConstants::TriggerRecordsBlockDataType() = "TRIGRECS:MUON"
      43             :  *                    \li AliHLTMUONConstants::TrigRecsDebugBlockDataType() = "TRIGRDBG:MUON" <br>
      44             :  *
      45             :  * <h2>Mandatory arguments:</h2>
      46             :  * \li -ddl <i>number</i> <br>
      47             :  *      This indicates the DDL from which the component is expect to receive data
      48             :  *      and for which it should load the appropriate electronics mapping lookup
      49             :  *      table.
      50             :  *      The <i>number</i> should be in the range [21..22], following local dimuon
      51             :  *      spectrometer DDL numbering. If either the -ddlid, -lut or -delaysetup
      52             :  *      arguments are used, then -ddl becomes optional. <br>
      53             :  * \li -ddlid <i>number</i> <br>
      54             :  *      This indicates the DDL by equipment ID, from which the component is expect
      55             :  *      to receive data and for which it should load the appropriate electronics
      56             :  *      mapping lookup table.
      57             :  *      The <i>number</i> should be in the range [2816..2817].
      58             :  *      If either the -ddl, -lut or -delaysetup arguments are used, then -ddlid
      59             :  *      becomes optional. <br>
      60             :  * \li -delaysetup <br>
      61             :  *      Specifying this option causes the component to initialise the lookup table
      62             :  *      and magnetic field parameters from CDB only after receiving the first event
      63             :  *      to process in DoEvent.
      64             :  *      If -ddl or -ddlid were not used, then the DDL number will be taken from
      65             :  *      the first block's specification during runtime from the first
      66             :  *      event (i.e. Start-of-Run event).
      67             :  *      Using the -lut, -zmiddle or -bfieldintegral arguments will override loading
      68             :  *      from CDB for a delayed setup. <br>
      69             :  *
      70             :  * <h2>Optional arguments:</h2>
      71             :  * \li -lut <i>filename</i> <br>
      72             :  *      A pree-built lookup table for the electronics mapping and calibration
      73             :  *      information can be loaded with this argument. The file should have been
      74             :  *      generated with the GenerateLookupTable method. The location of the file
      75             :  *      is given by the parameter <i>filename</i> <br>
      76             :  * \li -cdb <br>
      77             :  *      Indicates that the component should load from CDB. This option is implicit
      78             :  *      if the -cdbpath is given. It will also override the -lut option.<br>
      79             :  * \li -cdbpath <i>path</i> <br>
      80             :  *      Specifies the CDB path to use, given by <i>path</i>. This option will override
      81             :  *      the CDB path automatically set by the HLT framework. <br>
      82             :  * \li -run <i>number</i> <br>
      83             :  *      Specifies the run number to use, given by <i>number</i>. This option will
      84             :  *      override the current run number automatically set by the HLT framework. <br>
      85             :  * \li -zmiddle <i>position</i> <br>
      86             :  *      This indicates the Z coordinate position of the middle of the dipole magnetic
      87             :  *      field. <i>position</i> is a floating point value in centimeters. Specifying
      88             :  *      this argument on the will override the value loaded from CDB. <br>
      89             :  * \li -bfieldintegral <i>field</i> <br>
      90             :  *      This indicates the magnetic field integral for the dipole magnetic field.
      91             :  *      <i>field</i> must be a floating point value in Tesla meters (T.m).
      92             :  *      The sign of the value will indicate the polarity setting of the dipole magnet.
      93             :  *      Specifying this argument on the will override the value loaded from CDB. <br>
      94             :  * \li -warn_on_unexpected_block <br>
      95             :  *      This will cause the component to generate warnings when it receives data block
      96             :  *      types it does not know how to handle. Without this option the component only
      97             :  *      generates debug messages when they are compiled in. <br>
      98             :  * \li -suppress_partial_triggers <br>
      99             :  *      This option forces all trigger records that have less than 3 hits in them
     100             :  *      to be removed from the output. This is the default setting. <br>
     101             :  * \li -generate_partial_triggers <br>
     102             :  *      With this option all trigger records, even partial ones with just one or two
     103             :  *      hits is written to the output. <br>
     104             :  * \li -stop_on_buffer_overflow <br>
     105             :  *      If this option is specified then the component will stop processing and generate
     106             :  *      an error code in the DoEvent method as soon as the output buffer has been filled.
     107             :  *      Otherwise the component normally just keeps processing but some data might be lost
     108             :  *      due to full buffers. <br>
     109             :  * \li -tryrecover <br>
     110             :  *      This is a special option to the raw data decoder to turn on logic which will
     111             :  *      try and recover from corrupt raw DDL data. This is off by default. <br>
     112             :  * \li -dont_use_crateid <br>
     113             :  *      This option indicates that the crate ID values found in the regional structures
     114             :  *      in the raw DDL data should not be used to identify the channels in the offline
     115             :  *      mapping. Rather the position of the raw data structure instead. <br>
     116             :  * \li -dont_use_localid <br>
     117             :  *      This option indicates that the local structure ID values found in the raw DDL
     118             :  *      data should not be used to identify the channels in the offline mapping, but
     119             :  *      rather the position of the local structure in the DDL should be used instead. <br>
     120             :  * \li -dumponerror <br>
     121             :  *      This flag will cause the component to dump the data blocks it received if
     122             :  *      an error occurs during the processing of an event. <br>
     123             :  * \li -dumppath <i>path</i> <br>
     124             :  *      Allows one to specify the path in which to dump the received data blocks
     125             :  *      if an error occurs. <br>
     126             :  * \li -makedebuginfo <br>
     127             :  *      If specified then the trigger record debug informaiton data blocks are generated. <br>
     128             :  * \li -dontprintwrongeventerror <br>
     129             :  *      If specified the error message about an incorrect event type found in the DDL DARC
     130             :  *      header is not generated or logged. <br>
     131             :  *
     132             :  * <h2>Standard configuration:</h2>
     133             :  * The configuration is taken from the CDB by default. It can be overridden with
     134             :  * the command line arguments.
     135             :  *
     136             :  * <h2>Default CDB entries:</h2>
     137             :  * HLT/ConfigHLT/HLTGlobalTrigger - Contains the global trigger menu.
     138             :  *
     139             :  * <h2>Performance:</h2>
     140             :  * This is a linear function of the number of input triggers (AliHLTTrigger) that
     141             :  * need to be processed.
     142             :  * For a modest trigger menu configurations the processing time per event should
     143             :  * be on the order of a few milliseconds.
     144             :  *
     145             :  * <h2>Memory consumption:</h2>
     146             :  * This is a linear function of the input data size, but only a fraction. Thus the
     147             :  * memory usage is minimal. It should be under 1 MBytes.
     148             :  *
     149             :  * <h2>Output size:</h2>
     150             :  * This will depend linearly on the number of tracks found. But for nominal multiplicities
     151             :  * this should be less than 16 kBytes.
     152             :  *
     153             :  * @ingroup alihlt_muon_components
     154             :  */
     155             : class AliHLTMUONTriggerReconstructorComponent : public AliHLTMUONProcessor
     156             : {
     157             : public:
     158             :         AliHLTMUONTriggerReconstructorComponent();
     159             :         virtual ~AliHLTMUONTriggerReconstructorComponent();
     160             : 
     161             :         // Public functions to implement AliHLTComponent's interface.
     162             :         // These functions are required for the registration process
     163             : 
     164             :         virtual const char* GetComponentID();
     165             :         virtual void GetInputDataTypes(AliHLTComponentDataTypeList& list);
     166             :         virtual AliHLTComponentDataType GetOutputDataType();
     167             :         virtual int GetOutputDataTypes(AliHLTComponentDataTypeList& list);
     168             :         virtual void GetOutputDataSize(unsigned long& constBase, double& inputMultiplier);
     169             :         virtual AliHLTComponent* Spawn();
     170             :         
     171             :         /**
     172             :          * Generates a binary file containing the lookup table (LUT) from the
     173             :          * CDB, which can be used for the trigger reconstructor component later.
     174             :          * @param ddl  Must be the DDL for which to generate the DDL,
     175             :          *             in the range [20..21].
     176             :          * @param filename  The name of the LUT file to generate.
     177             :          * @param cdbPath  The CDB path to use.
     178             :          * @param run  The run number to use for the CDB.
     179             :          * @param useCrateId  Indicates that the crate ID should be used rather
     180             :          *             than a sequencial number (default is true).
     181             :          * @return  True if the generation of the LUT file succeeded.
     182             :          */
     183             :         static bool GenerateLookupTable(
     184             :                         AliHLTInt32_t ddl, const char* filename,
     185             :                         const char* cdbPath, Int_t run, bool useCrateId = true
     186             :                 );
     187             : 
     188             : protected:
     189             : 
     190             :         // Protected functions to implement AliHLTComponent's interface.
     191             :         // These functions provide initialization as well as the actual processing
     192             :         // capabilities of the component.
     193             :         
     194             :         virtual int DoInit(int argc, const char** argv);
     195             :         virtual int Reconfigure(const char* cdbEntry, const char* componentId);
     196             :         virtual int ReadPreprocessorValues(const char* modules);
     197             :         virtual int DoDeinit();
     198             : 
     199             :         virtual int DoEvent(
     200             :                         const AliHLTComponentEventData& evtData,
     201             :                         const AliHLTComponentBlockData* blocks,
     202             :                         AliHLTComponentTriggerData& trigData,
     203             :                         AliHLTUInt8_t* outputPtr,
     204             :                         AliHLTUInt32_t& size,
     205             :                         AliHLTComponentBlockDataList& outputBlocks
     206             :                 );
     207             :         
     208             :         using AliHLTProcessor::DoEvent;
     209             : 
     210             : private:
     211             : 
     212             :         // Do not allow copying of this class.
     213             :         /// Not implemented.
     214             :         AliHLTMUONTriggerReconstructorComponent(const AliHLTMUONTriggerReconstructorComponent& /*obj*/);
     215             :         /// Not implemented.
     216             :         AliHLTMUONTriggerReconstructorComponent& operator = (const AliHLTMUONTriggerReconstructorComponent& /*obj*/);
     217             : 
     218             :         /**
     219             :          * Read in the lookup table from file.
     220             :          * \param lutpath  The file to read the lookup table from.
     221             :          */
     222             :         int ReadLookUpTable(const char* lutpath);
     223             :         
     224             :         /**
     225             :          * Loads the lookup table containing channel and geometrical position
     226             :          * information about trigger strips from CDB.
     227             :          *
     228             :          * \note To override the default CDB path and/or run number the
     229             :          * SetCDBPathAndRunNo(cdbPath, run) method should be called before this
     230             :          * method.
     231             :          *
     232             :          * \return 0 on success and non zero codes for errors.
     233             :          */
     234             :         int ReadLutFromCDB();
     235             :         
     236             :         /**
     237             :          * Reads this component's configuration parameters from the CDB.
     238             :          * These include the middle of the dipole Z coordinate (zmiddle) and the
     239             :          * integrated magnetic field of the dipole.
     240             :          * \param setZmiddle Indicates if the zmiddle parameter should be set
     241             :          *       (default true).
     242             :          * \param setBL Indicates if the integrated magnetic field parameter should
     243             :          *       be set (default true).
     244             :          * \return 0 if no errors occured and negative error code compatible with
     245             :          *       the HLT framework on errors.
     246             :          */
     247             :         int ReadConfigFromCDB(bool setZmiddle = true, bool setBL = true);
     248             :         
     249             :         AliHLTMUONTriggerReconstructor* fTrigRec; ///< The trigger reconstructor class implementing the algorithm.
     250             :         AliHLTInt32_t fDDL;   ///< The DDL number in the range 20..21 from which to expect input. Set to -1 for invalid/unspecified value.
     251             :         bool fWarnForUnexpecedBlock;  ///< Flag indicating if we should log a warning if we got a block of an unexpected type.
     252             :         bool fStopOnOverflow;  ///< Flag indicating if we should fail in the DoEvent method if the output buffer was overflowed.
     253             :         bool fUseCrateId;  ///< Flag to indicate if the crate ID as found in the regional header structures should be used or not.
     254             :         bool fZmiddleSpecified;  ///< Indicates if the zmiddle parameter was specified on the command line.
     255             :         bool fBLSpecified;  ///< Indicates if the bfieldintegral parameter was specified on the command line.
     256             :         bool fLutInitialised;  ///< Flag to indicate if the LUT was loaded yet or not.
     257             : 
     258           6 :         ClassDef(AliHLTMUONTriggerReconstructorComponent, 0) // Trigger reconstructor component for dHLT trigger DDL raw data.
     259             : 
     260             : };
     261             : 
     262             : #endif // AliHLTMUONTRIGGERRECONSTRUCTORCOMPONENT_H

Generated by: LCOV version 1.11