LCOV - code coverage report
Current view: top level - FMD/FMDrec - AliFMDRawStream.cxx (source / functions) Hit Total Coverage
Test: coverage.info Lines: 1 41 2.4 %
Date: 2016-06-14 17:26:59 Functions: 1 4 25.0 %

          Line data    Source code
       1             : /**************************************************************************
       2             :  * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
       3             :  *                                                                        *
       4             :  * Author: The ALICE Off-line Project.                                    *
       5             :  * Contributors are mentioned in the code where appropriate.              *
       6             :  *                                                                        *
       7             :  * Permission to use, copy, modify and distribute this software and its   *
       8             :  * documentation strictly for non-commercial purposes is hereby granted   *
       9             :  * without fee, provided that the above copyright notice appears in all   *
      10             :  * copies and that both the copyright notice and this permission notice   *
      11             :  * appear in the supporting documentation. The authors make no claims     *
      12             :  * about the suitability of this software for any purpose. It is          *
      13             :  * provided "as is" without express or implied warranty.                  *
      14             :  **************************************************************************/
      15             : 
      16             : /* $Id$ */
      17             : 
      18             : //____________________________________________________________________
      19             : //                                                                          
      20             : // Buffer to read RAW ALTRO FMD format from a AliRawReader 
      21             : // 
      22             : // This class derives from AliAltroBuffer, but overloads the memer
      23             : // function Next to do some extra processing.  In particular, it tries
      24             : // to autodetect the sample rate.  If zero-suppression was used when
      25             : // writing the raw data, then the automatic discovery will not work,
      26             : // and the sample rate should be set explicitly. 
      27             : //
      28             : #include "AliFMDRawStream.h"          // ALIFMDRAWSTREAM_H
      29             : // #include <AliRawReader.h>              // ALIRAWREADER_H
      30             : #include "AliFMDParameters.h"
      31             : // #include <AliLog.h>
      32             : #include "AliFMDDebug.h" // Better debug macros
      33             : // #include <iomanip>
      34             : // #include <iostream>
      35             : #include "AliRawReader.h"
      36             : #include <climits>
      37             : 
      38             : //____________________________________________________________________
      39          12 : ClassImp(AliFMDRawStream)
      40             : #if 0
      41             :   ; // This is here to keep Emacs for indenting the next line
      42             : #endif
      43             : 
      44             : //____________________________________________________________________
      45             : AliFMDRawStream::AliFMDRawStream(AliRawReader* reader) 
      46           0 :   : AliAltroRawStream(reader)
      47           0 : {
      48             :   // CTOR 
      49           0 :   reader->Reset();
      50             :   // Select FMD DDL's 
      51           0 :   SelectRawData("FMD");
      52           0 : }
      53             : 
      54             : //_____________________________________________________________________________
      55             : Bool_t 
      56             : AliFMDRawStream::ReadChannel(UInt_t& ddl, UInt_t& addr, 
      57             :                              UInt_t& len, volatile UShort_t* data)
      58             : {
      59             :   // Read one channel and return.   Returns 0 when there's no more
      60             :   // data. 
      61             :   Int_t        l         = 0;
      62             :   static Int_t last      = 0xFFFF; // 0xFFFF means signal is used
      63             :   Bool_t       next      = kTRUE;
      64           0 :   do {
      65           0 :     Int_t signal = last;
      66           0 :     if (last > 0x3FF) {
      67           0 :       AliFMDDebug(30, ("Last is 0x%x, so reading a new word", last));
      68           0 :       next   = Next();
      69           0 :       if(!next){
      70           0 :         AliFMDDebug(15, ("Read word # %d (!next)", l));
      71           0 :         addr = GetPrevHWAddress();
      72           0 :         ddl  = (GetPrevDDLNumber() < 0 ? UINT_MAX: UInt_t(GetPrevDDLNumber()));
      73           0 :         len  = l+1; // Need to add one - l points to last valid index
      74           0 :         last = signal;
      75           0 :         break;
      76             :       }
      77           0 :       signal = GetSignal();
      78           0 :       if (GetHWAddress() != GetPrevHWAddress() && GetPrevHWAddress() >= 0) {
      79           0 :         AliFMDDebug(15, ("New hardware address, was 0x%x, now 0x%x", 
      80             :                           GetPrevHWAddress(), GetHWAddress()));
      81           0 :         addr = GetPrevHWAddress();
      82           0 :         ddl  = (GetPrevDDLNumber() < 0 ? UINT_MAX : UInt_t(GetPrevDDLNumber()));
      83           0 :         len  = l+1; // Need to add one - l points to last valid index
      84           0 :         last = signal;
      85           0 :         break;
      86             :       }
      87             :     }
      88             :     // Sanity check - if the total bunch length is less than 1, then
      89             :     // read until we get the next bunch. 
      90           0 :     Int_t b  = GetTimeLength();
      91           0 :     if (b < 1) { 
      92           0 :       AliWarning(Form("Bunch length %0d is less than 0 for "
      93             :                       "DDL %4d address 0x%03x", 
      94             :                       b, ddl, addr));
      95           0 :       last = 0xFFFF;
      96           0 :       continue;
      97             :     }
      98             : 
      99             :     // Sanity check - if the current time is less than 0, then read
     100             :     // until we get a new bunch. 
     101           0 :     Int_t t  = GetTime();
     102           0 :     if (t < 0) {
     103           0 :       AliWarning(Form("Time %0d is less than 0 for DDL %4d address 0x%03x", 
     104             :                       t, ddl, addr));
     105           0 :       last = 0xFFFF;
     106           0 :       continue;
     107             :     }
     108           0 :     l        = TMath::Max(l, t);
     109           0 :     data[t]  = signal;
     110           0 :     last     = 0xFFFF;
     111             : #if 0
     112             :     AliFMDDebug(signal > 512 ? 1 : 0, ("Signal @ %d (%d) is %d", 
     113             :                                        time, t, data[t]));
     114             : #endif
     115           0 :   } while (next);
     116           0 :   return next;
     117             : }
     118             : 
     119             : 
     120             : //_____________________________________________________________________________
     121             : //
     122             : // EOF
     123             : //

Generated by: LCOV version 1.11