ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
PhysicsAnalysis
AnalysisCommon
ReweightUtils
Root
McEventWeight.cxx
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
3
*/
4
5
// ReweightUtils includes
6
#include "
ReweightUtils/McEventWeight.h
"
7
8
#include "
xAODParticleEvent/CompositeParticle.h
"
9
10
#include "
xAODTruth/TruthEventContainer.h
"
11
12
McEventWeight::McEventWeight
(
const
std::string& name )
13
:
WeightToolBase
( name ),
14
m_McEventWeightIndex
(0),
15
m_eventInfoName
(
"EventInfo"
) {
16
declareProperty
(
"McEventWeightIndex"
,
m_McEventWeightIndex
= 0);
17
declareProperty
(
"EventInfoName"
,
m_eventInfoName
=
"EventInfo"
);
18
declareProperty
(
"UseTruthEvents"
,
m_useTruthEvents
=
false
,
"To solve ATLASSIM-2989 we have to switch to using TruthEvents for weights"
);
19
}
20
21
22
// returns: the value that was calculated from the xAOD::IParticle composite built event
23
// This is the implementation of the interface
24
double
McEventWeight::evaluate
(
const
xAOD::IParticle
*
/*part*/
)
const
25
{
26
ATH_MSG_DEBUG
(
"Evaluating "
<< name() <<
"..."
);
27
28
// Get the proper weight (from EventInfo)
29
return
this->
getWeight
();
30
}
31
32
double
McEventWeight::computeWeight
(
const
xAOD::EventInfo
* evtInfo)
const
{
33
// don't do anything for data
34
if
(!evtInfo->
eventType
(
xAOD::EventInfo::IS_SIMULATION
)){
35
ATH_MSG_DEBUG
(
" Returning weight=1. for data."
);
36
return
1.;
37
}
38
39
40
if
(
m_useTruthEvents
) {
41
//access TruthEvents container instead
42
const
xAOD::TruthEventContainer
* te = 0;
43
if
(
evtStore
()->retrieve( te,
"TruthEvents"
).isFailure() ) {
44
ATH_MSG_ERROR
(
"TruthEvents could not be retrieved. Throwing exception"
);
45
throw
std::runtime_error(
"McEventWeight ASG Tool: TruthEvents could not be retrieved"
);
46
}
47
if
( te->
size
() == 0 ) {
48
ATH_MSG_ERROR
(
"TruthEvents has no events in it. Throwing exception"
);
49
throw
std::runtime_error(
"McEventWeight ASG Tool: TruthEvents has no events in it"
);
50
}
51
if
( te->
at
(0)->weights().size() <=
m_McEventWeightIndex
) {
52
ATH_MSG_ERROR
(
"TruthEvents first event has "
<< te->
at
(0)->weights().size() <<
" weights, but "
53
<<
m_McEventWeightIndex
<<
" weight requested. Throwing exception"
);
54
throw
std::runtime_error(
"McEventWeight ASG Tool: TruthEvents has too few weights."
);
55
}
56
const
double
weight = te->
at
(0)->weights()[
m_McEventWeightIndex
];
57
ATH_MSG_DEBUG
(
"Got weight in McEventWeight::computeWeight() = "
<< weight <<
"."
);
58
return
weight;
59
}
60
61
const
double
weight = evtInfo->
mcEventWeight
(
m_McEventWeightIndex
);
62
ATH_MSG_DEBUG
(
"Got weight in McEventWeight::computeWeight() = "
<< weight <<
"."
);
63
return
weight;
64
}
65
66
double
McEventWeight::getWeight
()
const
{
67
//Retrieveing eventInfo
68
const
xAOD::EventInfo
* evtInfo;
69
StatusCode
sc
=
evtStore
()->retrieve( evtInfo,
m_eventInfoName
);
70
if
(
sc
.isFailure() || !evtInfo) {
71
ATH_MSG_ERROR
(
" EventInfo could not be retrieved !!"
);
72
return
0.;
73
}
74
75
double
weight = this->
computeWeight
(evtInfo);
76
ATH_MSG_VERBOSE
(
" "
<< name() <<
" returning weight= "
<< weight <<
"."
);
77
return
weight;
78
}
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition
AthMsgStreamMacros.h:33
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition
AthMsgStreamMacros.h:28
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition
AthMsgStreamMacros.h:29
CompositeParticle.h
sc
static Double_t sc
Definition
LArPhysWaveHECTool.cxx:37
McEventWeight.h
TruthEventContainer.h
AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)
Definition
AthCommonDataStore.h:145
AthCommonDataStore< AthCommonMsg< AlgTool > >::evtStore
ServiceHandle< StoreGateSvc > & evtStore()
Definition
AthCommonDataStore.h:85
DataVector::at
const T * at(size_type n) const
Access an element, as an rvalue.
DataVector::size
size_type size() const noexcept
Returns the number of elements in the collection.
McEventWeight::m_eventInfoName
std::string m_eventInfoName
Definition
McEventWeight.h:45
McEventWeight::evaluate
virtual double evaluate(const xAOD::IParticle *part) const override
returns: the value that was calculated from the xAOD::IParticle (composite built event object for ins...
Definition
McEventWeight.cxx:24
McEventWeight::m_McEventWeightIndex
unsigned int m_McEventWeightIndex
Definition
McEventWeight.h:43
McEventWeight::getWeight
virtual double getWeight() const override
returns: the value that was calculated from the usual Athena storegate
Definition
McEventWeight.cxx:66
McEventWeight::computeWeight
double computeWeight(const xAOD::EventInfo *) const
Definition
McEventWeight.cxx:32
McEventWeight::McEventWeight
McEventWeight(const std::string &name)
Create a proper constructor for Athena.
Definition
McEventWeight.cxx:12
McEventWeight::m_useTruthEvents
bool m_useTruthEvents
Definition
McEventWeight.h:46
WeightToolBase::WeightToolBase
WeightToolBase(const std::string &name)
Create a proper constructor for Athena.
Definition
WeightToolBase.cxx:14
xAOD::EventInfo_v1::eventType
bool eventType(EventType type) const
Check for one particular bitmask value.
xAOD::EventInfo_v1::IS_SIMULATION
@ IS_SIMULATION
true: simulation, false: data
Definition
EventInfo_v1.h:151
xAOD::EventInfo_v1::mcEventWeight
float mcEventWeight(size_t i=0) const
The weight of one specific MC event used in the simulation.
Definition
EventInfo_v1.cxx:203
xAOD::IParticle
Class providing the definition of the 4-vector interface.
Definition
Event/xAOD/xAODBase/xAODBase/IParticle.h:41
xAOD::TruthEventContainer
TruthEventContainer_v1 TruthEventContainer
Declare the latest version of the truth event container.
Definition
TruthEventContainer.h:18
xAOD::EventInfo
EventInfo_v1 EventInfo
Definition of the latest event info version.
Definition
IEventInfoCnvTool.h:16
Generated on
for ATLAS Offline Software by
1.17.0