32 , m_name(
name.c_str())
36 , m_category(CompCategory::UNKNOWN)
37 , m_corrType(CompCorrelation::UNKNOWN)
38 , m_isReducible(false)
51 , m_groupNum(
group.groupNum)
52 , m_subgroupNum(
group.subgroupNum)
54 , m_corrType(
group.correlation)
55 , m_isReducible(
group.reducible)
69 :
asg::AsgMessaging(Form(
"%s_copy",toCopy.m_name.
Data()))
70 , m_isInit(toCopy.m_isInit)
71 , m_name(toCopy.m_name)
72 , m_desc(toCopy.m_desc)
73 , m_groupNum(toCopy.m_groupNum)
74 , m_subgroupNum(toCopy.m_subgroupNum)
75 , m_category(toCopy.m_category)
76 , m_corrType(toCopy.m_corrType)
77 , m_isReducible(toCopy.m_isReducible)
82 for (
size_t iComp = 0; iComp < toCopy.
m_components.size(); ++iComp)
91 std::map<CompScaleVar::TypeEnum,std::vector<UncertaintyComponent*>*>
::iterator iter;
96 for (
size_t iComp = 0; iComp <
m_components.size(); ++iComp)
100 for (
size_t iSubGroup = 0; iSubGroup <
m_subgroups.size(); ++iSubGroup)
110 return StatusCode::FAILURE;
117 return StatusCode::FAILURE;
126 iter->second->push_back(component);
129 std::vector<UncertaintyComponent*>* newScaleVarVec =
new std::vector<UncertaintyComponent*>();
130 newScaleVarVec->push_back(component);
134 return StatusCode::SUCCESS;
142 return StatusCode::FAILURE;
149 return StatusCode::FAILURE;
155 return StatusCode::SUCCESS;
164 return StatusCode::FAILURE;
171 return StatusCode::FAILURE;
175 for (
size_t iSubgroup = 0; iSubgroup <
m_subgroups.size(); ++iSubgroup)
176 if(
m_subgroups.at(iSubgroup)->initialize(histFile).isFailure())
177 return StatusCode::FAILURE;
183 std::set<CompScaleVar::TypeEnum> vars;
184 for (
size_t iComp = 0; iComp <
m_components.size(); ++iComp)
188 ATH_MSG_ERROR(
"Correlation type is set to UNKNOWN for multiple components scaling the same variable: " <<
getName().
Data());
189 return StatusCode::FAILURE;
193 std::set<CompScaleVar::TypeEnum> groupVars;
194 size_t numSubComps = 0;
195 for (
size_t iSubgroup = 0; iSubgroup <
m_subgroups.size(); ++iSubgroup)
197 const std::set<CompScaleVar::TypeEnum> subVars =
m_subgroups.at(iSubgroup)->getScaleVars();
198 groupVars.insert(subVars.begin(),subVars.end());
199 numSubComps +=
m_subgroups.at(iSubgroup)->getNumComponents();
201 if (groupVars.size() != numSubComps)
203 ATH_MSG_ERROR(
"Correlation type is set to UNKNOWN for multiple subgroups scaling the same variable: " <<
getName().
Data());
204 return StatusCode::FAILURE;
208 for (std::set<CompScaleVar::TypeEnum>::const_iterator iter = vars.begin(); iter != vars.end(); ++iter)
210 if (groupVars.count(*iter))
212 ATH_MSG_ERROR(
"Correlation type is set to UNKNOWN for a component and subgroup scaling the same variable: " <<
getName().
Data());
213 return StatusCode::FAILURE;
220 for (
size_t iComp = 0; iComp <
m_components.size(); ++iComp)
221 if (
m_components.at(iComp)->initialize(histFile).isFailure())
222 return StatusCode::FAILURE;
228 return StatusCode::SUCCESS;
241 for (
size_t iSubgroup = 0; iSubgroup <
m_subgroups.size(); ++iSubgroup)
242 numComps +=
m_subgroups.at(iSubgroup)->getNumComponents();
249 std::set<CompScaleVar::TypeEnum> vars;
256 for (
size_t iComp = 0; iComp <
m_components.size(); ++iComp)
259 for (
size_t iSubgroup = 0; iSubgroup <
m_subgroups.size(); ++iSubgroup)
261 const std::set<CompScaleVar::TypeEnum> subVars =
m_subgroups.at(iSubgroup)->getScaleVars();
262 vars.insert(subVars.begin(),subVars.end());
293 result = subgroup->getTopology();
294 else if (
result != subgroup->getTopology(scaleVar))
311 result = component->getTopology();
312 else if (
result != component->getTopology())
337 for (
size_t iComp = 0; iComp <
m_components.size(); ++iComp)
343 for (
size_t iSubgroup = 0; iSubgroup <
m_subgroups.size(); ++iSubgroup)
362 std::map<CompScaleVar::TypeEnum,std::vector<UncertaintyComponent*>*>::const_iterator iter =
m_compScaleMap.find(scaleVar);
365 const std::vector<UncertaintyComponent*>* relevantComponents = iter->second;
373 for (
size_t iComp = 0; iComp < relevantComponents->size(); ++iComp)
374 if (!relevantComponents->at(iComp)->getValidity(
jet,eInfo))
378 for (
size_t iSubgroup = 0; iSubgroup <
m_subgroups.size(); ++iSubgroup)
389 std::map<CompScaleVar::TypeEnum,std::vector<UncertaintyComponent*>*>::const_iterator iter =
m_compScaleMap.find(scaleVar);
390 const std::vector<UncertaintyComponent*>* relevantComponents = (iter !=
m_compScaleMap.end()) ? iter->second : NULL;
393 std::vector<UncertaintyGroup*> relevantGroups;
394 for (
size_t iSubgroup = 0; iSubgroup <
m_subgroups.size(); ++iSubgroup)
395 if (
m_subgroups.at(iSubgroup)->getScaleVars().count(scaleVar))
396 relevantGroups.push_back(
m_subgroups.at(iSubgroup));
399 if ((!relevantComponents || relevantComponents->empty()) && relevantGroups.empty())
return 0;
402 if ((relevantComponents && relevantComponents->size() == 1) && relevantGroups.empty())
403 return relevantComponents->at(0)->getUncertainty(
jet,eInfo);
406 if (relevantGroups.size() == 1 && (!relevantComponents || relevantComponents->empty()))
407 return relevantGroups.at(0)->getUncertainty(
jet,eInfo,scaleVar);
415 if (relevantComponents)
416 for (
size_t iComp = 0; iComp < relevantComponents->size(); ++iComp)
417 unc +=
pow(relevantComponents->at(iComp)->getUncertainty(
jet,eInfo),2);
418 for (
size_t iGroup = 0; iGroup < relevantGroups.size(); ++iGroup)
419 unc +=
pow(relevantGroups.at(iGroup)->getUncertainty(
jet,eInfo,scaleVar),2);
424 if (relevantComponents)
425 for (
size_t iComp = 0; iComp < relevantComponents->size(); ++iComp)
426 unc += relevantComponents->at(iComp)->getUncertainty(
jet,eInfo);
427 for (
size_t iGroup = 0; iGroup < relevantGroups.size(); ++iGroup)
428 unc += relevantGroups.at(iGroup)->getUncertainty(
jet,eInfo,scaleVar);