* provided "as is" without express or implied warranty. *
**************************************************************************/
-#include <iostream>
-
#include "AliHLTCaloClusterizerComponent.h"
#include "AliHLTCaloClusterizer.h"
+#include "AliHLTCaloClusterAnalyser.h"
#include "AliHLTCaloRecPointDataStruct.h"
#include "AliHLTCaloRecPointHeaderStruct.h"
#include "AliHLTCaloDigitDataStruct.h"
#include "AliHLTCaloDigitContainerDataStruct.h"
#include "AliHLTCaloDefinitions.h"
+#include "AliHLTCaloClusterDataStruct.h"
#include "TString.h"
/** @file AliHLTCaloClusterizerComponent.cxx
// or
// visit http://web.ift.uib.no/~kjeks/doc/alice-hlt
-
AliHLTCaloClusterizerComponent::AliHLTCaloClusterizerComponent(TString det):
AliHLTCaloProcessor(),
AliHLTCaloConstantsHandler(det),
+ fDataOrigin('\0'),
+ fAnalyserPtr(0),
fDigitsPointerArray(0),
+ fOutputDigitsArray(0),
fClusterizerPtr(0),
fDigitCount(0)
-
{
//See headerfile for documentation
fClusterizerPtr = new AliHLTCaloClusterizer(det);
fClusterizerPtr->SetDigitArray(fDigitsPointerArray);
-
+
+ fAnalyserPtr = new AliHLTCaloClusterAnalyser();
+
}
AliHLTCaloClusterizerComponent::~AliHLTCaloClusterizerComponent()
{
//See headerfile for documentation
-
+delete fAnalyserPtr;
if(fClusterizerPtr)
{
delete fClusterizerPtr;
{
//See headerfile for documentation
- if (fClusterizerPtr)
+if (fClusterizerPtr)
{
delete fClusterizerPtr;
fClusterizerPtr = 0;
return 0;
}
-// void
-// AliHLTCaloClusterizerComponent::GetInputDataTypes( vector<AliHLTComponentDataType>& list)
-// {
-// //See headerfile for documentation
-// list.clear();
-// list.push_back(AliHLTCaloDefinitions::fgkDigitDataType|kAliHLTDataOriginPHOS);
-// }
-
-// AliHLTComponentDataType
-// AliHLTCaloClusterizerComponent::GetOutputDataType()
-// {
-// //See headerfile for documentation
-// return AliHLTCaloDefinitions::fgkRecPointDataType|kAliHLTDataOriginPHOS;
-// }
-
-// void
-// AliHLTCaloClusterizerComponent::GetOutputDataSize(unsigned long& constBase, double& inputMultiplier )
-
-// {
-// //See headerfile for documentation
-// constBase = sizeof(AliHLTCaloRecPointHeaderStruct) + sizeof(AliHLTCaloRecPointDataStruct) + (sizeof(AliHLTCaloDigitDataStruct) << 7); //Reasonable estimate... ;
-// inputMultiplier = 1.5;
-// }
-
int
AliHLTCaloClusterizerComponent::DoEvent(const AliHLTComponentEventData& evtData, const AliHLTComponentBlockData* blocks,
AliHLTComponentTriggerData& /*trigData*/, AliHLTUInt8_t* outputPtr, AliHLTUInt32_t& size,
Int_t nDigits = 0;
Int_t digCount = 0;
- //UInt_t availableSize = size;
+ UInt_t availableSize = size;
AliHLTUInt8_t* outBPtr;
outBPtr = outputPtr;
const AliHLTComponentBlockData* iter = 0;
UInt_t specification = 0;
AliHLTCaloDigitDataStruct *digitDataPtr = 0;
-
+
// Adding together all the digits, should be put in standalone method
for ( ndx = 0; ndx < evtData.fBlockCnt; ndx++ )
{
iter = blocks+ndx;
// HLTError("Got block");
- if (iter->fDataType == (AliHLTCaloDefinitions::fgkDigitDataType|kAliHLTDataOriginPHOS))
+ if (iter->fDataType == (AliHLTCaloDefinitions::fgkDigitDataType|fDataOrigin))
{
- // Get the digit header
// Update the number of digits
nDigits = iter->fSize/sizeof(AliHLTCaloDigitDataStruct);;
- // HLTError("Got %d digits", nDigits);
-
+
+ availableSize -= iter->fSize;
+
specification = specification|iter->fSpecification;
- digitDataPtr = reinterpret_cast<AliHLTCaloDigitDataStruct*>(iter->fPtr);
- for (Int_t i = 0; i < nDigits; i++)
- {
- fDigitsPointerArray[digCount] = digitDataPtr;
- digCount++;
- digitDataPtr++;
- }
-
+ digitDataPtr = reinterpret_cast<AliHLTCaloDigitDataStruct*>(iter->fPtr);
+ for (Int_t i = 0; i < nDigits; i++)
+ {
+ fDigitsPointerArray[digCount] = digitDataPtr;
+ digCount++;
+ digitDataPtr++;
+ }
}
}
if(digCount > 0)
{
-
+
+ AliHLTCaloClusterHeaderStruct* caloClusterHeaderPtr = reinterpret_cast<AliHLTCaloClusterHeaderStruct*>(outBPtr);
+ caloClusterHeaderPtr->fNDigits = digCount;
+
+ outBPtr += sizeof(AliHLTCaloClusterHeaderStruct);
+ mysize += sizeof(AliHLTCaloClusterHeaderStruct);
+
// Sort the digit pointers
qsort(fDigitsPointerArray, digCount, sizeof(AliHLTCaloDigitDataStruct*), CompareDigits);
// Copy the digits to the output
+ fOutputDigitsArray = reinterpret_cast<AliHLTCaloDigitDataStruct*>(outBPtr);
for(Int_t n = 0; n < digCount; n++)
{
memcpy(outBPtr, fDigitsPointerArray[n], sizeof(AliHLTCaloDigitDataStruct));
+ //fOutputDigitsArray[n] = reinterpret_cast<AliHLTCaloDigitDataStruct*>(outBPtr);
outBPtr = outBPtr + sizeof(AliHLTCaloDigitDataStruct);
}
- mysize += digCount*sizeof(AliHLTCaloDigitDataStruct);
-
- AliHLTComponentBlockData bdDigits;
- FillBlockData( bdDigits );
- bdDigits.fOffset = offset;
- bdDigits.fSize = mysize;
- bdDigits.fDataType = iter->fDataType;
- bdDigits.fSpecification = specification;
- outputBlocks.push_back( bdDigits );
-
+ mysize += digCount*sizeof(AliHLTCaloDigitDataStruct);
- AliHLTCaloRecPointHeaderStruct* recPointHeaderPtr = reinterpret_cast<AliHLTCaloRecPointHeaderStruct*>(outBPtr);
+ //HLTDebug("Total number of digits: %d", digCount );
- fClusterizerPtr->SetRecPointDataPtr(reinterpret_cast<AliHLTCaloRecPointDataStruct*>(outBPtr+sizeof(AliHLTCaloRecPointHeaderStruct)));
-
- // HLTError("Total number of digits: %d", digCount );
+ nRecPoints = fClusterizerPtr->ClusterizeEvent(digCount);
- printf("Total number of digits: %d\n", digCount);
+ //HLTDebug("Number of rec points found: %d", nRecPoints);
- nRecPoints = fClusterizerPtr->ClusterizeEvent(digCount, size, mysize);
+ fAnalyserPtr->SetCaloClusterData(reinterpret_cast<AliHLTCaloClusterDataStruct*>(outBPtr));
+
+ fAnalyserPtr->SetRecPointArray(fClusterizerPtr->GetRecPoints(), nRecPoints);
- if(nRecPoints == -1)
- {
- // HLTError("Running out of buffer, exiting for safety.");
- return -ENOBUFS;
- }
+ fAnalyserPtr->SetDigitDataArray(fOutputDigitsArray);
- recPointHeaderPtr->fNRecPoints = nRecPoints;
- mysize += sizeof(AliHLTCaloRecPointHeaderStruct);
+ Int_t nClusters = fAnalyserPtr->CreateClusters(nRecPoints, size, mysize);
- // HLTError("Number of clusters: %d", nRecPoints);
-
+ caloClusterHeaderPtr->fNClusters = nClusters;
+
+ //HLTDebug("Number of clusters: %d", nRecPoints);
+
AliHLTComponentBlockData bd;
FillBlockData( bd );
bd.fOffset = offset;
bd.fSize = mysize;
- bd.fDataType = AliHLTCaloDefinitions::fgkClusterDataType;
+ bd.fDataType = kAliHLTDataTypeCaloCluster | kAliHLTDataOriginPHOS;
bd.fSpecification = specification;
outputBlocks.push_back( bd );
}
{
// See header file for documentation
return (*((AliHLTCaloDigitDataStruct**)(dig0)))->fID - (*((AliHLTCaloDigitDataStruct**)(dig1)))->fID;
+
+ //return (*((AliHLTCaloDigitDataStruct**)(dig0)))->fID - (*((AliHLTCaloDigitDataStruct**)(dig1)))->fID;
}