Print a string representing the control flow state.
78 {
79
82 std::string indent( recursionLevel, ' ' );
85 << ")"
86 <<
", in state: " << states[
m_algoIndex] << std::endl;
87
88
90
91
92 output << indent <<
"========" << std::endl;
94
95
96 ConditionNode* conditionNode = dynamic_cast<ConditionNode*>( dataNode );
97 DataReadyPromoter visitor( slot, {} );
98 bool wasProduced = false;
99 if ( conditionNode ) {
100
101
102 wasProduced = !visitor.visitEnter( *conditionNode );
103 } else {
104
105 wasProduced = visitor.visit( *dataNode );
106 }
107
108
109 if ( !wasProduced ) {
110
111
112 if ( conditionNode )
113 output << indent <<
"missing conditions data: " << dataNode->name() << std::endl;
114 else
115 output << indent <<
"missing data: " << dataNode->name() << std::endl;
116
117
118 DataHandleFinder finder( dataNode->name() );
120 if ( finder.holderNames().size() > 1 ) {
121 output << indent <<
"required by tool:";
122 for ( auto const& holderName : finder.holderNames() ) {
123 if ( holderName != this->
name() )
output <<
" " << holderName;
124 }
126 }
127
128 if ( conditionNode ) {
129
131 std::vector<EventIDRange> validRanges;
132 conditionNode->m_condSvc->validRanges( validRanges, dataNode->name() )
133 .ignore( );
134 for (
auto& range : validRanges ) {
output << indent <<
"interval of validity: " <<
range << std::endl; }
135 if ( validRanges.empty() )
output << indent <<
"no interval(s) of validity" << std::endl;
136 } else {
137
138 output << indent <<
"can be produced by alg(s): ";
139 for ( auto algoNode : dataNode->getProducers() ) {
140 output <<
"( " << algoNode->name() <<
" in state: " << states[algoNode->getAlgoIndex()] <<
" ) ";
141 }
143 }
144
145
146 if ( !conditionNode ) {
147 std::vector<EventSlot>* testSubSlots = &slot.
allSubSlots;
149
150
155 if ( visitor.visit( *dataNode ) ) {
156 output << indent <<
"data is available at whole-event level" << std::endl;
157 }
158 }
159
160
161 for ( auto& pair : *subSlotMap ) {
162 if ( pair.second.size() > 0 ) {
163 bool madeLine = false;
164
165
166 for ( int slotIndex : pair.second ) {
167
168 EventSlot* subSlot = &testSubSlots->at( slotIndex );
169 visitor.m_slot = subSlot;
170 if ( visitor.visit( *dataNode ) ) {
171
172 if ( !madeLine ) {
173
174 output << indent <<
"data is available in sub-slot(s) ";
175 madeLine = true;
176 }
177 output << slotIndex <<
", ";
178 }
179 }
180 if ( madeLine ) {
output <<
"entered from " << pair.first << std::endl; }
181 }
182 }
183 }
184 }
185 }
186 output << indent <<
"========" << std::endl;
187 }
188 }
const EventIDBase & eventID() const
void acceptDHVisitor(IDataHandleVisitor *) const override
const std::vector< DataNode * > & getInputDataNodes() const
Get all consumer nodes.
Gaudi::Algorithm * getAlgorithm() const
get Algorithm representatives
const std::string & name() const
Get node name.
decltype(auto) range(Args &&... args)
Zips multiple containers together to form a single range.
std::unique_ptr< EventContext > eventContext
Cache for the eventContext.
std::vector< EventSlot > allSubSlots
Actual sub-slot instances.
EventSlot * parentSlot
Pointer to parent slot (null for top level)
std::unordered_map< std::string, std::vector< unsigned int > > subSlotsByNode
Listing of sub-slots by the node (name) they are attached to.
AlgsExecutionStates algsStates
Vector of algorithms states.
std::vector< int > controlFlowState
State of the control flow.