Update the data dependencies of all components once.
125 {
126 bool updated=false;
127 if (msgLvl(out,MSG::VERBOSE)) {
128 out<< MSG::VERBOSE <<
" inputs:";
129 for (const DataObjID *id : input_data_in) {
131 }
133 out << MSG::VERBOSE <<
" outputs:";
134 for (const DataObjID *id : output_data_in) {
136 }
138 }
139 for (std::pair<IDynamicDataConsumer *
const,std::vector<Gaudi::Algorithm *> > &dyn_data_consumer :
m_dynDataConsumer ) {
140 std::vector<Gaudi::DataHandle *> tmp_new_input_handles;
141 std::vector<Gaudi::DataHandle *> tmp_new_output_handles;
142 bool ret = dyn_data_consumer.first->updateDataNeeds(input_data_in, output_data_in, tmp_new_input_handles, tmp_new_output_handles);
143 if (msgLvl(out,MSG::VERBOSE)) {
144 out << MSG::VERBOSE <<
" new data for";
145 for (const Gaudi::Algorithm *parent_alg : dyn_data_consumer.second) {
146 out <<
" " << parent_alg->name();
147 }
148 out <<
" i:" << tmp_new_input_handles.size()
149 << " o:" << tmp_new_output_handles.size()
151 }
152 updated |= ret;
153 if (ret) {
154 if (msgLvl(out,MSG::DEBUG)) {
155 if (Gaudi::Algorithm *
const an_alg =
dynamic_cast<Gaudi::Algorithm *
const>(dyn_data_consumer.first); an_alg) {
156 out << MSG::DEBUG << an_alg->name() <<
" updated its data needs." <<
endmsg;
157
158 out << MSG::DEBUG << an_alg->name() <<
" inputs:";
159 for (const Gaudi::DataHandle *handle : an_alg->inputHandles()) {
160 out <<
" " << handle->fullKey();
161 }
163 }
164 else if (AlgTool *alg_tool =
dynamic_cast<AlgTool *
const>(dyn_data_consumer.first); alg_tool) {
165 out << MSG::DEBUG << alg_tool->name() <<
" updated its data needs." <<
endmsg;
166
167 out << MSG::DEBUG << alg_tool->name() <<
" inputs:";
168 for (const Gaudi::DataHandle *handle : alg_tool->inputHandles()) {
169 out <<
" " << handle->fullKey();
170 }
172 }
173 else {
174 out << MSG::WARNING <<
"Unknown dynamic data consumer type " <<
typeid(dyn_data_consumer.first).
name() <<
endmsg;
175 }
176 }
177 }
178 for (Gaudi::Algorithm *parent_alg : dyn_data_consumer.second) {
179 input_data_out.reserve(input_data_out.size()+tmp_new_input_handles.size());
180 for (Gaudi::DataHandle *a_handle : tmp_new_input_handles) {
181 parent_alg->addDependency(a_handle->fullKey(), Gaudi::DataHandle::Reader);
182 input_data_out.push_back(&(a_handle->fullKey()));
183 if (msgLvl(out,MSG::DEBUG))
out << MSG::DEBUG <<
" addDependency new input for " << parent_alg->name() <<
" "
184 << a_handle->fullKey().className() <<
" / " << a_handle->objKey() <<
endmsg;
185 }
186 output_data_out.reserve(output_data_out.size()+tmp_new_output_handles.size());
187 for (Gaudi::DataHandle *a_handle : tmp_new_output_handles) {
188 parent_alg->addDependency(a_handle->fullKey(), Gaudi::DataHandle::Writer);
189 output_data_out.push_back(&(a_handle->fullKey()));
190 if (msgLvl(out,MSG::DEBUG))
out << MSG::DEBUG <<
" addDependency new output for " << parent_alg->name() <<
" "
191 << a_handle->fullKey().className() <<
" / " << a_handle->objKey() <<
endmsg;
192 }
193 }
194 }
195 return updated;
196 }
bool const RAWDATA *ch2 const