In AliMpPad:
[u/mrichter/AliRoot.git] / HLT / MUON / AliHLTMUONTriggerRecordsBlockStruct.h
CommitLineData
053e588f 1#ifndef ALIHLTMUONTRIGGERRECORDSBLOCKSTRUCT_H
2#define ALIHLTMUONTRIGGERRECORDSBLOCKSTRUCT_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 AliHLTMUONTriggerRecordsBlockStruct.h
10 * @author Artur Szostak <artursz@iafrica.com>
11 * @date
12 * @brief Definition of internal dimuon HLT trigger record data block structure.
13 *
14 * The structures are defined with C linkage since C generally gives us more
15 * binary compatibility between compilers.
16 */
17
18#include "AliHLTMUONRecHitsBlockStruct.h"
19
20extern "C"
21{
22
23/**
e800d035 24 * Trigger record structures containing information decoded from the dimuon
25 * spectrometer's hardware trigger electronics.
053e588f 26 */
27struct AliHLTMUONTriggerRecordStruct
28{
b08ffe98 29 AliHLTInt32_t fId; // Each trigger record should have an ID number unique
30 // for a given event. -1 == invalid.
053e588f 31
32 // The flags word constains the following bit fields (bit 31 is most
33 // significant):
34 // bits: [31][30][29 --- 4][ 3 ][ 2 ][ 1 ][ 0 ]
35 // field: - + reserved hst[3] hst[2] hst[1] hst[0]
36 // Where fields hst[i] indicates if fHit[i] has been filled/set.
37 // Reserved bits should be set to zero.
38 // Particle sign: if '-' is set then particle has minus sign.
39 // if '+' is set then particle has negative sign.
40 // Either '+' or '-' should be set and if neither then the particle
41 // sign is unknown.
42 AliHLTUInt32_t fFlags;
43
44 AliHLTFloat32_t fPx; // Particle momentum X component in GeV/c.
45 AliHLTFloat32_t fPy; // Particle momentum Y component in GeV/c.
46 AliHLTFloat32_t fPz; // Particle momentum Z component in GeV/c.
47
48 // Particle hit coordinates on trigger chambers 11 to 14.
49 AliHLTMUONRecHitStruct fHit[4];
50};
51
52/**
ffebb0e6 53 * AliHLTMUONTriggerRecordsBlockStruct defines the format of the internal
053e588f 54 * trigger records data block.
55 */
56struct AliHLTMUONTriggerRecordsBlockStruct
57{
58 AliHLTMUONDataBlockHeader fHeader; // Common data block header
59
60 // Array of trigger records.
e83e889b 61#ifndef __SUNPRO_CC
053e588f 62 AliHLTMUONTriggerRecordStruct fTriggerRecord[/*fHeader.fNrecords*/];
e83e889b 63#else
64 AliHLTMUONTriggerRecordStruct fTriggerRecord[1];
65#endif
053e588f 66};
67
68} // extern "C"
69
70
71/**
72 * Stream operator for usage with std::ostream classes which prints the trigger
73 * record in the following format:
74 * {fId = xx, fFlags = 0xYY, fPx = uu, fPy = vv, fPz = ww, fHit[0] = {...},
75 * fHit[1] = {...}, fHit[2] = {...}, fHit[3] = {...}}
76 */
77std::ostream& operator << (
78 std::ostream& stream, const AliHLTMUONTriggerRecordStruct& trigrec
79 );
80
81/**
82 * Stream operator for usage with std::ostream classes which prints the
83 * AliHLTMUONTriggerRecordsBlockStruct in the following format:
84 * {fHeader = xx, fTriggerRecord[] = [{..}, {..}, ...]}
85 */
86std::ostream& operator << (
87 std::ostream& stream, const AliHLTMUONTriggerRecordsBlockStruct& block
88 );
89
90
91inline bool operator == (
92 const AliHLTMUONTriggerRecordStruct& a,
93 const AliHLTMUONTriggerRecordStruct& b
94 )
95{
96 return a.fId == b.fId and a.fFlags == b.fFlags
97 and a.fPx == b.fPx and a.fPy == b.fPy and a.fPz == b.fPz
98 and a.fHit[0] == b.fHit[0] and a.fHit[1] == b.fHit[1]
99 and a.fHit[2] == b.fHit[2] and a.fHit[3] == b.fHit[3];
100}
101
102inline bool operator != (
103 const AliHLTMUONTriggerRecordStruct& a,
104 const AliHLTMUONTriggerRecordStruct& b
105 )
106{
107 return not operator == (a, b);
108}
109
110
111bool operator == (
112 const AliHLTMUONTriggerRecordsBlockStruct& a,
113 const AliHLTMUONTriggerRecordsBlockStruct& b
114 );
115
116inline bool operator != (
117 const AliHLTMUONTriggerRecordsBlockStruct& a,
118 const AliHLTMUONTriggerRecordsBlockStruct& b
119 )
120{
121 return not operator == (a, b);
122}
123
124#endif // ALIHLTMUONTRIGGERRECORDSBLOCKSTRUCT_H