2 // Main authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007
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 **************************************************************************/
10 #include "AliEveHOMERSourceMap.h"
11 #include <AliHLTHOMERSourceDesc.h>
15 //______________________________________________________________________
16 // AliEveHOMERSourceMap
18 // AliEveHOMERSourceMap is an abstract container for HLT HOMER sources,
19 // see AliHLTHOMERSourceDesc.
21 // The concrete implementations AliEveHOMERSourceMapByDet and
22 // AliEveHOMERSourceMapByType allow retrieval of HOMER sources in proper
23 // order as required for their display in EVE object browser.
26 ClassImp(AliEveHOMERSourceMap)
28 AliEveHOMERSourceMap::AliEveHOMERSourceMap(ESourceGrouping_e grouping) :
34 AliEveHOMERSourceMap* AliEveHOMERSourceMap::Create(ESourceGrouping_e grouping)
36 // Static constructor - instantiates appropriate sub-class.
40 case kSG_ByDet: return new AliEveHOMERSourceMapByDet(grouping);
41 case kSG_ByType: return new AliEveHOMERSourceMapByType(grouping);
46 Int_t AliEveHOMERSourceMap::iterator::level()
48 // Returns the depth in iteration:
49 // Det / Sub-Det / Sub-Sub-Det / Data-Type.
51 const AliEveHOMERSource::SourceId& sid = id();
54 if ( ! sid.fDet.IsNull()) ++lvl;
55 if ( ! sid.fSDet.IsNull()) ++lvl;
56 if ( ! sid.fSSDet.IsNull()) ++lvl;
57 if ( ! sid.fType.IsNull()) ++lvl;
61 void AliEveHOMERSourceMap::PrintXXX()
63 // Print entries in the map.
65 for (iterator i = begin(); i != end(); ++i)
67 printf("%*s%s [state=%d, handle=0x%lx] {ssdet='%s'}\n", 4*i.level(), "",
68 i.description().Data(), i.state().fState,
69 (ULong_t) i.state().fHandle,
70 i.id().fSSDet.Data());
74 /******************************************************************************/
75 // AliEveHOMERSourceMapByDet
76 /******************************************************************************/
78 AliEveHOMERSourceMapByDet::AliEveHOMERSourceMapByDet(ESourceGrouping_e grouping) :
79 AliEveHOMERSourceMap(grouping),
83 TString AliEveHOMERSourceMapByDet::iterator_imp::description() const
85 // Return identifier string for current entry.
87 const AliEveHOMERSource::SourceId& sid = id();
89 if ( ! sid.fType.IsNull()) return sid.fType;
90 if ( ! sid.fSSDet.IsNull()) return sid.fSSDet;
91 if ( ! sid.fSDet.IsNull()) return sid.fSDet;
92 if ( ! sid.fDet.IsNull()) return sid.fDet;
96 void AliEveHOMERSourceMapByDet::insert(AliEveHOMERSource::SourceId& sid,
97 AliEveHOMERSource::SourceState& sst,
100 // Insert source-state for given source-id.
101 // Does nothing if the entry already exists.
103 Map_i i = fMap.find(sid);
106 // Check wildcard, else
107 sst.fState = def_state;
108 fMap.insert(std::make_pair(sid, sst));
112 void AliEveHOMERSourceMapByDet::FillMap(const TList* handles, Bool_t def_state)
114 // Fill the map from the list of HOMER source handles.
117 AliHLTHOMERSourceDesc* h;
118 while ((h = (AliHLTHOMERSourceDesc*) next()))
120 AliEveHOMERSource::SourceId srcid;
121 AliEveHOMERSource::SourceState srcst;
123 srcid.fDet = h->GetDetector();
124 insert(srcid, srcst, def_state);
126 srcid.fSDet = h->GetSubDetector();
127 if ( ! srcid.fSDet.IsNull()) insert(srcid, srcst, def_state);
129 srcid.fSSDet = h->GetSubSubDetector();
130 if ( ! srcid.fSSDet.IsNull()) insert(srcid, srcst, def_state);
132 srcid.fType = h->GetDataType();
134 insert(srcid, srcst, def_state);
139 /******************************************************************************/
140 // AliEveHOMERSourceMapByType
141 /******************************************************************************/
143 AliEveHOMERSourceMapByType::AliEveHOMERSourceMapByType(ESourceGrouping_e grouping) :
144 AliEveHOMERSourceMap(grouping),
150 TString AliEveHOMERSourceMapByType::iterator_imp::description() const
152 // Return identifier string for current entry.
154 const AliEveHOMERSource::SourceId& sid = id();
156 if ( ! sid.fSSDet.IsNull()) return sid.fSSDet;
157 if ( ! sid.fSDet.IsNull()) return sid.fSDet;
158 if ( ! sid.fDet.IsNull()) return sid.fDet;
159 if ( ! sid.fType.IsNull()) return sid.fType;
163 void AliEveHOMERSourceMapByType::insert(AliEveHOMERSource::SourceId& sid,
164 AliEveHOMERSource::SourceState& sst,
167 // Insert source-state for given source-id.
168 // Does nothing if the entry already exists.
170 Map_i i = fMap.find(sid);
173 // Check wildcard, else
174 sst.fState = def_state;
175 fMap.insert(std::make_pair(sid, sst));
179 void AliEveHOMERSourceMapByType::FillMap(const TList* handles, Bool_t def_state)
181 // Fill the map from the list of HOMER source handles.
184 AliHLTHOMERSourceDesc* h;
185 while ((h = (AliHLTHOMERSourceDesc*) next()))
187 AliEveHOMERSource::SourceId srcid;
188 AliEveHOMERSource::SourceState srcst;
190 srcid.fType = h->GetDataType();
191 insert(srcid, srcst, def_state);
193 srcid.fDet = h->GetDetector();
194 if (h->GetSubDetector() == 0)
197 insert(srcid, srcst, def_state);
200 insert(srcid, srcst, def_state);
202 srcid.fSDet = h->GetSubDetector();
203 if (h->GetSubSubDetector() == 0)
206 insert(srcid, srcst, def_state);
209 insert(srcid, srcst, def_state);
211 srcid.fSSDet = h->GetSubSubDetector();
213 insert(srcid, srcst, def_state);