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)
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)
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);
#define JESUNC_ERROR_CODE
#define JESUNC_NO_DEFAULT_CONSTRUCTOR
#define JESUNC_SAFE_DELETE(T)
constexpr int pow(int base, int exp) noexcept
AsgMessaging(const std::string &name)
Constructor with a name.
virtual CompScaleVar::TypeEnum getScaleVar() const
virtual JetTopology::TypeEnum getTopology(const CompScaleVar::TypeEnum scaleVar=CompScaleVar::UNKNOWN) const
virtual double getUncertainty(const xAOD::Jet &jet, const xAOD::EventInfo &eInfo, const CompScaleVar::TypeEnum scaleVar) const
virtual size_t getNumComponents() const
std::vector< UncertaintyGroup * > m_subgroups
const CompCategory::TypeEnum m_category
const CompCorrelation::TypeEnum m_corrType
std::map< CompScaleVar::TypeEnum, std::vector< UncertaintyComponent * > * > m_compScaleMap
virtual ~UncertaintyGroup()
virtual StatusCode addComponent(UncertaintyComponent *component)
virtual bool getValidity(const xAOD::Jet &jet, const xAOD::EventInfo &eInfo, const CompScaleVar::TypeEnum scaleVar) const
virtual bool getValidUncertainty(double &unc, const xAOD::Jet &jet, const xAOD::EventInfo &eInfo, const CompScaleVar::TypeEnum scaleVar) const
virtual TString getName() const
UncertaintyGroup(const GroupHelper &group)
virtual bool isAlwaysZero() const
virtual StatusCode initialize(TFile *histFile)
virtual StatusCode addSubgroup(UncertaintyGroup *subgroup)
virtual std::set< CompScaleVar::TypeEnum > getScaleVars() const
std::vector< UncertaintyComponent * > m_components
bool operator==(const UncertaintyComponent &componentA, const UncertaintyComponent &componentB)
bool operator<(const UncertaintyComponent &componentA, const UncertaintyComponent &componentB)
Jet_v1 Jet
Definition of the current "jet version".
EventInfo_v1 EventInfo
Definition of the latest event info version.