14 slice->setEt(slice->et()+
m_weight*in_slice->
et());
15 slice->setArea(slice->area() +
m_weight*in_slice->
area());
16 slice->setRho(slice->rho() +
m_weight*in_slice->
rho());
18 unsigned int nord=slice->etCos().size();
19 if(nord!=slice->etSin().size())
throw std::domain_error(
"Input HIEventShape has unequal n-harmonics for Q_x and Q_y");
24 slice->etCos().assign(in_slice->
etCos().begin(),in_slice->
etCos().end());
25 slice->etSin().assign(in_slice->
etSin().begin(),in_slice->
etSin().end());
29 unsigned int in_nord=in_slice->
etCos().size();
31 if(in_nord < nord) nord=in_nord;
35 auto itr=in_slice->
etCos().begin();
36 std::advance(itr,nord);
37 slice->etCos().insert(slice->etCos().end(),itr,in_slice->
etCos().end());
38 itr=in_slice->
etSin().begin();
39 std::advance(itr,nord);
40 slice->etSin().insert(slice->etSin().end(),itr,in_slice->
etSin().end());
43 for(
unsigned int i=0; i<nord; i++)
45 float tmp_cos = slice->etCos().at(i);
46 slice->etCos()[i] = tmp_cos +
m_weight*in_slice->
etCos().at(i);
47 float tmp_sin = slice->etSin().at(i);
48 slice->etSin()[i] = tmp_sin +
m_weight*in_slice->
etSin().at(i);
57 for(
const auto sItr : *in )
59 if(incFunction(sItr)) addFunction(out,sItr);
64 const std::set<unsigned int>& indices,
67 for(
const auto i : indices ) addFunction(out,in->
at(i));
74 for(
const auto sItr : *in )
76 if(incFunction(sItr))
HI::AddES(out,sItr);
83 for(
const auto itr : harmonics)
86 mod+=
sc.apply(es->
etSin().at(itr-1),es->
etCos().at(itr-1));
92 for(
unsigned int i=0; i<in.size(); i++)
95 if(harmonic < 0)
return i;
Scalar phi() const
phi method
const T * at(size_type n) const
Access an element, as an rvalue.
int nCells() const
number of cells that were summed in slice
float area() const
obtain the area of the eta slice
float rho() const
energy density (et/area)
const std::vector< float > & etSin() const
sine (x) part of the harmonic modulation strength
const std::vector< float > & etCos() const
cosine (y) part of the harmonic modulation strength Following convention is used: index 0 is first ha...
float et() const
Transverse energy reconstructed on the slice.
void fillSummary(const xAOD::HIEventShapeContainer *in, xAOD::HIEventShape *out, const std::function< bool(const xAOD::HIEventShape *)> &incFunction, const std::function< void(xAOD::HIEventShape *, const xAOD::HIEventShape *)> &addFunction)
constexpr AddEventShape AddES
int setHarmonics(std::vector< unsigned int > &in)
float getModulation(const xAOD::HIEventShape *es, const std::vector< unsigned int > &harmonics, float phi)
HIEventShapeContainer_v2 HIEventShapeContainer
Define the latest version of the container.
HIEventShape_v2 HIEventShape
Definition of the latest event info version.
Helper to simultaneously calculate sin and cos of the same angle.
Helper to simultaneously calculate sin and cos of the same angle.
void operator()(xAOD::HIEventShape *slice, const xAOD::HIEventShape *in_slice) const