LCOV - code coverage report
Current view: top level - HLT/rec - AliHLTReconstructor.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 5 5 100.0 %
Date: 2016-06-14 17:26:59 Functions: 4 7 57.1 %

          Line data    Source code
       1             : //-*- Mode: C++ -*-
       2             : // $Id$
       3             : 
       4             : #ifndef ALIHLTRECONSTRUCTOR_H
       5             : #define ALIHLTRECONSTRUCTOR_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   AliHLTReconstructor.h
      11             : //  @author Matthias Richter
      12             : //  @date   
      13             : //  @brief  Binding class for HLT reconstruction in AliRoot
      14             : //          Implements bot the interface to run HLT chains embedded into
      15             : //          AliReconstruction and the unpacking and treatment of HLTOUT
      16             : 
      17             : #include "AliReconstructor.h"
      18             : 
      19             : class AliHLTSystem;
      20             : class AliRawReader;
      21             : class AliESDEvent;
      22             : class AliHLTOUT;
      23             : class AliHLTEsdManager;
      24             : class AliHLTPluginBase;
      25             : /**
      26             :  * @defgroup alihlt_aliroot_reconstruction AliRoot reconstruction.
      27             :  *
      28             :  * @section alihlt_aliroot_reconstruction_intro General Remarks
      29             :  * Like all other ALICE detectors, HLT utilizes the AliReconstruction interface
      30             :  * to implement a plugin for the AliRoot reconstruction. The reconstructor can be
      31             :  * used to
      32             :  * -# run HLT analysis chains in the AliRoot reconstruction <br>
      33             :  *    This option is mainly intended for the <em>development and debugging cycle</em>. 
      34             :  *    HLT chains can be defined by means of AliHLTConfiguration and can be run either
      35             :  *    stand-alone or embedded into the AliReconstruction cycle.
      36             :  * -# run the default analysis chains <br>
      37             :  *    HLT modules can define default analysis chains to be run during AliRoot
      38             :  *    reconstruction.
      39             :  * -# handle the HLTOUT data<br>
      40             :  *    The HLT output stream contains multiple data blocks produced by the various
      41             :  *    components of the HLT chain. Each block might need different and even
      42             :  *    detector specific processing, like e.g. the processing of ESD objects or the
      43             :  *    handling of compressed data.
      44             :  *
      45             :  * @section alihlt_aliroot_reconstruction_steering Steering
      46             :  * The AliHLTReconstructor provides the main interface for the reconstruction. 
      47             :  * The handling of the HLTOUT data is described in AliRawReaderHLT.
      48             :  *
      49             :  * @section alihlt_aliroot_reconstruction_examples Examples
      50             :  * @subsection alihlt_aliroot_reconstruction_examples_reco Run chains
      51             :  * - @ref tut_reconstruction
      52             :  *
      53             :  * @subsection alihlt_aliroot_reconstruction_examples_hltout Handle HLTOUT
      54             :  * - @ref tut_alirawreaderhlt
      55             :  *
      56             :  * @ingroup alihlt_system
      57             :  */
      58             : 
      59             : /**
      60             :  * @class AliHLTReconstructor
      61             :  * AliRoot event reconstruction plug-in for the HLT.
      62             :  * The AliHLTReconstructor holds an instance of the @ref AliHLTSystem
      63             :  * steering class. The actual reconstruction depends on the loaded component
      64             :  * libraries. Each library must implement a module agent (@ref AliHLTModuleAgent)
      65             :  * in order to provide information on the supported features and the
      66             :  * configurations to be run.
      67             :  *
      68             :  * The AliHLTReconstructor provides both the functionality to run customized
      69             :  * analysis chains and the treatment of the HLTOUT data.
      70             :  *
      71             :  * @section sec_alihltreconstructor_options Options
      72             :  * The default component libraries which are loaded through the initialization
      73             :  * are determined by the @ref AliHLTSystem::fgkHLTDefaultLibs array. The library
      74             :  * loading can be overridden by an option to the AliHLTReconstructor through the
      75             :  * <tt>SetOption</tt> method of <tt>AliReconstruction</tt>, e.g.
      76             :  * <pre>
      77             :  * AliReconstruction rec;
      78             :  * rec.SetOption("HLT", "libAliHLTSample.so");
      79             :  * </pre>
      80             :  * will only load <tt>libAliHLTSample.so</tt>
      81             :  * 
      82             :  * Optional arguments:<br>
      83             :  * <!-- NOTE: ignore the \li. <i> and </i>: it's just doxygen formatting -->
      84             :  * \li loglevel=<i>level</i><br>
      85             :  *     level can be a hex number encoding the @ref AliHLTComponentLogSeverity
      86             :  * \li alilog=off <br>
      87             :  *     disables the logging of HLT log messages through <tt>AliLog</tt> <br>
      88             :  * \li ignore-hltout <br>
      89             :  *     ignore data from the HLTOUT data links
      90             :  * \li ignore-ctp <br>
      91             :  *     ignore CTP trigger setup
      92             :  * \li esdmanager=<option> <br>
      93             :  *     options passed to the AliHLTEsdManager
      94             :  *
      95             :  * For further information on the AliRoot reconstruction refer to the AliRoot
      96             :  * documentation, namely <tt>AliReconstruction</tt>.
      97             :  *
      98             :  * @section sec_alihltreconstructor_chains Custom reconstruction chains
      99             :  * In order to run an HLT chain during the AliRoot reconstruction, a chain
     100             :  * configuration must be defined. This can be done by
     101             :  * - specifying a configuration macro defining a configuration macro and
     102             :  *   the name of the chain as parameters
     103             :  *   <pre>
     104             :  *   rec.SetOption("HLT", "config=[macro.C] chains=[name]")
     105             :  *   </pre>
     106             :  * - providing the configuration and the name by the module agent.
     107             :  *   AliHLTModuleAgent and the functions AliHLTModuleAgent::CreateConfigurations
     108             :  *   and AliHLTModuleAgent::GetReconstructionChains
     109             :  *
     110             :  * @section sec_alihltreconstructor_hltout Treatment of HLTOUT data.
     111             :  * The HLTOUT data is a collation of output blocks produced by the various
     112             :  * components running in an HLT chain. Typically its the output of the last
     113             :  * component(s) in the chain, or components specifically connected to the HLT
     114             :  * output.
     115             :  *
     116             :  * The treatment of the HLTOUT data blocks is implemented in handlers of type
     117             :  * AliHLTOUTHandler. The AliHLTModuleAgent of the module  creates the appropriate
     118             :  * handler for a data block.
     119             :  * The data type of the individual blocks is set by the producer component and
     120             :  * specifies the nature of the data processing. There are 5 overall groups:
     121             :  * - output is in ESD format:
     122             :  *      @ref sec_alihltreconstructor_hltout_esd
     123             :  * - data describes DDL raw format:
     124             :  *      @ref sec_alihltreconstructor_hltout_rawreader
     125             :  * - pre-analyzed data to be fed into the normal reconstruction:
     126             :  *      @ref sec_alihltreconstructor_hltout_rawstream
     127             :  * - data is fed into an analysis chain:
     128             :  *      @ref sec_alihltreconstructor_hltout_chain
     129             :  * - detector specific handler:
     130             :  *      @ref sec_alihltreconstructor_hltout_proprietary
     131             :  *
     132             :  * @subsection sec_alihltreconstructor_hltout_esd ESD HLTOUT data
     133             :  * The framework implements a standard handling of ESD data
     134             :  * blocks of type ::kAliHLTDataTypeESDObject {ALIESDV0:ANY} and 
     135             :  * ::kAliHLTDataTypeESDTree {ESD_TREE:ANY}. Please note that the V0 refers to
     136             :  * a foreseen version number, not the AliESDV0 class. \em ANY can be
     137             :  * any detector origin. Each ESD block contains the data of only one event,
     138             :  * the ESDs are merged by the AliHLTEsdManager into the hltEsd. Optionally,
     139             :  * ESD contributions are written to files following the naming scheme
     140             :  * AliHLT\em DET ESDs.root. This debugging feature can be enabled by option
     141             :  * esdmanager='-writelocal -directory=dir'. The specification of target
     142             :  * directory is optional.
     143             :  *
     144             :  * The module agent can provide a handler for multiple ESD data blocks, e.g.
     145             :  * for merging within one event prior to the writing. Instead of the individual
     146             :  * ESDs the one provided by the handler is passed to the AliHLTEsdManager. The
     147             :  * handler is of type \link AliHLTModuleAgent::AliHLTOUTHandlerType kEsd \endlink.
     148             :  * 
     149             :  * A specific handler AliHLTOUTHandlerEsdBranch allows to simply merge a
     150             :  * streamed Root object into the ESD. The class can be used as-is by just
     151             :  * specifying the data type and specification of the relevant data block and
     152             :  * the branch name. Alternatively, a child class can implement conversion of
     153             :  * binary data to a Root object or merging of several data blocks into one
     154             :  * object to be added to the ESD. \b Note: in order to create the branch at
     155             :  * the beginning of reconstruction the hltEsd layout needs to be adjusted.
     156             :  *
     157             :  * @subsection sec_alihltreconstructor_hltout_rawreader DDL raw HLTOUT data
     158             :  * The HLT can perform selective readout and produces a reduced amount of data
     159             :  * in the original raw ddl format. In order to feed this data from the HLTOUT
     160             :  * DDL links into the normal reconstruction, a handler of type 
     161             :  * \link AliHLTModuleAgent::AliHLTOUTHandlerType kRawReader \endlink must be
     162             :  * implemented and provided by the
     163             :  * module agent. The handler has to derive the original equipment id from the
     164             :  * data type and specification of the block. The offline reconstruction does
     165             :  * not need to be changed or adapted at all. See AliRawReaderHLT for details.
     166             :  *
     167             :  * @subsection sec_alihltreconstructor_hltout_rawstream Preprocessed Raw HLTOUT data
     168             :  * Handlers of type \link AliHLTModuleAgent::AliHLTOUTHandlerType kRawStream \endlink
     169             :  * are foreseen though at the time of writing (May 08) the
     170             :  * concept is not fixed. Advanced data compression algorithms can produce a
     171             :  * raw data format which is not convertible into the raw DDL data, e.g. lossy
     172             :  * compression techniques storing clusters parametrized regarding to tracks. A
     173             :  * specific RawStream is needed here since the data is detector specific and the
     174             :  * first stage of the offline reconstruction might need some adaptions.
     175             :  *
     176             :  * @subsection sec_alihltreconstructor_hltout_chain HLTOUT data fed into a chain
     177             :  * Handlers of type \link AliHLTModuleAgent::AliHLTOUTHandlerType kChain \endlink
     178             :  * can execute a normal HLT chain and thus process HLTOUT data blocks by normal
     179             :  * HLT components just as if the components were running on-line. The base class
     180             :  * is provided by AliHLTOUTHandlerChain and can be used as it is just specifying
     181             :  * the chain to be run.<br>
     182             :  * Example:
     183             :  *
     184             :  * @subsection sec_alihltreconstructor_hltout_proprietary Proprietary HLTOUT data
     185             :  * This is a handler of proprietary detector data. Handlers of type 
     186             :  * \link AliHLTModuleAgent::AliHLTOUTHandlerType kProprietary \endlink
     187             :  * do not have any standard output to the framework. Data can be processed and
     188             :  * stored to files.
     189             :  *
     190             :  * @section sec_alihltreconstructor_helper Tools and helper functions
     191             :  * Some helper functions of the AliHLTReconstruction can be used in stand-alone
     192             :  * mode. Remember to Init() the reconstructor.
     193             :  * <pre>
     194             :  * {
     195             :  * gSystem->Load("libHLTrec");
     196             :  * AliHLTReconstructor rec;
     197             :  * rec.Init();
     198             :  * // do something
     199             :  * }
     200             :  * </pre>
     201             :  * @subsection sec_alihltreconstructor_hltout_standalone Stand-alone HLTOUT processing
     202             :  * - HLTOUT processing from a digit file:
     203             :  * <pre>
     204             :  *  void ProcessHLTOUT(const char*, AliESDEvent*) const;
     205             :  * </pre>
     206             :  * - HLTOUT processing from an AliRawReader
     207             :  * <pre>
     208             :  *  void ProcessHLTOUT(AliRawReader*, AliESDEvent*) const;
     209             :  * </pre>
     210             :  *
     211             :  * @ingroup alihlt_aliroot_reconstruction
     212             :  * @section sec_alihltreconstructor_members Class members
     213             :  */
     214             : class AliHLTReconstructor: public AliReconstructor {
     215             : public:
     216             :   /** standard constructor */
     217             :   AliHLTReconstructor();
     218             :   /** constructor */
     219             :   AliHLTReconstructor(const char* options);
     220             :   /** destructor */
     221             :   virtual ~AliHLTReconstructor();
     222             : 
     223             :   enum {
     224             :     kProcessingStepUndefined=0,
     225             :     kProcessingStepLocal,
     226             :     kProcessingStepESD,
     227             :     kProcessingStepFinishEvent,
     228             :     kProcessingStepTerminate
     229             :   };
     230             : 
     231             :   /** init the reconstructor */
     232             :   void Init();
     233             : 
     234             :   /** init the reconstructor */
     235             :   void Init(const char* options);
     236             : 
     237             :   /// temporary solution until https://savannah.cern.ch/bugs/?93309 is solved
     238             :   /// function qualifier to be changed in base class
     239             :   virtual void Terminate() const {
     240           4 :     const_cast<AliHLTReconstructor*>(this)->Terminate();
     241           2 :   }
     242             :   /// overloaded from AliReconstructor: terminate event processing
     243             :   virtual void Terminate();
     244             :   /// overloaded from AliReconstructor: finish current event
     245             :   virtual void FinishEvent();
     246             : 
     247             :   /**
     248             :    * Build the CTP_TRIGGER_CLASSES string from CTP trigger configuration
     249             :    */
     250             :   int BuildCTPTriggerClassString(TString& triggerclasses) const;
     251             : 
     252             :   /**
     253             :    * This Reconstructor function is not applicable for the AliHLTReconstructor
     254             :    * as it gets a detector specific digits tree. But HLT processes all detectors.
     255             :    * Furthermore it's purely simulated data. <br>
     256             :    * The function forwards to the default bahavior of AliReconstructor but gives
     257             :    * a warning if there were options set, i.e. the user runs customized
     258             :    * reconstruction.
     259             :    *
     260             :    * @note HLT reconstruction on simulated data is processed at the end of
     261             :    * simulation. <br>
     262             :    */
     263             :   void Reconstruct(TTree* digitsTree, TTree* clustersTree) const;
     264             : 
     265             :   /**
     266             :    * Reconstruction from RAW data.
     267             :    * The rawReader holds data for all detectors and this version of Reconstruct
     268             :    * is thus applicable for the HLT. The clustersTree is just ignored.
     269             :    */
     270             :   void Reconstruct(AliRawReader* rawReader, TTree* clustersTree) const;
     271             : 
     272             :   /**
     273             :    * This function treats the simulated HLTOUT data.
     274             :    * Opens a handler for simulated HLTOUT data and forwards to ::ProcessHLTOUT.
     275             :    */
     276             :   void FillESD(TTree* digitsTree, TTree* clustersTree, AliESDEvent* esd) const;
     277             : 
     278             :   /**
     279             :    * Process the raw HLTOUT data and fill ESD.
     280             :    * Opens a handler for raw HLTOUT data and forwards to ::ProcessHLTOUT.
     281             :    */
     282             :   void FillESD(AliRawReader* rawReader, TTree* clustersTree, AliESDEvent* esd) const;
     283             : 
     284             :   /**
     285             :    * Process HLTOUT data and fill ESD.
     286             :    * This is the final treatment of the HLTOUT data, either simulated or real.
     287             :    * HLTOUT data is stored in HOMER format, the AliHLTOUT object provides the interface
     288             :    * to the individual data blocks.
     289             :    *
     290             :    * During reconstruction (::Reconstruct), module or user defined chains can be
     291             :    * processed and may add additional data to the HLTOUT object. This data is then
     292             :    * treated in the same way.
     293             :    */
     294             :   void ProcessHLTOUT(AliHLTOUT* pHLTOUT, AliESDEvent* esd, bool bVerbose=false) const;
     295             : 
     296             :   /**
     297             :    * Process HLTOUT data.
     298             :    * Open digit file and process the HLTOUT digit data.
     299             :    * This function is mostly intended for debugging purposes and stand-alone
     300             :    * processing of the output from the simulation. Loops over all events.
     301             :    * @param digitFile        path of the digit file
     302             :    * @param pEsd             optional ESD to be filled
     303             :    */
     304             :   void ProcessHLTOUT(const char* digitFile="HLT.Digits.root", AliESDEvent* pEsd=NULL) const;
     305             : 
     306             :   /**
     307             :    * Process HLTOUT data.
     308             :    * Process the HLTOUT from the raw reader.
     309             :    * This function is mostly intended for debugging purposes and stand-alone
     310             :    * processing of simulated or real raw data. 
     311             :    * \em Note: Loops over all events, i.e. the current event of the the raw
     312             :    * reader will change. Not to be called inside the normal AliRoot processsing.
     313             :    * @param pRawReader       raw reader instance
     314             :    * @param pEsd             optional ESD to be filled
     315             :    */
     316             :   void ProcessHLTOUT(AliRawReader* pRawReader, AliESDEvent* pEsd=NULL) const;
     317             : 
     318             :   /**
     319             :    * Print a short info about the HLTOUT content.
     320             :    */
     321             :   void PrintHLTOUTContent(AliHLTOUT* pHLTOUT) const;
     322             : 
     323             :   enum {
     324             :     /// ignore the blocks from the HLTOUT payload
     325             :     kAliHLTReconstructorIgnoreHLTOUT = 0x1,
     326             :     kAliHLTReconstructorIgnoreCTP = 0x2,
     327             :     kAliHLTReconstructorLastFlag
     328             :   };
     329             : 
     330             : private:
     331             :   /** copy constructor prohibited */
     332             :   AliHLTReconstructor(const AliHLTReconstructor& src);
     333             :   /** assignment operator prohibited */
     334             :   AliHLTReconstructor& operator=(const AliHLTReconstructor& src);
     335             : 
     336             :   void SetProcessingStep(int step) const {
     337             :     // want to use this function from const functions (which should not
     338             :     // have been declared const at all in the base class
     339          28 :     const_cast<AliHLTReconstructor*>(this)->fProcessingStep=step;
     340          14 :   }
     341             : 
     342             :   /** ESD manger instance for this reconstruction */
     343             :   AliHLTEsdManager* fpEsdManager; //!transient
     344             : 
     345             :   /** base class for AliRoot HLT plugins */
     346             :   AliHLTPluginBase* fpPluginBase;                                     //!transient
     347             : 
     348             :   UInt_t fFlags; //! transient
     349             :   Int_t fProcessingStep; //! store the last processing step
     350             : 
     351             :   static const char* fgkCalibStreamerInfoEntry; //! OCDB path
     352             : 
     353         118 :   ClassDef(AliHLTReconstructor, 0)   // class for the HLT reconstruction
     354             : 
     355             : };
     356             : 
     357             : typedef AliHLTReconstructor AliL3Reconstructor; // for backward compatibility
     358             : 
     359             : #endif

Generated by: LCOV version 1.11