51{
52
53 dqm_core::Result *newresult = new dqm_core::Result();
54
55 std::multimap<std::string,TObject*>
inputs;
56 dqm_algorithms::tools::SimpleAlgorithmConfig algConfig;
57
58 dqm_core::Result * overWriteResult = 0;
59
60
61 for (dqm_core::ParametersMap::const_iterator iter=map.begin();iter!=map.end();++iter){
62
63
64 if (
iter->second->getWeight() == 0 ) {
65 ERS_DEBUG(2,
"Skip result (weight 0): "<<
iter->first);
66 continue;
67 }
68 TObject* inputobject =
iter->second->getResult().get()->getObject();
69 if (inputobject == 0) {
70
71
72 newresult->status_ = lastResult.status_;
73 return newresult;
74 }
75 else {
76
77 std::string role;
78 for (std::map<std::string,double>::const_iterator tagIter=
iter->second->getResult().get()->tags_.begin();
79 tagIter !=
iter->second->getResult().get()->tags_.end(); ++tagIter ) {
80 std::string
tag = tagIter->first;
81 size_t stringPos;
82 std::string tagType = "ConfParameter--Role--";
83 if ( (stringPos =
tag.find(tagType)) != std::string::npos) {
84 stringPos += tagType.length();
85 role =
tag.substr(stringPos);
86 break;
87 }
88 }
89
90 if(role.size() != 0) {
91 inputs.insert(std::pair<std::string,TObject*>(role,inputobject));
92 }
93 }
94 }
95
97 newresult->status_ = lastResult.status_;
98 return newresult;
99 }
100
101
102
103
104 std::map<std::string,double > paramVecMap;
105 for (dqm_core::ParametersMap::const_reverse_iterator rIter=map.rbegin() ; rIter!=map.rend();++rIter) {
106 if( rIter->second->getResult().get()->tags_.empty() ){
107 continue;
108 }
109 for (std::map<std::string,double>::const_iterator tagIter=rIter->second->getResult().get()->tags_.begin();
110 tagIter != rIter->second->getResult().get()->tags_.end(); ++tagIter ) {
111 std::string
tag = tagIter->first;
112 size_t stringPos;
113 std::string tagType;
114
115 tagType = "ConfParameter--Role--";
116 if (
tag.find(tagType) != std::string::npos ){
117
118 continue;
119 }
120 tagType = "ConfParameter--OverWrite";
121 if (
tag.find(tagType) != std::string::npos ){
122
123 overWriteResult = rIter->second->getResult().get();
124
125
126 continue;
127 }
128 tagType = "ConfParameter--";
129 if ( (stringPos =
tag.find(tagType)) != std::string::npos ){
130
131 stringPos += tagType.length();
133 continue;
134 }
135 tagType = "GThreshold--";
136 if ( (stringPos =
tag.find(tagType)) != std::string::npos ){
137
138 stringPos += tagType.length();
140 continue;
141 }
142 tagType = "RThreshold--";
143 if ( (stringPos =
tag.find(tagType)) != std::string::npos ){
144
145 stringPos += tagType.length();
147 continue;
148 }
149 if (
tag.find(
"ConfParameter[") != std::string::npos ){
150 std::cerr<< "MULTIOPTION PARAMETERS NO LONGER SUPPORTED; IGNORING" << std::endl;
151
152
153
154 }
155 }
156 break;
157 }
158
159
160 for ( std::map<std::string,double>::const_iterator pvIter=paramVecMap.begin(); pvIter!=paramVecMap.end();++pvIter){
161 algConfig.
addParameter( pvIter->first, pvIter->second );
162 }
163
164 delete newresult;
165 newresult =
execute(name,inputs,algConfig);
166
167
168 if ((overWriteResult != 0) && (newresult->getObject() != 0) ) {
169
170
171 overWriteResult->status_ = newresult->status_;
172 overWriteResult->tags_ = newresult->tags_;
173
174 TObject* overWriteObject = overWriteResult->getObject();
175 if ( (!overWriteObject->IsA()->InheritsFrom("TH1")) || (!newresult->getObject()->IsA()->InheritsFrom("TH1")) ) {
176
177 }
178 else {
179
180 TH1* hOverW = static_cast<TH1*> (overWriteObject);
181 TH1* hResult = static_cast<TH1*> (newresult->getObject());
182
183 if (hOverW->GetDimension() == hResult->GetDimension()) {
184 hOverW->Reset();
185 hOverW->Add(hResult);
186 }
187 }
188 }
189
190 return newresult;
191}
dqm_core::Result * execute(const std::string &name, const dqm_core::Result &, const dqm_core::ParametersMap &)