]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
Adding first version of histogramming component for raw data. This will be useful...
authoraszostak <aszostak@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 8 Aug 2008 21:42:54 +0000 (21:42 +0000)
committeraszostak <aszostak@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 8 Aug 2008 21:42:54 +0000 (21:42 +0000)
HLT/MUON/AliHLTMUONConstants.cxx
HLT/MUON/AliHLTMUONConstants.h
HLT/MUON/AliHLTMUONProcessor.cxx
HLT/MUON/HLTMUONLinkDef.h
HLT/MUON/OfflineInterface/AliHLTMUONAgent.cxx
HLT/MUON/utils/AliHLTMUONRawDataHistoComponent.cxx [new file with mode: 0644]
HLT/MUON/utils/AliHLTMUONRawDataHistoComponent.h [new file with mode: 0644]
HLT/libAliHLTMUON.pkg

index 5505f35440d17c97d31032ccb9875f28243acc46..49b8b46058d35ff863c284fae1f91cacd1d9d783 100644 (file)
@@ -131,6 +131,8 @@ AliHLTMUONConstants::fgkESDDataType = AliHLTComponentDataTypeInitializer(kAliHLT
 const AliHLTComponentDataType
 AliHLTMUONConstants::fgkClusterStoreDataType = AliHLTComponentDataTypeInitializer("CLUSTORE", kAliHLTDataOriginMUON);
 
+const AliHLTComponentDataType
+AliHLTMUONConstants::fgkHistogramDataType = AliHLTComponentDataTypeInitializer("ROOTHIST", kAliHLTDataOriginMUON);
 
 const char* AliHLTMUONConstants::fgkRecHitsSourceId = "MUONRecHitsSource";
 const char* AliHLTMUONConstants::fgkTriggerRecordsSourceId = "MUONTriggerRecordsSource";
@@ -145,6 +147,7 @@ const char* AliHLTMUONConstants::fgkRootifierComponentId = "MUONRootifier";
 const char* AliHLTMUONConstants::fgkEmptyEventFilterComponentId = "MUONEmptyEventFilter";
 const char* AliHLTMUONConstants::fgkDataCheckerComponentId = "MUONDataChecker";
 const char* AliHLTMUONConstants::fgkClusterFinderId = "MUONClusterFinder";
+const char* AliHLTMUONConstants::fgkRawDataHistogrammerId = "MUONRawDataHistogrammer";
 
 const char* AliHLTMUONConstants::fgkTriggerReconstructorCDBPath = "HLT/ConfigMUON/TriggerReconstructor";
 const char* AliHLTMUONConstants::fgkHitReconstructorCDBPath = "HLT/ConfigMUON/HitReconstructor";
index 37454f4e71cf50b1f8543f2aecdd43ae7c178476..e8093bdc9ec961809f24eab7cf0f9419f80d4d5c 100644 (file)
@@ -165,6 +165,11 @@ public:
        {
                return fgkClusterStoreDataType;
        }
+
+       static const AliHLTComponentDataType& HistogramDataType()
+       {
+               return fgkHistogramDataType;
+       }
        
        static const char* RecHitsSourceId()
        {
@@ -231,6 +236,11 @@ public:
                return fgkClusterFinderId;
        }
        
+       static const char* RawDataHistogrammerId()
+       {
+               return fgkRawDataHistogrammerId;
+       }
+       
        static const char* TriggerReconstructorCDBPath()
        {
                return fgkTriggerReconstructorCDBPath;
@@ -284,6 +294,7 @@ private:
        static const AliHLTComponentDataType fgkPairsDecisionBlockDataType; // Trigger decision block type for pairs of particles.
        static const AliHLTComponentDataType fgkESDDataType; // The ESD data type with origin equal to MUON.
        static const AliHLTComponentDataType fgkClusterStoreDataType; // Offline algorithm cluster store object.
+       static const AliHLTComponentDataType fgkHistogramDataType; // TH1/2/3 histogram type.
        
        // Component ID names:
        static const char* fgkRecHitsSourceId; // Name of source component for reconstructed hits for debugging.
@@ -299,6 +310,7 @@ private:
        static const char* fgkEmptyEventFilterComponentId; // The name of the event filter debugging component.
        static const char* fgkDataCheckerComponentId; // Name of data checking component for debugging.
        static const char* fgkClusterFinderId; // Name of cluster finder implementing offline algorithms.
+       static const char* fgkRawDataHistogrammerId; // Raw data histogrammer component name.
        
        // CDB path entries to configuration information.
        static const char* fgkTriggerReconstructorCDBPath; // Path to CDB entry for the trigger reconstruction component.
index 3f6e869f26483a6bc7ec4986e9dc0107d4543213..051a825e51fb329a2317ad2c3f9fa80005a7c52e 100644 (file)
@@ -171,14 +171,14 @@ bool AliHLTMUONProcessor::ArgumentAlreadyHandled(int& i, const char* argi) const
        if (strcmp(argi, "-cdbpath") == 0)
        {
                if (IgnoreArgument(argi)) return false;
-               i++;
+               i++;  // argument takes one parameter
                return true;
        }
 
        if (strcmp(argi, "-run") == 0)
        {
                if (IgnoreArgument(argi)) return false;
-               i++;
+               i++;  // argument takes one parameter
                return true;
        }
        
@@ -197,7 +197,7 @@ bool AliHLTMUONProcessor::ArgumentAlreadyHandled(int& i, const char* argi) const
        if (strcmp(argi, "-dumppath") == 0)
        {
                if (IgnoreArgument(argi)) return false;
-               i++;
+               i++;  // argument takes one parameter
                return true;
        }
 
index 5496f0137dfd00ece2df724090e26a5dd2e7033b..8fb59e770883b6352577090a9496fd060e3f67d1 100644 (file)
@@ -59,5 +59,6 @@
 #pragma link C++ class AliHLTMUONEmptyEventFilterComponent+;
 #pragma link C++ class AliHLTMUONDataCheckerComponent+;
 #pragma link C++ class AliHLTMUONClusterFinderComponent+;
+#pragma link C++ class AliHLTMUONRawDataHistoComponent+;
 
 #endif // __CINT__
index 455c3836cd1bfac56890aa4412ea2d6757c10131..442feda966ddb76ab453c94947bf5ece1be77e40 100644 (file)
@@ -36,6 +36,7 @@
 #include "AliHLTMUONEmptyEventFilterComponent.h"
 #include "AliHLTMUONDataCheckerComponent.h"
 #include "AliHLTMUONClusterFinderComponent.h"
+#include "AliHLTMUONRawDataHistoComponent.h"
 #include "AliHLTOUTHandlerChain.h"
 #include "AliRawReader.h"
 #include "AliRunLoader.h"
@@ -385,6 +386,7 @@ int AliHLTMUONAgent::RegisterComponents(AliHLTComponentHandler* pHandler) const
        pHandler->AddComponent(new AliHLTMUONEmptyEventFilterComponent);
        pHandler->AddComponent(new AliHLTMUONDataCheckerComponent);
        pHandler->AddComponent(new AliHLTMUONClusterFinderComponent);
+       pHandler->AddComponent(new AliHLTMUONRawDataHistoComponent);
        return 0;
 }
 
diff --git a/HLT/MUON/utils/AliHLTMUONRawDataHistoComponent.cxx b/HLT/MUON/utils/AliHLTMUONRawDataHistoComponent.cxx
new file mode 100644 (file)
index 0000000..d4b416c
--- /dev/null
@@ -0,0 +1,391 @@
+/**************************************************************************
+ * This file is property of and copyright by the ALICE HLT Project        *
+ * All rights reserved.                                                   *
+ *                                                                        *
+ * Primary Authors:                                                       *
+ *   Artur Szostak <artursz@iafrica.com>                                  *
+ *                                                                        *
+ * 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.                  *
+ **************************************************************************/
+
+/* $Id: $ */
+
+///
+///  @file   AliHLTMUONRawDataHistoComponent.cxx
+///  @author Artur Szostak <artursz@iafrica.com>
+///  @date   30 April 2008
+///  @brief  Implementation of the raw data histogramming component for dHLT.
+///
+/// The class implements 
+
+#include "AliHLTMUONRawDataHistoComponent.h"
+#include "AliHLTMUONConstants.h"
+#include "AliHLTMUONUtils.h"
+#include "AliHLTDataTypes.h"
+#include "AliCDBEntry.h"
+#include "AliCDBManager.h"
+#include "AliRawDataHeader.h"
+#include "TH1D.h"
+#include "TTimeStamp.h"
+#include <cstdlib>
+#include <cstring>
+#include <cerrno>
+#include <cmath>
+#include <new>
+
+
+// Helper type for memory allocation.
+typedef const AliHLTMUONMansoTrackStruct* AliHLTMUONMansoTrackStructP;
+
+
+ClassImp(AliHLTMUONRawDataHistoComponent);
+
+
+AliHLTMUONRawDataHistoComponent::AliHLTMUONRawDataHistoComponent() :
+       AliHLTMUONProcessor(),
+       fLastPublishTime(-1),
+       fCurrentEventTime(-1),
+       fPublishDelay(1)
+{
+       /// Default constructor initialises all histogram object pointers to NULL.
+       
+       for (int i = 0; i < 22; i++)
+       {
+               fErrorHist[i] = NULL;
+       }
+       for (int i = 0; i < 20; i++)
+       {
+               fManuHist[i] = NULL;
+               fSignalHist[i] = NULL;
+       }
+}
+
+
+AliHLTMUONRawDataHistoComponent::~AliHLTMUONRawDataHistoComponent()
+{
+       /// Default destructor deletes all histogram objects if they are still allocated.
+       
+}
+
+
+const char* AliHLTMUONRawDataHistoComponent::GetComponentID()
+{
+       ///
+       /// Inherited from AliHLTComponent. Returns the component ID.
+       ///
+       
+       return AliHLTMUONConstants::RawDataHistogrammerId();
+}
+
+
+void AliHLTMUONRawDataHistoComponent::GetInputDataTypes(AliHLTComponentDataTypeList& list)
+{
+       ///
+       /// Inherited from AliHLTProcessor. Returns the list of expected input data types.
+       ///
+       
+       assert( list.empty() );
+       list.push_back( AliHLTMUONConstants::DDLRawDataType() );
+}
+
+
+AliHLTComponentDataType AliHLTMUONRawDataHistoComponent::GetOutputDataType()
+{
+       /// Inherited from AliHLTComponent. Returns kAliHLTHistogramDataTypeID.
+       
+       return AliHLTMUONConstants::HistogramDataType();
+}
+
+
+void AliHLTMUONRawDataHistoComponent::GetOutputDataSize(
+               unsigned long& constBase, double& inputMultiplier
+       )
+{
+       ///
+       /// Inherited from AliHLTComponent. Returns an estimate of the expected output data size.
+       ///
+       
+       constBase = sizeof(TH1D) * 1024*1024;
+       inputMultiplier = 0;
+}
+
+
+AliHLTComponent* AliHLTMUONRawDataHistoComponent::Spawn()
+{
+       ///
+       /// Inherited from AliHLTComponent. Creates a new object instance.
+       ///
+       
+       return new AliHLTMUONRawDataHistoComponent;
+}
+
+
+bool AliHLTMUONRawDataHistoComponent::IgnoreArgument(const char* arg) const
+{
+       /// Return true if the argument is one of -cdbpath -run or -delaysetup
+       /// to prevent the parent class from parsing these arguments in DoInit.
+       
+       if (strcmp(arg, "-cdbpath") == 0 or strcmp(arg, "-run") == 0 or
+           strcmp(arg, "-delaysetup") == 0)
+       {
+               return true;
+       }
+       else
+       {
+               return false;
+       }
+}
+
+
+int AliHLTMUONRawDataHistoComponent::DoInit(int argc, const char** argv)
+{
+       /// Inherited from AliHLTComponent.
+       /// Parses the command line parameters and initialises the component.
+       
+       HLTInfo("Initialising dHLT raw data histogrammer component.");
+       
+       // Inherit the parents functionality.
+       int result = AliHLTMUONProcessor::DoInit(argc, argv);
+       if (result != 0) return result;
+
+       fLastPublishTime = fCurrentEventTime = -1;
+       fPublishDelay = 1;
+       bool pubDelaySet = false;
+       
+       for (int i = 0; i < argc; i++)
+       {
+               if (ArgumentAlreadyHandled(i, argv[i])) continue;
+
+               if (strcmp(argv[i], "-pubdelay") == 0)
+               {
+                       if (pubDelaySet)
+                       {
+                               HLTWarning("The publishing delay value was already specified."
+                                       " Will replace previous value given by -pubdelay."
+                               );
+                       }
+                       
+                       if (argc <= i+1)
+                       {
+                               HLTError("The value for the publishing delay was not specified.");
+                               return -EINVAL;
+                       }
+                       
+                       char* cpErr = NULL;
+                       double num = strtod(argv[i+1], &cpErr);
+                       if (cpErr == NULL or *cpErr != '\0' or num < 0)
+                       {
+                               HLTError("Cannot convert '%s' to a positive floating point number.",
+                                       argv[i+1]
+                               );
+                               return -EINVAL;
+                       }
+                       fPublishDelay = num;
+                       pubDelaySet = true;
+                       
+                       i++;
+                       continue;
+               }
+
+               HLTError("Unknown option '%s'.", argv[i]);
+               return -EINVAL;
+       }
+       
+       try
+       {
+               char name[256];
+               char title[1024];
+               
+               // Do not add to current directory to prevent memory leak warning.
+               // We will not be leaking any memory if we dont add to the directory.
+               TH1::AddDirectory(kFALSE);
+               
+               for (int i = 0; i < 22; i++)
+               {
+                       AliHLTInt32_t equipId = AliHLTMUONUtils::DDLNumberToEquipId(i);
+                       sprintf(name, "rawDataErrors_%d", equipId);
+                       sprintf(title, "Distribution of errors found in raw data from DDL %d.", equipId);
+                       cout << "TRACE: " << name << endl;
+                       fErrorHist[i] = new TH1D(name, title, 40, 0.5, 40.5);
+                       fErrorHist[i]->SetXTitle("Error code");
+                       fErrorHist[i]->SetYTitle("Number of errors");
+               }
+               for (int i = 0; i < 20; i++)
+               {
+                       AliHLTInt32_t equipId = AliHLTMUONUtils::DDLNumberToEquipId(i);
+                       sprintf(name, "manuDistrib_%d", equipId);
+                       sprintf(title, "Distribution of MANUs containing raw data in DDL %d.", equipId);
+                       fManuHist[i] = new TH1D(name, title, 2048, -0.5, 2047.5);
+                       fManuHist[i]->SetXTitle("MANU number (as seen in raw data)");
+                       fManuHist[i]->SetYTitle("Number of signals read.");
+                       sprintf(name, "signalDistrib_%d", equipId);
+                       sprintf(title, "Distribution of signals in raw data from DDL %d.", equipId);
+                       fSignalHist[i] = new TH1D(name, title, 4096, -0.5, 4095.5);
+                       fSignalHist[i]->SetXTitle("Channels");
+                       fSignalHist[i]->SetYTitle("dN/dChannel");
+               }
+       }
+       catch (const std::bad_alloc&)
+       {
+               HLTError("Could not allocate more memory for histogram objects.");
+               FreeObjects();
+               return -ENOMEM;
+       }
+       
+       return 0;
+}
+
+
+int AliHLTMUONRawDataHistoComponent::DoDeinit()
+{
+       /// Inherited from AliHLTComponent. Performs a cleanup of the component.
+       /// Will delete all histogram objects.
+       
+       HLTInfo("Deinitialising dHLT raw data histogrammer component.");
+       fCurrentEventTime = -1;
+       FreeObjects();
+       return 0;
+}
+
+
+int AliHLTMUONRawDataHistoComponent::DoEvent(
+               const AliHLTComponentEventData& /*evtData*/,
+               AliHLTComponentTriggerData& /*trigData*/
+       )
+{
+       /// Inherited from AliHLTProcessor.
+       /// Processes the new event data and generates summary histograms.
+       
+       fCurrentEventTime = TTimeStamp().AsDouble();
+       
+       const AliHLTComponentBlockData* block = GetFirstInputBlock(AliHLTMUONConstants::DDLRawDataType());
+       for ( ; block != NULL; block = GetNextInputBlock())
+       {
+               HLTDebug("Handling block with fDataType = '%s', fPtr = %p,"
+                       " fSize = %u bytes and fSpecification = 0x%8.8X.",
+                       DataType2Text(block->fDataType).c_str(), block->fPtr,
+                       block->fSize, block->fSpecification
+               );
+
+               if (AliHLTMUONUtils::IsTrackerDDL(block->fSpecification))
+               {
+                       ProcessTrackerDDL(block);
+               }
+               else if (AliHLTMUONUtils::IsTriggerDDL(block->fSpecification))
+               {
+                       ProcessTriggerDDL(block);
+               }
+               else
+               {
+                       HLTError("Received a raw data block with an invalid specification of"
+                               " 0x%8.8X. Expected raw data only from one DDL and not multiple"
+                               " DDLs as indicated by the specification.",
+                               block->fSpecification
+                       );
+               }
+       }
+       
+       if (fLastPublishTime == -1 or fCurrentEventTime - fLastPublishTime > fPublishDelay)
+       {
+               for (int i = 0; i < 22; i++)
+               {
+                       PushBack(fErrorHist[i],
+                               AliHLTMUONConstants::HistogramDataType(),
+                               AliHLTMUONUtils::DDLNumberToSpec(i)
+                       );
+               }
+               for (int i = 0; i < 20; i++)
+               {
+                       AliHLTUInt32_t spec = AliHLTMUONUtils::DDLNumberToSpec(i);
+                       PushBack(fManuHist[i], AliHLTMUONConstants::HistogramDataType(), spec);
+                       PushBack(fSignalHist[i], AliHLTMUONConstants::HistogramDataType(), spec);
+               }
+               fLastPublishTime = fCurrentEventTime;
+       }
+       
+       return 0;
+}
+
+
+void AliHLTMUONRawDataHistoComponent::ProcessTrackerDDL(const AliHLTComponentBlockData* block)
+{
+       /// Processes a raw data block from the tracker stations.
+       
+       AliHLTInt32_t ddl = AliHLTMUONUtils::SpecToDDLNumber(block->fSpecification);
+       assert(0 <= ddl and ddl < 20);
+       
+       if (block->fSize >= sizeof(AliRawDataHeader))
+       {
+               AliHLTUInt8_t* buffer = reinterpret_cast<AliHLTUInt8_t*>(block->fPtr);
+               buffer += sizeof(AliRawDataHeader);
+               UInt_t bufferSize = UInt_t(block->fSize) - sizeof(AliRawDataHeader);
+       }
+       else
+       {
+               HLTError("Received a raw data block that is too short to be valid."
+                       " Its size is only %d bytes",
+                       block->fSize
+               );
+               fErrorHist[ddl]->Fill(40);
+       }
+}
+
+
+void AliHLTMUONRawDataHistoComponent::ProcessTriggerDDL(const AliHLTComponentBlockData* block)
+{
+       /// Processes a raw data block from the trigger stations.
+       
+       HLTFatal("Processing of trigger data not yet implemented!");
+       
+       AliHLTInt32_t ddl = AliHLTMUONUtils::SpecToDDLNumber(block->fSpecification);
+       assert(21 <= ddl and ddl < 22);
+       
+       if (block->fSize >= sizeof(AliRawDataHeader))
+       {
+               AliRawDataHeader* header = reinterpret_cast<AliRawDataHeader*>(block->fPtr);
+               AliHLTUInt8_t* buffer = reinterpret_cast<AliHLTUInt8_t*>(header+1);
+               UInt_t bufferSize = UInt_t(block->fSize) - sizeof(AliRawDataHeader);
+       }
+       else
+       {
+               HLTError("Received a raw data block that is too short to be valid."
+                       " Its size is only %d bytes",
+                       block->fSize
+               );
+               fErrorHist[ddl]->Fill(40);
+       }
+}
+
+
+void AliHLTMUONRawDataHistoComponent::FreeObjects()
+{
+       /// Deletes all the histogram objects that were allocated.
+       
+       for (int i = 0; i < 22; i++)
+       {
+               if (fErrorHist[i] != NULL)
+               {
+                       delete fErrorHist[i];
+                       fErrorHist[i] = NULL;
+               }
+       }
+       for (int i = 0; i < 20; i++)
+       {
+               if (fManuHist[i] != NULL)
+               {
+                       delete fManuHist[i];
+                       fManuHist[i] = NULL;
+               }
+               if (fSignalHist[i] != NULL)
+               {
+                       delete fSignalHist[i];
+                       fSignalHist[i] = NULL;
+               }
+       }
+}
diff --git a/HLT/MUON/utils/AliHLTMUONRawDataHistoComponent.h b/HLT/MUON/utils/AliHLTMUONRawDataHistoComponent.h
new file mode 100644 (file)
index 0000000..13fccb4
--- /dev/null
@@ -0,0 +1,74 @@
+#ifndef AliHLTMUONRAWDATAHISTOCOMPONENT_H
+#define AliHLTMUONRAWDATAHISTOCOMPONENT_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                               */
+
+/* $Id: $ */
+
+///
+///  @file   AliHLTMUONRawDataHistoComponent.h
+///  @author Artur Szostak <artursz@iafrica.com>
+///  @date   30 April 2008
+///  @brief  Declaration of a component to generate basic monitoring histograms of raw data.
+///
+
+#include "AliHLTMUONProcessor.h"
+#include "AliHLTMUONDataTypes.h"
+
+class TH1D;
+
+/**
+ * @class AliHLTMUONRawDataHistoComponent
+ * @brief Dimuon HLT component for generating basic monitoring histograms for raw data.
+ */
+class AliHLTMUONRawDataHistoComponent : public AliHLTMUONProcessor
+{
+public:
+       AliHLTMUONRawDataHistoComponent();
+       virtual ~AliHLTMUONRawDataHistoComponent();
+
+       // Public functions to implement the AliHLTProcessor interface.
+       // These functions are required for the registration process.
+       virtual const char* GetComponentID();
+       virtual void GetInputDataTypes(AliHLTComponentDataTypeList& list);
+       virtual AliHLTComponentDataType GetOutputDataType();
+       virtual void GetOutputDataSize(unsigned long& constBase, double& inputMultiplier);
+       virtual AliHLTComponent* Spawn();
+
+protected:
+
+       // Protected functions to implement the AliHLTProcessor interface.
+       // These functions provide initialization as well as the actual processing
+       // capabilities of the component.
+       virtual int DoInit(int argc, const char** argv);
+       virtual bool IgnoreArgument(const char* arg) const;
+       virtual int DoDeinit();
+       virtual int DoEvent(
+                       const AliHLTComponentEventData& evtData,
+                       AliHLTComponentTriggerData& trigData
+               );
+       
+       using AliHLTProcessor::DoEvent;
+
+private:
+
+       // Do not allow copying of this class.
+       AliHLTMUONRawDataHistoComponent(const AliHLTMUONRawDataHistoComponent& /*obj*/);
+       AliHLTMUONRawDataHistoComponent& operator = (const AliHLTMUONRawDataHistoComponent& /*obj*/);
+
+       void ProcessTrackerDDL(const AliHLTComponentBlockData* block);
+       void ProcessTriggerDDL(const AliHLTComponentBlockData* block);
+       void FreeObjects();
+       
+       double fLastPublishTime;  /// Timestamp for the last time we published data (seconds).
+       double fCurrentEventTime;  /// Timestamp for the current event being processed (seconds).
+       double fPublishDelay;  /// Delay in second to wait between publishing data.
+       TH1D* fErrorHist[22]; /// Histograms for error codes per DDL.
+       TH1D* fManuHist[20]; /// Histograms for MANU distributions per DDL.
+       TH1D* fSignalHist[20]; /// Histograms for signal distributions per DDL.
+       
+       ClassDef(AliHLTMUONRawDataHistoComponent, 0);  // Trigger decision component for the dimuon HLT.
+};
+
+#endif // AliHLTMUONRAWDATAHISTOCOMPONENT_H
index b05888299badeaad7d941472afaa121f3438ad79..d89baf0db34f4a93d2897ebe280b94678eca2f8f 100644 (file)
@@ -16,6 +16,7 @@ CLASS_HDRS :=         OfflineInterface/AliHLTMUONAgent.h \
                OnlineAnalysis/AliHLTMUONClusterFinderComponent.h \
                utils/AliHLTMUONEmptyEventFilterComponent.h \
                utils/AliHLTMUONDataCheckerComponent.h \
+               utils/AliHLTMUONRawDataHistoComponent.h \
                AliHLTMUONProcessor.h \
                AliHLTMUONRecHit.h \
                AliHLTMUONTriggerRecord.h \