54 const dqm_core::Result & lastResult,
55 const dqm_core::ParametersMap &
map)
58 dqm_core::Result *newresult =
new dqm_core::Result();
60 std::multimap<std::string,TObject*> inputs;
63 dqm_core::Result * overWriteResult = 0;
66 for (dqm_core::ParametersMap::const_iterator iter=
map.begin();iter!=
map.end();++iter){
69 if ( iter->second->getWeight() == 0 ) {
70 ERS_DEBUG(2,
"Skip result (weight 0): "<<iter->first);
73 TObject* inputobject = iter->second->getResult().get()->getObject();
74 if (inputobject == 0) {
77 newresult->status_ = lastResult.status_;
83 for (std::map<std::string,double>::const_iterator tagIter=iter->second->getResult().get()->tags_.begin();
84 tagIter != iter->second->getResult().get()->tags_.end(); ++tagIter ) {
85 std::string tag = tagIter->first;
87 if ( stringPos = tag.find(confParamRoleStr); stringPos != std::string::npos) {
88 stringPos += confParamRoleStr.length();
89 role = tag.substr(stringPos);
94 if(role.size() != 0) {
95 inputs.insert(std::pair<std::string,TObject*>(role,inputobject));
100 if(inputs.size() < 2) {
101 newresult->status_ = lastResult.status_;
108 std::map<std::string,double > paramVecMap;
109 for (dqm_core::ParametersMap::const_reverse_iterator rIter=
map.rbegin() ; rIter!=
map.rend();++rIter) {
110 if( rIter->second->getResult().get()->tags_.empty() ){
113 for (std::map<std::string,double>::const_iterator tagIter=rIter->second->getResult().get()->tags_.begin();
114 tagIter != rIter->second->getResult().get()->tags_.end(); ++tagIter ) {
115 std::string tag = tagIter->first;
117 if ( tag.find(confParamRoleStr) != std::string::npos ){
121 std::string tagType =
"ConfParameter--OverWrite";
122 if ( tag.find(tagType) != std::string::npos ){
124 overWriteResult = rIter->second->getResult().get();
129 tagType =
"ConfParameter--";
130 if ( (stringPos = tag.find(tagType)) != std::string::npos ){
132 stringPos += tagType.length();
133 algConfig.
addParameter( tag.substr(stringPos),tagIter->second );
136 tagType =
"GThreshold--";
137 if ( (stringPos = tag.find(tagType)) != std::string::npos ){
139 stringPos += tagType.length();
143 tagType =
"RThreshold--";
144 if ( (stringPos = tag.find(tagType)) != std::string::npos ){
146 stringPos += tagType.length();
150 if ( tag.find(
"ConfParameter[") != std::string::npos ){
151 std::cerr<<
"MULTIOPTION PARAMETERS NO LONGER SUPPORTED; IGNORING" << std::endl;
161 for ( std::map<std::string,double>::const_iterator pvIter=paramVecMap.begin(); pvIter!=paramVecMap.end();++pvIter){
162 algConfig.
addParameter( pvIter->first, pvIter->second );
166 newresult =
execute(name,inputs,algConfig);
169 if ((overWriteResult != 0) && (newresult->getObject() != 0) ) {
172 overWriteResult->status_ = newresult->status_;
173 overWriteResult->tags_ = newresult->tags_;
175 TObject* overWriteObject = overWriteResult->getObject();
176 if ( (!overWriteObject->IsA()->InheritsFrom(
"TH1")) || (!newresult->getObject()->IsA()->InheritsFrom(
"TH1")) ) {
181 TH1* hOverW =
static_cast<TH1*
> (overWriteObject);
182 TH1* hResult =
static_cast<TH1*
> (newresult->getObject());
184 if (hOverW->GetDimension() == hResult->GetDimension()) {
186 hOverW->Add(hResult);
196 const std::multimap<std::string,TObject*> & inputs,
197 const dqm_core::AlgorithmConfig& config)
200 dqm_core::Result *newresult(0);
202 TH1 * hNumerator = 0;
203 TH1 * hDenominator = 0;
206 TObject * numero = 0;
207 TObject * denomino = 0;
209 if( inputs.size() < 2 ){
210 throw dqm_core::BadConfig( ERS_HERE, name ,
"incorrect number of arguements, number of inputs for division must be at least two");
214 std::multimap<std::string,TObject*>::const_iterator mmItr;
216 mmItr = inputs.find(numeratorStr);
217 if ( mmItr != inputs.end() ) {
218 numero = mmItr->second;
221 throw dqm_core::BadConfig( ERS_HERE, name,
"no object with 'Role--Numerator' was specified.");
223 mmItr = inputs.find(
"Denominator");
224 if ( mmItr != inputs.end() ) {
225 denomino = mmItr->second;
228 throw dqm_core::BadConfig( ERS_HERE, name,
"no object with 'Role--Denominator' was specified.");
231 if( numero->IsA()->InheritsFrom(
"TH1") ){
232 hNumerator =
static_cast<TH1*
> (numero);
236 sprintf(errorStr,
"%s does not inherit from TH1",numero->GetName());
237 throw dqm_core::BadConfig( ERS_HERE, name, errorStr);
239 if( denomino->IsA()->InheritsFrom(
"TH1") ){
240 hDenominator =
static_cast<TH1*
> (denomino);
244 sprintf(errorStr,
"%s does not inherit from TH1",denomino->GetName());
245 throw dqm_core::BadConfig( ERS_HERE, name, errorStr);
261 newresult->object_ = boost::shared_ptr<TObject>(hQuotient);
static dqm_algorithms::BinContentComp myInstance