ATLAS Offline Software
Loading...
Searching...
No Matches
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
7
9
11
12McEventWeight::McEventWeight( const std::string& name )
13 : WeightToolBase( name ),
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
24double 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
32double McEventWeight::computeWeight(const xAOD::EventInfo* evtInfo) const {
33 // don't do anything for data
35 ATH_MSG_DEBUG (" Returning weight=1. for data.");
36 return 1.;
37 }
38
39
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
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}
#define ATH_MSG_ERROR(x)
#define ATH_MSG_VERBOSE(x)
#define ATH_MSG_DEBUG(x)
static Double_t sc
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)
ServiceHandle< StoreGateSvc > & evtStore()
const T * at(size_type n) const
Access an element, as an rvalue.
size_type size() const noexcept
Returns the number of elements in the collection.
std::string m_eventInfoName
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...
unsigned int m_McEventWeightIndex
virtual double getWeight() const override
returns: the value that was calculated from the usual Athena storegate
double computeWeight(const xAOD::EventInfo *) const
McEventWeight(const std::string &name)
Create a proper constructor for Athena.
WeightToolBase(const std::string &name)
Create a proper constructor for Athena.
bool eventType(EventType type) const
Check for one particular bitmask value.
@ IS_SIMULATION
true: simulation, false: data
float mcEventWeight(size_t i=0) const
The weight of one specific MC event used in the simulation.
Class providing the definition of the 4-vector interface.
TruthEventContainer_v1 TruthEventContainer
Declare the latest version of the truth event container.
EventInfo_v1 EventInfo
Definition of the latest event info version.