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

          Line data    Source code
       1             : #ifndef AliHLTMUONMANSOTRACKERFSMCOMPONENT_H
       2             : #define AliHLTMUONMANSOTRACKERFSMCOMPONENT_H
       3             : /**************************************************************************
       4             :  * This file is property of and copyright by the ALICE HLT Project        *
       5             :  * All rights reserved.                                                   *
       6             :  *                                                                        *
       7             :  * Primary Authors:                                                       *
       8             :  *   Artur Szostak <artursz@iafrica.com>                                  *
       9             :  *   Indranil Das <indra.das@saha.ac.in>                                  *
      10             :  *                                                                        *
      11             :  * Permission to use, copy, modify and distribute this software and its   *
      12             :  * documentation strictly for non-commercial purposes is hereby granted   *
      13             :  * without fee, provided that the above copyright notice appears in all   *
      14             :  * copies and that both the copyright notice and this permission notice   *
      15             :  * appear in the supporting documentation. The authors make no claims     *
      16             :  * about the suitability of this software for any purpose. It is          *
      17             :  * provided "as is" without express or implied warranty.                  *
      18             :  **************************************************************************/
      19             : 
      20             : // $Id$
      21             : 
      22             : ///
      23             : ///  @file   AliHLTMUONMansoTrackerFSMComponent.h
      24             : ///  @author Artur Szostak <artursz@iafrica.com>,
      25             : ///          Indranil Das <indra.das@saha.ac.in>
      26             : ///  @date   18 Sep 2007
      27             : ///  @brief  Tracker component for the dimuon HLT using the Manso algorithm.
      28             : ///
      29             : /// The tracker component performs minimal track reconstruction in stations 4 & 5.
      30             : /// It uses the Manso algorithm implemented as a finite state machine.
      31             : ///
      32             : 
      33             : #include "AliHLTMUONProcessor.h"
      34             : #include "AliHLTMUONDataTypes.h"
      35             : #include "AliHLTMUONMansoTrackerFSMCallback.h"
      36             : 
      37             : #if __GNUC__ && __GNUC__ < 3
      38             : #define std
      39             : #endif
      40             : 
      41             : class AliHLTMUONMansoTrackerFSM;
      42             : //class AliHLTMUONMansoTracksBlockWriter;
      43             : extern "C" {
      44             : struct AliHLTMUONRecHitStruct;
      45             : } // extern C
      46             : 
      47             : 
      48             : /**
      49             :  * @class AliHLTMUONMansoTrackerFSMComponent
      50             :  * @brief Dimuon HLT tracker using the Manso tracking algorithm implemented as a FSM.
      51             :  *
      52             :  * This is a tracker component for the muon spectrometer. It performs minimal track
      53             :  * reconstruction in stations 4 & 5.
      54             :  * The Manso algorithm is used, implemented as a finite state machine (FSM).
      55             :  * This makes the component fast, insensitive to residual missalignment and gives
      56             :  * reasonable pT resolution for improved event selectivity.
      57             :  * However, because of its minimalism and simplicity, it does suffer from an increased
      58             :  * fake track rate, in particular for higher multiplicity events.
      59             :  * This should not pose a problem at all for p+p or peripheral A+A events, while
      60             :  * central events should and will be triggered anyway.
      61             :  *
      62             :  * <h2>General properties:</h2>
      63             :  *
      64             :  * Component ID: \b MUONMansoTrackerFSM <br>
      65             :  * Library: \b libAliHLTMUON.so  <br>
      66             :  * Input Data Types: ('RECHITS ', 'MUON'); ('TRIGRECS', 'MUON') <br>
      67             :  * Output Data Types: ('MANTRACK', 'MUON'); ('MNCANDID', 'MUON') <br>
      68             :  *
      69             :  * <h2>Mandatory arguments:</h2>
      70             :  * None. <br>
      71             :  *
      72             :  * <h2>Optional arguments:</h2>
      73             :  * \li -zmiddle <i>number</i> <br>
      74             :  *      Sets the value for the Z coordinate for the middle of the magnetic field.
      75             :  *      The <i>number</i> should be a floating point number representing the Z
      76             :  *      coordinate in centimeters (cm).
      77             :  *      A reasponable value is around -975cm (the default). <br>
      78             :  * \li -bfieldintegral <i>number</i> <br>
      79             :  *      Sets the value for the dipole's magnetic field integral.
      80             :  *      The <i>number</i> should be a floating point number representing the integral
      81             :  *      in units of Tesla meters (T.m).
      82             :  *      The value can be negative or possitive to indicate the dipole's polarity. <br>
      83             :  * \li -a7 <i>number</i> <br>
      84             :  * \li -a8 <i>number</i> <br>
      85             :  * \li -a9 <i>number</i> <br>
      86             :  * \li -a10 <i>number</i> <br>
      87             :  * \li -b7 <i>number</i> <br>
      88             :  * \li -b8 <i>number</i> <br>
      89             :  * \li -b9 <i>number</i> <br>
      90             :  * \li -b10 <i>number</i> <br>
      91             :  *      These allow one to set the A and B region of interest parameters used by the
      92             :  *      tracker to search for correlated hits on subsequent chambers.
      93             :  *      The number indicated after -a* or -b* indicates the chamber to set the parameter for.
      94             :  *      i.e. "-a7 123" will set the A parameter for chamber 7 to the value of 123.
      95             :  *      The region of interest parameters are defined as follows: Rs = a*Rp + b,
      96             :  *      where Rs is the region of interest radius and Rp is the distance from the beam line
      97             :  *      to the centre of the region of interest (in cm).
      98             :  *      The <i>number</i> should be a floating point number in each case and the values
      99             :  *      for the B parameters should always be positive. <br>
     100             :  * \li -z7 <i>number</i> <br>
     101             :  * \li -z8 <i>number</i> <br>
     102             :  * \li -z9 <i>number</i> <br>
     103             :  * \li -z10 <i>number</i> <br>
     104             :  * \li -z11 <i>number</i> <br>
     105             :  * \li -z13 <i>number</i> <br>
     106             :  *      These allow one to set the Z coordinate used for the chamber position in the
     107             :  *      trackers internal calculations.
     108             :  *      The number after -z* indicates the chamber number to set the value for.
     109             :  *      Thus, "-z11 -123" sets chamber 11's Z coordinate position to -123 cm.
     110             :  *      The <i>number</i> should be a floating point number in each case and negative,
     111             :  *      since the spectrometer is located in the negative Z direction.
     112             :  *      The units are in centimeters (cm).
     113             :  *      The default values are the nominal chamber Z coordinates. <br>
     114             :  * \li -warn_on_unexpected_block <br>
     115             :  *      This will cause the component to generate warnings when it receives data block
     116             :  *      types it does not know how to handle. Without this option the component only
     117             :  *      generates debug messages when they are compiled in. <br>
     118             :  * \li -cdbpath <i>path</i> <br>
     119             :  *      This allows one to override the path to use for the CDB location.
     120             :  *      <i>path</i> must be a valid CDB URI. By default the HLT system framework
     121             :  *      sets the CDB path. <br>
     122             :  * \li -run <i>number</i> <br>
     123             :  *      This allows one to override the run number to use. <i>number</i> must be
     124             :  *      a positive integer number. By default the HLT system framework sets the
     125             :  *      run number. <br>
     126             :  * \li -delaysetup <br>
     127             :  *      If indicated then part of the initialisation of the component is forcefully
     128             :  *      delayed to the first event received, i.e. the Start-of-Run event. <br>
     129             :  * \li -dumponerror <br>
     130             :  *      This flag will cause the component to dump the data blocks it received if
     131             :  *      an error occurs during the processing of an event. <br>
     132             :  * \li -dumppath <i>path</i> <br>
     133             :  *      Allows one to specify the path in which to dump the received data blocks
     134             :  *      if an error occurs. <br>
     135             :  * \li -makecandidates <br>
     136             :  *      Indicates if the Manso track candidates data block should be generated.
     137             :  *      This kind of information is useful for debugging. <br>
     138             :  *
     139             :  * <h2>Standard configuration:</h2>
     140             :  * This component should normally be configured with no extra options.
     141             :  * It will automatically load the required reconstruction parameters from the CDB. <br>
     142             :  *
     143             :  * <h2>Default CDB entries:</h2>
     144             :  * The component loads the reconstruction parameters from the MUON subdirectory
     145             :  * in the CDB.
     146             :  * The magnetic field integral, A and B region of interest parameters,
     147             :  * and nominal Z coordinates are stored in a TMap under HLT/ConfigMUON/MansoTrackerFSM.
     148             :  *
     149             :  * <h2>Performance:</h2>
     150             :  * Can achieve about 3kHz processing rate for nominal event sizes containing
     151             :  * 150 tracks per event.
     152             :  *
     153             :  * <h2>Memory consumption:</h2>
     154             :  * Minimal memory consumption on the order of megabytes.
     155             :  * 5 Mbytes should be more than enough.
     156             :  *
     157             :  * <h2>Output size:</h2>
     158             :  * Output size is about equivalent to the incoming reconstructed hit and trigger
     159             :  * record input data.
     160             :  *
     161             :  * @ingroup alihlt_muon_components
     162             :  */
     163             : class AliHLTMUONMansoTrackerFSMComponent
     164             :         : public AliHLTMUONProcessor, public AliHLTMUONMansoTrackerFSMCallback
     165             : {
     166             : public:
     167             :         AliHLTMUONMansoTrackerFSMComponent();
     168             :         virtual ~AliHLTMUONMansoTrackerFSMComponent();
     169             : 
     170             :         // Public functions to implement the AliHLTProcessor interface.
     171             :         // These functions are required for the registration process.
     172             :         virtual const char* GetComponentID();
     173             :         virtual void GetInputDataTypes(AliHLTComponentDataTypeList& list);
     174             :         virtual AliHLTComponentDataType GetOutputDataType();
     175             :         virtual int GetOutputDataTypes(AliHLTComponentDataTypeList& list);
     176             :         virtual void GetOutputDataSize(unsigned long& constBase, double& inputMultiplier);
     177             :         virtual AliHLTComponent* Spawn();
     178             :         
     179             :         // Inherited from AliHLTMUONMansoTrackerFSMCallback:
     180             :         virtual void RequestClusters(
     181             :                         AliHLTMUONMansoTrackerFSM* tracker,
     182             :                         AliHLTFloat32_t left, AliHLTFloat32_t right,
     183             :                         AliHLTFloat32_t bottom, AliHLTFloat32_t top,
     184             :                         AliHLTMUONChamberName chamber, const void* tag
     185             :                 );
     186             :         virtual void EndOfClusterRequests(AliHLTMUONMansoTrackerFSM* tracker);
     187             :         virtual void FoundTrack(AliHLTMUONMansoTrackerFSM* tracker);
     188             :         virtual void NoTrackFound(AliHLTMUONMansoTrackerFSM* tracker);
     189             : 
     190             : protected:
     191             : 
     192             :         // Protected functions to implement the AliHLTProcessor interface.
     193             :         // These functions provide initialization as well as the actual processing
     194             :         // capabilities of the component. 
     195             :         virtual int DoInit(int argc, const char** argv);
     196             :         virtual int Reconfigure(const char* cdbEntry, const char* componentId);
     197             :         virtual int ReadPreprocessorValues(const char* modules);
     198             :         virtual int DoDeinit();
     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             :         AliHLTMUONMansoTrackerFSMComponent(const AliHLTMUONMansoTrackerFSMComponent& /*obj*/);
     214             :         AliHLTMUONMansoTrackerFSMComponent& operator = (const AliHLTMUONMansoTrackerFSMComponent& /*obj*/);
     215             : 
     216             :         void Reset();
     217             :         void FreeMemory();
     218             :         
     219             :         void AddRecHits(
     220             :                         AliHLTUInt32_t specification,
     221             :                         const AliHLTMUONRecHitStruct* recHits,
     222             :                         AliHLTUInt32_t count
     223             :                 );
     224             :         
     225             :         void ResetCanLoadFlags();
     226             :         bool AtLeastOneCanLoadFlagsIsSet() const;
     227             :         
     228             :         /**
     229             :          * Reads this component's configuration parameters from the CDB.
     230             :          * These include the middle of the dipole Z coordinate (zmiddle), the
     231             :          * integrated magnetic field of the dipole, Z coordinates of the chambers
     232             :          * and the region of interest parameters used during the tracking.
     233             :          * \note Only those parameters are loaded from CDB for which the fCanLoadxyz
     234             :          *       flags are true.
     235             :          * \return 0 if no errors occured and negative error code compatible with
     236             :          *       the HLT framework on errors.
     237             :          */
     238             :         int ReadConfigFromCDB();
     239             :         
     240             : 
     241             :         AliHLTMUONMansoTrackerFSM* fTracker;  //! Tracker to do the actual work.
     242             :         
     243             :         AliHLTUInt32_t fTrackCount;  //! Number of tracks currently found.
     244             :         /*AliHLTMUONMansoTracksBlockWriter*/void* fBlock;  //! The current data block we are writing.
     245             :         
     246             :         class AliRecHitBlockInfo
     247             :         {
     248             :         public:
     249             :         
     250             :                 AliRecHitBlockInfo(AliHLTUInt32_t count = 0, const AliHLTMUONRecHitStruct* data = NULL) :
     251           0 :                         fCount(count), fData(data)
     252           0 :                 {}
     253             :         
     254             :                 // Perform a shallow copy.
     255             :                 AliRecHitBlockInfo(const AliRecHitBlockInfo& obj) :
     256             :                         fCount(obj.fCount), fData(obj.fData)
     257             :                 {}
     258             :                 
     259             :                 AliRecHitBlockInfo& operator = (const AliRecHitBlockInfo& obj)
     260             :                 {
     261           0 :                   if(&obj == this) return *this;
     262           0 :                         fCount = obj.fCount;
     263           0 :                         fData = obj.fData;
     264           0 :                         return *this;
     265           0 :                 }
     266             :                 
     267           0 :                 AliHLTUInt32_t Count() const { return fCount; }
     268           0 :                 const AliHLTMUONRecHitStruct* Data() const { return fData; }
     269             :         
     270             :         private:
     271             :                 AliHLTUInt32_t fCount;  // Number of elements in fData.
     272             :                 const AliHLTMUONRecHitStruct* fData; // Pointer to the array of rec hits.
     273             :         };
     274             :         
     275             :         //std::vector<AliRecHitBlockInfo> fRecHitBlock[4];  //! Arrays of rec hit block data.
     276             :         AliHLTUInt32_t fRecHitBlockArraySize;  ///< The array size of each array in fRecHitBlock.
     277             :         AliHLTUInt32_t fRecHitBlockCount[4];   ///< The number of records actually stored in fRecHitBlock[i].
     278             :         // The following are 4 dynamic arrays of AliRecHitBlockInfo structures.
     279             :         // These arrays will all have the same size = fRecHitBlockArraySize.
     280             :         // The array itself is actually allocated only once and the pointer stored in fRecHitBlock[0],
     281             :         // while the other pointers fRecHitBlock[i] {i>0} will just be set relative to fRecHitBlock[0].
     282             :         // The allocated memory is: 4 * fRecHitBlockArraySize * sizeof(AliRecHitBlockInfo).
     283             :         AliRecHitBlockInfo* fRecHitBlock[4];  //! Arrays of rec hit block data.
     284             : 
     285             :         bool fWarnForUnexpecedBlock;  ///< Flag indicating if we should log a warning if we got a block of an unexpected type.       
     286             :         bool fCanLoadZmiddle;  ///< Indicates if the zmiddle parameter can be loaded from CDB.
     287             :         bool fCanLoadBL;  ///< Indicates if the bfieldintegral parameter can be loaded from CDB.
     288             :         bool fCanLoadA[4];  ///< Indicates if the roi_paramA_chamber[7..10] parameter can be loaded from CDB.
     289             :         bool fCanLoadB[4];  ///< Indicates if the roi_paramB_chamber[7..10] parameter can be loaded from CDB.
     290             :         bool fCanLoadZ[6];  ///< Indicates if the chamber[7..11,13]postion parameter can be loaded from CDB.
     291             :         
     292           6 :         ClassDef(AliHLTMUONMansoTrackerFSMComponent, 0);  // Manso tracker component implemented as a finite state machine (FSM).
     293             : };
     294             : 
     295             : #endif // AliHLTMUONMANSOTRACKERFSMCOMPONENT_H

Generated by: LCOV version 1.11