#include "AliCTPRawData.h"
#include "AliRunLoader.h"
#include "AliCentralTrigger.h"
-#include "AliDAQConfig.h"
#include "AliRawDataHeader.h"
#include "AliLog.h"
+#include "AliDAQ.h"
+#include "AliFstream.h"
ClassImp(AliCTPRawData)
////////////////////////////////////////////////////////////////////////////////////////
// This method writes the CTP (trigger)
// raw data in a DDL file
ULong64_t l2class = 0;
- UInt_t l2cluster = 0;
+ UChar_t l2cluster = 0;
AliInfo("Storing the CTP DDL raw data...");
AliRunLoader *runloader = AliRunLoader::GetRunLoader();
if (runloader) {
// First get the trigger mask
l2class = aCTP->GetClassMask();
// Then get the detector cluster to be read out
- TString detectorCluster = aCTP->GetDetectors();
- if (detectorCluster.Contains("START")) {
- if (detectorCluster.Contains("MUON"))
- l2cluster |= 1;
- else
- l2cluster |= 1 << 1;
- }
- else
- l2cluster |= 1 << 2;
+ l2cluster = aCTP->GetClusterMask();
}
else
AliWarning("No trigger can be loaded! Putting empty trigger class into the CTP raw data !");
AliDebug(1,Form("CTP detector cluster = 0x%x",l2cluster));
char fileName[15];
- sprintf(fileName,"%s_%d.ddl",kDetectors[kCTPIndex],kCTPIndex*0x100);
+ strcpy(fileName,AliDAQ::DdlFileName("TRG",0));
AliInfo(Form("Storing CTP raw data in %s",fileName));
- ofstream outfile; // logical name of the output file
- #ifndef __DECCXX
- outfile.open(fileName,ios::binary);
-#else
- outfile.open(fileName);
-#endif
+ AliFstream* outfile; // logical name of the output file
+ outfile = new AliFstream(fileName);
AliRawDataHeader header;
// Write a dummy header
- UInt_t dataHeaderPosition=outfile.tellp();
- outfile.write((char*)(&header),sizeof(header));
+ UInt_t dataHeaderPosition=outfile->Tellp();
+ outfile->WriteBuffer((char*)(&header),sizeof(header));
// Writing CTP raw data here
// The format is taken as in
// First 3 words here - Bunch-crossing and orbit numbers
UInt_t word = 0;
word |= 0 << 13; // BlockID = 0 in case of CTP readout
- word |= bunchCross && 0xFFF;
+ word |= bunchCross & 0xFFF;
AliDebug(1,Form("CTP word1 = 0x%x",word));
- outfile.write((char*)(&word),sizeof(UInt_t));
+ outfile->WriteBuffer((char*)(&word),sizeof(UInt_t));
word = 0;
word |= 0 << 13; // BlockID = 0 in case of CTP readout
- word |= (orbitId >> 12) && 0xFFF;
+ word |= (orbitId >> 12) & 0xFFF;
AliDebug(1,Form("CTP word2 = 0x%x",word));
- outfile.write((char*)(&word),sizeof(UInt_t));
+ outfile->WriteBuffer((char*)(&word),sizeof(UInt_t));
word = 0;
word |= 0 << 13; // BlockID = 0 in case of CTP readout
- word |= orbitId && 0xFFF;
+ word |= orbitId & 0xFFF;
AliDebug(1,Form("CTP word3 = 0x%x",word));
- outfile.write((char*)(&word),sizeof(UInt_t));
+ outfile->WriteBuffer((char*)(&word),sizeof(UInt_t));
// Now the 4th word
word = 0;
word |= 0 << 13; // BlockID = 0 in case of CTP readout
word |= ((UInt_t)esr) << 10;
word |= 0 << 8; // L2SwC - physics trigger
- word |= (l2cluster && 0x3F) << 2; // L2Cluster
- word |= (l2class >> 48) && 0x3;
+ word |= (l2cluster & 0x3F) << 2; // L2Cluster
+ word |= (UInt_t)((l2class >> 48) & 0x3);
AliDebug(1,Form("CTP word4 = 0x%x",word));
- outfile.write((char*)(&word),sizeof(UInt_t));
+ outfile->WriteBuffer((char*)(&word),sizeof(UInt_t));
// Then the last 4 words with the trigger classes
word = 0;
word |= 0 << 13; // BlockID = 0 in case of CTP readout
- word |= (l2class >> 36) && 0xFFF;
+ word |= (UInt_t)((l2class >> 36) & 0xFFF);
AliDebug(1,Form("CTP word5 = 0x%x",word));
- outfile.write((char*)(&word),sizeof(UInt_t));
+ outfile->WriteBuffer((char*)(&word),sizeof(UInt_t));
word = 0;
word |= 0 << 13; // BlockID = 0 in case of CTP readout
- word |= (l2class >> 24) && 0xFFF;
+ word |= (UInt_t)((l2class >> 24) & 0xFFF);
AliDebug(1,Form("CTP word6 = 0x%x",word));
- outfile.write((char*)(&word),sizeof(UInt_t));
+ outfile->WriteBuffer((char*)(&word),sizeof(UInt_t));
word = 0;
word |= 0 << 13; // BlockID = 0 in case of CTP readout
- word |= (l2class >> 12) && 0xFFF;
+ word |= (UInt_t)((l2class >> 12) & 0xFFF);
AliDebug(1,Form("CTP word7 = 0x%x",word));
- outfile.write((char*)(&word),sizeof(UInt_t));
+ outfile->WriteBuffer((char*)(&word),sizeof(UInt_t));
word = 0;
word |= 0 << 13; // BlockID = 0 in case of CTP readout
- word |= l2class && 0xFFF;
+ word |= (UInt_t)(l2class & 0xFFF);
AliDebug(1,Form("CTP word8 = 0x%x",word));
- outfile.write((char*)(&word),sizeof(UInt_t));
+ outfile->WriteBuffer((char*)(&word),sizeof(UInt_t));
// Write the real data header
- UInt_t currentFilePosition=outfile.tellp();
- outfile.seekp(dataHeaderPosition);
+ UInt_t currentFilePosition=outfile->Tellp();
+ outfile->Seekp(dataHeaderPosition);
header.fSize=currentFilePosition-dataHeaderPosition;
header.SetAttribute(0); // valid data
header.SetTriggerClass(l2class);
- outfile.write((char*)(&header),sizeof(header));
- outfile.close();
+ outfile->WriteBuffer((char*)(&header),sizeof(header));
+ delete outfile;
return;
}