X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=T0%2FAliT0RawData.cxx;h=fb1604b0d7a5f9a4619af52a32581a340bced222;hb=8ad6a9be5526a3e2ac39dbaaeb9207724aa99f75;hp=3ced0347c6179d6c1d9fd93e279aead0c4edfda6;hpb=dc7ca31de92d1b061fddc1358c9d984ed869aa95;p=u%2Fmrichter%2FAliRoot.git diff --git a/T0/AliT0RawData.cxx b/T0/AliT0RawData.cxx index 3ced0347c61..fb1604b0d7a 100644 --- a/T0/AliT0RawData.cxx +++ b/T0/AliT0RawData.cxx @@ -33,11 +33,25 @@ #include "AliBitPacking.h" #include "AliFstream.h" #include "AliRunLoader.h" +#include "AliDAQ.h" ClassImp(AliT0RawData) //_____________________________________________________________________________ -AliT0RawData::AliT0RawData():TObject() + AliT0RawData::AliT0RawData():TObject(), + fVerbose(0), + fIndex(-1) , + fEventNumber(0), + fTimeCFD(new TArrayI(24)), + fADC1( new TArrayI(24)), + fTimeLED( new TArrayI(24)), + fADC0( new TArrayI(24)), + fFile(0x0), + fDataHeaderPos(0), + fDRMDataHeaderPos(0), + fTRMDataHeaderPos(0), + fDigits(0) + { /* - 48 channels (2 words each as in TOF DDL) for : @@ -57,22 +71,12 @@ and the same for amplified but A=Log(10*Amplitude). uncertances */ - fIndex=-1; - fDigits = NULL; - - fTimeCFD = new TArrayI(24); - fADC1 = new TArrayI(24); - fTimeLED = new TArrayI(24); - fADC0 = new TArrayI(24); - fFile = NULL; - fDataHeaderPos = 0; - fDRMDataHeaderPos = 0; - memset(fBuffer,0,512*sizeof(UInt_t)); - //open the output file char fileName[15]; - sprintf(fileName,"T0_%d.ddl", 0xd00); + strcpy(fileName,AliDAQ::DdlFileName("T0",0)); //The name of the output file fFile = new AliFstream(fileName); + memset(fBuffer,0,512*sizeof(UInt_t)); + //get event number AliRunLoader *runloader = AliRunLoader::GetRunLoader(); if (runloader) { @@ -81,7 +85,21 @@ uncertances } //_____________________________________________________________________________ -AliT0RawData::AliT0RawData(const AliT0RawData &r):TObject() + +AliT0RawData::AliT0RawData(const AliT0RawData &r):TObject(), + fVerbose(0), + fIndex(-1) , + fEventNumber(0), + fTimeCFD(new TArrayI(24)), + fADC1( new TArrayI(24)), + fTimeLED( new TArrayI(24)), + fADC0( new TArrayI(24)), + fFile(0x0), + fDataHeaderPos(0), + fDRMDataHeaderPos(0), + fTRMDataHeaderPos(0), + fDigits(0) + { // // AliT0rawData copy constructor @@ -130,64 +148,67 @@ void AliT0RawData::GetDigits(AliT0digit *fDigits) // Int_t error=0; Int_t time, positionOfTRMHeader; - - // Get the digits array - - fDigits->GetTime(*fTimeCFD); - fDigits->GetADC(*fADC1); - fDigits->GetTimeAmp(*fTimeLED); - fDigits->GetADCAmp(*fADC0); + + // Get the digits array + + fDigits->GetTimeCFD(*fTimeCFD); + fDigits->GetQT0(*fADC1); + fDigits->GetTimeLED(*fTimeLED); + fDigits->GetQT1(*fADC0); Int_t meantime = fDigits->MeanTime(); Int_t timediff = fDigits->TimeDiff(); Int_t mult0=fDigits->SumMult(); Int_t mult1=fDigits->SumMult(); - Int_t timeA = fDigits->BestTimeLeft(); - Int_t timeC = fDigits->BestTimeRight(); - - - TArrayI *allData = new TArrayI(107); + Int_t timeA = fDigits->BestTimeC(); + Int_t timeC = fDigits->BestTimeA(); + + + TArrayI *allData = new TArrayI(110); Int_t i=0; - for (i=0; i<24; i++) { - allData->AddAt(fTimeLED->At(i),i); - allData->AddAt(fTimeCFD->At(i),i+24); - allData->AddAt(fADC0->At(i),i+54); - allData->AddAt(fADC1->At(i),i+78); + allData->AddAt(0,0); + for (i=1; i<25; i++) { + allData->AddAt(fTimeLED->At(i-1),i); + allData->AddAt(fTimeCFD->At(i-1),i+24); + allData->AddAt(fADC0->At(i-1),i+54); + allData->AddAt(fADC1->At(i-1),i+78); + } - allData->AddAt(meantime,48); - allData->AddAt(timediff,49); - allData->AddAt(timediff,102); //trigger vertex - allData->AddAt(timeA,50); - allData->AddAt(timeA,103); //trigger T0A - allData->AddAt(timeC,51); - allData->AddAt(timeC,104); //trigger T0C - allData->AddAt(mult0,52); - allData->AddAt(mult1,105); //trigger central - allData->AddAt(mult1,53); - allData->AddAt(mult1,106); //trigger semi-central + allData->AddAt(meantime,49); + allData->AddAt(timediff,50); + allData->AddAt(timediff,103); //trigger vertex + allData->AddAt(timeA,51); + allData->AddAt(timeA,104); //trigger T0A + allData->AddAt(timeC,52); + allData->AddAt(timeC,105); //trigger T0C + allData->AddAt(mult0,53); + allData->AddAt(mult1,106); //trigger central + allData->AddAt(mult1,54); + allData->AddAt(mult1,107); //trigger semi-central + + // cout.setf( ios_base::hex, ios_base::basefield ); + //space for DRM header - fIndex += 4; + fIndex += 6; + Int_t startTRM=fIndex; //space for 1st TRM header fIndex ++; positionOfTRMHeader= fIndex; //space for chain header fIndex ++; - + WriteChainDataHeader(0, 0); // // Loop through all PMT Int_t chain=0; Int_t iTDC = 0; Int_t channel=0; Int_t trm1words=0; - Int_t fWordsIn1stTRM=0; + //LED - for (Int_t det = 0; det < 54; det++) { + for (Int_t det = 0; det < 55; det++) { time = allData->At(det); - - if (time >0) { + if (time >0) FillTime(channel, iTDC, time); - trm1words++; - } if (channel < 6) channel +=2; else { channel = 0; @@ -196,44 +217,56 @@ void AliT0RawData::GetDigits(AliT0digit *fDigits) } } - WriteTrailer(0,0,fEventNumber,1); // 1st chain trailer + + WriteChainDataTrailer(1); // 1st chain trailer + fIndex++; + WriteChainDataHeader(2, 1); // + WriteChainDataTrailer(3); // 2st chain trailer WriteTrailer(15,0,fEventNumber,5); // 1st TRM trailer - fWordsIn1stTRM = trm1words + 4; - WriteTRMDataHeader(3, trm1words , positionOfTRMHeader); + trm1words = fIndex - startTRM; + WriteTRMDataHeader(0, trm1words , positionOfTRMHeader); //space for 2st TRM header + startTRM=fIndex; fIndex ++; positionOfTRMHeader= fIndex; - - //space for chain header + + // chain header fIndex ++; - - + WriteChainDataHeader(0, 0); // chain=0; iTDC = 0; channel=0; - Int_t trm2words=0; - for (Int_t det = 54; det < 107; det++) { - time = allData->At(det); - if (time >0) { + for (Int_t det = 55; det < 108; det++) { + time = allData->At(det); + + if (time >0) FillTime(channel, iTDC, time); - trm2words++;} + if (channel < 6) channel +=2; else { channel = 0; iTDC++; if (iTDC>15) { chain++; iTDC=0;} } + + } + WriteChainDataTrailer(1); // 1st chain trailer + fIndex++; + WriteChainDataHeader(2, 1); // + WriteChainDataTrailer(3); // 2st chain trailer + WriteTrailer(15,0,fEventNumber,5); // 1st TRM trailer + trm1words = fIndex - startTRM; + WriteTRMDataHeader(1, trm1words , positionOfTRMHeader); + //DRM trailer + WriteTrailer(1,0,fEventNumber,5); // 1st TRM trailer + + WriteDRMDataHeader(); - WriteTrailer(0,0,fEventNumber,1); // 1st chain trailer - WriteTrailer(15,0,fEventNumber,5); // 1st TRM trailer - WriteTRMDataHeader(5,trm2words,positionOfTRMHeader); - - WriteTrailer(1,fEventNumber,0,5); //DRM trailer - WriteDRMDataHeader(); + delete allData; } //------------------------------------------------------------------------------ @@ -277,6 +310,7 @@ void AliT0RawData::WriteDRMDataHeader() PackWord(baseWord,word,28,31); // 0100 marks header fBuffer[0]= baseWord; + //DRM status header 1 word = 1; PackWord(baseWord,word,0, 3); // 0001 @@ -290,8 +324,9 @@ void AliT0RawData::WriteDRMDataHeader() PackWord(baseWord,word,28,31); // 0100 marks header fBuffer[1] = baseWord; - word=0; - baseWord=0; + + word=0; + baseWord=0; //DRM status header 2 word = 1; @@ -305,6 +340,7 @@ void AliT0RawData::WriteDRMDataHeader() word=4; PackWord(baseWord,word,28,31); // 0100 marks header fBuffer[2]= baseWord; + word=0; @@ -318,7 +354,10 @@ void AliT0RawData::WriteDRMDataHeader() PackWord(baseWord,word,28,31); // 0100 marks header fBuffer[3]= baseWord; - + // new DRM format + fBuffer[4]= baseWord; + fBuffer[5]= baseWord; + word=0; baseWord=0; @@ -351,7 +390,7 @@ void AliT0RawData::WriteTRMDataHeader(UInt_t slotID, Int_t nWordsInTRM, word=4; PackWord(baseWord,word,28,31); // 0100 marks header fBuffer[positionOfTRMHeader] = baseWord; - + word=0; baseWord=0; @@ -380,7 +419,31 @@ void AliT0RawData::WriteChainDataHeader(UInt_t chainNumber,UInt_t slotID) PackWord(baseWord,word,27,27); // TS word=chainNumber; PackWord(baseWord,word,28,31); // 0100 marks header - fBuffer[4] = baseWord; + fBuffer[fIndex] = baseWord; + + word=0; + baseWord=0; + +} +//_____________________________________________________________________________ + +void AliT0RawData::WriteChainDataTrailer(UInt_t chainNumber ) +{ +//Write a (dummy or real) DDL Chain data trailer +//set the compression bit if compressed +// chainNumber 00 or 10 + UInt_t word; + UInt_t baseWord=0; + word = 0; // ask Tatiana 7 or 9 + PackWord(baseWord,word,0, 3); // status + word = 0; + PackWord(baseWord,word,4, 15); // MBZ + word=fEventNumber; + PackWord(baseWord,word,16,27); // event counter + word=chainNumber; + PackWord(baseWord,word,28,31); // chain number + fIndex++; + fBuffer[fIndex] = baseWord; word=0; baseWord=0; @@ -429,7 +492,7 @@ void AliT0RawData::WriteTrailer(UInt_t slot, Int_t word1, UInt_t word2, UInt_t PackWord(baseWord,word,28,31); // marks trailer fIndex++; fBuffer[fIndex] = baseWord; - + word=0; baseWord=0; @@ -478,11 +541,11 @@ Int_t AliT0RawData::RawDataT0(AliT0digit *fDigits) fIndex=-1; AliRawDataHeaderSim header; - //loop over TOF DDL files - //write Dummy DATA HEADER WriteDataHeader(kTRUE, kFALSE); GetDigits(fDigits); //write packing digits + + fFile->WriteBuffer((char*) fBuffer,((fIndex+1)*sizeof(UInt_t))); //write real data header on its place WriteDataHeader(kFALSE, kFALSE);