LCOV - code coverage report
Current view: top level - VZERO/VZERObase - AliVZERORawStream.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 19 20 95.0 %
Date: 2016-06-14 17:26:59 Functions: 19 23 82.6 %

          Line data    Source code
       1             : #ifndef ALIVZERORAWSTREAM_H
       2             : #define ALIVZERORAWSTREAM_H
       3             : /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
       4             :  * See cxx source for full Copyright notice                               */
       5             : 
       6             : ///////////////////////////////////////////////////////////////////////////////
       7             : ///
       8             : /// This is a class for reading the VZERO DDL raw data
       9             : /// The format of the raw data corresponds to the one
      10             : /// implemented in AliVZEROBuffer class.
      11             : ///
      12             : /// PLEASE NOTE that Int_t channel is here the FEE channel from 0 to 63 in the 
      13             : /// order defined by Yannick Zoccarato which is not the same order as the order 
      14             : /// defined in aliroot by the naming and numbering conventions.
      15             : /// Therefore one has to go from FEE_Channel to AliRoot_Channel using 
      16             : /// GetOfflineChannel(Int_t channel)  when going from Online to Offline !!!
      17             : ///
      18             : ///////////////////////////////////////////////////////////////////////////////
      19             : 
      20             : #include <TObject.h>
      21             : #include <TMath.h>
      22             : 
      23             : class AliRawReader;
      24             : class AliVZEROTriggerData;
      25             : 
      26             : class AliVZERORawStream: public TObject {
      27             :   public :
      28             :     AliVZERORawStream(AliRawReader* rawReader);
      29             :     virtual ~AliVZERORawStream();
      30             : 
      31             :     virtual void      Reset();
      32             :     virtual Bool_t    Next();
      33             : 
      34             : // Getters of various scalers and Minimum Bias flags :
      35             : 
      36             :    ULong64_t          GetBBScalers(Int_t channel) const  
      37         512 :       { return        fBBScalers[channel]; }
      38             :    ULong64_t          GetBGScalers(Int_t channel) const  
      39         512 :       { return        fBGScalers[channel]; }
      40             :    UInt_t             GetTriggerScalers(Int_t num_scaler) const 
      41         128 :       { return        fScalers[num_scaler]; }
      42             :    UInt_t             GetBunchNumbersMB(Int_t num_bunch) const 
      43          80 :       { return        fBunchNumbers[num_bunch]; }
      44             :    UShort_t           GetChargeMB(Int_t channel, Int_t num_bunch) const  
      45        5120 :       { return        fChargeMB[channel][num_bunch]; } 
      46             :    Bool_t             GetIntMBFlag(Int_t channel, Int_t num_bunch) const   
      47        5120 :       { return        fIsIntMB[channel][num_bunch]; } 
      48             :    Bool_t             GetBBMBFlag(Int_t channel, Int_t num_bunch) const   
      49        5120 :       { return        fIsBBMB[channel][num_bunch]; }  
      50             :    Bool_t             GetBGMBFlag(Int_t channel, Int_t num_bunch) const   
      51        5120 :       { return        fIsBGMB[channel][num_bunch]; }      
      52             :        
      53             : // Getters of ADC signals, ADC pedestals, time information and corresponding flags :
      54             : 
      55             :     Short_t           GetADC(Int_t channel) const
      56           0 :       { return TMath::MaxElement(kNEvOfInt, fADC[channel]); }    // maximum value instead of central clock
      57             : //    { return fADC[channel][kNEvOfInt/2]; }
      58             :             
      59             :     Short_t           GetPedestal(Int_t channel, Int_t event) const
      60       11776 :       { return fADC[channel][event]; }
      61             :     Bool_t            GetIntegratorFlag(Int_t channel, Int_t event) const
      62        1536 :       { return fIsInt[channel][event]; }
      63             :     Bool_t            GetBBFlag(Int_t channel, Int_t event) const
      64       11776 :       { return fIsBB[channel][event]; } 
      65             :     Bool_t            GetBGFlag(Int_t channel, Int_t event) const
      66       11776 :       { return fIsBG[channel][event]; }   
      67             :     Short_t           GetTime(Int_t channel) const
      68         512 :       { return fTime[channel]; }
      69             :     Short_t           GetWidth(Int_t channel) const
      70         512 :       { return fWidth[channel]; }
      71             : 
      72             :     UShort_t          GetTriggerInputs() const
      73          16 :       { return fTrigger; }
      74             :     UShort_t          GetTriggerInputsMask() const
      75           8 :       { return fTriggerMask; }
      76             : 
      77             :     void              CalculateChargeForCentrTriggers(AliVZEROTriggerData *triggerData,
      78             :                                                       UShort_t &chargeA, UShort_t &chargeC) const;
      79             :     void              CalculateBBandBGFlags(AliVZEROTriggerData *triggerData,
      80             :                                             UChar_t &nBBA, UChar_t &nBBC,
      81             :                                             UChar_t &nBGA, UChar_t &nBGC) const;
      82             :     void              FillTriggerBits(AliVZEROTriggerData *triggerData);
      83             : 
      84             : // Getter of Offline Channel number as used in aliroot (defined by aliroot 
      85             : // numbering convention) from FEE channel (electronic channel number given 
      86             : // by the V0 electronics readout) - See comment above - 
      87             : 
      88             :     Int_t              GetOfflineChannel(Int_t channel)  const
      89        2048 :       { Int_t  fOfflineChannel[64] = {39, 38, 37, 36, 35, 34, 33, 32, 
      90             :                                       47, 46, 45, 44, 43, 42, 41, 40, 
      91             :                                       55, 54, 53, 52, 51, 50, 49, 48, 
      92             :                                       63, 62, 61, 60, 59, 58, 57, 56,
      93             :                                        7,  6,  5,  4,  3,  2,  1,  0, 
      94             :                                       15, 14, 13, 12, 11, 10,  9,  8,
      95             :                                       23, 22, 21, 20, 19, 18, 17, 16, 
      96             :                                       31, 30, 29, 28, 27, 26, 25, 24};
      97        1024 :                return fOfflineChannel[channel]; }       
      98             : 
      99             :     enum EVZERORawDataParams {
     100             :       kNChannels = 64, // number of electronic channels in V0 (FEE numbering)
     101             :       kNEvOfInt  = 21, // number of events of interest
     102             :       kNScalers  = 16, // number of scalers
     103             :       kNBunches  = 10  // number of bunches used in Minimum Bias information 
     104             :     };
     105             : 
     106             :     enum EVZERORawStreamError {
     107             :       kRawDataSizeErr = 1
     108             :     };
     109             : 
     110             :   private:
     111             : 
     112             :     AliVZERORawStream(const AliVZERORawStream& stream);
     113             :     AliVZERORawStream& operator = (const AliVZERORawStream& stream);
     114             : 
     115             :     UInt_t GetNextWord();
     116             :     UShort_t GetNextShort();
     117             : 
     118             :     ULong64_t     fBBScalers[kNChannels];        // 'Beam-Beam' scalers for all channels
     119             :     ULong64_t     fBGScalers[kNChannels];        // 'Beam-Gas' scalers for all channels
     120             :     UInt_t        fScalers[kNScalers];           // Trigger scalers
     121             :     UInt_t        fBunchNumbers[kNBunches];      // Bunch numbers for the previous 10 MB events
     122             :     UShort_t      fChargeMB[kNChannels][kNBunches]; // ADC counts for all channels for the previous 10 MB events
     123             :     Bool_t        fIsIntMB[kNChannels][kNBunches];  // 'Integrator' flag for all channels for the previous 10 MB events
     124             :     Bool_t        fIsBBMB[kNChannels][kNBunches];   // 'Beam-Beam' flag for all channels for the previous 10 MB events
     125             :     Bool_t        fIsBGMB[kNChannels][kNBunches];   // 'Beam-Gas' for all channels for the previous 10 MB events
     126             : 
     127             :     Short_t       fADC[kNChannels][kNEvOfInt];   // ADC counts for all channels and all events of interest
     128             :     Bool_t        fIsInt[kNChannels][kNEvOfInt]; // 'Integrator' flag for all channels 
     129             :     Bool_t        fIsBB[kNChannels][kNEvOfInt];  // 'Beam-Beam' flag for all channels
     130             :     Bool_t        fIsBG[kNChannels][kNEvOfInt];  // 'Beam-Gas' flag for all channels
     131             :     Short_t       fTime[kNChannels];             // leading time for all channels - from HPTDC - in HPTDC units
     132             :     Short_t       fWidth[kNChannels];            // pulse width for all channels - from HPTDC - in HPTDC units
     133             : 
     134             :     UShort_t      fTrigger;        // VZERO trigger inputs
     135             :     UShort_t      fTriggerMask;    // VZERO trigger inputs mask
     136             : 
     137             :     Int_t         fPosition;       // current position in the raw-data payload
     138             :     
     139             : 
     140             :     AliRawReader* fRawReader;      // object for reading the raw data
     141             : 
     142             :     UChar_t*      fData;           // pointer to raw data payload
     143             : 
     144          52 :     ClassDef(AliVZERORawStream, 0) // class for reading VZERO DDL raw data
     145             : };
     146             : 
     147             : #endif

Generated by: LCOV version 1.11