AliRoot Core  3dc7879 (3dc7879)
AliFMDRawStream.cxx
Go to the documentation of this file.
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 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  : AliAltroRawStream(reader)
47 {
48  // CTOR
49  reader->Reset();
50  // Select FMD DDL's
51  SelectRawData("FMD");
52 }
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  do {
65  Int_t signal = last;
66  if (last > 0x3FF) {
67  AliFMDDebug(30, ("Last is 0x%x, so reading a new word", last));
68  next = Next();
69  if(!next){
70  AliFMDDebug(15, ("Read word # %d (!next)", l));
71  addr = GetPrevHWAddress();
72  ddl = (GetPrevDDLNumber() < 0 ? UINT_MAX: UInt_t(GetPrevDDLNumber()));
73  len = l+1; // Need to add one - l points to last valid index
74  last = signal;
75  break;
76  }
77  signal = GetSignal();
78  if (GetHWAddress() != GetPrevHWAddress() && GetPrevHWAddress() >= 0) {
79  AliFMDDebug(15, ("New hardware address, was 0x%x, now 0x%x",
80  GetPrevHWAddress(), GetHWAddress()));
81  addr = GetPrevHWAddress();
82  ddl = (GetPrevDDLNumber() < 0 ? UINT_MAX : UInt_t(GetPrevDDLNumber()));
83  len = l+1; // Need to add one - l points to last valid index
84  last = signal;
85  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  Int_t b = GetTimeLength();
91  if (b < 1) {
92  AliWarning(Form("Bunch length %0d is less than 0 for "
93  "DDL %4d address 0x%03x",
94  b, ddl, addr));
95  last = 0xFFFF;
96  continue;
97  }
98 
99  // Sanity check - if the current time is less than 0, then read
100  // until we get a new bunch.
101  Int_t t = GetTime();
102  if (t < 0) {
103  AliWarning(Form("Time %0d is less than 0 for DDL %4d address 0x%03x",
104  t, ddl, addr));
105  last = 0xFFFF;
106  continue;
107  }
108  l = TMath::Max(l, t);
109  data[t] = signal;
110  last = 0xFFFF;
111 #if 0
112  AliFMDDebug(signal > 512 ? 1 : 0, ("Signal @ %d (%d) is %d",
113  time, t, data[t]));
114 #endif
115  } while (next);
116  return next;
117 }
118 
119 
120 //_____________________________________________________________________________
121 //
122 // EOF
123 //
TBrowser b
Definition: RunAnaESD.C:12
Manager of FMD parameters.
Class to read ALTRO formated data from an AliRawReader.
#define AliWarning(message)
Definition: AliLog.h:541
AliFMDRawStream(AliRawReader *reader)
Class to read ALTRO formated data from an AliRawReader. This class is mostly here to set AliAltroRawS...
#define AliFMDDebug(N, A)
Definition: AliFMDDebug.h:39
Int_t GetHWAddress(Int_t iside, Int_t icol, Int_t irow, Int_t igain)
virtual Bool_t ReadChannel(UInt_t &ddl, UInt_t &addr, UInt_t &len, volatile UShort_t *data)