**************************************************************************/
////////////////////////////////////////////////////////////
-//This class contains the methods to create raw data //
-//for CTP (trigger). The CTP data format is taken as //
-//described in the Trigger TDR - pages 134 and 135. //
-////////////////////////////////////////////////////////////
+//This class contains the methods to create raw data //
+//for CTP (trigger). The CTP data format is taken as //
+//described in the Trigger TDR - pages 134 and 135. //
+//The updated version of raw data is in: //
+//http://epweb2.ph.bham.ac.uk/user/krivda/alice/ctp/ctp_readout1.pdf//
+//////////////////////////////////////////////////////////
#include <TObject.h>
#include <TString.h>
#include "AliCTPRawData.h"
#include "AliRunLoader.h"
#include "AliCentralTrigger.h"
-#include "AliRawDataHeader.h"
+#include "AliRawDataHeaderSim.h"
#include "AliLog.h"
#include "AliDAQ.h"
#include "AliFstream.h"
// raw data in a DDL file
ULong64_t l2class = 0;
UChar_t l2cluster = 0;
+ UInt_t l0input = 0;
+ UInt_t l1input = 0;
+ UShort_t l2input=0;
AliInfo("Storing the CTP DDL raw data...");
- AliRunLoader *runloader = AliRunLoader::GetRunLoader();
+ AliRunLoader *runloader = AliRunLoader::Instance();
if (runloader) {
if (!runloader->LoadTrigger()) {
AliCentralTrigger *aCTP = runloader->GetTrigger();
l2class = aCTP->GetClassMask();
// Then get the detector cluster to be read out
l2cluster = aCTP->GetClusterMask();
+ // Then get the input cluster mask
+ l0input = aCTP->GetL0TriggerInputs();
+ l1input = aCTP->GetL1TriggerInputs();
+ l2input = aCTP->GetL2TriggerInputs();
}
else
AliWarning("No trigger can be loaded! Putting empty trigger class into the CTP raw data !");
AliDebug(1,Form("CTP trigger mask = 0x%llx",l2class));
AliDebug(1,Form("CTP detector cluster = 0x%x",l2cluster));
- char fileName[15];
- strcpy(fileName,AliDAQ::DdlFileName("TRG",0));
- AliInfo(Form("Storing CTP raw data in %s",fileName));
+ TString fileName = AliDAQ::DdlFileName("TRG",0);
+ AliInfo(Form("Storing CTP raw data in %s",fileName.Data()));
AliFstream* outfile; // logical name of the output file
- outfile = new AliFstream(fileName);
-
- AliRawDataHeader header;
- // Write a dummy header
- UInt_t dataHeaderPosition=outfile->Tellp();
- outfile->WriteBuffer((char*)(&header),sizeof(header));
+ outfile = new AliFstream(fileName.Data());
// Writing CTP raw data here
// The format is taken as in
- // pages 134 and 135 of the
- // Trigger TDR
+ // dhttp://epweb2.ph.bham.ac.uk/user/krivda/alice/ctp/ctp_readout1.pdf
// If not 0, from where??
UInt_t bunchCross = 0;
// First 3 words here - Bunch-crossing and orbit numbers
UInt_t word = 0;
- word |= 0 << 13; // BlockID = 0 in case of CTP readout
+ word |= 0 << 15; // BlockID = 0 in case of CTP readout
word |= bunchCross & 0xFFF;
AliDebug(1,Form("CTP word1 = 0x%x",word));
outfile->WriteBuffer((char*)(&word),sizeof(UInt_t));
word = 0;
- word |= 0 << 13; // BlockID = 0 in case of CTP readout
+ word |= 0 << 15; // BlockID = 0 in case of CTP readout
word |= (orbitId >> 12) & 0xFFF;
AliDebug(1,Form("CTP word2 = 0x%x",word));
outfile->WriteBuffer((char*)(&word),sizeof(UInt_t));
word = 0;
- word |= 0 << 13; // BlockID = 0 in case of CTP readout
+ word |= 0 << 15; // BlockID = 0 in case of CTP readout
word |= orbitId & 0xFFF;
AliDebug(1,Form("CTP word3 = 0x%x",word));
outfile->WriteBuffer((char*)(&word),sizeof(UInt_t));
// Now the 4th word
word = 0;
- word |= 0 << 13; // BlockID = 0 in case of CTP readout
+ word |= 0 << 15; // BlockID = 0 in case of CTP readout
word |= ((UInt_t)esr) << 10;
word |= 0 << 8; // L2SwC - physics trigger
word |= (l2cluster & 0x3F) << 2; // L2Cluster
AliDebug(1,Form("CTP word4 = 0x%x",word));
outfile->WriteBuffer((char*)(&word),sizeof(UInt_t));
- // Then the last 4 words with the trigger classes
+ // Then the 4 words with the trigger classes
word = 0;
- word |= 0 << 13; // BlockID = 0 in case of CTP readout
+ word |= 0 << 15; // BlockID = 0 in case of CTP readout
word |= (UInt_t)((l2class >> 36) & 0xFFF);
AliDebug(1,Form("CTP word5 = 0x%x",word));
outfile->WriteBuffer((char*)(&word),sizeof(UInt_t));
word = 0;
- word |= 0 << 13; // BlockID = 0 in case of CTP readout
+ word |= 0 << 15; // BlockID = 0 in case of CTP readout
word |= (UInt_t)((l2class >> 24) & 0xFFF);
AliDebug(1,Form("CTP word6 = 0x%x",word));
outfile->WriteBuffer((char*)(&word),sizeof(UInt_t));
word = 0;
- word |= 0 << 13; // BlockID = 0 in case of CTP readout
+ word |= 0 << 15; // BlockID = 0 in case of CTP readout
word |= (UInt_t)((l2class >> 12) & 0xFFF);
AliDebug(1,Form("CTP word7 = 0x%x",word));
outfile->WriteBuffer((char*)(&word),sizeof(UInt_t));
word = 0;
- word |= 0 << 13; // BlockID = 0 in case of CTP readout
+ word |= 0 << 15; // BlockID = 0 in case of CTP readout
word |= (UInt_t)(l2class & 0xFFF);
AliDebug(1,Form("CTP word8 = 0x%x",word));
outfile->WriteBuffer((char*)(&word),sizeof(UInt_t));
- // Write the real data header
- UInt_t currentFilePosition=outfile->Tellp();
- outfile->Seekp(dataHeaderPosition);
- header.fSize=currentFilePosition-dataHeaderPosition;
- header.SetAttribute(0); // valid data
- header.SetTriggerClass(l2class);
- outfile->WriteBuffer((char*)(&header),sizeof(header));
+ // The last 5 words with trigger inputs
+ word = 0;
+ word |= 0 << 15; // BlockID = 0 in case of CTP readout
+ word |= (UInt_t)((l0input >> 12) & 0xFFF);
+ AliDebug(1,Form("CTP word9 = 0x%x",word));
+ outfile->WriteBuffer((char*)(&word),sizeof(UInt_t));
+ word = 0;
+ word |= 0 << 15; // BlockID = 0 in case of CTP readout
+ word |= (UInt_t)((l0input >> 0) & 0xFFF);
+ AliDebug(1,Form("CTP word10 = 0x%x",word));
+ outfile->WriteBuffer((char*)(&word),sizeof(UInt_t));
+ word = 0;
+ word |= 0 << 15; // BlockID = 0 in case of CTP readout
+ word |= (UInt_t)((l1input >> 12) & 0xFFF);
+ AliDebug(1,Form("CTP word11 = 0x%x",word));
+ outfile->WriteBuffer((char*)(&word),sizeof(UInt_t));
+ word = 0;
+ word |= 0 << 15; // BlockID = 0 in case of CTP readout
+ word |= (UInt_t)((l1input >> 0) & 0xFFF);
+ AliDebug(1,Form("CTP word12 = 0x%x",word));
+ outfile->WriteBuffer((char*)(&word),sizeof(UInt_t));
+ word = 0;
+ word |= 0 << 15; // BlockID = 0 in case of CTP readout
+ word |= (UInt_t)((l2input >> 0) & 0xFFF);
+ AliDebug(1,Form("CTP word13 = 0x%x",word));
+ outfile->WriteBuffer((char*)(&word),sizeof(UInt_t));
+
delete outfile;
return;