X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=TPC%2FAliTPCDDLRawData.cxx;h=dcec79dfcc00d142ba41362912fce55b02b6bcc2;hb=108cb8b981fd4f1bf0b1ec2b66c46daacb58697f;hp=5c16b16dec78c32bd3b52c71fb7a72db9fa49ca6;hpb=30c1018ed2b0e5ba76bf85a7a2d6695a50bf0f4a;p=u%2Fmrichter%2FAliRoot.git diff --git a/TPC/AliTPCDDLRawData.cxx b/TPC/AliTPCDDLRawData.cxx index 5c16b16dec7..dcec79dfcc0 100644 --- a/TPC/AliTPCDDLRawData.cxx +++ b/TPC/AliTPCDDLRawData.cxx @@ -14,52 +14,56 @@ **************************************************************************/ /* $Id$ */ + //This class conteins all the methods to create raw data //as par a given DDL. //It produces DDL with both compressed and uncompressed format. //For compression we use the optimized table wich needs //to be provided. - -#include "TObjArray.h" -#include "Riostream.h" +#include +#include +#include +#include #include #include -#include "AliTPCCompression.h" -#include "AliTPCBuffer160.h" +#include "AliAltroBuffer.h" +#include "AliTPCAltroMapping.h" #include "AliTPCDDLRawData.h" +#include "AliDAQ.h" ClassImp(AliTPCDDLRawData) //////////////////////////////////////////////////////////////////////////////////////// -AliTPCDDLRawData::AliTPCDDLRawData(const AliTPCDDLRawData &source){ +AliTPCDDLRawData::AliTPCDDLRawData(const AliTPCDDLRawData &source): + TObject(source), + fVerbose(0) +{ // Copy Constructor + fVerbose=source.fVerbose; return; } AliTPCDDLRawData& AliTPCDDLRawData::operator=(const AliTPCDDLRawData &source){ //Assigment operator + fVerbose=source.fVerbose; return *this; } //////////////////////////////////////////////////////////////////////////// -void AliTPCDDLRawData::RawData(Int_t LDCsNumber){ - //Raw data slides generation +void AliTPCDDLRawData::RawData(const char* inputFileName){ + //Raw data generation //Number of DDL=2*36+4*36=216 //2 DDL for each inner sector //4 DDL for each outer sector - Int_t ddlPerFile=216/LDCsNumber; - Int_t offset=1; - if (216%LDCsNumber) ddlPerFile++; - cout<<"Number of DDL per slide: "<Getenv("ALICE_ROOT"); + path += "/TPC/mapping/Patch"; + TString path2; + AliTPCAltroMapping *mapping[6]; + for(Int_t i = 0; i < 6; i++) { + path2 = path; + path2 += i; + path2 += ".data"; + mapping[i] = new AliTPCAltroMapping(path2.Data()); + } + + while (f.read((char*)(&data),sizeof(data))){ - count++; if (pPadNumber==-1){ pSecNumber=data.Sec; pRowNumber=data.Row; pPadNumber=data.Pad; pTimeBin=data.Time; pSubSector=data.SubSec; + + if(data.Sec<36) + ddlNumber=data.Sec*2+data.SubSec; + else + ddlNumber=72+(data.Sec-36)*4+data.SubSec; + strcpy(filename,AliDAQ::DdlFileName("TPC",ddlNumber)); + Int_t patchIndex = data.SubSec; + if(data.Sec>=36) patchIndex += 2; + buffer=new AliAltroBuffer(filename,mapping[patchIndex]); //size magic word sector number sub-sector number 0 for TPC 0 for uncompressed - buffer->WriteMiniHeader(0,pSecNumber,pSubSector,0,0);//Dummy; + buffer->WriteDataHeader(kTRUE,kFALSE);//Dummy; bunchLength=1; - buffer->FillBuffer(data.Dig-offset); + buffer->FillBuffer(data.Dig); nwords++; }//end if else{ @@ -119,25 +139,21 @@ void AliTPCDDLRawData::RawData(Int_t LDCsNumber){ nwords=0; if(pSubSector!=data.SubSec){ - countDDL++; - if(countDDL==ddlPerFile){ - //size magic word sector number sub-sector number 0 for TPC 0 for uncompressed - buffer->Flush(); - buffer->WriteMiniHeader(1,pSecNumber,pSubSector,0,0); - //cout<<"Mini header for DDL:"<WriteMiniHeader(0,data.Sec,data.SubSec,0,0);//Dummy; - countDDL=0; - }//end if - else{ - buffer->Flush(); - buffer->WriteMiniHeader(1,pSecNumber,pSubSector,0,0); - buffer->WriteMiniHeader(0,data.Sec,data.SubSec,0,0);//Dummy; - } + //size magic word sector number sub-sector number 0 for TPC 0 for uncompressed + buffer->Flush(); + buffer->WriteDataHeader(kFALSE,kFALSE); + //cout<<"Data header for DDL:"<=36) patchIndex += 2; + buffer=new AliAltroBuffer(filename,mapping[patchIndex]); + buffer->WriteDataHeader(kTRUE,kFALSE);//Dummy; pSubSector=data.SubSec; }//end if }//end if @@ -148,262 +164,24 @@ void AliTPCDDLRawData::RawData(Int_t LDCsNumber){ pSecNumber=data.Sec; }//end else pTimeBin=data.Time; - buffer->FillBuffer(data.Dig-offset); - nwords++; - }//end else - }//end while - buffer->FillBuffer(pTimeBin); - buffer->FillBuffer(bunchLength+2); - nwords+=2; - buffer->WriteTrailer(nwords,pPadNumber,pRowNumber,pSecNumber); - //write the M.H. - buffer->Flush(); - buffer->WriteMiniHeader(1,pSecNumber,pSubSector,0,0); - //cout<<"Mini header for D D L:"<CompressDataOptTables(kNumTables,temp,"TempCompDecomp"); - else - util->DecompressDataOptTables(kNumTables,temp,"TempCompDecomp"); - delete util; - //the temp compressed file is open and copied to the final file fdest - ifstream fi; -#ifndef __DECCXX - fi.open("TempCompDecomp",ios::binary); -#else - fi.open("TempCompDecomp"); -#endif - fi.seekg(0,ios::end); - size=fi.tellg(); - fi.seekg(0); - //The Mini Header is updated (size and Compressed flag) - //and written into the output file - miniHeader[0]=size; - if(!Comp) - flag=1; - else - flag=0; - ULong_t aux=0xFFFF; - aux<<=16; - aux|=flag; - aux|=0xFF; - miniHeader[2]=miniHeader[2]&aux; - fdest.write((char*)(miniHeader),sizeof(ULong_t)*3); - //The compressem temp file is copied into the output file fdest - for(ULong_t j=0;jFillBuffer(data.Dig-offset); - nwords++; - }//end if - else{ - if ( (data.Time==(pTimeBin+1)) && - (pPadNumber==data.Pad) && - (pRowNumber==data.Row) && - (pSecNumber==data.Sec)){ - bunchLength++; - }//end if - else{ - buffer->FillBuffer(pTimeBin); - buffer->FillBuffer(bunchLength+2); - nwords+=2; - if ((pPadNumber!=data.Pad)||(pRowNumber!=data.Row)||(pSecNumber!=data.Sec)){ - //Trailer is formatted and inserted!! - buffer->WriteTrailer(nwords,pPadNumber,pRowNumber,pSecNumber); - numPackets++; - nwords=0; - }//end if - - bunchLength=1; - pPadNumber=data.Pad; - pRowNumber=data.Row; - pSecNumber=data.Sec; - }//end else - pTimeBin=data.Time; - buffer->FillBuffer(data.Dig-offset); + buffer->FillBuffer(data.Dig); nwords++; }//end else }//end while - buffer->FillBuffer(pTimeBin); - buffer->FillBuffer(bunchLength+2); - nwords+=2; - buffer->WriteTrailer(nwords,pPadNumber,pRowNumber,pSecNumber); - delete buffer; - cout<<"Number of digits: "<FillBuffer(pTimeBin); + buffer->FillBuffer(bunchLength+2); + nwords+=2; + buffer->WriteTrailer(nwords,pPadNumber,pRowNumber,pSecNumber); + //write the D.H. + buffer->Flush(); + buffer->WriteDataHeader(kFALSE,kFALSE); + //cout<<"Data header for D D L:"<