]> git.uio.no Git - u/mrichter/AliRoot.git/blob - HLT/TPCLib/AliHLTTPCSpacePointContainer.h
access optimization, cluster association improved
[u/mrichter/AliRoot.git] / HLT / TPCLib / AliHLTTPCSpacePointContainer.h
1 //-*- Mode: C++ -*-
2 // $Id$
3 #ifndef ALIHLTTPCSPACEPOINTCONTAINER_H
4 #define ALIHLTTPCSPACEPOINTCONTAINER_H
5 //* This file is property of and copyright by the ALICE HLT Project        * 
6 //* ALICE Experiment at CERN, All rights reserved.                         *
7 //* See cxx source for full Copyright notice                               *
8
9 /// @file   AliHLTTPCSpacePointContainer.h
10 /// @author Matthias Richter
11 /// @date   2011-04-29
12 /// @brief  Helper class for handling of HLT TPC space point data blocks
13 ///
14
15 #include "AliHLTSpacePointContainer.h"
16 #include "AliHLTTPCClusterDataFormat.h"
17 #include "AliHLTTPCSpacePointData.h"
18 #include <map>
19 using namespace std;
20
21 /**
22  * @class AliHLTTPCSpacePointContainer
23  * Handler class for HLT TPCS space point data blocks.
24  *
25  * @ingroup alihlt_tpc
26  */
27 class AliHLTTPCSpacePointContainer : public AliHLTSpacePointContainer
28 {
29  public:
30   /// standard constructor
31   AliHLTTPCSpacePointContainer();
32   /// copy constructor
33   AliHLTTPCSpacePointContainer(const AliHLTTPCSpacePointContainer& c);
34   /// assignment operator
35   AliHLTTPCSpacePointContainer& operator=(const AliHLTTPCSpacePointContainer& c);
36   /// destructor
37   ~AliHLTTPCSpacePointContainer();
38
39   virtual bool Check(AliHLTUInt32_t clusterID) const;
40   virtual int GetClusterIDs(vector<AliHLTUInt32_t>& tgt) const;
41   virtual const vector<AliHLTUInt32_t>* GetClusterIDs(AliHLTUInt32_t mask);
42   virtual float GetX(AliHLTUInt32_t clusterID) const;
43   virtual float GetXWidth(AliHLTUInt32_t clusterID) const;
44   virtual float GetY(AliHLTUInt32_t clusterID) const;
45   virtual float GetYWidth(AliHLTUInt32_t clusterID) const;
46   virtual float GetZ(AliHLTUInt32_t clusterID) const;
47   virtual float GetZWidth(AliHLTUInt32_t clusterID) const;
48   virtual float GetCharge(AliHLTUInt32_t clusterID) const;
49   virtual float GetPhi(AliHLTUInt32_t clusterID) const;
50
51   /// add input block to the collection
52   virtual int AddInputBlock(const AliHLTComponentBlockData* pDesc);
53
54   /// clear the object and reset pointer references
55   virtual void Clear(Option_t * option ="");
56
57   /// print information
58   virtual void Print(ostream& out, Option_t *option="") const;
59
60   /// create a collection of clusters for a space point mask
61   virtual AliHLTSpacePointContainer* SelectByMask(AliHLTUInt32_t mask, bool bAlloc=false) const;
62
63   /// create a collection of clusters for a specific track
64   virtual AliHLTSpacePointContainer* SelectByTrack(int trackId, bool bAlloc=false) const;
65
66   /// create a collection of clusters for a specific MC track
67   virtual AliHLTSpacePointContainer* SelectByMC(int mcId, bool bAlloc=false) const;
68
69   /// create a collection of all used clusters
70   virtual AliHLTSpacePointContainer* UsedClusters(bool bAlloc=false) const;
71
72   /// create a collection of all unused clusters
73   virtual AliHLTSpacePointContainer* UnusedClusters(bool bAlloc=false) const;
74
75   virtual int MarkUsed(const AliHLTUInt32_t* clusterIDs, int arraySize);
76   virtual int SetTrackID(int trackID, const AliHLTUInt32_t* clusterIDs, int arraySize);
77   virtual int GetTrackID(AliHLTUInt32_t clusterID) const;
78   virtual int SetMCID(int clusterID, const AliHLTUInt32_t* clusterIDs, int arraySize);
79
80   class AliHLTTPCSpacePointProperties {
81   public:
82     AliHLTTPCSpacePointProperties();
83     AliHLTTPCSpacePointProperties(const AliHLTTPCSpacePointData* pCluster);
84     AliHLTTPCSpacePointProperties(const AliHLTTPCSpacePointProperties& src);
85     AliHLTTPCSpacePointProperties& operator=(const AliHLTTPCSpacePointProperties& src);
86
87     ~AliHLTTPCSpacePointProperties() {}
88
89     const AliHLTTPCSpacePointData* Data() const {return fCluster;}
90     bool IsUsed() const {return fUsed;}
91     void MarkUsed(bool used=true) {fUsed=used;}
92     int GetTrackId() const {return fTrackId;}
93     void SetTrackId(int trackId) {fTrackId=trackId;}
94     int GetMCId() const {return fMCId;}
95     void SetMCId(int mcId) {fMCId=mcId;}
96
97     void Print(ostream& out, Option_t *option="") const;
98
99   private:
100     const AliHLTTPCSpacePointData* fCluster; //! transient
101     bool fUsed; //! transient
102     int fTrackId; //! track id from reconstruction
103     int fMCId; //! MC id
104   };
105
106  protected:
107
108  private:
109   /// map of clusters
110   std::map<AliHLTUInt32_t, AliHLTTPCSpacePointProperties> fClusters; //!
111
112   /// map of cluster id collection for different masks
113   std::map<AliHLTUInt32_t, vector<AliHLTUInt32_t>*> fSelections; //!
114
115   ClassDef(AliHLTTPCSpacePointContainer, 0)
116 };
117
118 ostream& operator<<(ostream &out, const AliHLTTPCSpacePointContainer::AliHLTTPCSpacePointProperties& p);
119
120 #endif