+// $Id$
+
/**************************************************************************
* Copyright(c) 2006, ALICE Experiment at CERN, All rights reserved. *
* *
* provided "as is" without express or implied warranty. *
**************************************************************************/
-#include <iostream>
-#include "AliHLTPHOSRcuCellEnergyDataStruct.h"
+//#include "AliHLTPHOSRcuCellEnergyDataStruct.h"
#include "AliHLTPHOSRcuHistogramProducer.h"
#include "AliHLTPHOSRcuHistogramProducerComponent.h"
#include "AliHLTPHOSRcuCellAccumulatedEnergyDataStruct.h"
+#include "AliHLTPHOSSharedMemoryInterfacev2.h"
+#include "AliHLTPHOSChannelDataHeaderStruct.h"
+#include "AliHLTPHOSChannelDataStruct.h"
-//const AliHLTComponentDataType AliHLTPHOSRcuHistogramProducerComponent::fgkInputDataTypes[]={kAliHLTVoidDataType,{0,"",""}}; //'zero' terminated array
-//const AliHLTComponentDataType AliHLTPHOSRcuHistogramProducerComponent::fgkOutputDataType=kAliHLTVoidDataType;
-
AliHLTPHOSRcuHistogramProducerComponent gAliHLTPHOSRcuHistogramProducerComponent;
-
-
-
/*************************************************************************
* Class AliHLTPHOSRcuHistogramProducerComponent accumulating histograms *
* with amplitudes per PHOS channel *
* and it fills the histograms with amplitudes per channel. *
* Usage example see in PHOS/macros/Shuttle/AliPHOSCalibHistoProducer.C *
**************************************************************************/
-AliHLTPHOSRcuHistogramProducerComponent:: AliHLTPHOSRcuHistogramProducerComponent():AliHLTPHOSProcessor(), fRcuHistoProducerPtr(0)
+AliHLTPHOSRcuHistogramProducerComponent:: AliHLTPHOSRcuHistogramProducerComponent() : AliHLTPHOSRcuProcessor(),
+ fHistoWriteFrequency(100),
+ fRcuHistoProducerPtr(0),
+ fOutPtr(0),
+ fShmPtr(0)
{
- //Default constructor
+ fShmPtr = new AliHLTPHOSSharedMemoryInterfacev2();
+ //Default constructor
}
}
-AliHLTPHOSRcuHistogramProducerComponent::AliHLTPHOSRcuHistogramProducerComponent(const AliHLTPHOSRcuHistogramProducerComponent & ) : AliHLTPHOSProcessor(), fRcuHistoProducerPtr(0)
-{
-
-}
-
-
int
AliHLTPHOSRcuHistogramProducerComponent::Deinit()
{
//See html documentation of base class
cout << "AliHLTPHOSRcuHistogramProducerComponent::Deinit()" << endl;
- fRcuHistoProducerPtr->WriteEnergyHistograms();
+ char* arg = new char[9];
+ sprintf(arg, "recreate");
+ fRcuHistoProducerPtr->WriteAllHistograms(arg);
return 0;
}
}
-int AliHLTPHOSRcuHistogramProducerComponent::DoEvent( const AliHLTComponentEventData& evtData, const AliHLTComponentBlockData* blocks,
- AliHLTComponentTriggerData& trigData, AliHLTUInt8_t* outputPtr,
- AliHLTUInt32_t& size, vector<AliHLTComponentBlockData>& outputBlocks )
+
+int AliHLTPHOSRcuHistogramProducerComponent::DoEvent( const AliHLTComponentEventData& /*evtData*/, const AliHLTComponentBlockData* /*blocks*/,
+ AliHLTComponentTriggerData& /*trigData*/, AliHLTUInt8_t* /*outputPtr*/,
+ AliHLTUInt32_t& /*size*/, vector<AliHLTComponentBlockData>& /*outputBlocks*/ )
{
- //See html documentation of base class
+ /*
+
+ cout << " AliHLTPHOSRcuHistogramProducerComponent::Doevent, entering event loop" << endl;
+
+ //See html documentation of base class
+
+ // trigData++;
+ // trigData--; //shutting up the compiler, we dont use trigData now but will do in near future
+
+ AliHLTComponentTriggerData &trDta = trigData;
+ trDta.fDataSize++;
+ trDta.fDataSize--; //shutting up the compiler, we dont use trigData now but will do in near future
+
+ // AliHLTPHOSValidCellDataStruct *currentChannel =0;
+
+ AliHLTPHOSChannelDataStruct *currentChannel =0;
+
unsigned long ndx = 0;
UInt_t offset = 0;
UInt_t mysize = 0;
UInt_t tSize = 0;
const AliHLTComponentBlockData* iter = NULL;
+
AliHLTPHOSRcuCellEnergyDataStruct *cellDataPtr;
AliHLTUInt8_t* outBPtr;
- int tmpCnt;
for( ndx = 0; ndx < evtData.fBlockCnt; ndx++ )
{
+ cout << " AliHLTPHOSRcuHistogramProducerComponent::DoEvent, recieved block" << endl;
iter = blocks+ndx;
- cellDataPtr = (AliHLTPHOSRcuCellEnergyDataStruct*)( iter->fPtr);
- tmpCnt = cellDataPtr->fCnt;
+ if(iter->fDataType != AliHLTPHOSDefinitions::fgkCellEnergyDataType)
+ {
+ cout << " AliHLTPHOSRcuHistogramProducerComponent::DoEvent, recieved block of wrong type" << endl;
+ cout << "evtData.fSize =" << evtData.fStructSize << "evtData.fBlockCnt =" << evtData.fBlockCnt <<endl ;
- for(int i= 0; i <= tmpCnt; i ++)
+ continue;
+ }
+
+ cellDataPtr = (AliHLTPHOSChannelDataStruct*)( iter->fPtr);
+ fShmPtr->SetMemory(cellDataPtr);
+ currentChannel = fShmPtr->NextChannel();
+
+ Int_t* tmpDataPtr = 0;
+ Int_t nSamples = 0;
+ if(cellDataPtr->fHasRawData == true)
{
- fRcuHistoProducerPtr->FillEnergy(cellDataPtr->fValidData[i].fX,
- cellDataPtr->fValidData[i].fZ,
- cellDataPtr->fValidData[i].fGain,
- cellDataPtr->fValidData[i].fEnergy);
+ while(currentChannel != 0)
+ {
+ tmpDataPtr = fShmPtr->GetRawData(nSamples);
+ fRcuHistoProducerPtr->FillEnergy(currentChannel->fX, currentChannel->fZ, currentChannel->fGain, currentChannel->fEnergy);
+ fRcuHistoProducerPtr->FillLiveChannels(tmpDataPtr, nSamples, currentChannel->fX, currentChannel->fZ,currentChannel->fGain);
+ currentChannel = fShmPtr->NextChannel();
+ }
+ }
+ else
+ {
+
+ Logging(kHLTLogFatal, __FILE__ , IntToChar( __LINE__ ) , "AliHLTPHOSRcuHistogramProducerComponent::We are not pushing raw data, aborting");
+ return -1;
}
}
-
+
outBPtr = outputPtr;
fOutPtr = (AliHLTPHOSRcuCellAccumulatedEnergyDataStruct*)outBPtr;
const AliHLTPHOSRcuCellAccumulatedEnergyDataStruct &innPtr = fRcuHistoProducerPtr->GetCellAccumulatedEnergies();
-
fOutPtr->fModuleID = fModuleID;
fOutPtr->fRcuX = fRcuX;
fOutPtr->fRcuZ = fRcuZ;
-
- for(int x=0; x < N_XCOLUMNS_RCU; x ++)
+ for(int x=0; x < NXCOLUMNSRCU; x ++)
{
- for(int z=0; z < N_XCOLUMNS_RCU; z ++)
+ for(int z=0; z < NZROWSRCU; z ++)
{
- for(int gain =0; gain < N_GAINS; gain ++)
+ for(int gain =0; gain < NGAINS; gain ++)
{
fOutPtr->fAccumulatedEnergies[x][z][gain] = innPtr.fAccumulatedEnergies[x][z][gain];
fOutPtr->fHits[x][z][gain] = innPtr.fHits[x][z][gain];
+ fOutPtr->fDeadChannelMap[x][z][gain] = innPtr.fDeadChannelMap[x][z][gain];
}
}
}
-
- //pushing data to shared output memory
mysize += sizeof(AliHLTPHOSRcuCellAccumulatedEnergyDataStruct);
AliHLTComponentBlockData bd;
FillBlockData( bd );
}
fPhosEventCount++;
+
+ if( (fPhosEventCount%fHistoWriteFrequency == 0) && ( fPhosEventCount != 0))
+ {
+ char* arg = new char[9];
+ sprintf(arg, "recreate");
+ fRcuHistoProducerPtr->WriteAllHistograms(arg);
+ }
+ return 0;
+
+ */
return 0;
-
}//end DoEvent
int
-AliHLTPHOSRcuHistogramProducerComponent::DoInit( int argc, const char** argv )
+AliHLTPHOSRcuHistogramProducerComponent::DoInit( int /*argc*/, const char** /*argv*/ )
{
//See html documentation of base class
- fPrintInfo = kFALSE;
+ // fPrintInfo = kFALSE;
int iResult=0;
TString argument="";
- iResult = ScanArguments(argc, argv);
+
+ // iResult = ScanArguments(argc, argv);
+ /*
if(fIsSetEquippmentID == kFALSE)
{
Logging( kHLTLogFatal, "HLT::AliHLTPHOSRcuHistogramProducerComponent::DoInt( int argc, const char** argv )", "Missing argument",
"The argument equippmentID is not set: set it with a component argumet like this: -equippmentID <number>");
iResult = -2;
}
- fRcuHistoProducerPtr = new AliHLTPHOSRcuHistogramProducer( fModuleID, fRcuX, fRcuZ);
+ */
+
+
+ //fRcuHistoProducerPtr = new AliHLTPHOSRcuHistogramProducer( fModuleID, fRcuX, fRcuZ);
+
return iResult;
}
+