+// $Id$
+
/**************************************************************************
- * This file is property of and copyright by the ALICE HLT Project *
- * ALICE Experiment at CERN, All rights reserved. *
+ * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
* *
- * Primary Authors: Matthias Richter <Matthias.Richter@ift.uib.no> *
- * Timm Steinbeck <timm@kip.uni-heidelberg.de> *
- * for The ALICE HLT Project. *
+ * Authors: Oystein Djuvsland <oysteind@ift.uib.no> *
* *
* Permission to use, copy, modify and distribute this software and its *
- * documentation strictly for non-commercial purposes is hereby granted *
+ * `documentation strictly for non-commercial purposes is hereby granted *
* without fee, provided that the above copyright notice appears in all *
* copies and that both the copyright notice and this permission notice *
* appear in the supporting documentation. The authors make no claims *
* provided "as is" without express or implied warranty. *
**************************************************************************/
+#include <iostream>
+
+#include "AliHLTEMCALClusterizerComponent.h"
+#include "AliHLTCaloRecPointDataStruct.h"
+#include "AliHLTCaloRecPointHeaderStruct.h"
+#include "AliHLTEMCALGeometry.h"
+#include "AliHLTEMCALRecoParamHandler.h"
+#include "AliHLTCaloClusterAnalyser.h"
+
+
+
+
/** @file AliHLTEMCALClusterizerComponent.cxx
- @author Mateusz Ploskon
+ @author Oystein Djuvsland
@date
- @brief EMCAL clusterizer component for HLT. */
+ @brief A clusterizer component for EMCAL HLT
+*/
-#if __GNUC__== 3
-using namespace std;
-#endif
+// see header file for class documentation
+// or
+// refer to README to build package
+// or
+// visit http://web.ift.uib.no/~kjeks/doc/alice-hlt
-#include "AliHLTEMCALClusterizerComponent.h"
+#include "AliHLTCaloDefinitions.h"
#include "AliHLTEMCALDefinitions.h"
+#include "AliHLTCaloClusterizer.h"
-#include "TString.h"
-#include "TObjString.h"
-#include "TObjArray.h"
-#include "AliCDBEntry.h"
-#include "AliCDBManager.h"
-/** ROOT macro for the implementation of ROOT specific class methods */
-ClassImp(AliHLTEMCALClusterizerComponent)
+AliHLTEMCALClusterizerComponent gAliHLTEMCALClusterizerComponent;
-AliHLTEMCALClusterizerComponent::AliHLTEMCALClusterizerComponent()
- : AliHLTProcessor()
- , fOutputPercentage(100)
- , fStorageDBpath("local://$ALICE_ROOT")
- , fClusterizer(NULL)
- , fCDB(NULL)
- , fMemReader(NULL)
- , fGeometryFileName("")
- , fGeometryFile(NULL)
- , fGeoManager(NULL)
+AliHLTEMCALClusterizerComponent::AliHLTEMCALClusterizerComponent():
+ AliHLTCaloClusterizerComponent("EMCAL")
{
- // see header file for class documentation
- // or
- // refer to README to build package
- // or
- // visit http://web.ift.uib.no/~kjeks/doc/alice-hlt
-}
+ //See headerfile for documentation
-AliHLTEMCALClusterizerComponent::AliHLTEMCALClusterizerComponent(const AliHLTEMCALClusterizerComponent &/*c*/)
- : AliHLTProcessor()
- , fOutputPercentage(100)
- , fStorageDBpath("local://$ALICE_ROOT")
- , fClusterizer(NULL)
- , fCDB(NULL)
- , fMemReader(NULL)
- , fGeometryFileName("")
- , fGeometryFile(NULL)
- , fGeoManager(NULL)
-{
- // may not use the copy contructor
- HLTError("May not use.");
-}
+ fDataOrigin = const_cast<char*>(kAliHLTDataOriginEMCAL);
-AliHLTEMCALClusterizerComponent& AliHLTEMCALClusterizerComponent::operator=(const AliHLTEMCALClusterizerComponent&)
-{
- // may not use the copy contructor
- HLTError("May not use.");
- return *this;
+ //AliHLTEMCALGeometry *geom = new AliHLTEMCALGeometry;
+
+
}
AliHLTEMCALClusterizerComponent::~AliHLTEMCALClusterizerComponent()
{
- // see header file for class documentation
+ //See headerfile for documentation
}
-AliHLTComponentDataType AliHLTEMCALClusterizerComponent::GetOutputDataType()
+void
+AliHLTEMCALClusterizerComponent::GetInputDataTypes( vector<AliHLTComponentDataType>& list)
{
- return AliHLTEMCALDefinitions::fgkClusterDataType;
+ //See headerfile for documentation
+ list.clear();
+ //list.push_back(AliHLTCaloDefinitions::fgkDigitDataType|kAliHLTDataOriginEMCAL);
+ list.push_back(AliHLTEMCALDefinitions::fgkDigitDataType);
}
-int AliHLTEMCALClusterizerComponent::DoInit( int argc, const char** argv )
+AliHLTComponentDataType
+AliHLTEMCALClusterizerComponent::GetOutputDataType()
{
- // see header file for class documentation
- int iResult=0;
- HLTInfo("parsing %d arguments", argc);
-
- TString argument="";
- TString configuration="";
- int bMissingParam=0;
- bool bHaveMandatory1=false;
- bool bHaveMandatory2=false;
-
- char *cpErr = 0;
-
- for (int i=0; i<argc && iResult>=0; i++) {
- argument=argv[i];
- if (argument.IsNull()) continue;
-
- // -mandatory1
- if (argument.CompareTo("-cdb")==0) {
- bHaveMandatory1|=1;
- if ((bMissingParam=(++i>=argc))) break;
- HLTInfo("got \'-cdb\' argument: %s", argv[i]);
- fStorageDBpath = argv[i];
- HLTInfo("CDB path is: %s", fStorageDBpath.c_str());
- // -mandatory2
- } else if (argument.CompareTo("-geometry")==0) {
- bHaveMandatory2|=1;
- HLTInfo("got \'-geometry\' argument");
- fGeometryFileName = argv[i];
- HLTInfo("Geometry file is: %s", fGeometryFileName.c_str());
- // -optional1
- } else if (argument.CompareTo("-output_percentage")==0) {
- if ((bMissingParam=(++i>=argc))) break;
- HLTInfo("got \'-output_percentage\' argument: %s", argv[i]);
- fOutputPercentage = strtoul(argv[i], &cpErr, 0);
- if ( *cpErr )
- {
- HLTError("Unable to convert ouput_percentage to a number %s", argv[i]);
- return -EINVAL;
- }
+ //See headerfile for documentation
+ return kAliHLTDataTypeCaloCluster|kAliHLTDataOriginEMCAL;
+}
-// // -optional2
-// } else if (argument.CompareTo("-optional2")==0) {
-// HLTInfo("got \'-optional2\' argument");
+void
+AliHLTEMCALClusterizerComponent::GetOutputDataSize(unsigned long& constBase, double& inputMultiplier )
- } else {
- // the remaining arguments are treated as configuration
- if (!configuration.IsNull()) configuration+=" ";
- configuration+=argument;
- }
- }
- if (bMissingParam) {
- HLTError("missing parameter for argument %s", argument.Data());
- iResult=-EINVAL;
- }
+{
+ //See headerfile for documentation
+ constBase = sizeof(AliHLTCaloRecPointHeaderStruct) + sizeof(AliHLTCaloRecPointDataStruct) + (sizeof(AliHLTCaloDigitDataStruct) << 7); //Reasonable estimate... ;
+ inputMultiplier = 2.0;
+}
- if (iResult>=0 && !bHaveMandatory1) {
- HLTError("mandatory argument \'-cdb\' missing");
- iResult=-EPROTO;
- }
- if (iResult>=0 && !bHaveMandatory2) {
- HLTError("mandatory argument \'-geometry\' missing");
- iResult=-EPROTO;
- }
- if (iResult>=0 && !configuration.IsNull()) {
- iResult=Configure(configuration.Data());
- } else {
- iResult=Reconfigure(NULL, NULL);
- }
- return iResult;
+const Char_t*
+AliHLTEMCALClusterizerComponent::GetComponentID()
+{
+ //See headerfile for documentation
+ return "EmcalClusterizer";
}
-int AliHLTEMCALClusterizerComponent::DoDeinit()
+AliHLTComponent*
+AliHLTEMCALClusterizerComponent::Spawn()
{
- // see header file for class documentation
- HLTInfo("processing cleanup");
- return 0;
-}
+ //See headerfile for documentation
-int AliHLTEMCALClusterizerComponent::DoEvent( const AliHLTComponentEventData& evtData, const AliHLTComponentBlockData* blocks,
- AliHLTComponentTriggerData& trigData, AliHLTUInt8_t* outputPtr,
- AliHLTUInt32_t& size, vector<AliHLTComponentBlockData>& outputBlocks ) {
- // see header file for class documentation
- HLTInfo("processing data");
- if (evtData.fStructSize==0 && blocks==NULL && trigData.fStructSize==0 &&
- outputPtr==0 && size==0)
- {
- outputBlocks.clear();
- // this is just to get rid of the warning "unused parameter"
- }
- return 0;
+ return new AliHLTEMCALClusterizerComponent();
}
-
-int AliHLTEMCALClusterizerComponent::Configure(const char* arguments)
+int AliHLTEMCALClusterizerComponent::DoInit(int argc, const char** argv)
{
- // see header file for class documentation
- int iResult=0;
- if (!arguments) return iResult;
- HLTInfo("parsing configuration string \'%s\'", arguments);
-
- TString allArgs=arguments;
- TString argument;
- int bMissingParam=0;
-
- TObjArray* pTokens=allArgs.Tokenize(" ");
- if (pTokens) {
- for (int i=0; i<pTokens->GetEntries() && iResult>=0; i++) {
- argument=((TObjString*)pTokens->At(i))->GetString();
- if (argument.IsNull()) continue;
-
- // -config1
- if (argument.CompareTo("-config1")==0) {
- if ((bMissingParam=(++i>=pTokens->GetEntries()))) break;
- HLTInfo("got \'-config1\': %s", ((TObjString*)pTokens->At(i))->GetString().Data());
+ fClusterizerPtr = new AliHLTCaloClusterizer("EMCAL");
+
+ fRecoParamsPtr = new AliHLTEMCALRecoParamHandler();
- // -config2
- } else if (argument.CompareTo("-config2")==0) {
- HLTInfo("got \'-config2\'");
- } else {
- HLTError("unknown argument %s", argument.Data());
- iResult=-EINVAL;
- break;
- }
- }
- delete pTokens;
- }
- if (bMissingParam) {
- HLTError("missing parameter for argument %s", argument.Data());
- iResult=-EINVAL;
- }
- return iResult;
+ return AliHLTCaloClusterizerComponent::DoInit(argc, argv);
}
-int AliHLTEMCALClusterizerComponent::Reconfigure(const char* cdbEntry, const char* chainId)
+int AliHLTEMCALClusterizerComponent::DoDeinit()
{
- // see header file for class documentation
- int iResult=0;
- const char* path="HLT/ConfigSample/EMCALClusterizerComponent";
- const char* defaultNotify="";
- if (cdbEntry) {
- path=cdbEntry;
- defaultNotify=" (default)";
- }
- if (path) {
- HLTInfo("reconfigure from entry %s%s, chain id %s", path, defaultNotify,(chainId!=NULL && chainId[0]!=0)?chainId:"<none>");
- AliCDBEntry *pEntry = AliCDBManager::Instance()->Get(path/*,GetRunNo()*/);
- if (pEntry) {
- TObjString* pString=dynamic_cast<TObjString*>(pEntry->GetObject());
- if (pString) {
- HLTInfo("received configuration object string: \'%s\'", pString->GetString().Data());
- iResult=Configure(pString->GetString().Data());
- } else {
- HLTError("configuration object \"%s\" has wrong type, required TObjString", path);
- }
- } else {
- HLTError("can not fetch object \"%s\" from CDB", path);
- }
- }
- return iResult;
+ if(fRecoParamsPtr)
+ {
+ delete fRecoParamsPtr;
+ fRecoParamsPtr = 0;
+ }
+ return AliHLTCaloClusterizerComponent::DoDeinit();
}
-int AliHLTEMCALClusterizerComponent::ReadPreprocessorValues(const char* modules)
+
+int AliHLTEMCALClusterizerComponent::InitialiseGeometry()
{
- // see header file for class documentation
- int iResult=0;
- TString detectors(modules!=NULL?modules:"");
- HLTInfo("read preprocessor values for detector(s): %s", detectors.IsNull()?"none":detectors.Data());
- return iResult;
+ fAnalyserPtr->SetGeometry(new AliHLTEMCALGeometry());
+
+ return 0;
}