ROOT logo
// $Id$
/**
 * Analyze RCU RAW data ddl files.
 *
 * Usage:
 *   aliroot -b -q -l check-ddl.C'("filename")' | tee check-ddl.C
 *
 * Check an RCU ddl file and print out the channel content by using
 * the AliAltroDecoder.
 *
 * \b Note: The channel data has to be read in reverse order and is:
 * - length of a bunch
 * - end time bin of the bunch
 * - bunch data
 *
 * E.g.
 * <pre>
 * ---------- channel ----------
 * 10       314     3       300
 * 432      3
 * </pre>
 * means two bunches, one at 432 signal 300 and one at 314 signal 10.
 *
 * @author Matthias.Richter@ift.uib.no
 * @ingroup alihlt_rcu
 */
void check_ddl(const char* filename=NULL)
{
  if (!filename) {
    cout << "usage: aliroot -b -l -q check-ddl.C'(\"filename\")'" << endl;
    return;
  }

  TString param=filename;
  param+="?filetype=raw";
  TFile file(param);
  if (file.IsZombie()) {
    cout << "can not open file " << filename << endl;
    return;
  }

  TArrayC buffer(file.GetSize());
  if (file.ReadBuffer(buffer.GetArray(), buffer.GetSize())) {
    cout << "error reading file " << filename << endl;
    return;
  }

  AliAltroDecoder decoder;
  if (decoder.SetMemory((UChar_t*)buffer.GetArray(), (UInt_t)buffer.GetSize())<0) {
    cout << "error setting up decoder " << endl;
    return;
  }

  if (!decoder.Decode()) {
    cout << "error decoding file " << filename << endl;
    return;    
  }

  cout << "RCU trailer size: " << decoder.GetRCUTrailerSize() << endl;

  AliAltroData channel;
  while (decoder.NextChannel(&channel)) {
    cout << "---------- channel " << channel.GetHadd() << " ----------" << endl;
    decoder.PrintInfo(channel, channel.GetDataSize(), 4);
  }
}
 check-ddl.C:1
 check-ddl.C:2
 check-ddl.C:3
 check-ddl.C:4
 check-ddl.C:5
 check-ddl.C:6
 check-ddl.C:7
 check-ddl.C:8
 check-ddl.C:9
 check-ddl.C:10
 check-ddl.C:11
 check-ddl.C:12
 check-ddl.C:13
 check-ddl.C:14
 check-ddl.C:15
 check-ddl.C:16
 check-ddl.C:17
 check-ddl.C:18
 check-ddl.C:19
 check-ddl.C:20
 check-ddl.C:21
 check-ddl.C:22
 check-ddl.C:23
 check-ddl.C:24
 check-ddl.C:25
 check-ddl.C:26
 check-ddl.C:27
 check-ddl.C:28
 check-ddl.C:29
 check-ddl.C:30
 check-ddl.C:31
 check-ddl.C:32
 check-ddl.C:33
 check-ddl.C:34
 check-ddl.C:35
 check-ddl.C:36
 check-ddl.C:37
 check-ddl.C:38
 check-ddl.C:39
 check-ddl.C:40
 check-ddl.C:41
 check-ddl.C:42
 check-ddl.C:43
 check-ddl.C:44
 check-ddl.C:45
 check-ddl.C:46
 check-ddl.C:47
 check-ddl.C:48
 check-ddl.C:49
 check-ddl.C:50
 check-ddl.C:51
 check-ddl.C:52
 check-ddl.C:53
 check-ddl.C:54
 check-ddl.C:55
 check-ddl.C:56
 check-ddl.C:57
 check-ddl.C:58
 check-ddl.C:59
 check-ddl.C:60
 check-ddl.C:61
 check-ddl.C:62
 check-ddl.C:63
 check-ddl.C:64
 check-ddl.C:65
 check-ddl.C:66
 check-ddl.C:67