#include "AliACORDERawData.h"
#include "AliDAQ.h"
#include "AliFstream.h"
#include "AliRawDataHeaderSim.h"
ClassImp(AliACORDERawData)
AliACORDERawData::AliACORDERawData()
:TObject(),
fWord9(0),
fWord10(0),
fWord11(0),
fWord12(0)
{
}
AliACORDERawData::AliACORDERawData(const AliACORDERawData &r)
:TObject(),
fWord9(0),
fWord10(0),
fWord11(0),
fWord12(0)
{
((AliACORDERawData &) r).Copy(*this);
}
AliACORDERawData::~AliACORDERawData()
{
}
AliACORDERawData &AliACORDERawData::operator=(const AliACORDERawData &r)
{
if (this != &r) ((AliACORDERawData &) r).Copy(*this);
return *this;
}
void AliACORDERawData::WriteACORDERawData(Bool_t *b,Bool_t multi)
{
SetACORDERawWords(b,multi);
const char *fileName = AliDAQ::DdlFileName("ACORDE",0);
AliFstream* fFile = new AliFstream(fileName);
AliRawDataHeaderSim header;
UInt_t header_position = fFile->Tellp();
fFile->WriteBuffer((char*)(&header), sizeof(header));
fFile->WriteBuffer((char*)(&fWord9), sizeof(fWord9));
fFile->WriteBuffer((char*)(&fWord10), sizeof(fWord10));
fFile->WriteBuffer((char*)(&fWord11), sizeof(fWord11));
fFile->WriteBuffer((char*)(&fWord12), sizeof(fWord12));
UInt_t current_position = fFile->Tellp();
fFile->Seekp(header_position);
header.fSize = current_position-header_position;
header.SetAttribute(0);
fFile->WriteBuffer((char*)(&header), sizeof(header));
fFile->Seekp(current_position);
}
void AliACORDERawData::SetACORDERawWords(Bool_t *b,Bool_t multi)
{
for (Int_t i=0;i<30;i++) {
if (b[i]) {
fWord9|=(1<<i);
if (multi) fWord11|=(1<<i);
}
if (b[i+30]) {
fWord10|=(1<<i);
if (multi) fWord12|=(1<<i);
}
}
fWord10|=(unsigned int)(1<<30);
fWord12|=(unsigned int)(1<<30);
fWord11|=(unsigned int)(1<<31);
fWord12|=(unsigned int)(1<<31);
}