]> git.uio.no Git - u/mrichter/AliRoot.git/blob - HLT/MUON/AliHLTMUONMansoTracksBlockStruct.cxx
Improved raw data display.
[u/mrichter/AliRoot.git] / HLT / MUON / AliHLTMUONMansoTracksBlockStruct.cxx
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         stream  << "{fId = " << track.fFlags
38                 << ", fTrigRec = " << track.fTrigRec
39                 << ", fFlags = " << std::showbase << std::hex
40                 << track.fFlags << std::dec
41                 << ", fPx = " << track.fPx
42                 << ", fPy = " << track.fPy
43                 << ", fPz = " << track.fPz
44                 << ", fChi2 = " << track.fChi2
45                 << ", fHit[0] = " << track.fHit[0]
46                 << ", fHit[1] = " << track.fHit[1]
47                 << ", fHit[2] = " << track.fHit[2]
48                 << ", fHit[3] = " << track.fHit[3]
49                 << "}";
50         return stream;
51 }
52
53
54 std::ostream& operator << (
55                 std::ostream& stream,
56                 const AliHLTMUONMansoTracksBlockStruct& block
57         )
58 {
59         assert( AliHLTMUONUtils::IntegrityOk(block) );
60
61         const AliHLTMUONMansoTrackStruct* track =
62                 reinterpret_cast<const AliHLTMUONMansoTrackStruct*>(&block + 1);
63         stream  << "{fHeader = " << block.fHeader << ", fTrack[] = [";
64         if (block.fHeader.fNrecords > 0) stream << track[0];
65         for (AliHLTUInt32_t i = 1; i < block.fHeader.fNrecords; i++)
66                 stream << ", " << track[i];
67         stream << "]}";
68         return stream;
69 }
70
71
72 bool operator == (
73                 const AliHLTMUONMansoTracksBlockStruct& a,
74                 const AliHLTMUONMansoTracksBlockStruct& b
75         )
76 {
77         assert( AliHLTMUONUtils::IntegrityOk(a) );
78         assert( AliHLTMUONUtils::IntegrityOk(b) );
79
80         const AliHLTMUONMansoTrackStruct* trackA =
81                 reinterpret_cast<const AliHLTMUONMansoTrackStruct*>(&a + 1);
82         const AliHLTMUONMansoTrackStruct* trackB =
83                 reinterpret_cast<const AliHLTMUONMansoTrackStruct*>(&b + 1);
84         
85         // First check if the blocks have the same header. If they do then check
86         // if every track is the same. In either case if we find a difference
87         // return false.
88         if (a.fHeader != b.fHeader) return false;
89         for (AliHLTUInt32_t i = 0; i < a.fHeader.fNrecords; i++)
90                 if (trackA[i] != trackB[i]) return false;
91         return true;
92 }