4 #include "Rivet/Event.hh" 5 #include "Rivet/Projections/CentralityProjection.hh" 6 #include "Rivet/ProjectionApplier.hh" 28 : _ana(ana), _projName(projName) {}
41 static bool inRange(
double x, pair<float,float> range) {
42 return x >= range.first && ( x < range.second || ( x == 100.0 && x == range.second ) );
48 _projName = other._projName;
54 return ( _ana == other._ana &&
55 _projName == other._projName &&
56 _cent == other._cent );
78 vector<int> _activeBins;
82 vector<pair<float, float> > _cent;
97 typedef rivet_shared_ptr<Wrapper<T>>
TPtr;
122 void add(TPtr ao, CounterPtr cnt,
123 pair<float,float> cent = {0.0, 100.0} ) {
124 _cent.push_back(cent);
125 _histos.push_back( { ao, cnt } );
135 if ( tv.size() != _cent.size() )
return false;
137 _histos.push_back( { t, CounterPtr() } );
146 for (
const auto bin : _activeBins)
147 _histos[bin].second->fill();
148 return !_activeBins.empty();
156 for (
const auto &hist : _histos)
157 if ( hist.second->numEntries() > 0 && hist.first->numEntries() > 0)
158 hist.first->scaleW(1./hist.second->val());
163 for (
const auto hist : _histos)
164 hist.first->scaleW(scale);
168 void exec(
function<
void(T&)> f) {
for (
auto hist : _histos) f(hist); }
176 const vector<pair<TPtr, CounterPtr > > &
188 vector<pair<TPtr, CounterPtr > > _histos;
228 template<
typename... Args>
230 for (
const auto bin : _activeBins) {
231 _histos[bin].first->fill(args...);
237 const int nCent = _histos.size();
238 for (
int iCent = 0; iCent < nCent; ++iCent) {
239 *_histos[iCent].first -= *rhs._histos[iCent].first;
245 const int nCent = _histos.size();
246 for (
int iCent = 0; iCent < nCent; ++iCent) {
247 *_histos[iCent].first += *rhs._histos[iCent].first;
302 template<
typename... Args>
304 for (
const auto bin : _activeBins) {
305 _histos[bin].first->fill(bin, args...);
311 const int nCent = _histos.size();
312 for (
int iCent = 0; iCent < nCent; ++iCent) {
313 *_histos[iCent].first -= *rhs._histos[iCent].first;
319 const int nCent = this->_histos.size();
320 for (
int iCent = 0; iCent < nCent; ++iCent) {
321 *_histos[iCent].first += *rhs._histos[iCent].first;
340 template <
typename T>
343 typedef typename ReferenceTraits<T>::RefT ScatT;
345 vector<typename ScatT::Ptr> scatters;
348 scatters.push_back(make_shared<ScatT>(divide(*numer.
analysisObjects()[i].first,
350 ret.
add(numer, scatters);
354 template <
typename T>
357 const Percentile<
typename ReferenceTraits<T>::RefT> denom) {
358 typedef typename ReferenceTraits<T>::RefT ScatT;
360 vector<typename ScatT::Ptr> scatters;
363 scatters.push_back(make_shared<ScatT>(divide(*numer.
analysisObjects()[i].first,
365 ret.
add(numer, scatters);
369 template <
typename T>
371 divide(
const Percentile<
typename ReferenceTraits<T>::RefT> numer,
373 typedef typename ReferenceTraits<T>::RefT ScatT;
375 vector<typename ScatT::Ptr> scatters;
378 scatters.push_back(make_shared<ScatT>(divide(*numer.
analysisObjects()[i].first,
380 ret.add(numer, scatters);
384 template <
typename T>
387 vector<typename T::Ptr> aos;
396 template <
typename T>
399 const Percentile<
typename ReferenceTraits<T>::RefT> pctlb) {
400 typedef typename ReferenceTraits<T>::RefT ScatT;
402 vector<typename ScatT::Ptr> scatters;
405 scatters.push_back(make_shared<ScatT>(add(*pctla.
analysisObjects()[i].first,
407 ret.
add(pctla, scatters);
411 template <
typename T>
413 add(
const Percentile<
typename ReferenceTraits<T>::RefT> pctla,
415 typedef typename ReferenceTraits<T>::RefT ScatT;
417 vector<typename ScatT::Ptr> scatters;
420 scatters.push_back(make_shared<ScatT>(add(*pctla.
analysisObjects()[i].first,
422 ret.
add(pctla, scatters);
426 template <
typename T>
429 vector<typename T::Ptr> aos;
432 aos.push_back(make_shared<T>(subtract(*pctla.
analysisObjects()[i].first,
438 template <
typename T>
441 const Percentile<
typename ReferenceTraits<T>::RefT> pctlb) {
442 typedef typename ReferenceTraits<T>::RefT ScatT;
444 vector<typename ScatT::Ptr> scatters;
447 scatters.push_back(make_shared<ScatT>(subtract(*pctla.
analysisObjects()[i].first,
449 ret.
add(pctla, scatters);
453 template <
typename T>
455 subtract(
const Percentile<
typename ReferenceTraits<T>::RefT> pctla,
457 typedef typename ReferenceTraits<T>::RefT ScatT;
459 vector<typename ScatT::Ptr> scatters;
462 scatters.push_back(make_shared<ScatT>(subtract(*pctla.
analysisObjects()[i].first,
464 ret.
add(pctla, scatters);
468 template <
typename T>
471 const Percentile<
typename ReferenceTraits<T>::RefT> pctlb) {
472 typedef typename ReferenceTraits<T>::RefT ScatT;
474 vector<typename ScatT::Ptr> scatters;
477 scatters.push_back(make_shared<ScatT>(multiply(*pctla.
analysisObjects()[i].first,
479 ret.
add(pctla, scatters);
483 template <
typename T>
485 multiply(
const Percentile<
typename ReferenceTraits<T>::RefT> pctla,
487 typedef typename ReferenceTraits<T>::RefT ScatT;
489 vector<typename ScatT::Ptr> scatters;
492 scatters.push_back(make_shared<ScatT>(multiply(*pctla.
analysisObjects()[i].first,
494 ret.
add(pctla, scatters);
500 template <
typename T>
503 typedef typename ReferenceTraits<T>::RefT ScatT;
505 vector<typename ScatT::Ptr> scatters;
508 scatters.push_back(make_shared<ScatT>(divide(*numer.
analysisObjects()[i].first,
510 ret.
add(numer, scatters);
514 template <
typename T>
518 typedef typename ReferenceTraits<T>::RefT ScatT;
520 vector<typename ScatT::Ptr> scatters;
523 scatters.push_back(make_shared<ScatT>(divide(*numer.
analysisObjects()[i].first,
525 ret.
add(numer, scatters);
529 template <
typename T>
533 typedef typename ReferenceTraits<T>::RefT ScatT;
535 vector<typename ScatT::Ptr> scatters;
538 scatters.push_back(make_shared<ScatT>(divide(*numer.
analysisObjects()[i].first,
540 ret.add(numer, scatters);
544 template <
typename T>
547 vector<typename T::Ptr> aos;
556 template <
typename T>
560 typedef typename ReferenceTraits<T>::RefT ScatT;
562 vector<typename ScatT::Ptr> scatters;
565 scatters.push_back(make_shared<ScatT>(add(*pctla.
analysisObjects()[i].first,
567 ret.
add(pctla, scatters);
571 template <
typename T>
575 typedef typename ReferenceTraits<T>::RefT ScatT;
577 vector<typename ScatT::Ptr> scatters;
580 scatters.push_back(make_shared<ScatT>(add(*pctla.
analysisObjects()[i].first,
582 ret.
add(pctla, scatters);
586 template <
typename T>
589 vector<typename T::Ptr> aos;
592 aos.push_back(make_shared<T>(subtract(*pctla.
analysisObjects()[i].first,
598 template <
typename T>
602 typedef typename ReferenceTraits<T>::RefT ScatT;
604 vector<typename ScatT::Ptr> scatters;
607 scatters.push_back(make_shared<ScatT>(subtract(*pctla.
analysisObjects()[i].first,
609 ret.
add(pctla, scatters);
613 template <
typename T>
615 subtract(
const PercentileXaxis<
typename ReferenceTraits<T>::RefT> pctla,
617 typedef typename ReferenceTraits<T>::RefT ScatT;
619 vector<typename ScatT::Ptr> scatters;
622 scatters.push_back(make_shared<ScatT>(subtract(*pctla.
analysisObjects()[i].first,
624 ret.
add(pctla, scatters);
628 template <
typename T>
632 typedef typename ReferenceTraits<T>::RefT ScatT;
634 vector<typename ScatT::Ptr> scatters;
637 scatters.push_back(make_shared<ScatT>(multiply(*pctla.
analysisObjects()[i].first,
639 ret.
add(pctla, scatters);
643 template <
typename T>
645 multiply(
const PercentileXaxis<
typename ReferenceTraits<T>::RefT> pctla,
647 typedef typename ReferenceTraits<T>::RefT ScatT;
649 vector<typename ScatT::Ptr> scatters;
652 scatters.push_back(make_shared<ScatT>(multiply(*pctla.
analysisObjects()[i].first,
654 ret.
add(pctla, scatters);
658 template <
typename T>
661 return add(pctla, pctlb);
664 template <
typename T>
667 return subtract(pctla, pctlb);
670 template <
typename T>
673 return divide(numer, denom);
676 template <
typename T>
679 return add(pctla, pctlb);
682 template <
typename T>
685 return subtract(pctla, pctlb);
688 template <
typename T>
691 return divide(numer, denom);
Definition: MC_Cent_pPb.hh:10
Percentile< T > & operator-=(const Percentile< T > &rhs)
Subtract the contents fro another Pecentile.
Definition: Percentile.hh:236
~Percentile()
Empty destructor.
Definition: Percentile.hh:218
void fill(Args... args)
Definition: Percentile.hh:303
bool add(const PercentileBase &other, const vector< TPtr > &tv)
Copy the information from an other Percentile object.
Definition: Percentile.hh:133
Percentile(Analysis *ana, string projName)
Main constructor.
Definition: Percentile.hh:211
void exec(function< void(T &)> f)
Execute a function for each AnalysisObject.
Definition: Percentile.hh:168
void copyFrom(const PercentileBase &other)
Copy information from other PercentileBase.
Definition: Percentile.hh:46
void scale(float scale)
Simple scaling of each AnalysisObject.
Definition: Percentile.hh:162
rivet_shared_ptr< Wrapper< T > > TPtr
Convenient typedef.
Definition: Percentile.hh:97
static bool inRange(double x, pair< float, float > range)
Helper function to check if x is within range.
Definition: Percentile.hh:41
PercentileTBase(Analysis *ana, string projName)
Main constructor.
Definition: Percentile.hh:104
void add(TPtr ao, CounterPtr cnt, pair< float, float > cent={0.0, 100.0})
Add a new percentile bin.
Definition: Percentile.hh:122
The Percentile class for centrality binning.
Definition: Percentile.hh:203
const vector< pair< float, float > > & centralities() const
return the list of centrality bins.
Definition: Percentile.hh:63
PercentileBase(Analysis *ana, string projName)
Constructor.
Definition: Percentile.hh:27
Percentile()
Default constructor.
Definition: Percentile.hh:215
~PercentileXaxis()
Empty destructor.
Definition: Percentile.hh:292
PercentileTBase is the base class of all Percentile classes.
Definition: Percentile.hh:93
This is the base class of all analysis classes in Rivet.
Definition: Analysis.hh:64
Representation of a HepMC event, and enabler of Projection caching.
Definition: Event.hh:22
PercentileBase()
Default constructor.
Definition: Percentile.hh:31
The PercentileXaxis class for centrality binning.
Definition: Percentile.hh:277
Percentile< T > & operator+=(const Percentile< T > &rhs)
Add the contents fro another Pecentile.
Definition: Percentile.hh:244
const vector< pair< TPtr, CounterPtr > > & analysisObjects() const
Access the underlyng AnalysisObjects.
Definition: Percentile.hh:177
~PercentileTBase()
Empty destructor.
Definition: Percentile.hh:111
bool compatible(const PercentileBase &other) const
check if other PercentileBase is compatible with this.
Definition: Percentile.hh:53
PercentileXaxis< T > & operator-=(const PercentileXaxis< T > &rhs)
Subtract the contents from another PercentileXaxis.
Definition: Percentile.hh:310
PercentileXaxis(Analysis *ana, string projName)
Main constructor.
Definition: Percentile.hh:285
Percentile< T > * operator->()
Make this object look like a pointer.
Definition: Percentile.hh:253
PercentileXaxis()
Default constructor.
Definition: Percentile.hh:289
void normalizePerEvent()
Normalize each AnalysisObject.
Definition: Percentile.hh:155
PercentileTBase()
Default constructor.
Definition: Percentile.hh:108
PercentileXaxis< T > * operator->()
Make this object look like a pointer.
Definition: Percentile.hh:326
void fill(Args... args)
Definition: Percentile.hh:229
PercentileXaxis< T > & operator+=(const PercentileXaxis< T > &rhs)
Add the contents from another PercentileXaxis.
Definition: Percentile.hh:318
PercentileBase is the base class of all Percentile classes.
Definition: Percentile.hh:19
bool init(const Event &event)
Initialize for a new event. Select which AnalysisObjects should be filled for this event...
Definition: Percentile.hh:144
void selectBins(const Event &)
Initialize the PercentileBase for a new event.