]> git.uio.no Git - u/mrichter/AliRoot.git/blame - HLT/MUON/AliHLTMUONProcessor.h
- Fix error message when opening merged aod file on client in PROOF mode
[u/mrichter/AliRoot.git] / HLT / MUON / AliHLTMUONProcessor.h
CommitLineData
154cba94 1#ifndef ALIHLTMUONPROCESSOR_H
2#define ALIHLTMUONPROCESSOR_H
3/* This file is property of and copyright by the ALICE HLT Project *
4 * ALICE Experiment at CERN, All rights reserved. *
5 * See cxx source for full Copyright notice */
6
7/* $Id: $ */
8
9///
10/// @file AliHLTMUONProcessor.h
11/// @author Artur Szostak <artursz@iafrica.com>
12/// @date 2007-12-12
13/// @brief Declaration of a common processor component abstract interface for dHLT components.
14///
15
16#include "AliHLTProcessor.h"
17#include "AliHLTMUONDataBlockReader.h"
18#include "AliHLTMUONUtils.h"
19
20/**
21 * @class AliHLTMUONProcessor
22 * This component class is an abstract base class for dHLT components.
23 * Some common methods useful to all dHLT specific components are implemented
24 * by this class.
25 */
26class AliHLTMUONProcessor : public AliHLTProcessor
27{
28public:
29 /// Default constructor.
30 AliHLTMUONProcessor() : AliHLTProcessor() {}
31 /// Default destructor.
32 virtual ~AliHLTMUONProcessor() {}
33
34protected:
35
36 /**
37 * Method to check the block structure and log appropriate error messages.
38 * If a problem is found with the data block then an appropriate HLT error
39 * message is logged and the method returns false.
40 * \param block The lightweight block reader whose data block should be checked.
41 * \param name A string containing a descriptive name of the data block
42 * type. This name is used in the logged error messages.
43 * \returns true if the structure of the block looks OK and false otherwise.
44 * \note The BlockType should be a class deriving from AliHLTMUONDataBlockReader.
45 */
46 template <class BlockType>
47 bool BlockStructureOk(const BlockType& block, const char* name) const;
48
49 /// Checks the structure of a trigger records data block.
50 bool BlockStructureOk(const AliHLTMUONTriggerRecordsBlockReader& block) const
51 {
52 return BlockStructureOk(block, "trigger records");
53 }
54
55 /// Checks the structure of a trigger records debug information data block.
56 bool BlockStructureOk(const AliHLTMUONTrigRecsDebugBlockReader& block) const
57 {
58 return BlockStructureOk(block, "trigger records debug information");
59 }
60
61 /// Checks the structure of a reconstructed hits data block.
62 bool BlockStructureOk(const AliHLTMUONRecHitsBlockReader& block) const
63 {
64 return BlockStructureOk(block, "reconstructed hits");
65 }
66
67 /// Checks the structure of a clusters data block.
68 bool BlockStructureOk(const AliHLTMUONClustersBlockReader& block) const
69 {
70 return BlockStructureOk(block, "clusters");
71 }
72
73 /// Checks the structure of a ADC channels data block.
74 bool BlockStructureOk(const AliHLTMUONChannelsBlockReader& block) const
75 {
76 return BlockStructureOk(block, "channels");
77 }
78
79 /// Checks the structure of a Manso tracks data block.
80 bool BlockStructureOk(const AliHLTMUONMansoTracksBlockReader& block) const
81 {
82 return BlockStructureOk(block, "Manso tracks");
83 }
84
85 /// Checks the structure of a Manso track candidates data block.
86 bool BlockStructureOk(const AliHLTMUONMansoCandidatesBlockReader& block) const
87 {
88 return BlockStructureOk(block, "Manso track candidates");
89 }
90
91 /// Checks the structure of a single track trigger decision data block.
92 bool BlockStructureOk(const AliHLTMUONSinglesDecisionBlockReader& block) const
93 {
94 return BlockStructureOk(block, "singles decision");
95 }
96
97 /// Checks the structure of a track pairs trigger decision data block.
98 bool BlockStructureOk(const AliHLTMUONPairsDecisionBlockReader& block) const
99 {
100 return BlockStructureOk(block, "pairs decision");
101 }
102
103private:
104
105 // Do not allow copying of this class.
106 AliHLTMUONProcessor(const AliHLTMUONProcessor& /*obj*/);
107 AliHLTMUONProcessor& operator = (const AliHLTMUONProcessor& /*obj*/);
108
109 ClassDef(AliHLTMUONProcessor, 0) // Abstract base class for dHLT specific components.
110};
111
112//______________________________________________________________________________
113
114template <class BlockType>
115bool AliHLTMUONProcessor::BlockStructureOk(const BlockType& block, const char* name) const
116{
117 /// Performs basic checks to see if the input data block structure is OK,
118 /// that it is not corrupt, too short etc...
119
120 if (not block.BufferSizeOk())
121 {
122 size_t headerSize = sizeof(typename BlockType::HeaderType);
123 if (block.BufferSize() < headerSize)
124 {
125 HLTError("Received a %s data block with a size of %d bytes,"
126 " which is smaller than the minimum valid header size of %d bytes."
127 " The block must be corrupt.",
128 name, block.BufferSize(), headerSize
129 );
130 return false;
131 }
132
133 size_t expectedWidth = sizeof(typename BlockType::ElementType);
134 if (block.CommonBlockHeader().fRecordWidth != expectedWidth)
135 {
136 HLTError("Received a %s data block with a record"
137 " width of %d bytes, but the expected value is %d bytes."
138 " The block might be corrupt.",
139 name,
140 block.CommonBlockHeader().fRecordWidth,
141 expectedWidth
142 );
143 return false;
144 }
145
146 HLTError("Received a %s data block with a size of %d bytes,"
147 " but the block header claims the block should be %d bytes."
148 " The block might be corrupt.",
149 name, block.BufferSize(), block.BytesUsed()
150 );
151 return false;
152 }
153
154 AliHLTMUONUtils::WhyNotValid reason;
155 if (not AliHLTMUONUtils::HeaderOk(block.BlockHeader(), &reason))
156 {
157 HLTError("Received a %s data block which might be corrupt. %s",
158 name, AliHLTMUONUtils::FailureReasonToMessage(reason)
159 );
160 return false;
161 }
162
163 return true;
164}
165
166#endif // ALIHLTMUONPROCESSOR_H