Add ZDC reconstruction to HLT
authorjthaeder <jthaeder@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 13 Oct 2010 16:52:51 +0000 (16:52 +0000)
committerjthaeder <jthaeder@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 13 Oct 2010 16:52:51 +0000 (16:52 +0000)
- 1 reconstruction component : From RAW to AliESDZDC object
- 1 agent to define simulation chain

HLT/ZDC/AliHLTZDCAgent.cxx [new file with mode: 0644]
HLT/ZDC/AliHLTZDCAgent.h [new file with mode: 0644]
HLT/ZDC/AliHLTZDCESDRecoComponent.cxx [new file with mode: 0644]
HLT/ZDC/AliHLTZDCESDRecoComponent.h [new file with mode: 0644]
HLT/ZDC/Makefile.am [new file with mode: 0644]
HLT/ZDC/macros/HLTZDCTest.C [new file with mode: 0644]
HLT/ZDC/macros/makeConfigurationObjectZDCReconstruction.C [new file with mode: 0644]
HLT/ZDC/macros/runZDCTest.sh [new file with mode: 0755]

diff --git a/HLT/ZDC/AliHLTZDCAgent.cxx b/HLT/ZDC/AliHLTZDCAgent.cxx
new file mode 100644 (file)
index 0000000..6c36dbf
--- /dev/null
@@ -0,0 +1,180 @@
+//-*- Mode: C++ -*-
+// $Id: AliHLTZDCAgent.cxx  $
+
+/**************************************************************************
+ * This file is property of and copyright by the ALICE HLT Project        * 
+ * ALICE Experiment at CERN, All rights reserved.                         *
+ *                                                                        *
+ * Primary Authors: Chiara Oppedisano <Chiara.Oppedisano@to.infn.it>      *
+ *                  for The ALICE HLT Project.                            *
+ *                                                                        *
+ * Permission to use, copy, modify and distribute this software and its   *
+ * 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     *
+ * about the suitability of this software for any purpose. It is          *
+ * provided "as is" without express or implied warranty.                  *
+ **************************************************************************/
+
+/** @file   AliHLTZDCAgent.cxx
+    @author Chiara Oppedisano <Chiara.Oppedisano@to.infn.it>
+    @brief  Agent of the libAliHLTZDC library
+*/
+
+#include <cassert>
+
+#include "TSystem.h"
+
+#include "AliHLTZDCAgent.h"
+
+#include "AliHLTErrorGuard.h"
+
+// header files of library components
+#include "AliHLTZDCESDRecoComponent.h"
+
+// raw data handler of HLTOUT data
+#include "AliHLTOUTHandlerEquId.h"
+#include "AliHLTOUTHandlerEsdBranch.h"
+
+/** global instance for agent registration */
+AliHLTZDCAgent gAliHLTZDCAgent;
+
+/** ROOT macro for the implementation of ROOT specific class methods */
+ClassImp(AliHLTZDCAgent)
+
+AliHLTZDCAgent::AliHLTZDCAgent()  :
+  AliHLTModuleAgent("ZDC")
+{
+  // see header file for class documentation
+  // or
+  // refer to README to build package
+  // or
+  // visit http://web.ift.uib.no/~kjeks/doc/alice-hlt
+}
+
+AliHLTZDCAgent::~AliHLTZDCAgent()
+{
+  // see header file for class documentation
+}
+
+int AliHLTZDCAgent::CreateConfigurations(AliHLTConfigurationHandler* handler,
+                                        AliRawReader* rawReader,
+                                        AliRunLoader* runloader) const
+{
+  // see header file for class documentation
+
+  if (!handler) 
+    return -EINVAL;
+
+  if (rawReader || !runloader) {
+    // AliSimulation: use the AliRawReaderPublisher if the raw reader is available
+    // Alireconstruction: indicated by runloader==NULL, run always on raw data
+
+    // -- Define the ZDC raw publisher
+    // -----------------------------------
+    TString arg("-equipmentid 3840 -datatype 'DDL_RAW ' 'ZDC ' -dataspec 0x01");
+    handler->CreateConfiguration("ZDC-DP_0", "AliRawReaderPublisher", NULL , arg.Data());
+
+    // -- Define the VZERO reconstruction components
+    // -----------------------------------------------
+    handler->CreateConfiguration("ZDC-RECO", "ZDCReconstruction", "ZDC-DP_0", "");
+  }
+  else if (runloader && !rawReader) {
+    // indicates AliSimulation with no RawReader available -> run on digits
+    
+    /* NOT Tested/ implemented yet
+      handler->CreateConfiguration("DigitPublisher","AliLoaderPublisher",NULL,
+      "-loader ZDCLoader -datatype 'ALITREED' 'ZDC '");
+      handler->CreateConfiguration("Digit","ZDCReconstruction","DigitPublisher","");
+    */
+  }
+  
+  return 0;
+}
+
+const char* AliHLTZDCAgent::GetReconstructionChains(AliRawReader* /*rawReader*/,
+                                                   AliRunLoader* /*runloader*/) const
+{
+  // see header file for class documentation
+  
+  // ZDC called only from the EsdConverter
+  return NULL;
+}
+
+const char* AliHLTZDCAgent::GetRequiredComponentLibraries() const
+{
+  // see header file for class documentation
+  return "libAliHLTUtil.so libAliHLTZDC.so";
+}
+
+int AliHLTZDCAgent::RegisterComponents(AliHLTComponentHandler* pHandler) const
+{
+  // see header file for class documentation
+  assert(pHandler);
+  if (!pHandler) return -EINVAL;
+  pHandler->AddComponent(new AliHLTZDCESDRecoComponent);
+
+  return 0;
+}
+
+int AliHLTZDCAgent::GetHandlerDescription(AliHLTComponentDataType dt,
+                                            AliHLTUInt32_t spec,
+                                            AliHLTOUTHandlerDesc& desc) const
+{
+  // see header file for class documentation
+  if (dt==(kAliHLTDataTypeDDLRaw|kAliHLTDataOriginZDC)) {
+      desc=AliHLTOUTHandlerDesc(kRawReader, dt, GetModuleId());
+      HLTInfo("module %s handles data block type %s specification %d (0x%x)", 
+             GetModuleId(), AliHLTComponent::DataType2Text(dt).c_str(), spec, spec);
+      return 1;
+  }
+
+  // add TObject data blocks of type {ESD_CONT:ZDC } to ESD
+  if (dt==(kAliHLTDataTypeESDContent|kAliHLTDataOriginZDC)) {
+      desc=AliHLTOUTHandlerDesc(kEsd, dt, GetModuleId());
+      HLTInfo("module %s handles data block type %s specification %d (0x%x)", 
+             GetModuleId(), AliHLTComponent::DataType2Text(dt).c_str(), spec, spec);
+      return 1;
+  }
+
+  return 0;
+}
+
+AliHLTOUTHandler* AliHLTZDCAgent::GetOutputHandler(AliHLTComponentDataType dt,
+                                                  AliHLTUInt32_t /*spec*/)
+{
+  // see header file for class documentation
+  if (dt==(kAliHLTDataTypeDDLRaw|kAliHLTDataOriginZDC)) {
+    // use the default handler
+    static AliHLTOUTHandlerEquId handler;
+    return &handler;
+  }
+
+  if (dt==(kAliHLTDataTypeESDContent|kAliHLTDataOriginZDC)) {
+    // use AliHLTOUTHandlerEsdBranch handler to add the TObject
+    // to the ESD branch
+    // Note: the object should have an appropriate name returned
+    // by GetName(). Use SetName() to prepare the object before streaming
+    static AliHLTOUTHandlerEsdBranch handler;
+    return &handler;
+  }
+
+  return NULL;
+}
+
+int AliHLTZDCAgent::DeleteOutputHandler(AliHLTOUTHandler* pInstance)
+{
+  // see header file for class documentation
+  if (pInstance==NULL) return -EINVAL;
+
+  // nothing to delete, the handler have been defined static
+  return 0;
+}
+
+// #################################################################################
+AliHLTModulePreprocessor* AliHLTZDCAgent::GetPreprocessor() {
+  // see header file for class documentation
+  ALIHLTERRORGUARD(5, "GetPreProcessor not implemented for this module");
+  return NULL;
+}
diff --git a/HLT/ZDC/AliHLTZDCAgent.h b/HLT/ZDC/AliHLTZDCAgent.h
new file mode 100644 (file)
index 0000000..8621b68
--- /dev/null
@@ -0,0 +1,151 @@
+//-*- Mode: C++ -*-
+// $Id: AliHLTZDCAgent.h $
+
+#ifndef ALIHLTZDCAGENT_H
+#define ALIHLTZDCAGENT_H
+
+/* This file is property of and copyright by the ALICE HLT Project        * 
+ * ALICE Experiment at CERN, All rights reserved.                         *
+ * See cxx source for full Copyright notice                               */
+
+/** @file    AliHLTZDCAgent.h
+    @author Chiara Oppedisano <Chiara.Oppedisano@to.infn.it>
+    @brief   Agent of the libAliHLTZDC library
+*/
+
+// see below for class documentation
+// or
+// refer to README to build package
+// or
+// visit http://web.ift.uib.no/~kjeks/doc/alice-hlt
+
+#include "AliHLTModuleAgent.h"
+
+/**
+ * @class AliHLTZDCAgent
+ * This is the agent for the AliHLTZDC library.<br>
+ *
+ * The sample agent implements all interface function provided by @ref
+ * AliHLTModuleAgent :
+ * - CreateConfigurations() <br>
+ *   The method gets an instance of the AliHLTConfigurationHanler to add
+ *   configurations, e.g. 
+ *   <pre>
+ *   handler->CreateConfiguration("my-puplisher"  , "FilePublisher", NULL , "data.bin");
+ *   ...
+ *   handler->CreateConfiguration("my-analysis-chain"  , "FileWriter", "my-processor" , "my arguments");
+ *   </pre>
+ * - GetReconstructionChains() <br>
+ *   returns a string of blank separated configurations to be run during
+ *   local event reconstruction.
+ *   <pre>
+ *   return "my-data-sink my-analysis-chain";
+ *   </pre>
+ * - GetRequiredComponentLibraries() <br>
+ *   returns a string of blank separated libraries which have to be loaded
+ *   in addition in order to load all required components. <br>
+ *   @note Not the right place for library dependencies.
+ *   <pre>
+ *   return "libAliHLTUtil.so";
+ *   </pre>
+ * - RegisterComponents() <br>
+ *   registers the components: AliHLTDummyComponent, AliHLTSampleComponent1,
+ *   AliHLTSampleComponent2, and AliHLTSampleMonitoringComponent<br>
+ * - GetHandlerDescription() <br>
+ *   Handles HLTOUT data blocks of type {DDL_RAW,SMPL}
+ *   <pre>
+ *   if (dt==(kAliHLTDataTypeDDLRaw|kAliHLTDataOriginSample)) {
+ *     desc=AliHLTOUTHandlerDesc(kRawReader, dt, GetModuleId());
+ *     return 1;
+ *   }
+ *   </pre>
+ * - GetOutputHandler() <br>
+ *   Returns handler AliHLTOUTHandlerEquId for HLTOUT data blocks of
+ *   type {DDL_RAW,SMPL}
+ *   <pre>
+ *   if (dt==(kAliHLTDataTypeDDLRaw|kAliHLTDataOriginSample)) {
+ *     return new AliHLTOUTHandlerEquId;
+ *   }
+ *   </pre>
+ * - DeleteOutputHandler() <br>
+ *   Deletes the output handler. In this case there is no special handling
+ *   needed.
+ *
+ * In order to hook the sample library up to the HLT system on global object
+ * @ref gAliHLTZDCAgent of the agent is defined in the source code.
+ * 
+ * @ingroup alihlt_system
+ */
+class AliHLTZDCAgent : public AliHLTModuleAgent {
+ public:
+
+  /**
+   * standard constructor. The agent is automatically registered in the
+   * global agent manager
+   */
+  AliHLTZDCAgent();
+  
+/** destructor */
+  virtual ~AliHLTZDCAgent();
+
+  /**
+   * Register all configurations belonging to the ZDC library with the
+   * AliHLTConfigurationHandler. 
+   * @param handler   [in] the configuration handler
+   * @param rawReader [in] AliRoot RawReader instance 
+   * @param runloader [in] AliRoot runloader
+   * @return neg. error code if failed
+   */
+  int CreateConfigurations(AliHLTConfigurationHandler* handler,
+                          AliRawReader* rawReader=NULL,
+                          AliRunLoader* runloader=NULL) const;
+
+  /**
+   * Get the top configurations for local event reconstruction.
+   * A top configuration describes a processing chain. It can simply be
+   * described by the last configuration(s) in the chain. 
+   * @param rawReader [in] AliRoot RawReader instance 
+   * @param runloader [in] AliRoot runloader
+   * @return string containing the top configurations separated by blanks
+   */
+  const char* GetReconstructionChains(AliRawReader* rawReader=NULL,
+                                     AliRunLoader* runloader=NULL) const;
+
+  /**
+   * Component libraries which the configurations of this agent depend on.
+   * @return list of component libraries as a blank-separated string.
+   */
+  const char* GetRequiredComponentLibraries() const;
+
+  /**
+   * Register components for the AliHLTZDC library.
+   * @param pHandler  [in] instance of the component handler          
+   */
+  int RegisterComponents(AliHLTComponentHandler* pHandler) const;
+  
+  /** interface function, see @ref AliHLTModuleAgent for description */
+  int GetHandlerDescription(AliHLTComponentDataType dt,
+                           AliHLTUInt32_t spec,
+                           AliHLTOUTHandlerDesc& desc) const;
+
+  /** interface function, see @ref AliHLTModuleAgent for description */
+  AliHLTOUTHandler* GetOutputHandler(AliHLTComponentDataType dt, AliHLTUInt32_t spec);
+  
+  /** interface function, see @ref AliHLTModuleAgent for description */                                     
+  int DeleteOutputHandler(AliHLTOUTHandler* pInstance);
+
+  /** interface function, see @ref AliHLTModuleAgent for description */
+  AliHLTModulePreprocessor* GetPreprocessor();
+
+ private:
+  /** copy constructor prohibited */
+  AliHLTZDCAgent(const AliHLTZDCAgent&);
+
+  /** assignment operator prohibited */
+  AliHLTZDCAgent& operator=(const AliHLTZDCAgent&);
+
+  /** ROOT specific member definition */
+  ClassDef(AliHLTZDCAgent, 0);
+};
+
+#endif
diff --git a/HLT/ZDC/AliHLTZDCESDRecoComponent.cxx b/HLT/ZDC/AliHLTZDCESDRecoComponent.cxx
new file mode 100644 (file)
index 0000000..19479e9
--- /dev/null
@@ -0,0 +1,274 @@
+//-*- Mode: C++ -*-
+// $Id: AliHLTZDCESDRecoComponent.cxx $
+/**************************************************************************
+ * This file is property of and copyright by the ALICE HLT Project        * 
+ * ALICE Experiment at CERN, All rights reserved.                         *
+ *                                                                        *
+ * Primary Authors: Chiara Oppedisano <Chiara.Oppedisano@to.infn.it>      *
+ *                  for The ALICE HLT Project.                            *
+ *                                                                        *
+ * Permission to use, copy, modify and distribute this software and its   *
+ * 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     *
+ * about the suitability of this software for any purpose. It is          *
+ * provided "as is" without express or implied warranty.                  *
+ **************************************************************************/
+
+/** @file    AliHLTZDCESDRecoComponent.cxx
+    @author  Chiara Oppedisano <Chiara.Oppedisano@to.infn.it>
+    @brief   ZDC reconstruction component
+*/
+
+#if __GNUC__>= 3
+using namespace std;
+#endif
+
+#include "AliHLTErrorGuard.h"
+#include "AliHLTSystem.h"
+#include "AliHLTZDCESDRecoComponent.h"
+#include "AliHLTDefinitions.h"
+#include "AliRawReaderMemory.h"
+#include "AliGRPObject.h"
+#include "AliZDCReconstructor.h"
+#include "AliZDCRecoParam.h"
+#include "AliZDCRecoParampp.h"
+#include "AliZDCRecoParamPbPb.h"
+#include "AliESDEvent.h"
+#include "AliESDZDC.h"
+#include "AliCDBManager.h"
+#include "AliHLTDataTypes.h"
+#include <cstdlib>
+#include <cerrno>
+
+ClassImp(AliHLTZDCESDRecoComponent)
+    
+//_____________________________________________________________________
+AliHLTZDCESDRecoComponent::AliHLTZDCESDRecoComponent()
+  : AliHLTProcessor(),
+    fClusterTree(NULL),
+    fRawReader(NULL),
+    fReconstructor(NULL)
+{
+}
+
+//_____________________________________________________________________
+AliHLTZDCESDRecoComponent::~AliHLTZDCESDRecoComponent()
+{
+    // see header file for class documentation
+}
+
+//_____________________________________________________________________
+const char* AliHLTZDCESDRecoComponent::GetComponentID()
+{
+    // see header file for class documentation
+    return "ZDCESDReco"; // The ID of this component
+}
+
+//_____________________________________________________________________
+void AliHLTZDCESDRecoComponent::GetInputDataTypes( vector<AliHLTComponentDataType>& list)
+{
+    // see header file for class documentation
+      list.push_back(kAliHLTDataTypeDDLRaw|kAliHLTDataOriginZDC);
+}
+
+//_____________________________________________________________________
+AliHLTComponentDataType AliHLTZDCESDRecoComponent::GetOutputDataType()
+{
+      return kAliHLTDataTypeESDContent|kAliHLTDataOriginZDC;
+}
+
+//_____________________________________________________________________
+void AliHLTZDCESDRecoComponent::GetOutputDataSize( unsigned long& constBase, double& inputMultiplier )
+{
+    // see header file for class documentation
+    constBase = 1000;
+    inputMultiplier = 0;
+}
+
+//_____________________________________________________________________
+AliHLTComponent* AliHLTZDCESDRecoComponent::Spawn()
+{
+    // see header file for class documentation
+    return new AliHLTZDCESDRecoComponent;
+}
+
+//_____________________________________________________________________
+int AliHLTZDCESDRecoComponent::DoInit( int argc, const char** argv )
+{
+  // see header file for class documentation
+  int iResult=0;
+
+  // read configuration object : HLT/ConfigZDC/
+  TString cdbPath="HLT/ConfigZDC/";
+  cdbPath+=GetComponentID();
+  iResult=ConfigureFromCDBTObjString(cdbPath);
+
+  // init stage 3: read the component arguments
+  if (iResult>=0) {
+    iResult=ConfigureFromArgumentString(argc, argv);
+  }
+
+  // init stage 1: default values for all data members
+  
+  TObject* pOCDBEntry = LoadAndExtractOCDBObject("GRP/GRP/Data");
+  AliGRPObject* pGRP = pOCDBEntry?dynamic_cast<AliGRPObject*>(pOCDBEntry):NULL;
+  Float_t  beamEnergy=0.;
+  if(pGRP) beamEnergy = pGRP->GetBeamEnergy(); 
+  TString beamType="";
+  if(pGRP) beamType = pGRP->GetBeamType();
+
+  // implement the component initialization
+  do {
+    if (iResult<0) break;
+
+    fReconstructor = new AliZDCReconstructor;
+    if (!fReconstructor) {
+      iResult=-ENOMEM;
+      break;
+    }
+
+    fRawReader = new AliRawReaderMemory;
+    if (!fRawReader) {
+      iResult=-ENOMEM;
+      break;
+    }
+
+    fClusterTree = new TTree("TreeR", "Tree for reco points in HLT");;
+    if (!fClusterTree) {
+      iResult=-ENOMEM;
+      break;
+    }
+
+    // implement further initialization
+  } while (0);
+
+  if (iResult<0) {
+    // implement cleanup
+
+    if (fClusterTree) delete fClusterTree;
+    fClusterTree = NULL;
+
+    if (fRawReader) delete fRawReader;
+    fRawReader = NULL;
+    
+    if (fReconstructor) delete fReconstructor;
+    fReconstructor = NULL;
+  }
+
+  if (iResult>=0) {
+    if((beamType.CompareTo("p-p"))==0) fReconstructor->SetRecoParam(AliZDCRecoParampp::GetLowFluxParam());
+    else if((beamType.CompareTo("A-A"))==0) fReconstructor->SetRecoParam(AliZDCRecoParamPbPb::GetHighFluxParam(2*beamEnergy));
+    else HLTWarning(" Beam type not known by ZDC!");
+  
+    fReconstructor->Init(beamType, beamEnergy);
+  }
+
+  return iResult;
+}
+
+//_____________________________________________________________________
+int AliHLTZDCESDRecoComponent::ScanConfigurationArgument(int /*argc*/, const char** argv)
+{
+  // Scan configuration arguments
+  // Return the number of processed arguments
+  //        -EPROTO if argument format error (e.g. number expected but not found)
+  //
+  // The AliHLTComponent base class implements a parsing loop for argument strings and
+  // arrays of strings which is invoked by ConfigureFromArgumentString/ConfigureFromCDBTObjString
+  // The component needs to implement ScanConfigurationArgument in order to decode the arguments.
+
+  int i=0;
+  TString argument=argv[i];
+
+  if (argument.IsNull()) return 0;
+
+  return 0;
+}
+
+//_____________________________________________________________________
+int AliHLTZDCESDRecoComponent::DoDeinit()
+{
+    if(fRawReader) delete fRawReader;
+    if(fReconstructor) delete fReconstructor;
+    if(fClusterTree) delete fClusterTree;
+    return 0;
+}
+
+//_____________________________________________________________________
+int AliHLTZDCESDRecoComponent::DoEvent(const AliHLTComponentEventData& /*evtData*/,
+                                      AliHLTComponentTriggerData& /*trigData*/)
+{
+  // event processing function
+  int iResult=0;
+  
+  // check if this is a data event, there are a couple of special events
+  // which should be ignored for normal processing
+  if (!IsDataEvent()) return 0;
+  
+  // get ZDC raw input data block and set up the rawreader
+  const AliHLTComponentBlockData* pBlock = GetFirstInputBlock(kAliHLTDataTypeDDLRaw|kAliHLTDataOriginZDC);
+  if (!pBlock) {
+    HLTError("No ZDC input block !!!");
+    return -1;
+  }
+
+  // add input block to raw reader
+  if (!fRawReader->SetMemory((UChar_t*) pBlock->fPtr, pBlock->fSize )){
+    HLTError("Could not add buffer of data block  %s, 0x%08x to rawreader",
+            DataType2Text(pBlock->fDataType).c_str(), pBlock->fSpecification);
+    iResult = -1;
+  }
+  
+  if (iResult >= 0) {
+
+    // set ZDC EquipmentID
+    fRawReader->SetEquipmentID(3840);
+
+    fReconstructor->Reconstruct(fRawReader, fClusterTree);
+
+    fReconstructor->FillZDCintoESD(fClusterTree, (AliESDEvent *) NULL);
+
+    // send AliESDZDC
+    PushBack(static_cast<TObject*>(fReconstructor->GetZDCESDData()), 
+            kAliHLTDataTypeESDContent|kAliHLTDataOriginZDC,0);
+   
+  }
+
+  // clear the rawreader
+  fClusterTree->Reset();
+  fRawReader->ClearBuffers();    
+  
+  return iResult;
+}
+
+
+//_____________________________________________________________________
+int AliHLTZDCESDRecoComponent::Reconfigure(const char* cdbEntry, const char* chainId)
+{
+  // reconfigure the component from the specified CDB entry, or default CDB entry
+  // function is invoked by the framework if a reconfigure command was received.
+  // 
+  int iResult=0;
+  TString cdbPath;
+  if (cdbEntry) {
+    cdbPath=cdbEntry;
+  } else {
+    cdbPath="HLT/ConfigZDC/";
+    cdbPath+=GetComponentID();
+  }
+  AliInfoClass(Form("reconfigure '%s' from entry %s%s", chainId, cdbPath.Data(), cdbEntry?"":" (default)"));
+  iResult=ConfigureFromCDBTObjString(cdbPath);
+
+  return iResult;
+}
+
+
+//_____________________________________________________________________
+int AliHLTZDCESDRecoComponent::ReadPreprocessorValues(const char* /*modules*/)
+{
+  // see header file for class documentation
+  ALIHLTERRORGUARD(5, "ReadPreProcessorValues not implemented for this component");
+  return 0;
+}
diff --git a/HLT/ZDC/AliHLTZDCESDRecoComponent.h b/HLT/ZDC/AliHLTZDCESDRecoComponent.h
new file mode 100644 (file)
index 0000000..1fafb65
--- /dev/null
@@ -0,0 +1,145 @@
+//-*- Mode: C++ -*-
+// $Id: AliHLTZDCESDRecoComponent $
+
+#ifndef ALIHLTZDCESDRECOCOMPONENT_H
+#define ALIHLTZDCESDRECOCOMPONENT_H
+
+/* This file is property of and copyright by the ALICE HLT Project        * 
+ * ALICE Experiment at CERN, All rights reserved.                         *
+ * See cxx source for full Copyright notice                               */
+
+/** @file    AliHLTZDCESDRecoComponent.h 
+    @author  Chiara Oppedisano <Chiara.Oppedisano@to.infn.it>
+    @brief   ZDC reconstruction component
+*/
+
+// see below for class documentation
+// or
+// refer to README to build package
+// or
+// visit http://web.ift.uib.no/~kjeks/doc/alice-hlt
+
+#include "AliHLTProcessor.h"
+#include "AliESDEvent.h"
+
+class AliZDCReconstructor;
+class AliRawReaderMemory;
+
+
+/**
+ * @class AliHLTZDCESDRecoComponent
+ * Reconstruction of ZDC data
+ * 
+ * <h2>General properties:</h2>
+ *
+ * Component ID: \b ZDCESDReco <br>
+ * Library: \b libAliHLTZDC.so     <br>
+ * Input Data Types:  @ref kAliHLTDataTypeDDLRaw <br>
+ * Output Data Types: @ref kAliHLTDataTypeESDContent|kAliHLTDataOriginZDC <br>
+ *
+ * <h2>Mandatory arguments:</h2>
+ * <!-- NOTE: ignore the \li. <i> and </i>: it's just doxygen formatting --> 
+ *
+ * <h2>Optional arguments:</h2>
+ * <!-- NOTE: ignore the \li. <i> and </i>: it's just doxygen formatting -->
+ *
+ * <h2>Configuration:</h2>
+ * <!-- NOTE: ignore the \li. <i> and </i>: it's just doxygen formatting -->
+ *
+ * <h2>Default CDB entries:</h2>
+ * <!-- NOTE: ignore the \li. <i> and </i>: it's just doxygen formatting -->
+ *
+ * <tt>HLT/ConfigZDC/ZDCESDReco</tt>
+ * \li -TObjString object holding a string with the configuration parameters
+ *      currently empty 
+ *
+ * <tt>GRP/GRP/Data</tt>
+ * \li -GRP object - run information
+ *
+ *
+ * <h2>Performance:</h2>
+ *
+ * <h2>Memory consumption:</h2>
+ *
+ * <h2>Input size:</h2>
+ * <!-- NOTE: ignore the \li. <i> and </i>: it's just doxygen formatting -->
+ *
+ * \li pp: xx Byte
+ *
+ * <h2>Output size:</h2>
+ * <!-- NOTE: ignore the \li. <i> and </i>: it's just doxygen formatting -->
+ *
+ * \li pp: Average : xx kByte
+ *
+ * <h2>Macros Tests</h2>
+ * <!-- NOTE: ignore the \li. <i> and </i>: it's just doxygen formatting -->
+ *
+ * <tt>macros/makeConfigurationObjectZDCReconstruction.C</tt>
+ * \li - Create configuration TObjString
+ *
+ * <tt>macros/HLTZDCTest.C</tt>
+ * \li - Test macro for ZDC test in off-line environment
+ *
+ * <tt>macros/runZDCTest.sh</tt>
+ * \li - Run Test macro HLTZDCTest.C
+ *
+ * @ingroup alihlt_zdc
+ */
+class AliHLTZDCESDRecoComponent : public AliHLTProcessor
+{
+    public:
+
+        /** constructor */
+       AliHLTZDCESDRecoComponent();
+        /** destructor */
+       virtual ~AliHLTZDCESDRecoComponent();
+
+        /** interface function, see @ref AliHLTComponent for description */
+       const char* GetComponentID();
+        /** interface function, see @ref AliHLTComponent for description */
+       void GetInputDataTypes( vector<AliHLTComponentDataType>& list);
+        /** interface function, see @ref AliHLTComponent for description */
+       AliHLTComponentDataType GetOutputDataType();
+        /** interface function, see @ref AliHLTComponent for description */
+       virtual void GetOutputDataSize( unsigned long& constBase, double& inputMultiplier );
+        /** interface function, see @ref AliHLTComponent for description */
+       AliHLTComponent* Spawn();
+
+       
+    protected:
+               /** interface function, see @ref AliHLTComponent for description */
+       int DoInit( int argc, const char** argv );
+        /** interface function, see @ref AliHLTComponent for description */
+       int DoDeinit();
+        /** interface function, see @ref AliHLTComponent for description */
+        int DoEvent( const AliHLTComponentEventData& evtData, AliHLTComponentTriggerData& trigData);
+        /** interface function, see @ref AliHLTComponent for description */
+        int ScanConfigurationArgument(int argc, const char** argv);
+        /** interface function, see @ref AliHLTComponent for description */
+        int Reconfigure(const char* cdbEntry, const char* chainId);
+        /** interface function, see @ref AliHLTComponent for description */
+        int ReadPreprocessorValues(const char* modules);
+       
+       using AliHLTProcessor::DoEvent;
+               
+
+    private:
+       /** copy constructor prohibited */
+       AliHLTZDCESDRecoComponent(const AliHLTZDCESDRecoComponent&);
+       /** assignment operator prohibited */
+       AliHLTZDCESDRecoComponent& operator=(const AliHLTZDCESDRecoComponent&);
+
+       /** cluster tree */
+       TTree               *fClusterTree;   //! transient
+
+       /** rawreader instance */
+       AliRawReaderMemory  *fRawReader;     //! transient
+      
+       /** ZDC reconstructor instance */
+        AliZDCReconstructor *fReconstructor; //! ZDC reconstructor
+
+       ClassDef(AliHLTZDCESDRecoComponent, 0)
+
+};
+
+#endif
diff --git a/HLT/ZDC/Makefile.am b/HLT/ZDC/Makefile.am
new file mode 100644 (file)
index 0000000..3ba09ec
--- /dev/null
@@ -0,0 +1,74 @@
+# $Id: Makefile.am $
+# Makefile for the Alice HLT ZDC library
+
+MODULE                                 = AliHLTZDC
+
+###################################################################
+
+EXTRA_DIST                     =
+
+MODDIR                         = $(top_srcdir)
+PKGDEF                         = $(MODDIR)/libAliHLTZDC.pkg
+include $(top_srcdir)/libAliHLTZDC.pkg
+
+###################################################################
+
+# library definition
+lib_LTLIBRARIES                        =  libAliHLTZDC.la
+
+# version info for the library
+LIBRARY_VERSION                        = '0:0:0'
+
+# library sources
+# The source files are specified in libAliHLTZDC.pkg
+libAliHLTZDC_la_SOURCES        =  $(MODULE_SRCS)
+
+# library headers
+# The header files are specified in libAliHLTZDC.pkg
+noinst_HEADERS                 =  $(MODULE_HDRS)
+
+###################################################################
+
+# compilation flags of the library
+AM_CPPFLAGS                    = -DMODULE=$(MODULE) \
+                                 @HLTBASE_CPPFLAGS@ \
+                                 @ALIROOT_CPPFLAGS@ \
+                                 @ROOTCFLAGS@ \
+                                 $(foreach i, $(EINCLUDE),  \
+                                       $(shell echo $(i) | sed -e "/HLT\//!d" -e "s|HLT/|-I$(top_srcdir)/|")) \
+                                 $(foreach i, $(EINCLUDE),  \
+                                       $(shell echo $(i) | sed -e "/HLT\//d" -e "s|^|-I$(ALICE_ROOT)/|"))
+
+# linking flags of the library# linker flags
+#libAliHLTZDC_la_LIBADD                = $(top_builddir)/BASE/util/libAliHLTUtil.la
+libAliHLTZDC_la_LDFLAGS        = -L@ROOTLIBDIR@ \
+                                 @ROOTLIBS@ \
+                                 @HLTBASE_LDFLAGS@ \
+                                 @ALIROOT_LDFLAGS@ \
+                                 @ALIROOT_LIBS@ \
+                                 -version-info $(LIBRARY_VERSION)
+
+###############################################################################
+
+# automatic generation of data and time of library build
+COMPILE_INFO                   =  AliHLTZDCCompileInfo.cxx
+
+# set the file name for the generated root dictionary
+DICTCPP                                =  AliHLTZDC-DICT.cxx
+nodist_libAliHLTZDC_la_SOURCES  = $(COMPILE_INFO) \
+                                 $(DICTCPP)
+
+CLEANFILES                     = $(COMPILE_INFO)
+
+###############################################################################
+
+include $(top_srcdir)/make.dict
+
+###################################################################
+
+$(COMPILE_INFO): $(libAliHLTZDC_la_SOURCES) $(pkginclude_HEADERS) $(noinst_HEADERS) Makefile.am
+       @echo '//automatically generated compilation info' > $@
+       @echo '//!!! DO NOT EDIT THIS FILE !!!' >> $@
+       @echo '//add changes in Makefile.am' >> $@
+       @echo 'extern "C" void CompileInfo(const char*& date, const char*& time)' >> $@
+       @echo '{date=__DATE__; time=__TIME__; return;}' >> $@
diff --git a/HLT/ZDC/macros/HLTZDCTest.C b/HLT/ZDC/macros/HLTZDCTest.C
new file mode 100644 (file)
index 0000000..e77852b
--- /dev/null
@@ -0,0 +1,196 @@
+// $Id: HLTZDCTest.C 43204 2010-08-30 07:47:06Z richterm $
+void HLTZDCTest();
+/**
+ * @file HLTZDCTest.C
+ * @brief Example macro to run the AliHLTZDCESDRecoComponent in 
+ * AliReconstruction.
+ *
+ * The component subscribes to DDL raw data published by the
+ * AliHLTRawReaderPublisherComponent. The macros requires a raw data file
+ * and a corresponding GRP entry.
+ *
+ * <pre>
+ * Usage: aliroot -b -q -l \
+ *     HLTZDCTest.C'("rawfile", "cdb", minEvent, maxEvent)'
+ *
+ * Examples:
+ *     HLTZDCTest.C'("raw.root", minEvent, MaxEvent)'
+ *     HLTZDCTest.C'("./", minEvent, MaxEvent)'
+ *     HLTZDCTest.C'("alien:///alice/data/2010/.../raw/....root")' 
+ *
+ * Defaults
+ *     cdb="local://$ALICE_ROOT/OCDB" -> take local OCDB from distribution
+ *     minEvent=-1   -> no lower event selection
+ *     maxEvent=-1   -> no upper event selection
+ *
+ * </pre>
+ *
+ * The input file can be a local raw.root file but also a file from the
+ * GRID. The separate DDL files generated in simulation can be accessed
+ * using AliRawReaderFile by speficying "directory/".
+ *
+ * Since the macro runs AliReconstruction the OCDB needs to be set up, in
+ * particular the GRP entry. If testing with a local OCDB you have to
+ * simulate some events and run the macro in the folder of the simulation.
+ * Also HLT components configure from objects in the OCDB.
+ *
+ * Note: You need a valid GRID token, if you want to access files directly
+ * from the Grid, use 'alien-token-init' of your alien installation.
+ *
+ * @author Chiara Oppedisano <Chiara.Oppedisano@to.infn.it>
+ *         Jochen Thaeder <jochen@thaeder.de>
+ * @ingroup alihlt_zdc
+ */
+
+// ---------------------------------------------------------------------------- 
+void HLTZDCTest(const Char_t *filename, const Char_t *cdbURI,
+                 Int_t minEvent=-1, Int_t maxEvent=-1) {
+  
+  printf (" ============================================= \n\n");
+  printf ("        TEST ZDC RECONSTRUCTION              \n\n");
+  printf (" ============================================= \n");
+
+  if(!gSystem->AccessPathName("galice.root")){
+    cerr << "AliReconstruction on raw data requires to delete galice.root, ";
+    cerr << "or run at different place." << endl;
+    cerr << "!!! DO NOT DELETE the galice.root of your simulation, ";
+    cerr << "but create a subfolder !!!!" << endl;
+    return;
+  }
+
+  if (gSystem->AccessPathName(filename)) {
+    cerr << "can not find file " << filename << endl;
+    return;
+  }
+
+  // -- connect to the GRID if we use a file or OCDB from the GRID
+  TString struri=cdbURI;
+  TString strfile=filename;
+  if (struri.BeginsWith("raw://") ||
+      strfile.Contains("://") && !strfile.Contains("local://")) {
+    TGrid::Connect("alien");
+  }
+
+  // -- Set the CDB storage location
+  AliCDBManager * man = AliCDBManager::Instance();
+  man->SetDefaultStorage(cdbURI);
+  if (struri.BeginsWith("local://")) {
+    // set specific storage for GRP entry
+    // search in the working directory and one level above, the latter
+    // follows the standard simulation setup like e.g. in test/ppbench
+    if (!gSystem->AccessPathName("GRP/GRP/Data")) {
+      man->SetSpecificStorage("GRP/GRP/Data", "local://$PWD");
+    } else if (!gSystem->AccessPathName("../GRP/GRP/Data")) {
+      man->SetSpecificStorage("GRP/GRP/Data", "local://$PWD/..");      
+    } else {
+      cerr << "can not find a GRP entry, please run the macro in the folder" << endl;
+      cerr << "of a simulated data sample, or specify a GRID OCDB" << endl;
+      HLTZDCTest();      
+      return;
+    }
+  }
+
+  //////////////////////////////////////////////////////////////////////////////////////
+  //
+  // Reconstruction settings
+  AliReconstruction rec;
+
+  if (minEvent>=0 || maxEvent>minEvent) {
+    if (minEvent<0) minEvent=0;
+    if (maxEvent<minEvent) maxEvent=minEvent;
+    rec.SetEventRange(minEvent,maxEvent);
+  }
+
+  rec.SetRunReconstruction("HLT");
+  rec.SetLoadAlignFromCDB(kFALSE);
+  rec.SetWriteESDfriend(kFALSE);
+
+  // due to bug ...
+  // StopOnError needs to be disabled
+  rec.SetStopOnError(kFALSE);
+  rec.SetRunVertexFinder(kFALSE);
+  rec.SetInput(filename);
+
+  // QA options
+  rec.SetRunQA(":") ;
+  //rec.SetQARefDefaultStorage("local://$ALICE_ROOT/QAref") ;
+
+  //////////////////////////////////////////////////////////////////////////////////////
+  //
+  // setup the HLT system
+  AliHLTSystem* pHLT=AliHLTPluginBase::GetInstance();
+
+  // define a data publisher configuration for ZDC raw data
+  AliHLTConfiguration publisher("RAW-Publisher", 
+                               "AliRawReaderPublisher", 
+                               "", 
+                               "-equipmentid 3840 "
+                               "-datatype 'DDL_RAW ' 'ZDC ' "
+                               "-dataspec 0x01"
+                               );
+
+  // define configuration of the ZDCReconstruction component
+  AliHLTConfiguration vzeroReco("ZDC-Reconstruction", 
+                               "ZDCESDReco", 
+                               "RAW-Publisher",
+                               ""
+                               );
+
+  // define configuration of the GlobalEsdConverter component
+  AliHLTConfiguration esdConverter("GLOBAL-ESD-Converter",
+                                  "GlobalEsdConverter", 
+                                  "ZDC-Reconstruction",
+                                  ""
+                                  );
+
+  // define configuration for Root file writer of ZDC output
+  AliHLTConfiguration rootWriter("RootWriter", 
+                                "ROOTFileWriter",
+                                "ZDC-Reconstruction GLOBAL-ESD-Converter",
+                                "-directory analysis -datafile zdcRec"
+                                );
+
+
+
+  // set option for the HLT module in AliReconstruction
+  // arguments
+  //  - ignore-hltout : ignore the HLTOUT payload from the HLT DDLs
+  //  - libraries to be used as plugins
+  //  - loglevel=0x7c : Important, Info, Warning, Error, Fatal
+  rec.SetOption("HLT",
+               "ignore-hltout " 
+               "libAliHLTUtil.so libAliHLTGlobal.so libAliHLTZDC.so "
+               "loglevel=0x7c "
+               "chains=GLOBAL-ESD-Converter,RootWriter"
+               );
+
+  rec.SetRunPlaneEff(kFALSE);
+
+  // switch off cleanESD
+  rec.SetCleanESD(kFALSE);
+
+  AliLog::Flush();
+  rec.Run();
+}
+
+// ---------------------------------------------------------------------------- 
+void HLTZDCTest(const Char_t *filename, Int_t minEvent=-1, Int_t maxEvent=-1){
+  HLTZDCTest(filename, "local://$ALICE_ROOT/OCDB", minEvent, maxEvent);
+}
+
+// ---------------------------------------------------------------------------- 
+void HLTZDCTest() {
+  cout << "HLTZDCTest: Run HLT component 'ZDCReconstruction' in AliReconstruction" << endl;
+  cout << " Usage: aliroot -b -q -l \\" << endl;
+  cout << "     HLTZDCTest.C'(\"file\", \"cdb\", minEvent, maxEvent)'" << endl;
+  cout << "" << endl;
+  cout << " Examples:" << endl;
+  cout << "     HLTZDCTest.C'(\"raw.root\", minEvent, MaxEvent)'" << endl;
+  cout << "     HLTZDCTest.C'(\"./\", minEvent, MaxEvent)'" << endl;
+  cout << "     HLTZDCTest.C'(\"alien:///alice/data/2010/.../raw/....root\")' " << endl;
+  cout << "" << endl;
+  cout << " Defaults" << endl;
+  cout << "     cdb=\"local://$ALICE_ROOT/OCDB\"  -> take local OCDB" << endl;
+  cout << "     minEvent=-1   -> no lower event selection" << endl;
+  cout << "     maxEvent=-1   -> no upper event selection" << endl;
+}
diff --git a/HLT/ZDC/macros/makeConfigurationObjectZDCReconstruction.C b/HLT/ZDC/macros/makeConfigurationObjectZDCReconstruction.C
new file mode 100644 (file)
index 0000000..c219aeb
--- /dev/null
@@ -0,0 +1,87 @@
+//-*- Mode: C++ -*-
+// $Id: makeConfigurationObjectZDCReconstruction.C$
+/**
+ * @file makeConfigurationObjectZDCReconstruction.C
+ * @brief Creation of HLT component configuration objects in OCDB
+ *
+ * <pre>
+ * Usage: aliroot -b -q makeConfigurationObjectZDCReconstruction.C'("param", "uri", runMin, runMax)'
+ * </pre>
+ *
+ * Create an OCDB entry with a TObjString containing param for the 
+ * ZDC reconstruction.
+ *
+ * Parameters: <br>
+ * - param (opt)    string to be stored in the TObjSting, default empty
+ * - uri   (opt)    the OCDB URI, default $ALICE_ROOT   
+ * - runMin (opt)   default 0
+ * - runMax (opt)   default 999999999
+ * 
+ * Current Param : 
+ *  - ""  <pre> aliroot -b -q makeConfigurationObjectZDCReconstruction.C </pre>
+ *
+ * @author Chiara Oppedisano <Chiara.Oppedisano@to.infn.it>
+ *         Jochen Thaeder <jochen@thaeder.de>
+ * @ingroup alihlt_zdc
+ */
+void makeConfigurationObjectZDCReconstruction(const Char_t* param="", const Char_t* cdbUri=NULL,
+                                     Int_t runMin=0, Int_t runMax=AliCDBRunRange::Infinity()) {
+
+  // --------------------------------------
+  // -- Setup CDB
+  // --------------------------------------
+
+  AliCDBManager* man = AliCDBManager::Instance();
+  if (!man) {
+    cerr << "Error : Can not get AliCDBManager" << end;
+    exit;
+  }
+
+  TString storage;
+  if (!man->IsDefaultStorageSet()) {
+    if ( cdbUri ) {
+      storage = cdbUri;
+      if ( storage.Contains("://") == 0 ) {
+       storage = "local://"; 
+       storage += cdbUri;
+      }
+    } 
+    else {
+      storage="local://$ALICE_ROOT/OCDB";
+    }
+    man->SetDefaultStorage(storage);
+  } 
+  else {
+    storage = man->GetDefaultStorage()->GetURI();
+  }
+
+  TString path("HLT/ConfigZDC/ZDCESDReco");
+
+  // --------------------------------------
+  // -- Create Config Object
+  // --------------------------------------
+
+  // here is the actual content of the configuration object
+  TObjString configParam=param;
+
+  TObject *configObj = static_cast<TObject*>(&configParam);
+  // --------------------------------------
+  // -- Fill Object
+  // --------------------------------------
+  
+  if ( !configObj ) {
+    cerr << "Error : No configuration object created" << endl;
+    return;
+  }
+    
+  AliCDBPath cdbPath(path);
+  AliCDBId   cdbId(cdbPath, runMin, runMax);
+  AliCDBMetaData cdbMetaData;
+  man->Put(configObj, cdbId, &cdbMetaData);
+
+  printf("Adding %s type OCDB object to %s [%d,%d] in %s \n",
+        configObj->ClassName(), 
+        path.Data(),
+        runMin, runMax, storage.Data());
+}
+
diff --git a/HLT/ZDC/macros/runZDCTest.sh b/HLT/ZDC/macros/runZDCTest.sh
new file mode 100755 (executable)
index 0000000..6f41a01
--- /dev/null
@@ -0,0 +1,37 @@
+#!/bin/bash
+
+# -------------------------------------------
+# Test ZDC reconstruction
+# Author Chiara Oppedisano <Chiara.Oppedisano@to.infn.it>
+#        Jochen Thaeder <jochen@thaeder.de>
+# -------------------------------------------
+
+# N events
+NEVENTS=1
+
+# Path to raw.root
+RAWPATH="/opt/HLT/aliroot/AliRoot_HEAD_2010-09-01/test/ppbench/recraw"
+
+# -------------------------------------------
+
+pushd $RAWPATH > /dev/null
+
+rm *.root  2> /dev/null
+rm *.log   2> /dev/null
+rm *.ps    2> /dev/null
+
+ln -s ../raw.root
+
+if [ ! -d ./analysis ] ; then
+    mkdir analysis
+else
+    rm ./analysis/*
+fi
+
+# -- Create config CDB object 
+#aliroot -l -q -b ${ALICE_ROOT}/HLT/ZDC/macros/makeConfigurationObjectZDCReconstruction.C
+
+# -- run chain for raw.root file
+valgrind --tool=callgrind aliroot -l -q -b $ALICE_ROOT/HLT/ZDC/macros/HLTZDCTest.C'("'${RAWPATH}'/raw.root","local://$ALICE_ROOT/OCDB",1,'${NEVENTS}')' 2>&1 | tee out.log
+
+popd > /dev/null
\ No newline at end of file