]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - HLT/TPCLib/AliHLTTPCAgent.cxx
correcting arguments for the huffman training configuration to run track model compre...
[u/mrichter/AliRoot.git] / HLT / TPCLib / AliHLTTPCAgent.cxx
index 52029acefa4d79893708023bdaaeee7723a8f9d3..b784a72ec8b4a3f0eca2617af4d7be58697b61ca 100644 (file)
@@ -1,4 +1,4 @@
-// @(#) $Id$
+// $Id$
 
 //**************************************************************************
 //* This file is property of and copyright by the ALICE HLT Project        * 
 //* provided "as is" without express or implied warranty.                  *
 //**************************************************************************
 
-/** @file   AliHLTTPCAgent.cxx
-    @author Matthias Richter
-    @date   
-    @brief  Agent of the libAliHLTTPC library
-*/
+/ @file   AliHLTTPCAgent.cxx
+//  @author Matthias Richter
+//  @date   
+//  @brief  Agent of the libAliHLTTPC library
+//  @note   
 
 #include "AliHLTTPCAgent.h"
-#include "AliHLTConfiguration.h"
 #include "AliHLTTPCDefinitions.h"
 #include "AliHLTOUT.h"
 #include "AliHLTOUTHandlerChain.h"
 AliHLTTPCAgent gAliHLTTPCAgent;
 
 // component headers
-#include "AliHLTTPCRunStatisticsProducerComponent.h"
-#include "AliHLTTPCEventStatisticsProducerComponent.h"
 #include "AliHLTTPCCompModelInflaterComponent.h"
 #include "AliHLTTPCCompModelDeflaterComponent.h"
 #include "AliHLTTPCCompModelDeconverterComponent.h"
 #include "AliHLTTPCCompModelConverterComponent.h"
 #include "AliHLTTPCCompDumpComponent.h"
-#include "AliHLTTPCCalibCEComponent.h"
-#include "AliHLTTPCCalibPulserComponent.h"
-#include "AliHLTTPCCalibPedestalComponent.h"
+//#include "AliHLTTPCCalibCEComponent.h"
+//#include "AliHLTTPCCalibPulserComponent.h"
+//#include "AliHLTTPCCalibPedestalComponent.h"
+#include "AliHLTTPCCAInputDataCompressorComponent.h"
 #include "AliHLTTPCCATrackerComponent.h"
+#include "AliHLTTPCCATrackerOutputConverter.h"
+#include "AliHLTTPCTrackMCMarkerComponent.h"
 #include "AliHLTTPCCAGlobalMergerComponent.h"
+#include "AliHLTTPCdEdxComponent.h"
+#include "AliHLTTPCdEdxMonitoringComponent.h"
 #include "AliHLTTPCGlobalMergerComponent.h"
 #include "AliHLTTPCSliceTrackerComponent.h"
-#include "AliHLTTPCVertexFinderComponent.h"
 #include "AliHLTTPCClusterFinderComponent.h"
 #include "AliHLTTPCRawDataUnpackerComponent.h"
 #include "AliHLTTPCDigitPublisherComponent.h"
-#include "AliHLTTPCZeroSuppressionComponent.h"
 #include "AliHLTTPCDigitDumpComponent.h"
 #include "AliHLTTPCClusterDumpComponent.h"
 #include "AliHLTTPCEsdWriterComponent.h"
 #include "AliHLTTPCOfflineClustererComponent.h"
 #include "AliHLTTPCOfflineTrackerComponent.h"
 #include "AliHLTTPCOfflineTrackerCalibComponent.h"
-#include "AliHLTTPCOfflineCalibrationComponent.h"
+#include "AliHLTTPCOfflineCalibrationComponent.h" // to be added to the calibration library agent
 #include "AliHLTTPCClusterHistoComponent.h"
-#include "AliHLTTPCNoiseMapComponent.h"
 #include "AliHLTTPCHistogramHandlerComponent.h"
-#include "AliHLTTPCCalibTracksComponent.h"
+//#include "AliHLTTPCCalibTracksComponent.h"
 #include "AliHLTTPCTrackHistoComponent.h"
 #include "AliHLTTPCTrackDumpComponent.h"
 #include "AliHLTTPCHWCFDataReverterComponent.h"
 #include "AliHLTTPCHWClusterTransformComponent.h"
+#include "AliHLTTPCCFComparisonComponent.h"
+// #include "AliHLTTPCCalibSeedMakerComponent.h"
+// #include "AliHLTTPCCalibTimeComponent.h"
+// #include "AliHLTTPCCalibTimeGainComponent.h"
+// #include "AliHLTTPCCalibrationComponent.h"
+#include "AliHLTTPCDataCheckerComponent.h"
+#include "AliHLTTPCHWCFEmulatorComponent.h"
+#include "AliHLTTPCHWCFConsistencyControlComponent.h"
+#include "AliHLTTPCDataCompressionComponent.h"
+#include "AliHLTTPCDataCompressionMonitorComponent.h"
 
 /** ROOT macro for the implementation of ROOT specific class methods */
 ClassImp(AliHLTTPCAgent)
 
 AliHLTTPCAgent::AliHLTTPCAgent()
-  :
-  AliHLTModuleAgent("TPC"),
-  fRawDataHandler(NULL),
-  fTracksegsDataHandler(NULL)
+  : AliHLTModuleAgent("TPC")
+  , fRawDataHandler(NULL)
+  , fTracksegsDataHandler(NULL)
+  , fClustersDataHandler(NULL)
 {
   // see header file for class documentation
   // or
@@ -94,22 +103,10 @@ AliHLTTPCAgent::~AliHLTTPCAgent()
 
 int AliHLTTPCAgent::CreateConfigurations(AliHLTConfigurationHandler* handler,
                                         AliRawReader* rawReader,
-                                        AliRunLoader* /*runloader*/) const
+                                        AliRunLoader* runloader) const
 {
   // see header file for class documentation
   if (handler) {
-    const char* cdbEntry="TPC/Calib/Parameters";
-    AliCDBManager* pMan=AliCDBManager::Instance();
-    AliTPCParam* pTPCParam=NULL;
-    if (pMan) {
-      AliCDBEntry *pEntry = pMan->Get(cdbEntry);
-      if (pEntry && 
-         pEntry->GetObject() &&
-         (pTPCParam=dynamic_cast<AliTPCParam*>(pEntry->GetObject()))) {
-      } else {
-       HLTWarning("can not load AliTPCParam from CDB entry %s", cdbEntry);
-      }
-    }
 
     // This the tracking configuration for the full TPC
     // - 216 clusterfinders (1 per partition)
@@ -121,42 +118,66 @@ int AliHLTTPCAgent::CreateConfigurations(AliHLTConfigurationHandler* handler,
     int iMaxSlice=35;
     int iMinPart=0;
     int iMaxPart=5;
+    TString arg;
     TString mergerInput;
+    TString sinkRawData;
     TString sinkClusterInput;
+    TString sinkHWClusterInput;
+    TString dEdXInput;
+    TString compressorInput;
     for (int slice=iMinSlice; slice<=iMaxSlice; slice++) {
       TString trackerInput;
       for (int part=iMinPart; part<=iMaxPart; part++) {
-       TString arg, publisher, cf;
+       TString publisher, cf;
 
        // digit publisher components
        publisher.Form("TPC-DP_%02d_%d", slice, part);
-       if (!rawReader) {
-         arg.Form("-slice %d -partition %d", slice, part);
-         handler->CreateConfiguration(publisher.Data(), "TPCDigitPublisher", NULL , arg.Data());
-       } else {
+       if (rawReader || !runloader) {
+         // AliSimulation: use the AliRawReaderPublisher if the raw reader is available
+         // Alireconstruction: indicated by runloader==NULL, run always on raw data
          int ddlno=768;
          if (part>1) ddlno+=72+4*slice+(part-2);
          else ddlno+=2*slice+part;
          arg.Form("-minid %d -datatype 'DDL_RAW ' 'TPC '  -dataspec 0x%02x%02x%02x%02x -silent", ddlno, slice, slice, part, part);
          handler->CreateConfiguration(publisher.Data(), "AliRawReaderPublisher", NULL , arg.Data());
+       } else {
+         arg.Form("-slice %d -partition %d", slice, part);
+         handler->CreateConfiguration(publisher.Data(), "TPCDigitPublisher", NULL , arg.Data());
        }
 
+       if (sinkRawData.Length()>0) sinkRawData+=" ";
+       sinkRawData+=publisher;
+
        // cluster finder components
        cf.Form("TPC-CF_%02d_%d", slice, part);
-       arg="";
-       if (pTPCParam) {
-         arg+=" -timebins "; arg+=pTPCParam->GetMaxTBin()+1;
-       }
-       if (!rawReader) {
+       arg="-release-memory -publish-raw";
+       if (!rawReader && runloader) {
          arg+=" -do-mc";
          handler->CreateConfiguration(cf.Data(), "TPCClusterFinderUnpacked", publisher.Data(), arg.Data());
        } else {
-         handler->CreateConfiguration(cf.Data(), "TPCClusterFinderDecoder", publisher.Data(), arg.Data());
+         handler->CreateConfiguration(cf.Data(), "TPCClusterFinder32Bit", publisher.Data(),arg.Data());
        }
+
+       // Hardware CF emulator
+       // soon going to replace the software clusterfinder
+       TString hwcfemu;
+       hwcfemu.Form("TPC-HWCFEmu_%02d_%d", slice, part);
+       handler->CreateConfiguration(hwcfemu.Data(), "TPCHWClusterFinderEmulator", publisher.Data(), "-do-mc 1");
+       if (compressorInput.Length()>0) compressorInput+=" ";
+       compressorInput+=hwcfemu;
+
+       TString hwcf;
+       hwcf.Form("TPC-HWCF_%02d_%d", slice, part);
+       handler->CreateConfiguration(hwcf.Data(), "TPCHWClusterTransform",hwcfemu.Data(), "-publish-raw");
+
        if (trackerInput.Length()>0) trackerInput+=" ";
-       trackerInput+=cf;
+       trackerInput+=hwcf;
+       if (dEdXInput.Length()>0) dEdXInput+=" ";
+       dEdXInput+=hwcf;
        if (sinkClusterInput.Length()>0) sinkClusterInput+=" ";
        sinkClusterInput+=cf;
+       if (sinkHWClusterInput.Length()>0) sinkHWClusterInput+=" ";
+       sinkHWClusterInput+=hwcf;
       }
       TString tracker;
       // tracker finder components
@@ -171,17 +192,51 @@ int AliHLTTPCAgent::CreateConfigurations(AliHLTConfigurationHandler* handler,
     // GlobalMerger component
     handler->CreateConfiguration("TPC-globalmerger","TPCCAGlobalMerger",mergerInput.Data(),"");
 
+    // dEdx component
+    if (dEdXInput.Length()>0) dEdXInput+=" ";
+    dEdXInput+="TPC-globalmerger";
+
+    handler->CreateConfiguration("TPC-dEdx","TPCdEdx",dEdXInput.Data(),"");
+
+    // compression component
+    if (compressorInput.Length()>0) compressorInput+=" ";
+    compressorInput+="TPC-globalmerger";
+    handler->CreateConfiguration("TPC-compression", "TPCDataCompressor", compressorInput.Data(),"-deflater-mode 1");
+    handler->CreateConfiguration("TPC-compression-huffman-trainer", "TPCDataCompressor", compressorInput.Data(),"-mode 2 -deflater-mode 3");
+
     // the esd converter configuration
     TString converterInput="TPC-globalmerger";
-    if (!rawReader) {
+    if (!rawReader && runloader) {
       // propagate cluster info to the esd converter in order to fill the MC information
+      handler->CreateConfiguration("TPC-clustermc-info", "BlockFilter"   , sinkHWClusterInput.Data(), "-datatype 'CLMCINFO' 'TPC '");  
+      handler->CreateConfiguration("TPC-mcTrackMarker","TPCTrackMCMarker","TPC-globalmerger TPC-clustermc-info","" );
       converterInput+=" ";
-      converterInput+=sinkClusterInput;
+      converterInput+="TPC-mcTrackMarker";
     }
     handler->CreateConfiguration("TPC-esd-converter", "TPCEsdConverter"   , converterInput.Data(), "");
 
     // cluster dump collection
-    handler->CreateConfiguration("TPC-clusters", "BlockFilter"   , sinkClusterInput.Data(), "-datatype 'CLUSTERS' 'TPC '");
+    handler->CreateConfiguration("TPC-clusters", "BlockFilter"   , sinkClusterInput.Data(), "-datatype 'CLUSTERS' 'TPC ' -datatype 'CLMCINFO' 'TPC '");
+    handler->CreateConfiguration("TPC-raw-clusters", "BlockFilter"   , sinkClusterInput.Data(), "-datatype 'CLUSTRAW' 'TPC ' -datatype 'CLMCINFO' 'TPC '");
+    handler->CreateConfiguration("TPC-hwclusters", "BlockFilter"   , sinkHWClusterInput.Data(), "-datatype 'CLUSTERS' 'TPC ' -datatype 'CLMCINFO' 'TPC '");
+    handler->CreateConfiguration("TPC-raw-hwclusters", "BlockFilter"   , sinkHWClusterInput.Data(), "-datatype 'CLUSTRAW' 'TPC ' -datatype 'CLMCINFO' 'TPC '");
+
+    // raw data
+    handler->CreateConfiguration("TPC-raw-data", "BlockFilter"   , sinkRawData.Data(), "");
+
+    handler->CreateConfiguration("TPC-hwcfdata", "BlockFilter"   , compressorInput.Data(), "-datatype 'HWCLUST1' 'TPC '");
+
+    /////////////////////////////////////////////////////////////////////////////////////
+    //
+    // dumps on the ALTRO digit level
+    //
+    // selected channel dump
+    arg.Form("-datafile selected-channel.dump -specfmt=_0x%%08x -subdir -blcknofmt= -idfmt=");
+    handler->CreateConfiguration("TPC-selected-altro-digits", "TPCDigitDump", "RCU-channelselect", arg.Data());
+
+    // raw channel dump
+    arg.Form("-datafile channel.dump -specfmt=_0x%%08x -subdir -blcknofmt= -idfmt=");
+    handler->CreateConfiguration("TPC-raw-altro-digits", "TPCDigitDump", "TPC-raw-data", arg.Data());
 
     /////////////////////////////////////////////////////////////////////////////////////
     //
@@ -207,7 +262,19 @@ int AliHLTTPCAgent::CreateConfigurations(AliHLTConfigurationHandler* handler,
 
     // the esd converter configuration
     handler->CreateConfiguration("TPC-hltout-tracks-esd-converter", "TPCEsdConverter", "TPC-hltout-tracks-publisher", "");
+
+    /////////////////////////////////////////////////////////////////////////////////////
+    //
+    // a kChain HLTOUT configuration for processing of {'CLUSTERS':'TPC '} data blocks
+    // stores the blocks in file HLT.TPC.Clusters.root in HOMER format
+
+    // publisher component
+    handler->CreateConfiguration("TPC-hltout-cluster-publisher", "AliHLTOUTPublisher"   , NULL, "");
+
+    // the HLTOUT component collects the blocks and stores the file
+    handler->CreateConfiguration("TPC-hltout-cluster-dump", "HLTOUT", "TPC-hltout-cluster-publisher", "-digitfile HLT.TPC.Clusters.root -rawout=off -links 2");
   }
+
   return 0;
 }
 
@@ -219,8 +286,12 @@ const char* AliHLTTPCAgent::GetReconstructionChains(AliRawReader* /*rawReader*/,
     // reconstruction chains for AliRoot simulation
     // Note: run loader is only available while running embedded into
     // AliRoot simulation
-    if (runloader->GetLoader("TPCLoader") != NULL)
-      return "TPC-esd-converter TPC-clusters";
+    //if (runloader->GetLoader("TPCLoader") != NULL)
+      //return "TPC-esd-converter TPC-clusters";
+
+    // 2010-10-26 TPC clusters not written to HLTOUT in order to make the simulation
+    // closer to the real data 
+    //return "TPC-clusters";
   }
   return NULL;
 }
@@ -232,7 +303,7 @@ const char* AliHLTTPCAgent::GetRequiredComponentLibraries() const
   // actually, the TPC library has dependencies to Util and RCU
   // so the two has to be loaded anyhow before we get here
   //return "libAliHLTUtil.so libAliHLTRCU.so";
-  return NULL;
+  return "libAliHLTUtil.so";
 }
 
 int AliHLTTPCAgent::RegisterComponents(AliHLTComponentHandler* pHandler) const
@@ -240,28 +311,29 @@ int AliHLTTPCAgent::RegisterComponents(AliHLTComponentHandler* pHandler) const
   // see header file for class documentation
   if (!pHandler) return -EINVAL;
 
-  pHandler->AddComponent(new AliHLTTPCRunStatisticsProducerComponent);
-  pHandler->AddComponent(new AliHLTTPCEventStatisticsProducerComponent);
-  pHandler->AddComponent(new AliHLTTPCCalibCEComponent);
-  pHandler->AddComponent(new AliHLTTPCCalibPulserComponent);
-  pHandler->AddComponent(new AliHLTTPCCalibPedestalComponent);
+//   pHandler->AddComponent(new AliHLTTPCCalibCEComponent);
+//   pHandler->AddComponent(new AliHLTTPCCalibPulserComponent);
+//   pHandler->AddComponent(new AliHLTTPCCalibPedestalComponent);
   pHandler->AddComponent(new AliHLTTPCCompModelInflaterComponent);
   pHandler->AddComponent(new AliHLTTPCCompModelDeflaterComponent);
   pHandler->AddComponent(new AliHLTTPCCompModelDeconverterComponent);
   pHandler->AddComponent(new AliHLTTPCCompModelConverterComponent);
   pHandler->AddComponent(new AliHLTTPCCompDumpComponent);
+  pHandler->AddComponent(new AliHLTTPCCAInputDataCompressorComponent);
   pHandler->AddComponent(new AliHLTTPCCATrackerComponent);
+  pHandler->AddComponent(new AliHLTTPCCATrackerOutputConverter);
   pHandler->AddComponent(new AliHLTTPCCAGlobalMergerComponent);
+  pHandler->AddComponent(new AliHLTTPCTrackMCMarkerComponent);
   pHandler->AddComponent(new AliHLTTPCGlobalMergerComponent);
+  pHandler->AddComponent(new AliHLTTPCdEdxComponent);
+  pHandler->AddComponent(new AliHLTTPCdEdxMonitoringComponent);
   pHandler->AddComponent(new AliHLTTPCSliceTrackerComponent);
-  pHandler->AddComponent(new AliHLTTPCVertexFinderComponent);
   pHandler->AddComponent(new AliHLTTPCClusterFinderComponent(AliHLTTPCClusterFinderComponent::kClusterFinderPacked));
   pHandler->AddComponent(new AliHLTTPCClusterFinderComponent(AliHLTTPCClusterFinderComponent::kClusterFinderUnpacked));
   pHandler->AddComponent(new AliHLTTPCClusterFinderComponent(AliHLTTPCClusterFinderComponent::kClusterFinderDecoder));
   pHandler->AddComponent(new AliHLTTPCClusterFinderComponent(AliHLTTPCClusterFinderComponent::kClusterFinder32Bit));
   pHandler->AddComponent(new AliHLTTPCRawDataUnpackerComponent);
   pHandler->AddComponent(new AliHLTTPCDigitPublisherComponent);
-  pHandler->AddComponent(new AliHLTTPCZeroSuppressionComponent);
   pHandler->AddComponent(new AliHLTTPCDigitDumpComponent);
   pHandler->AddComponent(new AliHLTTPCClusterDumpComponent);
   pHandler->AddComponent(new AliHLTTPCEsdWriterComponent::AliWriter);
@@ -271,14 +343,22 @@ int AliHLTTPCAgent::RegisterComponents(AliHLTComponentHandler* pHandler) const
   pHandler->AddComponent(new AliHLTTPCOfflineTrackerCalibComponent);
   pHandler->AddComponent(new AliHLTTPCOfflineCalibrationComponent);
   pHandler->AddComponent(new AliHLTTPCClusterHistoComponent);
-  pHandler->AddComponent(new AliHLTTPCNoiseMapComponent);
   pHandler->AddComponent(new AliHLTTPCHistogramHandlerComponent);
-  pHandler->AddComponent(new AliHLTTPCCalibTracksComponent);
+  //pHandler->AddComponent(new AliHLTTPCCalibTracksComponent);
   pHandler->AddComponent(new AliHLTTPCTrackHistoComponent);
   pHandler->AddComponent(new AliHLTTPCTrackDumpComponent);
   pHandler->AddComponent(new AliHLTTPCHWCFDataReverterComponent);
   pHandler->AddComponent(new AliHLTTPCHWClusterTransformComponent);
-
+  pHandler->AddComponent(new AliHLTTPCCFComparisonComponent);
+//   pHandler->AddComponent(new AliHLTTPCCalibSeedMakerComponent);
+//   pHandler->AddComponent(new AliHLTTPCCalibTimeComponent);
+//   pHandler->AddComponent(new AliHLTTPCCalibTimeGainComponent);
+//   pHandler->AddComponent(new AliHLTTPCCalibrationComponent);
+  pHandler->AddComponent(new AliHLTTPCDataCheckerComponent);
+  pHandler->AddComponent(new AliHLTTPCHWCFEmulatorComponent);
+//  pHandler->AddComponent(new AliHLTTPCHWCFConsistencyControlComponent);  //FIXME: Causes crash: https://savannah.cern.ch/bugs/?83677
+  pHandler->AddComponent(new AliHLTTPCDataCompressionComponent);
+  pHandler->AddComponent(new AliHLTTPCDataCompressionMonitorComponent);
   return 0;
 }
 
@@ -305,8 +385,28 @@ int AliHLTTPCAgent::GetHandlerDescription(AliHLTComponentDataType dt,
     }
   }
 
-  // dump for {'CLUSTERS':'TPC '} currently not used any more
+  // dump for {'CLUSTERS':'TPC '} blocks stored in a 'digit' file
   if (dt==AliHLTTPCDefinitions::fgkClustersDataType) {
+      desc=AliHLTOUTHandlerDesc(kChain, dt, GetModuleId());
+      return 1;
+  }
+
+  // {'CLUSTRAW':'TPC '}
+  // {'REMCLSCM':'TPC '}
+  // {'CLSTRKCM':'TPC '}
+  // {'REMCLIDS':'TPC '}
+  // {'CLIDSTRK':'TPC '}
+  if (dt==AliHLTTPCDefinitions::RawClustersDataType() ||
+      dt==AliHLTTPCDefinitions::RemainingClustersCompressedDataType() ||
+      dt==AliHLTTPCDefinitions::ClusterTracksCompressedDataType() ||
+      dt==AliHLTTPCDefinitions::RemainingClusterIdsDataType() ||
+      dt==AliHLTTPCDefinitions::ClusterIdTracksDataType()) {
+      desc=AliHLTOUTHandlerDesc(kProprietary, dt, GetModuleId());
+      return 1;
+  }
+
+  // {'CLMCINFO':'TPC '} 
+  if (dt==AliHLTTPCDefinitions::fgkAliHLTDataTypeClusterMCInfo) {
       desc=AliHLTOUTHandlerDesc(kProprietary, dt, GetModuleId());
       return 1;
   }
@@ -339,6 +439,13 @@ AliHLTOUTHandler* AliHLTTPCAgent::GetOutputHandler(AliHLTComponentDataType dt,
     return fRawDataHandler;
   }
 
+  // dump for {'CLUSTERS':'TPC '}, stored in a file HLT.TPC.Clusters.root in HOMER format
+  if (dt==AliHLTTPCDefinitions::fgkClustersDataType) {
+    if (fClustersDataHandler==NULL)
+      fClustersDataHandler=new AliHLTOUTHandlerChain("chains=TPC-hltout-cluster-dump libHLTsim.so libAliHLTUtil.so");
+    return fClustersDataHandler;
+  }
+
   // afterburner for {'TRAKSEGS':'TPC '} blocks to be converted to ESD format
   // in a kChain HLTOUT handler
   if (dt==AliHLTTPCDefinitions::fgkTrackSegmentsDataType) {
@@ -370,6 +477,12 @@ int AliHLTTPCAgent::DeleteOutputHandler(AliHLTOUTHandler* pInstance)
     delete fTracksegsDataHandler;
     fTracksegsDataHandler=NULL;
   }
+
+  if (pInstance==fClustersDataHandler) {
+    delete fClustersDataHandler;
+    fClustersDataHandler=NULL;
+  }
+
   return 0;
 }