X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=TPC%2FAliTPCMonitorAltro.cxx;h=176cbdbbc5f82e6b7b6e0884f90219b229b6b69d;hb=8f74ae7702881266ff16ec6f5544917d08304fdd;hp=a0a2509f495a82fb824f16131999aaba44781e33;hpb=48265b32e2efe854cf1649e41c7ba270cbcc886a;p=u%2Fmrichter%2FAliRoot.git diff --git a/TPC/AliTPCMonitorAltro.cxx b/TPC/AliTPCMonitorAltro.cxx index a0a2509f495..176cbdbbc5f 100755 --- a/TPC/AliTPCMonitorAltro.cxx +++ b/TPC/AliTPCMonitorAltro.cxx @@ -15,37 +15,121 @@ /* $Log$ +Revision 1.2 2007/10/12 13:36:27 cvetan +Coding convention fixes from Stefan + +Revision 1.1 2007/09/17 10:23:31 cvetan +New TPC monitoring package from Stefan Kniege. The monitoring package can be started by running TPCMonitor.C macro located in macros folder. + */ +//////////////////////////////////////////////////////////////////////// +//// +//// AliTPCMonitorAltro class +//// +//// Class for decoding raw TPC data in the ALTRO format. +//// Data are transformed from 32 bit words to 10 bit or 40 bit respectively. +//// The whole payload is transformed at once and written to an array. +//// The single channels are decoded starting from the trailer word which is +//// decoded by DecodeTrailer(Int_t pos) +//// +//// Authors: Roland Bramm, +//// Stefan Kniege, IKF, Frankfurt +//// +///////////////////////////////////////////////////////////////////////// + #include "AliTPCMonitorAltro.h" -#include "stdlib.h" -#include -ClassImp(AliTPCMonitorAltro) +#include "AliLog.h" +#include +using namespace std; +ClassImp(AliTPCMonitorAltro) //_____________________________________________________________________________________________ -AliTPCMonitorAltro::AliTPCMonitorAltro(UInt_t* memory, Int_t size, Int_t fformat) +AliTPCMonitorAltro::AliTPCMonitorAltro(UInt_t* memory, Int_t size, Int_t fformat) : + fverb(0), + fmemory(memory), + fsize(size), + f40BitArray(0), + f10BitArray(0), + fdecoderPos(0), + fallocate40BitArray(false), + fallocate10BitArray(false), + foffset(0), + fwrite10bit(0), + fTrailerNWords(0), + fTrailerHwAddress(0), + fTrailerDataPos(0), + fTrailerBlockPos(0), + fTrailerPos(0), + fNextPos(0), + ffilename(new Char_t[256]) { - // Constructor: Set different CDH offsets for root(0) and date format - fmemory = memory; - fsize = size; - fallocate40BitArray = false; - fallocate10BitArray = false; - fwrite10bit = 0; + // Constructor: Set different CDH offsets for ROOT (0) and date format + // Data offset can be changed via SetDataOffset(Int_t val) + if( fformat==0) foffset=7; // old CHD Format - else if(fformat==1) foffset=8; // memory pointer form DATE (start CDH) - else if(fformat==2) foffset=0; // memory pointer form ROOT (after CDH) - - fverb =0; - fTrailerNWords =0; - fTrailerHwAddress =0; - fTrailerDataPos =0; - fTrailerBlockPos =0; - fTrailerPos =0; - fNextPos =0; - ffilename = new Char_t[256]; + else if(fformat==1) foffset=8; // memory pointer from DATE (start CDH) + else if(fformat==2) foffset=0; // memory pointer from ROOT (after CDH) } + +//_____________________________________________________________________________________________ +AliTPCMonitorAltro::AliTPCMonitorAltro(const AliTPCMonitorAltro &altro) : + TNamed(altro), + fverb(altro.fverb), + fmemory(altro.fmemory), + fsize(altro.fsize), + f40BitArray(altro.f40BitArray), + f10BitArray(altro.f10BitArray), + fdecoderPos(altro.fdecoderPos), + fallocate40BitArray(altro.fallocate40BitArray), + fallocate10BitArray(altro.fallocate10BitArray), + foffset(altro.foffset), + fwrite10bit(altro.fwrite10bit), + fTrailerNWords(altro.fTrailerNWords), + fTrailerHwAddress(altro.fTrailerHwAddress), + fTrailerDataPos(altro.fTrailerDataPos), + fTrailerBlockPos(altro.fTrailerBlockPos), + fTrailerPos(altro.fTrailerPos), + fNextPos(altro.fNextPos), + ffilename(new Char_t[strlen(altro.ffilename)+1]) +{ + // copy constructor + strcpy(ffilename,altro.ffilename); + +} + +//_____________________________________________________________________________________________ +AliTPCMonitorAltro &AliTPCMonitorAltro::operator =(const AliTPCMonitorAltro& altro) +{ + // assignement operator + + if(this!=&altro){ + ((TNamed *)this)->operator=(altro); + fverb=altro.fverb; + fmemory=altro.fmemory; + fsize=altro.fsize; + f40BitArray=altro.f40BitArray; + f10BitArray=altro.f10BitArray; + fdecoderPos=altro.fdecoderPos; + fallocate40BitArray=altro.fallocate40BitArray; + fallocate10BitArray=altro.fallocate10BitArray; + foffset=altro.foffset; + fwrite10bit=altro.fwrite10bit; + fTrailerNWords=altro.fTrailerNWords; + fTrailerHwAddress=altro.fTrailerHwAddress; + fTrailerDataPos=altro.fTrailerDataPos; + fTrailerBlockPos=altro.fTrailerBlockPos; + fTrailerPos=altro.fTrailerPos; + fNextPos=altro.fNextPos; + ffilename = new Char_t[strlen(altro.ffilename)+1]; + strcpy(ffilename,altro.ffilename); + } + return *this; +} + + //_____________________________________________________________________________________________ AliTPCMonitorAltro::~AliTPCMonitorAltro() { // Destructor @@ -68,7 +152,7 @@ void AliTPCMonitorAltro::Allocate10BitArray() // Create array for 10 bit decoded data fallocate10BitArray = true; f10BitArray = new Short_t[Get10BitArraySize()]; -} +} //_____________________________________________________________________________________________ long long *AliTPCMonitorAltro::Get40BitArray() @@ -84,19 +168,19 @@ Short_t *AliTPCMonitorAltro::Get10BitArray() return f10BitArray; } -//_____________________________________________________________________________________________ -Int_t AliTPCMonitorAltro::Get40BitArraySize() -{ - // Return number of 40 bit words in payload - return fmemory[fsize-1]; -} +// //_____________________________________________________________________________________________ +// Int_t AliTPCMonitorAltro::Get40BitArraySize() +// { +// // Return number of 40 bit words in payload +// return fmemory[fsize-1]; +// } -//_____________________________________________________________________________________________ -Int_t AliTPCMonitorAltro::Get10BitArraySize() -{ - // Return number of 10 bit words in payload - return fmemory[fsize-1]*4; -} +// //_____________________________________________________________________________________________ +// Int_t AliTPCMonitorAltro::Get10BitArraySize() +// { +// // Return number of 10 bit words in payload +// return fmemory[fsize-1]*4; +// } //_____________________________________________________________________________________________ void AliTPCMonitorAltro::Decodeto40Bit() @@ -110,15 +194,15 @@ void AliTPCMonitorAltro::Decodeto40Bit() rest = i%4; switch(rest) { case 0: - blackbox = (fmemory[foffset]) + (((Long64_t)(fmemory[foffset+1]&k08BitOn))<<32); + blackbox = (fmemory[foffset]) + (((Long64_t)(fmemory[foffset+1]&fgk08BitOn))<<32); foffset +=1; break; case 1: - blackbox = (fmemory[foffset]>>8 ) + (((Long64_t)(fmemory[foffset+1]&k16BitOn))<<24); + blackbox = (fmemory[foffset]>>8 ) + (((Long64_t)(fmemory[foffset+1]&fgk16BitOn))<<24); foffset +=1; break; case 2: - blackbox = (fmemory[foffset]>>16) + (((Long64_t)(fmemory[foffset+1]&k24BitOn))<<16); + blackbox = (fmemory[foffset]>>16) + (((Long64_t)(fmemory[foffset+1]&fgk24BitOn))<<16); foffset +=1; break; case 3: @@ -162,15 +246,15 @@ void AliTPCMonitorAltro::Decodeto10Bit(Int_t equipment) switch(rest) { case 0: - blackbox = (fmemory[foffset]) + (((Long64_t)(fmemory[foffset+1]&k08BitOn))<<32); + blackbox = (fmemory[foffset]) + (((Long64_t)(fmemory[foffset+1]&fgk08BitOn))<<32); foffset +=1; break; case 1: - blackbox = (fmemory[foffset]>>8 ) + (((Long64_t)(fmemory[foffset+1]&k16BitOn))<<24); + blackbox = (fmemory[foffset]>>8 ) + (((Long64_t)(fmemory[foffset+1]&fgk16BitOn))<<24); foffset +=1; break; case 2: - blackbox = (fmemory[foffset]>>16) + (((Long64_t)(fmemory[foffset+1]&k24BitOn))<<16); + blackbox = (fmemory[foffset]>>16) + (((Long64_t)(fmemory[foffset+1]&fgk24BitOn))<<16); foffset +=1; break; case 3: @@ -181,10 +265,10 @@ void AliTPCMonitorAltro::Decodeto10Bit(Int_t equipment) blackbox = 0; break; } - f10BitArray[ind*4+0] = (Short_t)( blackbox & kmask10 ) ; - f10BitArray[ind*4+1] = (Short_t)((blackbox & kmask20)>>10); - f10BitArray[ind*4+2] = (Short_t)((blackbox & kmask30)>>20); - f10BitArray[ind*4+3] = (Short_t)((blackbox & kmask40)>>30); + f10BitArray[ind*4+0] = (Short_t)( blackbox & fgkmask10 ) ; + f10BitArray[ind*4+1] = (Short_t)((blackbox & fgkmask20)>>10); + f10BitArray[ind*4+2] = (Short_t)((blackbox & fgkmask30)>>20); + f10BitArray[ind*4+3] = (Short_t)((blackbox & fgkmask40)>>30); } if(fwrite10bit) { @@ -222,9 +306,9 @@ Int_t AliTPCMonitorAltro::DecodeTrailer(Int_t pos) trailer += carry ; } - fTrailerHwAddress = (trailer & ((Long64_t )kTrailerMaskHardw) ); - words = (Long64_t )( (trailer & ((Long64_t )kTrailerMaskNWords))>>16); - tail = (Long64_t )( (trailer & ((Long64_t )kTrailerMaskTail ))>>26 ); + fTrailerHwAddress = (trailer & ((Long64_t )fgkTrailerMaskHardw) ); + words = (Long64_t )( (trailer & ((Long64_t )fgkTrailerMaskNWords))>>16); + tail = (Long64_t )( (trailer & ((Long64_t )fgkTrailerMaskTail ))>>26 ); if(words%4!=0) rest = 4-(words%4); fTrailerNWords = words+rest ; @@ -232,7 +316,7 @@ Int_t AliTPCMonitorAltro::DecodeTrailer(Int_t pos) fTrailerBlockPos = pos -4 ; fNextPos = (pos -fTrailerNWords -4); - if( tail!=kTrailerTail ) { AliError(Form("Could not read Trailer. \"Write 10bit\" for this event. Last Trailer line (2AA): %i. Supp.next Trailer line (2AA): %i ",pos,fNextPos)); return -1; } + if( tail!=fgkTrailerTail ) { AliError(Form("Could not read Trailer. \"Write 10bit\" for this event. Last Trailer line (2AA): %i. Supp.next Trailer line (2AA): %i ",pos,fNextPos)); return -1; } else if( fNextPos==-1 ) { /* was last channel */ return 0; } else if( fNextPos <0 ) { AliError("Next Trailer position < 0 "); return -1; } else if((f10BitArray[fNextPos]!=682)) { AliError(Form("Could not find tail (2AA) at next supposed position %i",fNextPos)); return -1; }