- synchronized the overlay macro to the changes of the drawing one
[u/mrichter/AliRoot.git] / HLT / MUON / AliHLTMUONClustersBlockStruct.h
1 #ifndef ALIHLTMUONCLUSTERSBLOCKSTRUCT_H
2 #define ALIHLTMUONCLUSTERSBLOCKSTRUCT_H
3 /* Copyright(c) 1998-2007, ALICE Experiment at CERN, All rights reserved. *
4  * See cxx source for full Copyright notice                               */
5
6 // $Id$
7
8 /**
9  * @file   AliHLTMUONClustersBlockStruct.h
10  * @author Artur Szostak <artursz@iafrica.com>
11  * @date   18 May 2007
12  * @brief  Definition of internal dimuon HLT block structure.
13  *
14  * The structure contains extra information about a cluster and its corresponding
15  * reconstructed hit, such as total charge and number of channels.
16  * The individual channel information is contained in AliHLTMUONChannelStruct structures.
17  * The extra information is useful for debugging purposes.
18  *
19  * The structures are defined with C linkage since C generally gives us more
20  * binary compatibility between compilers.
21  */
22
23 #include "AliHLTMUONDataTypes.h"
24 #include "AliHLTMUONRecHitsBlockStruct.h"
25 #include <ostream>
26
27 extern "C"
28 {
29
30 /**
31  * Extra debugging information about a cluster and its reconstructed hit.
32  */
33 struct AliHLTMUONClusterStruct
34 {
35         AliHLTInt32_t fId; // Unique ID for the cluster. It must be at
36                            // least unique for any given event. -1 == invalid.
37
38         AliHLTMUONRecHitStruct fHit; // Corresponding reconstructed hit.
39
40         AliHLTInt32_t fDetElemId;  // Detector ID number from AliRoot geometry
41                                    // on which the cluster was found.
42
43         AliHLTUInt16_t fNchannelsB; // Number of channels/pads in the cluster in bending plane.
44         AliHLTUInt16_t fNchannelsNB; // Number of channels/pads in the cluster in non-bending plane.
45         
46         AliHLTFloat32_t fChargeB; // Cluster charge in bending plane. Can be -1 if invalid or uncomputed.
47         AliHLTFloat32_t fChargeNB; // Cluster charge in non-bending plane. Can be -1 if invalid or uncomputed.
48 };
49
50 /**
51  * AliHLTMUONClusterBlockStruct defines the format of the internal cluster
52  * data block.
53  */
54 struct AliHLTMUONClustersBlockStruct
55 {
56         AliHLTMUONDataBlockHeader fHeader; // Common data block header
57
58         // Array of clusters.
59         //AliHLTMUONClusterStruct fCluster[/*fHeader.fNrecords*/];
60 };
61
62 } // extern "C"
63
64
65 /**
66  * Stream operator for usage with std::ostream classes which prints the
67  * AliHLTMUONClusterStruct in the following format:
68  *   {fId = xx, fHit = {...}, fDetElemId = yy, fNchannels = zz}
69  */
70 std::ostream& operator << (
71                 std::ostream& stream, const AliHLTMUONClusterStruct& cluster
72         );
73
74 /**
75  * Stream operator for usage with std::ostream classes which prints the
76  * AliHLTMUONClustersBlockStruct in the following format:
77  *   {fHeader = xx, fCluster[] = [{..}, {..}, ...]}
78  */
79 std::ostream& operator << (
80                 std::ostream& stream, const AliHLTMUONClustersBlockStruct& block
81         );
82
83
84 inline bool operator == (
85                 const AliHLTMUONClusterStruct& a,
86                 const AliHLTMUONClusterStruct& b
87         )
88 {
89         return  a.fId == b.fId and a.fHit == b.fHit and
90                 a.fDetElemId == b.fDetElemId and a.fNchannelsB == b.fNchannelsB and 
91                 a.fNchannelsNB == b.fNchannelsNB and a.fChargeB == b.fChargeB and
92                 a.fChargeNB == b.fChargeNB;
93 }
94
95 inline bool operator != (
96                 const AliHLTMUONClusterStruct& a,
97                 const AliHLTMUONClusterStruct& b
98         )
99 {
100         return not operator == (a, b);
101 }
102
103
104 bool operator == (
105                 const AliHLTMUONClustersBlockStruct& a,
106                 const AliHLTMUONClustersBlockStruct& b
107         );
108
109 inline bool operator != (
110                 const AliHLTMUONClustersBlockStruct& a,
111                 const AliHLTMUONClustersBlockStruct& b
112         )
113 {
114         return not operator == (a, b);
115 }
116
117 #endif // ALIHLTMUONCLUSTERSBLOCKSTRUCT_H