update by Gaute:
authorrichterm <richterm@f7af4fe6-9843-0410-8265-dc069ae4e863>
Sun, 7 Jun 2009 00:08:41 +0000 (00:08 +0000)
committerrichterm <richterm@f7af4fe6-9843-0410-8265-dc069ae4e863>
Sun, 7 Jun 2009 00:08:41 +0000 (00:08 +0000)
- adding new data struct for transport of ITS clusters within HLT
- ITSClusterFinderSPD is now using the new data format as output
- adding histogramming component which rebuilds AliITSRecPoint objects
  from the proprietary data and creates histograms

HLT/ITS/AliHLTITSAgent.cxx
HLT/ITS/AliHLTITSClusterDataFormat.h [new file with mode: 0644]
HLT/ITS/AliHLTITSClusterFinderSPDComponent.cxx
HLT/ITS/AliHLTITSClusterHistoComponent.cxx [new file with mode: 0644]
HLT/ITS/AliHLTITSClusterHistoComponent.h [new file with mode: 0644]
HLT/ITS/AliHLTITSSpacePointData.h [new file with mode: 0644]
HLT/ITS/macros/rec-spd-cluster.C
HLT/libAliHLTITS.pkg

index 856389b..5bc8b0e 100644 (file)
@@ -34,6 +34,7 @@
 #include "AliHLTITSCompressRawDataSDDComponent.h"
 #include "AliHLTITSClusterFinderSPDComponent.h"
 #include "AliHLTITSClusterFinderSSDComponent.h"
+#include "AliHLTITSClusterHistoComponent.h"
 
 /** global instance for agent registration */
 AliHLTITSAgent gAliHLTITSAgent;
@@ -88,6 +89,7 @@ int AliHLTITSAgent::RegisterComponents(AliHLTComponentHandler* pHandler) const
   pHandler->AddComponent(new AliHLTITSCompressRawDataSDDComponent);
   pHandler->AddComponent(new AliHLTITSClusterFinderSPDComponent);
   pHandler->AddComponent(new AliHLTITSClusterFinderSSDComponent);
+  pHandler->AddComponent(new AliHLTITSClusterHistoComponent);
 
   return 0;
 }
diff --git a/HLT/ITS/AliHLTITSClusterDataFormat.h b/HLT/ITS/AliHLTITSClusterDataFormat.h
new file mode 100644 (file)
index 0000000..f6c01b6
--- /dev/null
@@ -0,0 +1,28 @@
+// $Id$
+#ifndef ALIHLTITSCLUSTERFORMAT_H
+#define ALIHLTITSCLUSTERFORMAT_H
+
+//* This file is property of and copyright by the ALICE HLT Project        * 
+//* ALICE Experiment at CERN, All rights reserved.                         *
+
+#include "AliHLTITSSpacePointData.h"
+
+/**
+ * @struct AliHLTITSClusterData
+ * Primitive data exchange structure for ITS clusters.
+ * The data format contains one 32bit count member and the array
+ * of spacepoint data structures.
+ *
+ * @ingroup alihlt_its_datastructs
+ */
+struct AliHLTITSClusterData
+    {
+       AliHLTUInt32_t fSpacePointCnt;
+#ifndef __SUNPRO_CC
+       AliHLTITSSpacePointData fSpacePoints[];
+#else
+       AliHLTITSSpacePointData fSpacePoints[1];
+#endif
+    };
+
+#endif // ALIHLTITSCLUSTERFORMAT_H
index 4e550f7..798a22d 100644 (file)
@@ -32,6 +32,8 @@ using namespace std;
 #include "AliHLTDataTypes.h"
 #include "AliITSgeomTGeo.h"
 #include "AliITSRecPoint.h"
+#include "AliHLTITSSpacePointData.h"
+#include "AliHLTITSClusterDataFormat.h"
 
 #include <cstdlib>
 #include <cerrno>
@@ -88,14 +90,14 @@ void AliHLTITSClusterFinderSPDComponent::GetInputDataTypes( vector<AliHLTCompone
 
 AliHLTComponentDataType AliHLTITSClusterFinderSPDComponent::GetOutputDataType() {
   // see header file for class documentation
-  return kAliHLTDataTypeTObjArray;
+  return kAliHLTDataTypeClusters|kAliHLTDataOriginITSSSD;
 }
 
 void AliHLTITSClusterFinderSPDComponent::GetOutputDataSize( unsigned long& constBase, double& inputMultiplier ) {
   // see header file for class documentation
 
   constBase = 0;
-  inputMultiplier = 0.3;
+  inputMultiplier = 1;
 }
 
 AliHLTComponent* AliHLTITSClusterFinderSPDComponent::Spawn() {
@@ -219,52 +221,45 @@ Int_t AliHLTITSClusterFinderSPDComponent::DoEvent( const AliHLTComponentEventDat
     }
     
     fClusterFinder->RawdataToClusters(fRawReader,fClusters);
-    
-    /*
-    Float_t xyz[3];
-    filebuf fb;
-    fb.open ("test.txt",ios::out | ios::app);
-    ostream os(&fb);
+    UInt_t nClusters=0;
     for(int i=0;i<fNModules;i++){
       if(fClusters[i] != NULL){
-       for(int j=0;j<fClusters[i]->GetEntries();j++){
-         AliITSRecPoint *recpoint = (AliITSRecPoint*) fClusters[i]->At(j);
-         recpoint->GetGlobalXYZ(xyz);
-         os<<xyz[0]<<" "<<xyz[1]<<" "<<xyz[2]<<endl;
-       }
+       nClusters += fClusters[i]->GetEntries(); 
       }
     }
-    */
-
-    PushBack(*fClusters,kAliHLTDataTypeTObjArray|kAliHLTDataOriginITSSPD,iter->fSpecification);
+    
+    UInt_t bufferSize = nClusters * sizeof(AliHLTITSSpacePointData) + sizeof(AliHLTITSClusterData);
+    AliHLTUInt8_t *buffer = new AliHLTUInt8_t[bufferSize];
+    AliHLTITSClusterData *outputClusters = reinterpret_cast<AliHLTITSClusterData*>(buffer);
+    outputClusters->fSpacePointCnt=nClusters;
 
-    /*
-    TClonesArray *clustersOut = new TClonesArray();
-          
+    int clustIdx=0;
     for(int i=0;i<fNModules;i++){
       if(fClusters[i] != NULL){
-       for(int j=0;j<fClusters[i]->GetEntriesFast();j++) {
-         clustersOut->Add(&fClusters[i][j]);
-         //PushBack(fClusters[i],kAliHLTDataTypeTObjArray|kAliHLTDataOriginITSSPD,iter->fSpecification);
+       for(int j=0;j<fClusters[i]->GetEntries();j++){
+         AliITSRecPoint *recpoint = (AliITSRecPoint*) fClusters[i]->At(j);
+         outputClusters->fSpacePoints[clustIdx].fY=recpoint->GetY();
+         outputClusters->fSpacePoints[clustIdx].fZ=recpoint->GetZ();
+         outputClusters->fSpacePoints[clustIdx].fSigmaY2=recpoint->GetSigmaY2();
+         outputClusters->fSpacePoints[clustIdx].fSigmaZ2=recpoint->GetSigmaZ2();
+         outputClusters->fSpacePoints[clustIdx].fSigmaYZ=recpoint->GetSigmaYZ();
+         outputClusters->fSpacePoints[clustIdx].fQ=recpoint->GetQ();
+         outputClusters->fSpacePoints[clustIdx].fNy=recpoint->GetNy();
+         outputClusters->fSpacePoints[clustIdx].fNz=recpoint->GetNz();
+         outputClusters->fSpacePoints[clustIdx].fLayer=recpoint->GetLayer();
+         outputClusters->fSpacePoints[clustIdx].fIndex=recpoint->GetDetectorIndex();// | recpoint->GetPindex() | recpoint->GetNindex();
+         outputClusters->fSpacePoints[clustIdx].fTracks[0]=recpoint->GetLabel(0);
+         outputClusters->fSpacePoints[clustIdx].fTracks[1]=recpoint->GetLabel(1);
+         outputClusters->fSpacePoints[clustIdx].fTracks[2]=recpoint->GetLabel(2);
+
+         clustIdx++;
        }
       }
     }
-    
-    PushBack(clustersOut,kAliHLTDataTypeTObjArray|kAliHLTDataOriginITSSPD,iter->fSpecification);
-
-    Float_t xyz2[3];
-    filebuf fb2;
-    fb2.open ("test2.txt",ios::out | ios::app);
-    ostream os2(&fb2);
-    for(int j=0;j<clustersOut->GetEntriesFast();j++){
-      AliITSRecPoint *recpoint = (AliITSRecPoint*) clustersOut->At(j);
-      recpoint->GetGlobalXYZ(xyz2);
-      os2<<xyz2[0]<<" "<<xyz2[1]<<" "<<xyz2[2]<<endl;
-    }
 
-    clustersOut->Clear();
-    delete clustersOut;
-    */
+    PushBack(buffer,bufferSize,kAliHLTDataTypeClusters|kAliHLTDataOriginITSSSD,iter->fSpecification);
+
     for (Int_t iModule = 0; iModule < fNModules; iModule++) {  
       if(fClusters[iModule]){delete fClusters[iModule];}
       fClusters[iModule] = NULL;
@@ -274,9 +269,6 @@ Int_t AliHLTITSClusterFinderSPDComponent::DoEvent( const AliHLTComponentEventDat
     
   } //  for ( ndx = 0; ndx < evtData.fBlockCnt; ndx++ ) {    
   
-    //fClusterFinder->RawdataToClusters(fRawReader,&fClusters);
-  
-  //PushBack( (TObject**) fClusters,kAliHLTDataTypeTObjArray,0x00000000);
-
   return 0;
 }
diff --git a/HLT/ITS/AliHLTITSClusterHistoComponent.cxx b/HLT/ITS/AliHLTITSClusterHistoComponent.cxx
new file mode 100644 (file)
index 0000000..a76b84c
--- /dev/null
@@ -0,0 +1,293 @@
+// $Id$
+//**************************************************************************
+//* This file is property of and copyright by the ALICE HLT Project        * 
+//* ALICE Experiment at CERN, All rights reserved.                         *
+//*                                                                        *
+//* Primary Authors: Gaute Ovrebekk <ovrebekk@ift.uib.no>                  *
+//*                  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   AliHLTITSClusterHistoComponent.cxx
+    @author Gaute Ovrebekk
+    @brief  Component for ploting charge in clusters
+*/
+
+#if __GNUC__>= 3
+using namespace std;
+#endif
+
+#include "AliHLTITSClusterHistoComponent.h"
+#include "AliHLTITSClusterDataFormat.h"
+#include "AliCDBEntry.h"
+#include "AliCDBManager.h"
+#include "AliITSRecPoint.h"
+#include <TFile.h>
+#include <TString.h>
+#include "TObjString.h"
+#include "TObjArray.h"
+
+//#include <stdlib.h>
+//#include <cerrno>
+
+/** ROOT macro for the implementation of ROOT specific class methods */
+ClassImp(AliHLTITSClusterHistoComponent)
+
+AliHLTITSClusterHistoComponent::AliHLTITSClusterHistoComponent()
+:
+fXY(NULL),                     
+  fXYZ(NULL),                   
+  fCharge(NULL),   
+  fPlotCharge(kFALSE),   
+  fPlotXY(kTRUE),
+  fPlotXYZ(kFALSE) 
+{
+  // see header file for class documentation
+  // or
+  // refer to README to build package
+  // or
+  // visit http://web.ift.uib.no/~kjeks/doc/alice-hlt
+
+}
+
+AliHLTITSClusterHistoComponent::~AliHLTITSClusterHistoComponent()
+{
+  // see header file for class documentation
+}
+
+// Public functions to implement AliHLTComponent's interface.
+// These functions are required for the registration process
+
+const char* AliHLTITSClusterHistoComponent::GetComponentID()
+{
+  // see header file for class documentation
+  
+  return "ITSClusterHisto";
+}
+
+void AliHLTITSClusterHistoComponent::GetInputDataTypes(AliHLTComponentDataTypeList& list)
+{
+  // see header file for class documentation
+  list.clear();
+  list.push_back( kAliHLTDataTypeTObjArray );
+}
+
+AliHLTComponentDataType AliHLTITSClusterHistoComponent::GetOutputDataType()
+{
+  // see header file for class documentation
+  return kAliHLTDataTypeHistogram;
+
+}
+
+void AliHLTITSClusterHistoComponent::GetOutputDataSize( unsigned long& constBase, double& inputMultiplier )
+{
+  // see header file for class documentation
+  // XXX TODO: Find more realistic values.
+  constBase = 80000;
+  inputMultiplier = 10;
+}
+
+AliHLTComponent* AliHLTITSClusterHistoComponent::Spawn()
+{
+  // see header file for class documentation
+  return new AliHLTITSClusterHistoComponent;
+}
+
+int AliHLTITSClusterHistoComponent::DoInit( int argc, const char** argv )
+{
+  fPlotCharge=kFALSE;   
+  fPlotXY=kTRUE;
+  fPlotXYZ=kFALSE; 
+     
+  if(fPlotCharge){fCharge = new TH1F("fCharge","Total Charge of clusters",4000,0,4000);}
+  if(fPlotXY){fXY = new TH2F("fXY","Global XY of ITS clusters",1600,-80,80,1600,-80,80);}
+  if(fPlotXYZ){fXYZ = new TH3F("fXYZ","Global XYZ of ITS clusters",1600,-80,80,1600,-80,80,2000,-100,100);}
+  
+  int iResult=0;
+  TString configuration="";
+  TString argument="";
+  for (int i=0; i<argc && iResult>=0; i++) {
+    argument=argv[i];
+    if (!configuration.IsNull()) configuration+=" ";
+    configuration+=argument;
+  }
+  
+  if (!configuration.IsNull()) {
+    iResult=Configure(configuration.Data());
+  }  
+
+  return iResult; 
+}
+  
+int AliHLTITSClusterHistoComponent::DoDeinit()
+{
+  // see header file for class documentation
+  if(fCharge!=NULL) delete fCharge;
+  if(fXY!=NULL) delete fXY;     
+  if(fXYZ!=NULL) delete fXYZ;
+  return 0;
+}
+
+int AliHLTITSClusterHistoComponent::DoEvent(const AliHLTComponentEventData& /*evtData*/, AliHLTComponentTriggerData& /*trigData*/)
+{
+  
+  int TotalSpacePoint = 0;
+  
+  const AliHLTComponentBlockData* iter = NULL;
+  
+  if(!IsDataEvent())
+    return 0;
+  
+  for ( iter = GetFirstInputBlock(kAliHLTDataTypeClusters|kAliHLTDataOriginITSSSD); iter != NULL; iter = GetNextInputBlock() ) {
+    
+    const AliHLTITSClusterData* clusterData = (const AliHLTITSClusterData*) iter->fPtr;
+    Int_t nSpacepoint = (Int_t) clusterData->fSpacePointCnt;
+    TotalSpacePoint += nSpacepoint;
+    AliHLTITSSpacePointData *clusters = (AliHLTITSSpacePointData*) clusterData->fSpacePoints;
+
+    for(int i=0;i<nSpacepoint;i++){
+      Int_t lab[4]={0,0,0,0};
+      Float_t hit[6]={0,0,0,0,0,0};
+      Int_t info[3]={0,0,0};
+      
+      lab[0]=clusters[i].fTracks[0];
+      lab[1]=clusters[i].fTracks[1];
+      lab[2]=clusters[i].fTracks[2];
+      lab[3]=clusters[i].fIndex;
+      hit[0]=clusters[i].fY;
+      hit[1]=clusters[i].fZ;
+      hit[2]=clusters[i].fSigmaY2;
+      hit[3]=clusters[i].fSigmaZ2;
+      hit[4]=clusters[i].fQ;
+      hit[5]=clusters[i].fSigmaYZ;
+      info[0]=clusters[i].fNy;
+      info[1]=clusters[i].fNz;
+      info[2]=clusters[i].fLayer;
+
+      Float_t xyz[3];
+      AliITSRecPoint recpoint(lab,hit,info);
+      recpoint.GetGlobalXYZ(xyz);
+      if(fPlotXY){
+       fXY->Fill(xyz[0],xyz[1]);
+      }
+      if(fPlotXYZ){
+       fXYZ->Fill(xyz[0],xyz[1],xyz[2]);
+      }
+      if(fPlotCharge){
+       fCharge->Fill(recpoint.GetQ());
+      }
+    }
+  }
+  
+  if(fPlotCharge){
+    AliHLTUInt32_t fSpecification = 0x0;
+    PushBack( (TObject*) fCharge,kAliHLTDataTypeHistogram,fSpecification);
+  }
+  if(fPlotXY){
+    AliHLTUInt32_t fSpecification = 0x0;
+    PushBack( (TObject*) fXY,kAliHLTDataTypeHistogram,fSpecification);
+  }
+  if(fPlotXYZ){
+    AliHLTUInt32_t fSpecification = 0x0;
+    PushBack( (TObject*) fXYZ,kAliHLTDataTypeHistogram,fSpecification);
+  }
+  
+  HLTInfo("ITSClusterHisto found %d Total Spacepoints", TotalSpacePoint);
+  
+  return 0;
+}
+
+int AliHLTITSClusterHistoComponent::Configure(const char* arguments)
+{
+  
+  int iResult=0;
+  
+  if (!arguments) return iResult;
+  
+  TString allArgs=arguments;
+  TString argument;
+  
+  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;
+      
+      if (argument.CompareTo("-plot-all")==0) {
+       HLTInfo("Ploting all historgams");
+       fPlotXY = kTRUE;
+       fPlotXYZ = kTRUE;
+       fPlotCharge = kTRUE;
+       continue;
+      }
+      
+      else if (argument.CompareTo("-plot-xy")==0) {
+       HLTInfo("Ploting Global XY");
+       fPlotXY = kTRUE;
+       continue;
+      }
+
+      else if (argument.CompareTo("-plot-xyz")==0) {
+       HLTInfo("Ploting Global XYZ");
+       //fPlotXYZ = kTRUE;
+       continue;
+      }
+      else if (argument.CompareTo("-plot-charge")==0) {
+       HLTInfo("Ploting charge of clusters");
+       fPlotCharge = kTRUE;
+       continue;
+      }
+
+      else {
+       HLTError("unknown argument %s", argument.Data());
+       iResult=-EINVAL;
+       break;
+      }
+    }
+    delete pTokens;
+  }
+  
+  if(!fCharge && fPlotCharge){fCharge = new TH1F("fCharge","Total Charge of clusters",4000,0,4000);}
+  if(!fXY && fPlotXY){fXY = new TH2F("fXY","Global XY of ITS clusters",1600,-80,80,1600,-80,80);}
+  if(!fXYZ && fPlotXYZ){fXYZ = new TH3F("fXYZ","Global XYZ of ITS clusters",1600,-80,80,1600,-80,80,2000,-100,100);}
+  
+  return iResult;
+}
+
+int AliHLTITSClusterHistoComponent::Reconfigure(const char* cdbEntry, const char* chainId)
+{
+  // see header file for class documentation
+  int iResult=0;
+  
+  const char* path="HLT/ConfigITS/HistoComponent";
+  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);
+    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;
+}
diff --git a/HLT/ITS/AliHLTITSClusterHistoComponent.h b/HLT/ITS/AliHLTITSClusterHistoComponent.h
new file mode 100644 (file)
index 0000000..4037378
--- /dev/null
@@ -0,0 +1,101 @@
+//-*- Mode: C++ -*-
+// $Id$
+#ifndef ALIHLTITSCLUSTERHISTOCOMPONENT_H
+#define ALIHLTITSCLUSTERHISTOCOMPONENT_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   AliHLTITSQHistoComponent.h
+    @author Gaute Ovrebekk
+    @brief  Component for ploting clusters
+*/
+
+#include "AliHLTProcessor.h"
+#include "TH1F.h"
+#include "TH2F.h"
+#include "TH3F.h"
+#include "AliHLTITSSpacePointData.h"
+#include "TClonesArray.h"
+#include "AliITSRecPoint.h"
+
+class AliHLTTPCConfMapper;
+
+/**
+ * @class AliHLTITSQHistoComponent
+ * Component for ploting charge in clusters
+ * 
+ * Component ID: \b ITSQHisto <br>
+ * Library: \b libAliHLTITS.
+ *
+ * Mandatory arguments: <br>
+ * 
+ * 
+ * Optional arguments: <br>
+ * 
+ *
+ * @ingroup alihlt_tpc_components
+ */
+class AliHLTITSClusterHistoComponent : public AliHLTProcessor
+{
+public:
+  /** default constructor */
+  AliHLTITSClusterHistoComponent();
+  /** destructor */
+  virtual ~AliHLTITSClusterHistoComponent();
+
+  // Public functions to implement AliHLTComponent's interface.
+  // These functions are required for the registration process
+
+  /** interface function, see AliHLTComponent for description */
+  const char* GetComponentID();
+  /** interface function, see AliHLTComponent for description */
+  void GetInputDataTypes(AliHLTComponentDataTypeList& list);
+  /** interface function, see AliHLTComponent for description */
+  AliHLTComponentDataType GetOutputDataType();
+  /** interface function, see AliHLTComponent for description */
+  virtual void GetOutputDataSize( unsigned long& constBase, double& inputMultiplier );
+  /** interface function, see AliHLTComponent for description */
+  AliHLTComponent* Spawn();
+
+protected:
+
+  // Protected functions to implement AliHLTComponent's interface.
+  // These functions provide initialization as well as the actual processing
+  // capabilities of the component. 
+
+  /** interface function, see AliHLTComponent for description */
+  int DoInit( int argc, const char** argv );
+  /** interface function, see AliHLTComponent for description */
+  int DoDeinit();
+  /** interface function, see AliHLTComponent for description */
+  int DoEvent( const AliHLTComponentEventData& /*evtData*/, AliHLTComponentTriggerData& trigData );
+
+  int Reconfigure(const char* cdbEntry, const char* chainId);
+
+  using AliHLTProcessor::DoEvent;
+  
+private:
+  /** copy constructor prohibited */
+  AliHLTITSClusterHistoComponent(const AliHLTITSClusterHistoComponent&);
+  /** assignment operator prohibited */
+  AliHLTITSClusterHistoComponent& operator=(const AliHLTITSClusterHistoComponent&);
+  /**
+   * Configure the component.
+   * Parse a string for the configuration arguments and set the component
+   * properties.
+   */ 
+  int Configure(const char* arguments);
+  
+  TH2F * fXY;                              //! transient
+  TH3F * fXYZ;                             //! transient
+  TH1F * fCharge;                          //! transient
+    
+  Bool_t fPlotCharge;                      //! transient
+  Bool_t fPlotXY;                          //! transient
+  Bool_t fPlotXYZ;                         //! transient
+   
+  ClassDef(AliHLTITSClusterHistoComponent, 0);
+
+};
+#endif
diff --git a/HLT/ITS/AliHLTITSSpacePointData.h b/HLT/ITS/AliHLTITSSpacePointData.h
new file mode 100644 (file)
index 0000000..8ac7889
--- /dev/null
@@ -0,0 +1,31 @@
+// $Id$
+#ifndef ALIHLTITSSPACEPOINTDATA_H
+#define ALIHLTITSSPACEPOINTDATA_H
+
+//#include "AliHLTTPCRootTypes.h"
+
+/**
+ * @struct AliHLTITSSpacePointData
+ * Primitive data exchange structure for ITS clusters.
+ * Together with the AliHLTITSClusterDataFormat this defines
+ * the output of the ITS online Cluster Finder.
+ *
+ * @ingroup alihlt_its_datastructs
+ */
+struct AliHLTITSSpacePointData{
+  Float_t fY;         // Y coordinate in local coordinates  GetY()
+  Float_t fZ;         // Z coordinate in local coordinates  GetZ()
+  Float_t fSigmaY2;   // error  of the clusters             GetSigmaY2()
+  Float_t fSigmaZ2;   // error  of the clusters             GetSigmaZ2()
+  Float_t fSigmaYZ;   // error  of the clusters             GetSigmaYZ()
+  Float_t fQ;         // Q of cluster (in ADC counts)       GetQ()
+  Int_t fNy;          //number of digits in Y direction     GetNy()
+  Int_t fNz;          //number of digits in Z direction     GetNz()
+  Int_t fLayer;       // layer number                       GetLayer()
+  Int_t fTracks[3];   // MC label                           GetLabel(i)
+  Int_t fIndex;       // Detector Index                     GetDetectorIndex()
+};
+typedef struct AliHLTITSSpacePointData AliHLTITSSpacePointData;
+
+
+#endif /* ALIHLTITSSPACEPOINTDATA_H */
index 348cc25..18b93ca 100644 (file)
@@ -54,9 +54,13 @@ void rec_spd_cluster(const char* input="./", char* opt="")
   }
 
   //add dummy
-  AliHLTConfiguration dummyconf("dummy", "Dummy", dummyInput.Data(), "-output_percentage 0");
+  //AliHLTConfiguration dummyconf("dummy", "Dummy", dummyInput.Data(), "-output_percentage 0");
+  //option+="dummy";
 
-  option+="dummy";
+  AliHLTConfiguration cfconf("clusterHisto","ITSClusterHisto",dummyInput.Data(),"");
+  AliHLTConfiguration fwconf("histFile","ROOTFileWriter", "clusterHisto","-datafile ClusterHisto -concatenate-events -overwrite");
+
+  option+="histFile";
 
   ///////////////////////////////////////////////////////////////////////////////////////////////////
   //
index 6141354..c2fbf66 100644 (file)
@@ -8,6 +8,7 @@ CLASS_HDRS:=    AliHLTITStrack.h \
                AliHLTITSAgent.h\
                AliHLTITSClusterFinderSPDComponent.h\
                AliHLTITSClusterFinderSSDComponent.h\
+               AliHLTITSClusterHistoComponent.h \
                AliHLTITSCompressRawDataSDDComponent.h \
                tracking/AliITStrackerHLT.h \
                tracking/AliHLTITSDetector.h \
@@ -17,7 +18,9 @@ CLASS_HDRS:=          AliHLTITStrack.h \
 
 MODULE_SRCS=   $(CLASS_HDRS:.h=.cxx)
 
-MODULE_HDRS:=  $(CLASS_HDRS)
+MODULE_HDRS:=  $(CLASS_HDRS) \
+               AliHLTITSSpacePointData.h \
+               AliHLTITSClusterDataFormat.h
 
 MODULE_DHDR:=