Line data Source code
1 : /**************************************************************************
2 : * Copyright(c) 1998-2007, ALICE Experiment at CERN, All rights reserved. *
3 : * *
4 : * Author: The ALICE Off-line Project. *
5 : * Contributors are mentioned in the code where appropriate. *
6 : * *
7 : * Permission to use, copy, modify and distribute this software and its *
8 : * documentation strictly for non-commercial purposes is hereby granted *
9 : * without fee, provided that the above copyright notice appears in all *
10 : * copies and that both the copyright notice and this permission notice *
11 : * appear in the supporting documentation. The authors make no claims *
12 : * about the suitability of this software for any purpose. It is *
13 : * provided "as is" without express or implied warranty. *
14 : **************************************************************************/
15 :
16 : // $Id$
17 :
18 : ///
19 : /// @file AliHLTMUONMansoTracksBlockStruct.cxx
20 : /// @author Artur Szostak <artursz@iafrica.com>
21 : /// @date 21 May 2007
22 : /// @brief Implementation of useful stream and comparison operators.
23 : ///
24 : /// The Manso tracks data block is an internal dimuon HLT data block structure
25 : /// generated by the Manso algorithm.
26 : ///
27 :
28 : #include "AliHLTMUONMansoTracksBlockStruct.h"
29 : #include "AliHLTMUONUtils.h"
30 : #include <cassert>
31 :
32 :
33 : std::ostream& operator << (
34 : std::ostream& stream, const AliHLTMUONMansoTrackStruct& track
35 : )
36 : {
37 0 : std::ios::fmtflags oldflags = stream.flags();
38 0 : stream << "{fId = " << track.fFlags
39 0 : << ", fTrigRec = " << track.fTrigRec
40 0 : << ", fFlags = " << std::showbase << std::hex
41 0 : << track.fFlags << std::dec
42 0 : << ", fPx = " << track.fPx
43 0 : << ", fPy = " << track.fPy
44 0 : << ", fPz = " << track.fPz
45 0 : << ", fChi2 = " << track.fChi2
46 0 : << ", fHit[0] = " << track.fHit[0]
47 0 : << ", fHit[1] = " << track.fHit[1]
48 0 : << ", fHit[2] = " << track.fHit[2]
49 0 : << ", fHit[3] = " << track.fHit[3]
50 0 : << "}";
51 0 : stream.flags(oldflags);
52 0 : return stream;
53 : }
54 :
55 :
56 : std::ostream& operator << (
57 : std::ostream& stream,
58 : const AliHLTMUONMansoTracksBlockStruct& block
59 : )
60 : {
61 0 : assert( AliHLTMUONUtils::IntegrityOk(block) );
62 :
63 : const AliHLTMUONMansoTrackStruct* track =
64 0 : reinterpret_cast<const AliHLTMUONMansoTrackStruct*>(&block + 1);
65 0 : stream << "{fHeader = " << block.fHeader << ", fTrack[] = [";
66 0 : if (block.fHeader.fNrecords > 0) stream << track[0];
67 0 : for (AliHLTUInt32_t i = 1; i < block.fHeader.fNrecords; i++)
68 0 : stream << ", " << track[i];
69 0 : stream << "]}";
70 0 : return stream;
71 : }
72 :
73 :
74 : bool operator == (
75 : const AliHLTMUONMansoTracksBlockStruct& a,
76 : const AliHLTMUONMansoTracksBlockStruct& b
77 : )
78 : {
79 0 : assert( AliHLTMUONUtils::IntegrityOk(a) );
80 0 : assert( AliHLTMUONUtils::IntegrityOk(b) );
81 :
82 : const AliHLTMUONMansoTrackStruct* trackA =
83 0 : reinterpret_cast<const AliHLTMUONMansoTrackStruct*>(&a + 1);
84 : const AliHLTMUONMansoTrackStruct* trackB =
85 0 : reinterpret_cast<const AliHLTMUONMansoTrackStruct*>(&b + 1);
86 :
87 : // First check if the blocks have the same header. If they do then check
88 : // if every track is the same. In either case if we find a difference
89 : // return false.
90 0 : if (a.fHeader != b.fHeader) return false;
91 0 : for (AliHLTUInt32_t i = 0; i < a.fHeader.fNrecords; i++)
92 0 : if (trackA[i] != trackB[i]) return false;
93 0 : return true;
94 0 : }
|