+// $Id$
/**************************************************************************
* This file is property of and copyright by the ALICE HLT Project *
* provided "as is" without express or implied warranty. *
**************************************************************************/
-#include "AliHLTCaloRawAnalyzer.h"
+
+#include "AliCaloRawAnalyzer.h"
+#include "AliCaloBunchInfo.h"
+#include "AliCaloFitResults.h"
#include "AliHLTCaloRawAnalyzerComponentv3.h"
#include "AliHLTCaloChannelDataHeaderStruct.h"
#include "AliHLTCaloChannelDataStruct.h"
#include "AliHLTCaloMapper.h"
#include "AliHLTCaloSanityInspector.h"
-#include "AliAltroRawStreamV3.h"
#include "AliRawReaderMemory.h"
-#include "AliAltroRawStreamV3.h"
#include "AliCaloRawStreamV3.h"
+#include "AliHLTCaloConstantsHandler.h"
+#include "AliHLTCaloChannelRawDataStruct.h"
+#include "AliLog.h"
+#include "TStopwatch.h"
-AliHLTCaloRawAnalyzerComponentv3::AliHLTCaloRawAnalyzerComponentv3():
- AliHLTProcessor(),
- fAnalyzerPtr(0),
- fMapperPtr(0),
- // fkDoPushRawData(false),
- fkDoPushRawData(false),
- fPhosEventCount(0),
- fSanityInspectorPtr(0),
- fRawReaderMemoryPtr(0),
- fAltroRawStreamPtr(0),
- fAlgorithm(0),
- fOffset(0),
- fBunchSizeCut(0),
- fMinPeakPosition(0),
- fMaxPeakPosition(100),
- fRawDataWriter(0)
-{
- //comment
+#include "AliCaloRawAnalyzerFactory.h"
- // fMapperPtr = new AliHLTCaloMapper();
+//#include "AliCaloConstants.h"
- fRawReaderMemoryPtr = new AliRawReaderMemory();
+//#include "AliCaloRawAnalyzer.h"
- fAltroRawStreamPtr = new AliAltroRawStreamV3(fRawReaderMemoryPtr);
+//using namespace Algo;
+
+#include <vector>
+using namespace std;
+
+ClassImp(AliHLTCaloRawAnalyzerComponentv3);
- fSanityInspectorPtr = new AliHLTCaloSanityInspector();
-
- // if( fkDoPushRawData == true )
- {
- fRawDataWriter = new RawDataWriter();
- }
- fAltroRawStreamPtr = new AliCaloRawStreamV3(fRawReaderMemoryPtr, TString("EMCAL"));
+AliHLTCaloRawAnalyzerComponentv3::AliHLTCaloRawAnalyzerComponentv3(TString det, fitAlgorithm algo ):AliHLTCaloProcessor(),
+ AliHLTCaloConstantsHandler(det),
+ fAnalyzerPtr(0),
+ fMapperPtr(0),
+ fCurrentSpec(-1),
+ fDebug(false),
+ fSanityInspectorPtr(0),
+ fRawReaderMemoryPtr(0),
+ fAltroRawStreamPtr(0),
+ fDetector(det),
+ fAlgorithm(algo),
+ fOffset(0),
+ fBunchSizeCut(0),
+ fMinPeakPosition(0),
+ fMaxPeakPosition(100),
+ fDoPushBadRawData(false),
+ fDoPushRawData(false),
+ fRawDataWriter(0)
+
+{
+ //Constructor
+
}
AliHLTCaloRawAnalyzerComponentv3::~AliHLTCaloRawAnalyzerComponentv3()
{
- //comment
- Deinit();
+ //destructor
}
-
-int
-AliHLTCaloRawAnalyzerComponentv3::Deinit()
-{
- //comment
- if(fAnalyzerPtr)
- {
- delete fAnalyzerPtr;
- fAnalyzerPtr = 0;
- }
- if(fMapperPtr)
+int
+AliHLTCaloRawAnalyzerComponentv3::DoInit( int argc, const char** argv )
+{
+ //See base class for documentation
+ int iResult=0;
+
+ for(int i = 0; i < argc; i++)
{
- delete fMapperPtr;
- fMapperPtr = 0;
+ if(!strcmp("-offset", argv[i]))
+ {
+ fOffset = atoi(argv[i+1]);
+ }
+ if(!strcmp("-bunchsizecut", argv[i]))
+ {
+ fBunchSizeCut = atoi(argv[i+1]);
+ }
+ if(!strcmp("-minpeakposition", argv[i]))
+ {
+ fMinPeakPosition = atoi(argv[i+1]);
+ }
+ if(!strcmp("-maxpeakposition", argv[i]))
+ {
+ fMaxPeakPosition = atoi(argv[i+1]);
+ }
+ if(!strcmp("-pushrawdata", argv[i]))
+ {
+ fDoPushRawData = true;
+ }
+ if(!strcmp("-pushbaddata", argv[i]))
+ {
+ fDoPushBadRawData = true;
+ }
+ if(fDoPushBadRawData && fDoPushRawData)
+ {
+ HLTWarning("fDoPushBadRawData and fDoPushRawData in conflict, using fDoPushRawData");
+ fDoPushBadRawData = false;
+ }
+ if(!strcmp("-suppressalilogwarnings", argv[i]))
+ {
+ AliLog::SetGlobalLogLevel(AliLog::kError); //PHOS sometimes produces bad data -> Fill up the HLT logs...
+ }
}
- if(fRawReaderMemoryPtr)
+
+ fAnalyzerPtr = AliCaloRawAnalyzerFactory::CreateAnalyzer(fAlgorithm);
+ fAnalyzerPtr->SetIsZeroSuppressed(true);
+ fSanityInspectorPtr = new AliHLTCaloSanityInspector();
+
+ if( fDoPushRawData == true )
{
- delete fRawReaderMemoryPtr;
- fRawReaderMemoryPtr = 0;
+ fRawDataWriter = new RawDataWriter(fCaloConstants);
}
+ fRawReaderMemoryPtr = new AliRawReaderMemory();
+ fAltroRawStreamPtr = new AliCaloRawStreamV3(fRawReaderMemoryPtr, fDetector);
+
+ return iResult;
+}
+
+
+int
+AliHLTCaloRawAnalyzerComponentv3::DoDeinit()
+{
+ //comment
if(fAltroRawStreamPtr)
{
delete fAltroRawStreamPtr;
fAltroRawStreamPtr = 0;
}
+
+ if (fRawReaderMemoryPtr) delete fRawReaderMemoryPtr;
+ fRawReaderMemoryPtr=NULL;
+ if (fAltroRawStreamPtr) delete fAltroRawStreamPtr;
+ fAltroRawStreamPtr=NULL;
+ if (fRawDataWriter) delete fRawDataWriter;
+ fRawDataWriter=NULL;
+ if (fSanityInspectorPtr) delete fSanityInspectorPtr;
+ fSanityInspectorPtr=NULL;
+
return 0;
}
-/*
-const char*
-AliHLTCaloRawAnalyzerComponentv3::GetComponentID()
-{
- //comment
- return "CaloRawAnalyzerv3";
-}
-*/
- /*
-void
-AliHLTCaloRawAnalyzerComponentv3::GetInputDataTypes( vector<AliHLTComponentDataType>& list)
+void
+AliHLTCaloRawAnalyzerComponentv3::PrintDebugInfo()
{
//comment
- list.clear();
- list.push_back( AliHLTCaloDefinitions::fgkDDLPackedRawDataType | kAliHLTDataOriginPHOS);
+ static TStopwatch watch; //CRAP PTH
+ static double wlast = -1;
+ static double wcurrent = 0;
+
+ if( true == fDebug )
+ {
+ if( fCaloEventCount %1000 == 0 )
+ {
+ cout << __FILE__ << __LINE__ << " : Processing event " << fCaloEventCount << endl;
+ wlast = wcurrent;
+ wcurrent = watch.RealTime();
+ cout << __FILE__ << __LINE__ << "The event rate is " <<
+ 1000/( wcurrent - wlast ) << " Hz" << endl; watch.Start(kFALSE);
+ }
+ }
}
- */
-AliHLTComponentDataType
-AliHLTCaloRawAnalyzerComponentv3::GetOutputDataType()
-{
- //comment
- return AliHLTCaloDefinitions::fgkChannelDataType;
-}
void
AliHLTCaloRawAnalyzerComponentv3::GetOutputDataSize(unsigned long& constBase, double& inputMultiplier )
{
//comment
constBase = sizeof(AliHLTCaloChannelDataHeaderStruct);
- inputMultiplier = 0.5;
+ inputMultiplier = 1.5;
}
-int
-AliHLTCaloRawAnalyzerComponentv3::DoEvent( const AliHLTComponentEventData& evtData, const AliHLTComponentBlockData* blocks, AliHLTComponentTriggerData& /*trigData*/,
- AliHLTUInt8_t* outputPtr, AliHLTUInt32_t& size, vector<AliHLTComponentBlockData>& outputBlocks )
+bool
+AliHLTCaloRawAnalyzerComponentv3::CheckInputDataType(const AliHLTComponentDataType &datatype)
{
-
- /*
-
- if( fPhosEventCount%300 == 0 )
+ //comment
+ vector <AliHLTComponentDataType> validTypes;
+ GetInputDataTypes(validTypes);
+
+ for(UInt_t i=0; i < validTypes.size(); i++ )
{
- cout << __FILE__<<__LINE__<< " Processing event " << fPhosEventCount << endl;
+ if ( datatype == validTypes.at(i) )
+ {
+ return true;
+ }
}
- */
-
- // Int_t blockSize = 0;
+ HLTDebug("Invalid Datatype");
+ return false;
+}
+
+
+int
+AliHLTCaloRawAnalyzerComponentv3::DoEvent( const AliHLTComponentEventData& evtData, const AliHLTComponentBlockData* blocks,
+ AliHLTComponentTriggerData& /*trigData*/,
+ AliHLTUInt8_t* outputPtr, AliHLTUInt32_t& size, vector<AliHLTComponentBlockData>& outputBlocks )
+{
+ //comment
+ if(!IsDataEvent())
+ {
+ size = 0;
+ return 0;
+ }
+ if( true == fDebug )
+ { PrintDebugInfo();
+ };
+
Int_t blockSize = -1;
UInt_t totSize = 0;
const AliHLTComponentBlockData* iter = NULL;
unsigned long ndx;
-
+
for( ndx = 0; ndx < evtData.fBlockCnt; ndx++ )
{
iter = blocks+ndx;
- if( CheckInputDataType( iter->fDataType ) == false )
+ if( ! CheckInputDataType(iter->fDataType) )
{
continue;
}
- else
- {
- InitMapping( iter->fSpecification);
-
- blockSize = DoIt(iter, outputPtr, size, totSize); // Processing the block
-
- // blockSize = 1;
- if(blockSize == -1) // If the processing returns -1 we are out of buffer and return an error msg.
- {
- return -ENOBUFS;
- }
-
- totSize += blockSize; //Keeping track of the used size
- AliHLTComponentBlockData bdChannelData;
- FillBlockData( bdChannelData );
- bdChannelData.fOffset = 0; //FIXME
- bdChannelData.fSize = blockSize;
-
- // bdChannelData.fDataType = AliHLTPHOSDefinitions::fgkChannelDataType;
- bdChannelData.fDataType = AliHLTCaloDefinitions::fgkChannelDataType;
-
- bdChannelData.fSpecification = iter->fSpecification;
- outputBlocks.push_back(bdChannelData);
- outputPtr += blockSize; //Updating position of the output buffer
+ if(iter->fSpecification != fCurrentSpec)
+ {
+ fCurrentSpec = iter->fSpecification;
+ InitMapping(iter->fSpecification);
}
-
- fPhosEventCount++;
- size = totSize; //telling the framework how much buffer space we have used.
+
+ blockSize = DoIt(iter, outputPtr, size, totSize); // Processing the block
+ totSize += blockSize; //Keeping track of the used size
+ AliHLTComponentBlockData bdChannelData;
+ FillBlockData( bdChannelData );
+ bdChannelData.fOffset = 0; //FIXME
+ bdChannelData.fSize = blockSize;
+ bdChannelData.fDataType = GetOutputDataType();
+ bdChannelData.fSpecification = iter->fSpecification;
+ outputBlocks.push_back(bdChannelData);
+ outputPtr += blockSize; //Updating position of the output buffer
}
-
-return 0;
-
+ fCaloEventCount++;
+ size = totSize; //telling the framework how much buffer space we have used.
+
+ return 0;
+
}//end DoEvent
Int_t
AliHLTCaloRawAnalyzerComponentv3::DoIt(const AliHLTComponentBlockData* iter, AliHLTUInt8_t* outputPtr, const AliHLTUInt32_t size, UInt_t& totSize)
{
-
+ //comment
int tmpsize= 0;
Int_t crazyness = 0;
Int_t nSamples = 0;
AliHLTCaloChannelDataHeaderStruct *channelDataHeaderPtr = reinterpret_cast<AliHLTCaloChannelDataHeaderStruct*>(outputPtr);
AliHLTCaloChannelDataStruct *channelDataPtr = reinterpret_cast<AliHLTCaloChannelDataStruct*>(outputPtr+sizeof(AliHLTCaloChannelDataHeaderStruct));
-
-
-
-
totSize += sizeof( AliHLTCaloChannelDataHeaderStruct );
fRawReaderMemoryPtr->SetMemory( reinterpret_cast<UChar_t*>( iter->fPtr ), static_cast<ULong_t>( iter->fSize ) );
- fRawReaderMemoryPtr->SetEquipmentID( fMapperPtr->GetDDLFromSpec( iter->fSpecification) + 4608 );
+ fRawReaderMemoryPtr->SetEquipmentID( fMapperPtr->GetDDLFromSpec( iter->fSpecification) + fCaloConstants->GetDDLOFFSET() );
fRawReaderMemoryPtr->Reset();
fRawReaderMemoryPtr->NextEvent();
-
- if( fkDoPushRawData == true)
- {
- fRawDataWriter->NewEvent( );
- }
-
- /*
- if(fAltroRawStreamPtr != NULL)
+ if( fDoPushRawData == true)
{
- delete fAltroRawStreamPtr;
- fAltroRawStreamPtr=NULL;
+ fRawDataWriter->NewEvent( );
}
- */
-
-
- //return 1;
-
-
- // fAltroRawStreamPtr = new AliCaloRawStreamV3(fRawReaderMemoryPtr, TString("EMCAL"));
-
- // return 1;
-
- fAltroRawStreamPtr->NextDDL();
- {
- int cnt = 0;
- while( fAltroRawStreamPtr->NextChannel() )
- {
- // cout << __FILE__ << ":" << __LINE__ << ":" <<__FUNCTION__ << "T3" << endl;
- if( fAltroRawStreamPtr->GetHWAddress() < 128 || ( fAltroRawStreamPtr->GetHWAddress() ^ 0x800) < 128 )
- {
- continue;
- }
- else
- {
- ++ cnt;
- UShort_t* firstBunchPtr = 0;
- int chId = fMapperPtr->GetChannelID(iter->fSpecification, fAltroRawStreamPtr->GetHWAddress());
- if( fkDoPushRawData == true)
- {
- fRawDataWriter->SetChannelId( chId );
- }
-
- // return 1;
-
- while( fAltroRawStreamPtr->NextBunch() == true )
- {
- nSamples = fAltroRawStreamPtr->GetBunchLength();
- if( fkDoPushRawData == true)
- {
- fRawDataWriter->WriteBunchData( fAltroRawStreamPtr->GetSignals(), nSamples, fAltroRawStreamPtr->GetEndTimeBin() );
- }
- firstBunchPtr = const_cast< UShort_t* >( fAltroRawStreamPtr->GetSignals() );
- }
-
- //return 1;
-
- totSize += sizeof( AliHLTCaloChannelDataStruct );
- if(totSize > size)
- {
- HLTError("Buffer overflow: Trying to write data of size: %d bytes. Output buffer available: %d bytes.", totSize, size);
- return -1;
- }
-
- fAnalyzerPtr->SetData( firstBunchPtr, nSamples);
-
- fAnalyzerPtr->Evaluate(0, nSamples);
- // fAnalyzerPtr->Evaluate(0, 25);
+ if(fAltroRawStreamPtr->NextDDL())
+ {
+ int cnt = 0;
+ fOffset = 0;
+ while( fAltroRawStreamPtr->NextChannel() )
+ {
+ if( fAltroRawStreamPtr->GetHWAddress() < 128 || ( fAltroRawStreamPtr->GetHWAddress() ^ 0x800) < 128 )
+ {
+ continue;
+ }
+ else
+ {
+ ++ cnt;
+ //UShort_t* firstBunchPtr = 0;
+ int chId = fMapperPtr->GetChannelID(iter->fSpecification, fAltroRawStreamPtr->GetHWAddress());
+ //patch to skip LG in EMC
+ if(fDetector.CompareTo("EMCAL") == 0 && (int)((chId >> 12)&0x1) == 0) continue;
+ if( fDoPushRawData == true)
+ {
+ fRawDataWriter->SetChannelId( chId );
+ }
+ vector <AliCaloBunchInfo> bvctr;
+ while( fAltroRawStreamPtr->NextBunch() == true )
+ {
+ bvctr.push_back( AliCaloBunchInfo( fAltroRawStreamPtr->GetStartTimeBin(),
+ fAltroRawStreamPtr->GetBunchLength(),
+ fAltroRawStreamPtr->GetSignals() ) );
+
+ nSamples = fAltroRawStreamPtr->GetBunchLength();
+ if( fDoPushRawData == true)
+ {
+ fRawDataWriter->WriteBunchData( fAltroRawStreamPtr->GetSignals(),
+ nSamples, fAltroRawStreamPtr->GetEndTimeBin() );
+ }
+ //firstBunchPtr = const_cast< UShort_t* >( fAltroRawStreamPtr->GetSignals() );
+ }
+
+ totSize += sizeof( AliHLTCaloChannelDataStruct );
+ if(totSize > size)
+ {
+ HLTError("Buffer overflow: Trying to write data of size: %d bytes. Output buffer available: %d bytes.", totSize, size);
+ return -1;
+ }
+
+ AliCaloFitResults res = fAnalyzerPtr->Evaluate( bvctr, fAltroRawStreamPtr->GetAltroCFG1(),
+ fAltroRawStreamPtr->GetAltroCFG2() );
+
+ HLTDebug("Channel energy: %f, max sig: %d, gain = %d, x = %d, z = %d", res.GetAmp(), res.GetMaxSig(),
+ (chId >> 12)&0x1, chId&0x3f, (chId >> 6)&0x3f);
+ {
+ channelDataPtr->fChannelID = chId;
+ channelDataPtr->fEnergy = static_cast<Float_t>( res.GetAmp() ) - fOffset;
+ channelDataPtr->fTime = static_cast<Float_t>( res.GetTof() );
+ if(fDetector.CompareTo("EMCAL") == 0) channelDataPtr->fTime = static_cast<Float_t>( res.GetTof() )*100E-9 - fAltroRawStreamPtr->GetL1Phase();
+ channelDataPtr->fCrazyness = static_cast<Short_t>(crazyness);
+ channelCount++;
+ channelDataPtr++; // Updating position of the free output.
+ }
+ }
+ }
+ if( fDoPushRawData == true)
+ {
+ fRawDataWriter->NewChannel();
+ }
+ }
- // return 1;
- // if(fAnalyzerPtr->GetTiming() > fMinPeakPosition && fAnalyzerPtr->GetTiming() < fMaxPeakPosition)
- {
- channelDataPtr->fChannelID = chId;
- channelDataPtr->fEnergy = static_cast<Float_t>(fAnalyzerPtr->GetEnergy()) - fOffset;
-
- channelDataPtr->fTime = static_cast<Float_t>(fAnalyzerPtr->GetTiming());
- channelDataPtr->fCrazyness = static_cast<Short_t>(crazyness);
- channelCount++;
- channelDataPtr++; // Updating position of the free output.
- }
- }
-
- // return 1;
-
- if( fkDoPushRawData == true)
- {
- fRawDataWriter->NewChannel();
- }
-
- }
- }
-
- // return 1;
-
- //Writing the header
channelDataHeaderPtr->fNChannels = channelCount;
channelDataHeaderPtr->fAlgorithm = fAlgorithm;
channelDataHeaderPtr->fInfo = 0;
-
- // return 1;
-
-
- if( fkDoPushRawData == true)
+
+ if( fDoPushRawData == true)
{
tmpsize += fRawDataWriter->CopyBufferToSharedMemory( (UShort_t *)channelDataPtr, size, totSize);
}
- // channelDataHeaderPtr->fHasRawData = false;
- channelDataHeaderPtr->fHasRawData = fkDoPushRawData;
+ channelDataHeaderPtr->fHasRawData = fDoPushRawData;
HLTDebug("Number of channels: %d", channelCount);
tmpsize += sizeof(AliHLTCaloChannelDataStruct)*channelCount + sizeof(AliHLTCaloChannelDataHeaderStruct);
return tmpsize;
-
-int
-AliHLTCaloRawAnalyzerComponentv3::DoInit( int argc, const char** argv )
-{
-
- //See base class for documentation
- // fPrintInfo = kFALSE;
-
- int iResult=0;
-
- // fMapperPtr = new AliHLTCaloMapper();
-
- //InitMapping();
-
- for(int i = 0; i < argc; i++)
- {
- if(!strcmp("-offset", argv[i]))
- {
- fOffset = atoi(argv[i+1]);
- }
- if(!strcmp("-bunchsizecut", argv[i]))
- {
- fBunchSizeCut = atoi(argv[i+1]);
- }
- if(!strcmp("-minpeakposition", argv[i]))
- {
- fMinPeakPosition = atoi(argv[i+1]);
- }
- if(!strcmp("-maxpeakposition", argv[i]))
- {
- fMaxPeakPosition = atoi(argv[i+1]);
- }
- }
-
- /*
- if( fMapperPtr->GetIsInitializedMapping() == false)
- {
- Logging(kHLTLogFatal, __FILE__ , IntToChar( __LINE__ ) , "AliHLTCaloMapper::Could not initialise mapping from file %s, aborting", fMapperPtr->GetFilePath());
- return -4;
- }
- */
-
- return iResult;
-}
-
-
-
-
-AliHLTCaloRawAnalyzerComponentv3::RawDataWriter::RawDataWriter() : //fIsFirstChannel(true),
- fRawDataBuffer(0),
- fCurrentChannelSize(0),
- // fIsFirstChannel(true),
- fBufferIndex(0),
- // fBufferSize( NZROWSRCU*NXCOLUMNSRCU*ALTROMAXSAMPLES*NGAINS +1000 ),
- fBufferSize( 64*56*ALTROMAXSAMPLES*NGAINS +1000 ),
- fCurrentChannelIdPtr(0),
- fCurrentChannelSizePtr(0),
- fCurrentChannelDataPtr(0),
- fTotalSize(0)
+AliHLTCaloRawAnalyzerComponentv3::RawDataWriter::RawDataWriter(AliHLTCaloConstants* cConst) :
+ fRawDataBuffer(0),
+ fCurrentChannelSize(0),
+ fBufferIndex(0),
+ fBufferSize( 64*56*cConst->GetNGAINS()*cConst->GetALTROMAXSAMPLES() +1000 ),
+ fCurrentChannelIdPtr(0),
+ fCurrentChannelSizePtr(0),
+ fCurrentChannelDataPtr(0),
+ fTotalSize(0)
{
+ //comment
fRawDataBuffer = new UShort_t[fBufferSize];
Init();
}
+AliHLTCaloRawAnalyzerComponentv3::RawDataWriter::~RawDataWriter()
+{
+ delete [] fRawDataBuffer;
+}
+
void
AliHLTCaloRawAnalyzerComponentv3::RawDataWriter::Init()
{
+ //comment
fCurrentChannelIdPtr = fRawDataBuffer;
fCurrentChannelSizePtr = fRawDataBuffer +1;
fCurrentChannelDataPtr = fRawDataBuffer +2;
void
AliHLTCaloRawAnalyzerComponentv3::RawDataWriter::NewEvent()
{
+ //comment
Init();
fTotalSize = 0;
}
void
AliHLTCaloRawAnalyzerComponentv3::RawDataWriter::NewChannel( )
{
+ //comment
*fCurrentChannelSizePtr = fCurrentChannelSize;
fCurrentChannelIdPtr += fCurrentChannelSize;
fCurrentChannelSizePtr += fCurrentChannelSize;
if( sizerequested > sizetotal )
{
return 0;
- }
+ }
else
{
for(int i=0; i < fTotalSize; i++)
memPtr[i] = fRawDataBuffer[i];
}
return fTotalSize;
- }
+ }
}