LCOV - code coverage report
Current view: top level - FMD/FMDbase - AliFMDAltroMapping.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 5 5 100.0 %
Date: 2016-06-14 17:26:59 Functions: 8 11 72.7 %

          Line data    Source code
       1             : #ifndef ALIFMDALTROMAPPING_H
       2             : #define ALIFMDALTROMAPPING_H
       3             : /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights
       4             :  * reserved. 
       5             :  *
       6             :  * Latest changes by Christian Holm Christensen <cholm@nbi.dk>
       7             :  *
       8             :  * See cxx source for full Copyright notice                               
       9             :  */
      10             : /** @file    AliFMDAltroMapping.h
      11             :     @author  Christian Holm Christensen <cholm@nbi.dk>
      12             :     @date    Sun Mar 26 18:28:11 2006
      13             :     @brief   Map HW address to detector coordinates and back again. 
      14             : */
      15             : #ifndef ALIALTROMAPPING_H
      16             : # include <AliAltroMapping.h>
      17             : #endif
      18             : //
      19             : // Map hardware address to detector coordinates. 
      20             : //
      21             : //    The hardware address consist of a DDL number and 12bits of ALTRO
      22             : //    addresses.  The ALTRO address are formatted as follows. 
      23             : //
      24             : //    12              7         4            0
      25             : //    |---------------|---------|------------|
      26             : //    | Board #       | ALTRO # | Channel #  |
      27             : //    +---------------+---------+------------+
      28             : //
      29             : //
      30             : //____________________________________________________________________
      31             : /** @class AliFMDAltroMapping 
      32             :     @brief Class that encodes a map to/from ALTRO hardware address to
      33             :     FMD detector coordinates.  
      34             :     
      35             :     The hardware address consist of a DDL number and 12bits of ALTRO
      36             :     addresses.  The ALTRO address are formatted as follows. 
      37             :     @verbatim 
      38             :     12              7         4            0
      39             :     |---------------|---------|------------|
      40             :     | Board #       | ALTRO # | Channel #  |
      41             :     +---------------+---------+------------+
      42             :     @endverbatim 
      43             : 
      44             :     @ingroup FMD_base
      45             :  */
      46             : class AliFMDAltroMapping : public AliAltroMapping
      47             : {
      48             : public:
      49             :   /**
      50             :    * Constructor 
      51             :    */
      52             :   AliFMDAltroMapping();
      53             :   /**
      54             :    * Destructor 
      55             :    */
      56          18 :   virtual ~AliFMDAltroMapping() {}
      57             :   /**
      58             :    * Return detector number corresponding to given DDL number 
      59             :    * 
      60             :    * @param ddl DDL number 
      61             :    * @return Detector number 
      62             :    */ 
      63             :   Short_t DDL2Detector(UInt_t ddl) const 
      64             :   { 
      65          96 :     return (ddl<=2 ? Short_t(ddl + 1) : -1); 
      66             :   }
      67             :   /**
      68             :    * Return the ring identifier corresponding to a board number 
      69             :    * 
      70             :    * @param board Board number 
      71             :    * @return Ring identifier 
      72             :    */ 
      73        3200 :   Char_t Board2Ring(UShort_t board) const { return (board%2)?'O':'I'; }
      74             : 
      75             :   /**
      76             :    * Return the strip base number corresponding to a channel address 
      77             :    * 
      78             :    * @param board   Board number
      79             :    * @param altro   Altro number 
      80             :    * @param channel Channel number 
      81             :    * @param ring    On return, the ring ID 
      82             :    * @param sec     On return, the sector number 
      83             :    * @param strip   On return, the strip base offset 
      84             :    * @return @c true on success 
      85             :    */ 
      86             :   Bool_t Channel2StripBase(UShort_t  board, UShort_t  altro, 
      87             :                            UShort_t  chan,  Char_t&   ring, 
      88             :                            UShort_t& sec,   Short_t&  str) const;
      89             :   /**
      90             :    * Return the strip, sample corresponding to a timebin 
      91             :    * 
      92             :    * @param sec        Sector
      93             :    * @param timebin    Time bin 
      94             :    * @param preSamples Number of pre-samples 
      95             :    * @param sampleRate Oversampling rate 
      96             :    * @param strip      On return, the strip number in this channel
      97             :    * @param sam        On return, the sample number 
      98             :    */ 
      99             :   void Timebin2Strip(UShort_t sec,        UShort_t  timebin,
     100             :                      UShort_t preSamples, UShort_t  sampleRate, 
     101             :                      Short_t& strip,      UShort_t& sample) const;
     102             : 
     103             :   /**
     104             :    * Map a hardware address into a detector index. 
     105             :    * 
     106             :    * @param ddl        Hardware DDL number 
     107             :    * @param hwaddr     Hardware address.  
     108             :    * @param timebin    Timebin 
     109             :    * @param preSamples # of pre samples 
     110             :    * @param sampleRate Over sampling rate 
     111             :    * @param det        On return, the detector #
     112             :    * @param ring       On return, the ring ID
     113             :    * @param sec        On return, the sector #
     114             :    * @param str        On return, the base of strip #
     115             :    * @param sam        On return, the sample number for this strip
     116             :    * @return @c true on success, false otherwise 
     117             :    */
     118             :   Bool_t Hardware2Detector(UShort_t  ddl,        UShort_t hwaddr, 
     119             :                            UShort_t  timebin,    UShort_t preSamples, 
     120             :                            UShort_t  sampleRate,
     121             :                            UShort_t& det,        Char_t&   ring, 
     122             :                            UShort_t& sec,        Short_t&  str,
     123             :                            UShort_t& sam) const;
     124             :   /**
     125             :    * Map a hardware address into a detector index. 
     126             :    * 
     127             :    * @param ddl        Hardware DDL number 
     128             :    * @param board      FEC number
     129             :    * @param altro      ALTRO number 
     130             :    * @param channel    Channel number 
     131             :    * @param timebin    Timebin 
     132             :    * @param preSamples # of pre samples 
     133             :    * @param sampleRate Over sampling rate 
     134             :    * @param det        On return, the detector #
     135             :    * @param ring       On return, the ring ID
     136             :    * @param sec        On return, the sector #
     137             :    * @param str        On return, the base of strip #
     138             :    * @param sam        On return, the sample number for this strip
     139             :    * @return @c true on success, false otherwise 
     140             :    */
     141             :   Bool_t Hardware2Detector(UShort_t  ddl,        UShort_t  board, 
     142             :                            UShort_t  altro,      UShort_t  chan,
     143             :                            UShort_t  timebin,    UShort_t  preSamples,
     144             :                            UShort_t  sampleRate,
     145             :                            UShort_t& det,        Char_t&   ring, 
     146             :                            UShort_t& sec,        Short_t&  str,
     147             :                            UShort_t& sam) const;
     148             : 
     149             : 
     150             : 
     151             :   /**
     152             :    * Return DDL number corresponding to given detector number 
     153             :    * 
     154             :    * @param det Detector number 
     155             :    * @return DDL number 
     156             :    */ 
     157     1638448 :   UShort_t Detector2DDL(UShort_t det) const { return det - 1; }
     158             :   /**
     159             :    * Return board address corresponding to a sector 
     160             :    * 
     161             :    * @param ring  Ring identifier 
     162             :    * @param sec   Sector number 
     163             :    * @return The board number, or negative number in case of failure 
     164             :    */
     165             :   Short_t Sector2Board(Char_t ring, UShort_t sec) const;
     166             :     /**
     167             :    * Convert strip address to a channel address. 
     168             :    * 
     169             :    * @param ring  Ring identifier 
     170             :    * @param sec   Sector number 
     171             :    * @param str   Strip number 
     172             :    * @param board On return, contains the board number 
     173             :    * @param altro On return, contains the altro number 
     174             :    * @param chan  On return, contains the channel number 
     175             :    * @return @c true on success. 
     176             :    */
     177             :   Bool_t Strip2Channel(Char_t    ring,  UShort_t  sec,   
     178             :                        UShort_t  str,   UShort_t& board,
     179             :                        UShort_t& altro, UShort_t& chan) const;
     180             :   /**
     181             :    * Get the timebin correspoding to a strip and sample 
     182             :    * 
     183             :    * @param sec        Sector number 
     184             :    * @param str        Strip number 
     185             :    * @param sam        Sample number 
     186             :    * @param preSamples Number of pre-samples. 
     187             :    * @param sampleRate The over-sampling rate 
     188             :    * @return the timebin corresponding to the passed strip 
     189             :    */
     190             :   UShort_t Strip2Timebin(UShort_t sec, UShort_t strip, 
     191             :                          UShort_t sam, UShort_t preSamples, 
     192             :                          UShort_t sampleRate) const;
     193             :   
     194             :   /**
     195             :    * Map a detector index into a hardware address. 
     196             :    * 
     197             :    * @param det         The detector #
     198             :    * @param ring        The ring ID
     199             :    * @param sec         The sector #
     200             :    * @param str         The strip #
     201             :    * @param sam         The sample number 
     202             :    * @param preSamples  Number of pre-samples
     203             :    * @param sampleRate  The oversampling rate 
     204             :    * @param ddl         On return, hardware DDL number 
     205             :    * @param board       On return, the FEC board address (local to DDL)
     206             :    * @param altro       On return, the ALTRO number (local to FEC)
     207             :    * @param channel     On return, the channel number (local to ALTRO)
     208             :    * @param timebin     On return, the timebin number (local to ALTRO)
     209             :    * @return @c true on success, false otherwise 
     210             :    */
     211             :   Bool_t Detector2Hardware(UShort_t  det,        Char_t    ring, 
     212             :                            UShort_t  sec,        UShort_t  str,
     213             :                            UShort_t  sam, 
     214             :                            UShort_t  preSamples, UShort_t  sampleRate,
     215             :                            UShort_t& ddl,        UShort_t& board, 
     216             :                            UShort_t& altro,      UShort_t& channel, 
     217             :                            UShort_t& timebin) const;
     218             :   /**
     219             :    * Map a detector index into a hardware address. 
     220             :    * 
     221             :    * @param det         The detector #
     222             :    * @param ring        The ring ID
     223             :    * @param sec         The sector #
     224             :    * @param str         The strip #
     225             :    * @param sam         The sample number 
     226             :    * @param preSamples  Number of pre-samples
     227             :    * @param sampleRate  The oversampling rate 
     228             :    * @param ddl         On return, hardware DDL number 
     229             :    * @param hwaddr      On return, hardware address.  
     230             :    * @param timebin     On return, the timebin number (local to ALTRO)
     231             :    * @return @c true on success, false otherwise 
     232             :    */
     233             :   Bool_t Detector2Hardware(UShort_t  det,        Char_t    ring, 
     234             :                            UShort_t  sec,        UShort_t  str,
     235             :                            UShort_t  sam, 
     236             :                            UShort_t  preSamples, UShort_t  sampleRate,
     237             :                            UShort_t& ddl,        UShort_t& hwaddr, 
     238             :                            UShort_t& timebin) const;
     239             :   /**
     240             :    * Convert board, chip, channel to a hardware address 
     241             :    * 
     242             :    * @param board   Board number 
     243             :    * @param altro   Altro number 
     244             :    * @param channel Channel number 
     245             :    * @return hardware address of a channel 
     246             :    */ 
     247             :   UInt_t ChannelAddress(UShort_t board, UShort_t altro, UShort_t channel) const;
     248             :   /**
     249             :    * Convert a channel address to board, altro, channel fields 
     250             :    * 
     251             :    * @param hwaddr  Channel address
     252             :    * @param board   On return, the Board number 
     253             :    * @param altro   On return, the Altro number 
     254             :    * @param channel On return, the Channel number 
     255             :    */
     256             :   void ChannelAddress(UShort_t hwaddr, UShort_t& board, UShort_t& altro, 
     257             :                       UShort_t& channel) const;
     258             :   /**
     259             :    * convert a partial detector index into a hardware address
     260             :    * 
     261             :    * @param sector Sector number
     262             :    * @param str    Strip number
     263             :    * @param ring   Ring ID as an integer 
     264             :    * @return Hardware address 
     265             :    */
     266             :   Int_t  GetHWAddress(Int_t sector, Int_t str, Int_t ring);
     267             :   /**
     268             :    * Get the pad-row (or sector) corresponding to hardware address
     269             :    * 
     270             :    * @param hwaddr hardware address
     271             :    * @return Sector number 
     272             :    */
     273             :   Int_t  GetPadRow(Int_t hwaddr) const;
     274             :   /**
     275             :    * Get the pad (or strip) corresponding to hardware address
     276             :    * 
     277             :    * @param hwaddr hardware address
     278             :    * @return Strip number 
     279             :    */
     280             :   Int_t  GetPad(Int_t hwaddr) const;
     281             :   /**
     282             :    * Get the sector (or ring) corresponding to hardware address
     283             :    * 
     284             :    * @param hwaddr hardware address
     285             :    * @return Ring ID as an integer 
     286             :    */
     287             :   Int_t  GetSector(Int_t hwaddr) const;
     288             :   /**
     289             :    * Print map to standard out 
     290             :    * 
     291             :    * @param option Option string (hw, or det) 
     292             :    */
     293             :   void Print(Option_t* option="hw") const;
     294             : protected:
     295             :   /**
     296             :    * Read map from file - not used 
     297             :    * 
     298             :    * @return @c true on success 
     299             :    */
     300             :   virtual Bool_t ReadMapping();
     301             :   /**
     302             :    * Create the inverse mapping arrays 
     303             :    */ 
     304             :   virtual Bool_t CreateInvMapping();
     305             :   
     306          48 :   ClassDef(AliFMDAltroMapping, 2) // Read raw FMD Altro data 
     307             : };
     308             : 
     309             : #endif
     310             : //____________________________________________________________________
     311             : //
     312             : // Local Variables:
     313             : //   mode: C++
     314             : // End:
     315             : //
     316             : // EOF
     317             : //

Generated by: LCOV version 1.11