ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

/* $Id$ */

/*
 *  Class for reading the Trigger Data Stream from Raw.
 *   please read documentation for AliPHOSTriggerRawReader::ReadFromStream .
 */


#include "AliPHOSTriggerRawReader.h"

#include "AliCaloRawStreamV3.h"
#include "AliPHOSTRURawReader.h"

ClassImp(AliPHOSTriggerRawReader)


//________________________________________________________________
AliPHOSTriggerRawReader::AliPHOSTriggerRawReader()
  : TObject(),
    fTRUs()
{
  // default constructor.

  // Initialise fTRUs
  for(Int_t mod=0; mod<kNMods; mod++)
    for(Int_t row=0; row<kNTRURows; ++row)
      for(Int_t branch=0; branch<kNBranches; ++branch)
	fTRUs[mod][row][branch] = 0;
}

    
//________________________________________________________________
AliPHOSTriggerRawReader::~AliPHOSTriggerRawReader()
{
  // destructor
  
  for(Int_t mod = 0; mod < kNMods; ++mod)
    for(Int_t row = 0; row < kNTRURows; ++row)
      for(Int_t branch = 0; branch < kNBranches; branch++)
	delete fTRUs[mod][row][branch];
}
 

//________________________________________________________________
AliPHOSTRURawReader* AliPHOSTriggerRawReader::GetTRU(Int_t mod, Int_t truRow, Int_t branch)
{
  // Get TRU Raw Reader.

  if (mod<0 || mod>=kNMods) return 0x0;
  if (truRow<0 || truRow>=kNTRURows) return 0x0;
  if (branch<0 || branch>=kNBranches) return 0x0;

  if( ! fTRUs[mod][truRow][branch] )
    fTRUs[mod][truRow][branch] = new AliPHOSTRURawReader();
  return fTRUs[mod][truRow][branch];
}
 

//________________________________________________________________
void AliPHOSTriggerRawReader::ReadFromStream(AliCaloRawStreamV3* rawStream)
{
  // Give a AliCaloRawStreamV3* to an instance of this class.
  // It will read from the stream. The stream is passed to 'AliPHOSTRURawReader's
  // which are accesible through 'AliPHOSTriggerRawReader::GetTRU'.
  // note that @param rawStream will not be left in the same state in terms of
  // bunch position, i.e. rawStream->NextBunch() will be called.
  //
  // It is up to the user to check that
  // the is at a channel which is tru data, i.e.:
  //   while (rawStream->NextDDL()) {
  //     while (rawStream->NextChannel()) {
  //       if ( rawStream->IsTRUData() ) 
  // 	  triggerReader->ReadFromStream(rawStream);
  //       else
  // 	  // do something else
  //     }
  //   } 
  // . Other uses will result in undefined behaviour!

  while (rawStream->NextBunch()) {
    Int_t module = rawStream->GetModule();
    Int_t rcuRow = rawStream->GetRow();
    Int_t branch = 1 - rawStream->GetBranch(); // !!! Found this to be necessary, -Henrik Qvigstad <henrik.qvigstad@cern.ch>
    
    AliPHOSTRURawReader* reader = GetTRU(module, rcuRow, branch);
    if (reader) reader->ReadFromStream(rawStream);
  } // end while 
}

//________________________________________________________________
void AliPHOSTriggerRawReader::Reset()
{
  // Reset

  for(Int_t mod = 0; mod < kNMods; ++mod)
    for(Int_t truRow = 0; truRow < kNTRURows; ++truRow)
      for(Int_t branch = 0; branch < kNBranches; branch++)
	if( fTRUs[mod][truRow][branch] )
	  fTRUs[mod][truRow][branch]->Reset();
}
 AliPHOSTriggerRawReader.cxx:1
 AliPHOSTriggerRawReader.cxx:2
 AliPHOSTriggerRawReader.cxx:3
 AliPHOSTriggerRawReader.cxx:4
 AliPHOSTriggerRawReader.cxx:5
 AliPHOSTriggerRawReader.cxx:6
 AliPHOSTriggerRawReader.cxx:7
 AliPHOSTriggerRawReader.cxx:8
 AliPHOSTriggerRawReader.cxx:9
 AliPHOSTriggerRawReader.cxx:10
 AliPHOSTriggerRawReader.cxx:11
 AliPHOSTriggerRawReader.cxx:12
 AliPHOSTriggerRawReader.cxx:13
 AliPHOSTriggerRawReader.cxx:14
 AliPHOSTriggerRawReader.cxx:15
 AliPHOSTriggerRawReader.cxx:16
 AliPHOSTriggerRawReader.cxx:17
 AliPHOSTriggerRawReader.cxx:18
 AliPHOSTriggerRawReader.cxx:19
 AliPHOSTriggerRawReader.cxx:20
 AliPHOSTriggerRawReader.cxx:21
 AliPHOSTriggerRawReader.cxx:22
 AliPHOSTriggerRawReader.cxx:23
 AliPHOSTriggerRawReader.cxx:24
 AliPHOSTriggerRawReader.cxx:25
 AliPHOSTriggerRawReader.cxx:26
 AliPHOSTriggerRawReader.cxx:27
 AliPHOSTriggerRawReader.cxx:28
 AliPHOSTriggerRawReader.cxx:29
 AliPHOSTriggerRawReader.cxx:30
 AliPHOSTriggerRawReader.cxx:31
 AliPHOSTriggerRawReader.cxx:32
 AliPHOSTriggerRawReader.cxx:33
 AliPHOSTriggerRawReader.cxx:34
 AliPHOSTriggerRawReader.cxx:35
 AliPHOSTriggerRawReader.cxx:36
 AliPHOSTriggerRawReader.cxx:37
 AliPHOSTriggerRawReader.cxx:38
 AliPHOSTriggerRawReader.cxx:39
 AliPHOSTriggerRawReader.cxx:40
 AliPHOSTriggerRawReader.cxx:41
 AliPHOSTriggerRawReader.cxx:42
 AliPHOSTriggerRawReader.cxx:43
 AliPHOSTriggerRawReader.cxx:44
 AliPHOSTriggerRawReader.cxx:45
 AliPHOSTriggerRawReader.cxx:46
 AliPHOSTriggerRawReader.cxx:47
 AliPHOSTriggerRawReader.cxx:48
 AliPHOSTriggerRawReader.cxx:49
 AliPHOSTriggerRawReader.cxx:50
 AliPHOSTriggerRawReader.cxx:51
 AliPHOSTriggerRawReader.cxx:52
 AliPHOSTriggerRawReader.cxx:53
 AliPHOSTriggerRawReader.cxx:54
 AliPHOSTriggerRawReader.cxx:55
 AliPHOSTriggerRawReader.cxx:56
 AliPHOSTriggerRawReader.cxx:57
 AliPHOSTriggerRawReader.cxx:58
 AliPHOSTriggerRawReader.cxx:59
 AliPHOSTriggerRawReader.cxx:60
 AliPHOSTriggerRawReader.cxx:61
 AliPHOSTriggerRawReader.cxx:62
 AliPHOSTriggerRawReader.cxx:63
 AliPHOSTriggerRawReader.cxx:64
 AliPHOSTriggerRawReader.cxx:65
 AliPHOSTriggerRawReader.cxx:66
 AliPHOSTriggerRawReader.cxx:67
 AliPHOSTriggerRawReader.cxx:68
 AliPHOSTriggerRawReader.cxx:69
 AliPHOSTriggerRawReader.cxx:70
 AliPHOSTriggerRawReader.cxx:71
 AliPHOSTriggerRawReader.cxx:72
 AliPHOSTriggerRawReader.cxx:73
 AliPHOSTriggerRawReader.cxx:74
 AliPHOSTriggerRawReader.cxx:75
 AliPHOSTriggerRawReader.cxx:76
 AliPHOSTriggerRawReader.cxx:77
 AliPHOSTriggerRawReader.cxx:78
 AliPHOSTriggerRawReader.cxx:79
 AliPHOSTriggerRawReader.cxx:80
 AliPHOSTriggerRawReader.cxx:81
 AliPHOSTriggerRawReader.cxx:82
 AliPHOSTriggerRawReader.cxx:83
 AliPHOSTriggerRawReader.cxx:84
 AliPHOSTriggerRawReader.cxx:85
 AliPHOSTriggerRawReader.cxx:86
 AliPHOSTriggerRawReader.cxx:87
 AliPHOSTriggerRawReader.cxx:88
 AliPHOSTriggerRawReader.cxx:89
 AliPHOSTriggerRawReader.cxx:90
 AliPHOSTriggerRawReader.cxx:91
 AliPHOSTriggerRawReader.cxx:92
 AliPHOSTriggerRawReader.cxx:93
 AliPHOSTriggerRawReader.cxx:94
 AliPHOSTriggerRawReader.cxx:95
 AliPHOSTriggerRawReader.cxx:96
 AliPHOSTriggerRawReader.cxx:97
 AliPHOSTriggerRawReader.cxx:98
 AliPHOSTriggerRawReader.cxx:99
 AliPHOSTriggerRawReader.cxx:100
 AliPHOSTriggerRawReader.cxx:101
 AliPHOSTriggerRawReader.cxx:102
 AliPHOSTriggerRawReader.cxx:103
 AliPHOSTriggerRawReader.cxx:104
 AliPHOSTriggerRawReader.cxx:105
 AliPHOSTriggerRawReader.cxx:106
 AliPHOSTriggerRawReader.cxx:107
 AliPHOSTriggerRawReader.cxx:108
 AliPHOSTriggerRawReader.cxx:109
 AliPHOSTriggerRawReader.cxx:110
 AliPHOSTriggerRawReader.cxx:111
 AliPHOSTriggerRawReader.cxx:112
 AliPHOSTriggerRawReader.cxx:113
 AliPHOSTriggerRawReader.cxx:114
 AliPHOSTriggerRawReader.cxx:115