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)
 
   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);