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$ */
 
#include "AliMUONBlockHeader.h"
#include "AliMUONDspHeader.h"

#include <Riostream.h>

//-----------------------------------------------------------------------------
/// \class AliMUONBlockHeader
/// Block structure for tracker raw data
/// each DDL contains two blocks,
/// each block contains at most 5 dsp structure.
/// Beside the total length and length of the below data
/// the header of the block contains the front end DSP id, trigger words and paddind word
///
/// \author Christian Finck
//-----------------------------------------------------------------------------

using std::cout;
using std::endl;
/// \cond CLASSIMP
ClassImp(AliMUONBlockHeader)
/// \endcond

const Int_t  AliMUONBlockHeader::fgkHeaderLength   = 8;
const UInt_t AliMUONBlockHeader::fgkDefaultDataKey = 0xFC0000FC;
const UInt_t AliMUONBlockHeader::fgkDdlDataKey     = 0xD000000D;

//___________________________________________
AliMUONBlockHeader::AliMUONBlockHeader(TRootIOCtor* /*dummy*/)
:  TObject(),
fDataKey(0),
fTotalLength(0),
fLength(0),
fDspId(0),
fL0Trigger(0),
fMiniEventId(0),
fEventId1(0),
fEventId2(0),
fDspHeaderArray(0x0)
{
  ///
  /// ctor
  ///
  
}

//___________________________________________
AliMUONBlockHeader::AliMUONBlockHeader()
  :  TObject(),
     fDataKey(0),
     fTotalLength(0),
     fLength(0),
     fDspId(0),
     fL0Trigger(0),
     fMiniEventId(0),
     fEventId1(0),
     fEventId2(0),
     fDspHeaderArray(new TClonesArray("AliMUONDspHeader", 5))

{
  ///
  /// ctor
  ///

}

//___________________________________________
AliMUONBlockHeader::~AliMUONBlockHeader()
{
  /// 
  /// dtor
  ///
  fDspHeaderArray->Delete();
  delete fDspHeaderArray;
}

//___________________________________________
AliMUONBlockHeader::AliMUONBlockHeader(const AliMUONBlockHeader& event)
  :  TObject(event),
     fDataKey(event.fDataKey),
     fTotalLength(event.fTotalLength),
     fLength(event.fLength),
     fDspId(event.fDspId),
     fL0Trigger(event.fL0Trigger),
     fMiniEventId(event.fMiniEventId),
     fEventId1(event.fEventId1),
     fEventId2(event.fEventId2),
     fDspHeaderArray(new TClonesArray("AliMUONDspHeader", 5))
{
  ///
  /// copy ctor
  ///

  for (Int_t index = 0; index < (event.fDspHeaderArray)->GetEntriesFast(); index++) {
    {new ((*fDspHeaderArray)[fDspHeaderArray->GetEntriesFast()]) 
        AliMUONDspHeader(*(AliMUONDspHeader*)(event.fDspHeaderArray)->At(index));}
  }
  //  fDspHeaderArray->SetOwner();
}

//___________________________________________
AliMUONBlockHeader&
AliMUONBlockHeader::operator=(const AliMUONBlockHeader &event)
{
  /// 
  /// assignment operator
  ///
  if (this == &event) return *this;

  fDataKey     = event.fDataKey;
  fTotalLength = event.fTotalLength;
  fLength      = event.fLength;
  fDspId       = event.fDspId;
 
  fL0Trigger   = event.fL0Trigger;
  fMiniEventId = event.fMiniEventId;
  fEventId1    = event.fEventId1;
  fEventId2    = event.fEventId2;

  fDspHeaderArray = new TClonesArray("AliMUONDspHeader", 5);
  for (Int_t index = 0; index < (event.fDspHeaderArray)->GetEntriesFast(); index++) {
    new ((*fDspHeaderArray)[fDspHeaderArray->GetEntriesFast()]) 
        AliMUONDspHeader(*(AliMUONDspHeader*)(event.fDspHeaderArray)->At(index));
  }

  return *this;

}
//___________________________________________
void AliMUONBlockHeader::AddDspHeader(const AliMUONDspHeader& dspHeader)
{ 
  /// 
  /// adding the dsp structure
  /// into the TClonesArray
  ///
  TClonesArray &dspArray = *fDspHeaderArray;
  new(dspArray[dspArray.GetEntriesFast()]) AliMUONDspHeader(dspHeader);

}
//___________________________________________
void AliMUONBlockHeader::Clear(Option_t* )
{
  /// Clear TClones arrays
  /// instead of deleting
  ///
  fDspHeaderArray->Clear("C");
 
}

//___________________________________________
void AliMUONBlockHeader::Print(Option_t* /*opt*/) const
{
  /// print out

  cout << "CRT info"        << endl;
  cout << "DataKey: "       << fDataKey << endl;
  cout << "TotalLength: "   << fTotalLength << endl;
  cout << "Length: "        << fLength << endl;
  cout << "DspId: "         << fDspId << endl;
 
  cout << "L0Trigger: "     << fL0Trigger << endl;
  cout << "MiniEventId: "   << fMiniEventId<< endl; 
  cout << "EventId1: "      << fEventId1 << endl;
  cout << "EventId2: "      << fEventId2 << endl;;

}
 AliMUONBlockHeader.cxx:1
 AliMUONBlockHeader.cxx:2
 AliMUONBlockHeader.cxx:3
 AliMUONBlockHeader.cxx:4
 AliMUONBlockHeader.cxx:5
 AliMUONBlockHeader.cxx:6
 AliMUONBlockHeader.cxx:7
 AliMUONBlockHeader.cxx:8
 AliMUONBlockHeader.cxx:9
 AliMUONBlockHeader.cxx:10
 AliMUONBlockHeader.cxx:11
 AliMUONBlockHeader.cxx:12
 AliMUONBlockHeader.cxx:13
 AliMUONBlockHeader.cxx:14
 AliMUONBlockHeader.cxx:15
 AliMUONBlockHeader.cxx:16
 AliMUONBlockHeader.cxx:17
 AliMUONBlockHeader.cxx:18
 AliMUONBlockHeader.cxx:19
 AliMUONBlockHeader.cxx:20
 AliMUONBlockHeader.cxx:21
 AliMUONBlockHeader.cxx:22
 AliMUONBlockHeader.cxx:23
 AliMUONBlockHeader.cxx:24
 AliMUONBlockHeader.cxx:25
 AliMUONBlockHeader.cxx:26
 AliMUONBlockHeader.cxx:27
 AliMUONBlockHeader.cxx:28
 AliMUONBlockHeader.cxx:29
 AliMUONBlockHeader.cxx:30
 AliMUONBlockHeader.cxx:31
 AliMUONBlockHeader.cxx:32
 AliMUONBlockHeader.cxx:33
 AliMUONBlockHeader.cxx:34
 AliMUONBlockHeader.cxx:35
 AliMUONBlockHeader.cxx:36
 AliMUONBlockHeader.cxx:37
 AliMUONBlockHeader.cxx:38
 AliMUONBlockHeader.cxx:39
 AliMUONBlockHeader.cxx:40
 AliMUONBlockHeader.cxx:41
 AliMUONBlockHeader.cxx:42
 AliMUONBlockHeader.cxx:43
 AliMUONBlockHeader.cxx:44
 AliMUONBlockHeader.cxx:45
 AliMUONBlockHeader.cxx:46
 AliMUONBlockHeader.cxx:47
 AliMUONBlockHeader.cxx:48
 AliMUONBlockHeader.cxx:49
 AliMUONBlockHeader.cxx:50
 AliMUONBlockHeader.cxx:51
 AliMUONBlockHeader.cxx:52
 AliMUONBlockHeader.cxx:53
 AliMUONBlockHeader.cxx:54
 AliMUONBlockHeader.cxx:55
 AliMUONBlockHeader.cxx:56
 AliMUONBlockHeader.cxx:57
 AliMUONBlockHeader.cxx:58
 AliMUONBlockHeader.cxx:59
 AliMUONBlockHeader.cxx:60
 AliMUONBlockHeader.cxx:61
 AliMUONBlockHeader.cxx:62
 AliMUONBlockHeader.cxx:63
 AliMUONBlockHeader.cxx:64
 AliMUONBlockHeader.cxx:65
 AliMUONBlockHeader.cxx:66
 AliMUONBlockHeader.cxx:67
 AliMUONBlockHeader.cxx:68
 AliMUONBlockHeader.cxx:69
 AliMUONBlockHeader.cxx:70
 AliMUONBlockHeader.cxx:71
 AliMUONBlockHeader.cxx:72
 AliMUONBlockHeader.cxx:73
 AliMUONBlockHeader.cxx:74
 AliMUONBlockHeader.cxx:75
 AliMUONBlockHeader.cxx:76
 AliMUONBlockHeader.cxx:77
 AliMUONBlockHeader.cxx:78
 AliMUONBlockHeader.cxx:79
 AliMUONBlockHeader.cxx:80
 AliMUONBlockHeader.cxx:81
 AliMUONBlockHeader.cxx:82
 AliMUONBlockHeader.cxx:83
 AliMUONBlockHeader.cxx:84
 AliMUONBlockHeader.cxx:85
 AliMUONBlockHeader.cxx:86
 AliMUONBlockHeader.cxx:87
 AliMUONBlockHeader.cxx:88
 AliMUONBlockHeader.cxx:89
 AliMUONBlockHeader.cxx:90
 AliMUONBlockHeader.cxx:91
 AliMUONBlockHeader.cxx:92
 AliMUONBlockHeader.cxx:93
 AliMUONBlockHeader.cxx:94
 AliMUONBlockHeader.cxx:95
 AliMUONBlockHeader.cxx:96
 AliMUONBlockHeader.cxx:97
 AliMUONBlockHeader.cxx:98
 AliMUONBlockHeader.cxx:99
 AliMUONBlockHeader.cxx:100
 AliMUONBlockHeader.cxx:101
 AliMUONBlockHeader.cxx:102
 AliMUONBlockHeader.cxx:103
 AliMUONBlockHeader.cxx:104
 AliMUONBlockHeader.cxx:105
 AliMUONBlockHeader.cxx:106
 AliMUONBlockHeader.cxx:107
 AliMUONBlockHeader.cxx:108
 AliMUONBlockHeader.cxx:109
 AliMUONBlockHeader.cxx:110
 AliMUONBlockHeader.cxx:111
 AliMUONBlockHeader.cxx:112
 AliMUONBlockHeader.cxx:113
 AliMUONBlockHeader.cxx:114
 AliMUONBlockHeader.cxx:115
 AliMUONBlockHeader.cxx:116
 AliMUONBlockHeader.cxx:117
 AliMUONBlockHeader.cxx:118
 AliMUONBlockHeader.cxx:119
 AliMUONBlockHeader.cxx:120
 AliMUONBlockHeader.cxx:121
 AliMUONBlockHeader.cxx:122
 AliMUONBlockHeader.cxx:123
 AliMUONBlockHeader.cxx:124
 AliMUONBlockHeader.cxx:125
 AliMUONBlockHeader.cxx:126
 AliMUONBlockHeader.cxx:127
 AliMUONBlockHeader.cxx:128
 AliMUONBlockHeader.cxx:129
 AliMUONBlockHeader.cxx:130
 AliMUONBlockHeader.cxx:131
 AliMUONBlockHeader.cxx:132
 AliMUONBlockHeader.cxx:133
 AliMUONBlockHeader.cxx:134
 AliMUONBlockHeader.cxx:135
 AliMUONBlockHeader.cxx:136
 AliMUONBlockHeader.cxx:137
 AliMUONBlockHeader.cxx:138
 AliMUONBlockHeader.cxx:139
 AliMUONBlockHeader.cxx:140
 AliMUONBlockHeader.cxx:141
 AliMUONBlockHeader.cxx:142
 AliMUONBlockHeader.cxx:143
 AliMUONBlockHeader.cxx:144
 AliMUONBlockHeader.cxx:145
 AliMUONBlockHeader.cxx:146
 AliMUONBlockHeader.cxx:147
 AliMUONBlockHeader.cxx:148
 AliMUONBlockHeader.cxx:149
 AliMUONBlockHeader.cxx:150
 AliMUONBlockHeader.cxx:151
 AliMUONBlockHeader.cxx:152
 AliMUONBlockHeader.cxx:153
 AliMUONBlockHeader.cxx:154
 AliMUONBlockHeader.cxx:155
 AliMUONBlockHeader.cxx:156
 AliMUONBlockHeader.cxx:157
 AliMUONBlockHeader.cxx:158
 AliMUONBlockHeader.cxx:159
 AliMUONBlockHeader.cxx:160
 AliMUONBlockHeader.cxx:161
 AliMUONBlockHeader.cxx:162
 AliMUONBlockHeader.cxx:163
 AliMUONBlockHeader.cxx:164
 AliMUONBlockHeader.cxx:165
 AliMUONBlockHeader.cxx:166
 AliMUONBlockHeader.cxx:167
 AliMUONBlockHeader.cxx:168
 AliMUONBlockHeader.cxx:169
 AliMUONBlockHeader.cxx:170
 AliMUONBlockHeader.cxx:171
 AliMUONBlockHeader.cxx:172
 AliMUONBlockHeader.cxx:173
 AliMUONBlockHeader.cxx:174
 AliMUONBlockHeader.cxx:175
 AliMUONBlockHeader.cxx:176
 AliMUONBlockHeader.cxx:177
 AliMUONBlockHeader.cxx:178
 AliMUONBlockHeader.cxx:179
 AliMUONBlockHeader.cxx:180
 AliMUONBlockHeader.cxx:181
 AliMUONBlockHeader.cxx:182