bugfix
[u/mrichter/AliRoot.git] / EVE / EveHLT / AliEveHOMERSourceMapByType.cxx
CommitLineData
f65a2da1 1// $Id$
2// Main authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007
3
4/**************************************************************************
5 * Copyright(c) 1998-2008, ALICE Experiment at CERN, all rights reserved. *
6 * See http://aliceinfo.cern.ch/Offline/AliRoot/License.html for *
7 * full copyright notice. *
8 **************************************************************************/
9
10#include "AliEveHOMERSourceMapByType.h"
11#include <AliHLTHOMERSourceDesc.h>
12
13#include <TList.h>
14
15//______________________________________________________________________
16//
17// AliEveHOMERSourceMap is an abstract container for HLT HOMER sources,
18// see AliHLTHOMERSourceDesc.
19//
20// The concrete implementations AliEveHOMERSourceMapByDet and
21// AliEveHOMERSourceMapByType allow retrieval of HOMER sources in proper
22// order as required for their display in EVE object browser.
23//
24
25AliEveHOMERSourceMapByType::AliEveHOMERSourceMapByType(ESourceGrouping_e grouping) :
26 AliEveHOMERSourceMap(grouping),
27 fMap()
28{
29 // Constructor.
30}
31
32TString AliEveHOMERSourceMapByType::iterator_imp::description() const
33{
34 // Return identifier string for current entry.
35
36 const AliEveHOMERSource::SourceId& sid = id();
37
38 if ( ! sid.fSSDet.IsNull()) return sid.fSSDet;
39 if ( ! sid.fSDet.IsNull()) return sid.fSDet;
40 if ( ! sid.fDet.IsNull()) return sid.fDet;
41 if ( ! sid.fType.IsNull()) return sid.fType;
42 return "<empty>";
43}
44
45void AliEveHOMERSourceMapByType::insert(AliEveHOMERSource::SourceId& sid,
46 AliEveHOMERSource::SourceState& sst,
47 Bool_t def_state)
48{
49 // Insert source-state for given source-id.
50 // Does nothing if the entry already exists.
51
52 Map_i i = fMap.find(sid);
53 if (i == fMap.end())
54 {
55 // Check wildcard, else
56 sst.fState = def_state;
57 fMap.insert(std::make_pair(sid, sst));
58 }
59}
60
61void AliEveHOMERSourceMapByType::FillMap(const TList* handles, Bool_t def_state)
62{
63 // Fill the map from the list of HOMER source handles.
64
65 TIter next(handles);
66 AliHLTHOMERSourceDesc* h;
67 while ((h = (AliHLTHOMERSourceDesc*) next()))
68 {
69 AliEveHOMERSource::SourceId srcid;
70 AliEveHOMERSource::SourceState srcst;
71
72 srcid.fType = h->GetDataType();
73 insert(srcid, srcst, def_state);
74
75 srcid.fDet = h->GetDetector();
76 if (h->GetSubDetector() == 0)
77 {
78 srcst.fHandle = h;
79 insert(srcid, srcst, def_state);
80 continue;
81 }
82 insert(srcid, srcst, def_state);
83
84 srcid.fSDet = h->GetSubDetector();
85 if (h->GetSubSubDetector() == 0)
86 {
87 srcst.fHandle = h;
88 insert(srcid, srcst, def_state);
89 continue;
90 }
91 insert(srcid, srcst, def_state);
92
93 srcid.fSSDet = h->GetSubSubDetector();
94 srcst.fHandle = h;
95 insert(srcid, srcst, def_state);
96 }
97}