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 ) );
47 _projName = other._projName;
53 return ( _ana == other._ana &&
54 _projName == other._projName &&
55 _cent == other._cent );
76 vector<int> _activeBins;
80 vector<pair<float, float> > _cent;
94 typedef typename T::Ptr
TPtr;
119 void add(shared_ptr<T> ao, CounterPtr cnt,
120 pair<float,float> cent = {0.0, 100.0} ) {
121 _cent.push_back(cent);
122 _histos.push_back( { ao, cnt } );
132 if ( tv.size() != _cent.size() )
return false;
134 _histos.push_back( { t, make_shared<Counter>() } );
143 for (
const auto bin : _activeBins)
144 _histos[bin].second->fill(event.
weight());
145 return !_activeBins.empty();
153 for (
const auto &hist : _histos)
154 if ( hist.second->numEntries() > 0 && hist.first->numEntries() > 0)
155 hist.first->scaleW(1./hist.second->val());
160 for (
const auto hist : _histos)
161 hist.first->scaleW(scale);
165 void exec(
function<
void(T&)> f) {
for (
auto hist : _histos) f(hist); }
173 const vector<pair<shared_ptr<T>, shared_ptr<Counter> > > &
184 vector<pair<shared_ptr<T>, shared_ptr<Counter> > > _histos;
223 template<
typename... Args>
225 for (
const auto bin : _activeBins) {
226 _histos[bin].first->fill(args...);
232 const int nCent = _histos.size();
233 for (
int iCent = 0; iCent < nCent; ++iCent) {
234 *_histos[iCent].first -= *rhs._histos[iCent].first;
240 const int nCent = _histos.size();
241 for (
int iCent = 0; iCent < nCent; ++iCent) {
242 *_histos[iCent].first += *rhs._histos[iCent].first;
296 template<
typename... Args>
298 for (
const auto bin : _activeBins) {
299 _histos[bin].first->fill(bin, args...);
305 const int nCent = _histos.size();
306 for (
int iCent = 0; iCent < nCent; ++iCent) {
307 *_histos[iCent].first -= *rhs._histos[iCent].first;
313 const int nCent = this->_histos.size();
314 for (
int iCent = 0; iCent < nCent; ++iCent) {
315 *_histos[iCent].first += *rhs._histos[iCent].first;
331 template <
typename T>
336 vector<typename ScatT::Ptr> scatters;
339 scatters.push_back(make_shared<ScatT>(divide(*numer.
analysisObjects()[i].first,
341 ret.
add(numer, scatters);
345 template <
typename T>
351 vector<typename ScatT::Ptr> scatters;
354 scatters.push_back(make_shared<ScatT>(divide(*numer.
analysisObjects()[i].first,
356 ret.
add(numer, scatters);
360 template <
typename T>
366 vector<typename ScatT::Ptr> scatters;
369 scatters.push_back(make_shared<ScatT>(divide(*numer.
analysisObjects()[i].first,
371 ret.
add(numer, scatters);
375 template <
typename T>
378 vector<typename T::Ptr> aos;
387 template <
typename T>
393 vector<typename ScatT::Ptr> scatters;
396 scatters.push_back(make_shared<ScatT>(add(*pctla.
analysisObjects()[i].first,
398 ret.
add(pctla, scatters);
402 template <
typename T>
408 vector<typename ScatT::Ptr> scatters;
411 scatters.push_back(make_shared<ScatT>(add(*pctla.
analysisObjects()[i].first,
413 ret.
add(pctla, scatters);
417 template <
typename T>
420 vector<typename T::Ptr> aos;
423 aos.push_back(make_shared<T>(subtract(*pctla.
analysisObjects()[i].first,
429 template <
typename T>
435 vector<typename ScatT::Ptr> scatters;
438 scatters.push_back(make_shared<ScatT>(subtract(*pctla.
analysisObjects()[i].first,
440 ret.
add(pctla, scatters);
444 template <
typename T>
450 vector<typename ScatT::Ptr> scatters;
453 scatters.push_back(make_shared<ScatT>(subtract(*pctla.
analysisObjects()[i].first,
455 ret.
add(pctla, scatters);
459 template <
typename T>
465 vector<typename ScatT::Ptr> scatters;
468 scatters.push_back(make_shared<ScatT>(multiply(*pctla.
analysisObjects()[i].first,
470 ret.
add(pctla, scatters);
474 template <
typename T>
480 vector<typename ScatT::Ptr> scatters;
483 scatters.push_back(make_shared<ScatT>(multiply(*pctla.
analysisObjects()[i].first,
485 ret.
add(pctla, scatters);
492 template <
typename T>
497 vector<typename ScatT::Ptr> scatters;
500 scatters.push_back(make_shared<ScatT>(divide(*numer.
analysisObjects()[i].first,
502 ret.
add(numer, scatters);
506 template <
typename T>
512 vector<typename ScatT::Ptr> scatters;
515 scatters.push_back(make_shared<ScatT>(divide(*numer.
analysisObjects()[i].first,
517 ret.
add(numer, scatters);
521 template <
typename T>
527 vector<typename ScatT::Ptr> scatters;
530 scatters.push_back(make_shared<ScatT>(divide(*numer.
analysisObjects()[i].first,
532 ret.
add(numer, scatters);
536 template <
typename T>
539 vector<typename T::Ptr> aos;
548 template <
typename T>
554 vector<typename ScatT::Ptr> scatters;
557 scatters.push_back(make_shared<ScatT>(add(*pctla.
analysisObjects()[i].first,
559 ret.
add(pctla, scatters);
563 template <
typename T>
569 vector<typename ScatT::Ptr> scatters;
572 scatters.push_back(make_shared<ScatT>(add(*pctla.
analysisObjects()[i].first,
574 ret.
add(pctla, scatters);
578 template <
typename T>
581 vector<typename T::Ptr> aos;
584 aos.push_back(make_shared<T>(subtract(*pctla.
analysisObjects()[i].first,
590 template <
typename T>
596 vector<typename ScatT::Ptr> scatters;
599 scatters.push_back(make_shared<ScatT>(subtract(*pctla.
analysisObjects()[i].first,
601 ret.
add(pctla, scatters);
605 template <
typename T>
611 vector<typename ScatT::Ptr> scatters;
614 scatters.push_back(make_shared<ScatT>(subtract(*pctla.
analysisObjects()[i].first,
616 ret.
add(pctla, scatters);
620 template <
typename T>
626 vector<typename ScatT::Ptr> scatters;
629 scatters.push_back(make_shared<ScatT>(multiply(*pctla.
analysisObjects()[i].first,
631 ret.
add(pctla, scatters);
635 template <
typename T>
641 vector<typename ScatT::Ptr> scatters;
644 scatters.push_back(make_shared<ScatT>(multiply(*pctla.
analysisObjects()[i].first,
646 ret.
add(pctla, scatters);
650 template <
typename T>
653 return add(pctla, pctlb);
656 template <
typename T>
659 return subtract(pctla, pctlb);
662 template <
typename T>
665 return divide(numer, denom);
668 template <
typename T>
671 return add(pctla, pctlb);
674 template <
typename T>
677 return subtract(pctla, pctlb);
680 template <
typename T>
683 return divide(numer, denom);
Definition: ALICE_2010_I880049.cc:13
Percentile< T > & operator-=(const Percentile< T > &rhs)
Subtract the contents fro another Pecentile.
Definition: Percentile.hh:231
~Percentile()
Empty destructor.
Definition: Percentile.hh:213
void fill(Args... args)
Definition: Percentile.hh:297
bool add(const PercentileBase &other, const vector< TPtr > &tv)
Copy the information from an other Percentile object.
Definition: Percentile.hh:130
Percentile(Analysis *ana, string projName)
the main constructor
Definition: Percentile.hh:206
void exec(function< void(T &)> f)
Execute a function for each AnalysisObject.
Definition: Percentile.hh:165
void copyFrom(const PercentileBase &other)
Copy information from other PercentileBase.
Definition: Percentile.hh:45
void scale(float scale)
Simple scaling of each AnalysisObject.
Definition: Percentile.hh:159
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)
the main constructor
Definition: Percentile.hh:101
void add(shared_ptr< T > ao, CounterPtr cnt, pair< float, float > cent={0.0, 100.0})
add a new percentile bin.
Definition: Percentile.hh:119
Definition: RivetYODA.hh:54
The Percentile class for centrality binning.
Definition: Percentile.hh:197
const vector< pair< float, float > > & centralities() const
Definition: Percentile.hh:62
PercentileBase(Analysis *ana, string projName)
the main constructor
Definition: Percentile.hh:27
Percentile()
Default constructor.
Definition: Percentile.hh:210
~PercentileXaxis()
Empty destructor.
Definition: Percentile.hh:286
PercentileTBase is the base class of all Percentile classes.
Definition: Percentile.hh:89
This is the base class of all analysis classes in Rivet.
Definition: Analysis.hh:52
T::Ptr TPtr
Convenient typedef.
Definition: Percentile.hh:94
PercentileBase()
Default constructor.
Definition: Percentile.hh:31
The PercentileXaxis class for centrality binning.
Definition: Percentile.hh:270
Percentile< T > & operator+=(const Percentile< T > &rhs)
Add the contents fro another Pecentile.
Definition: Percentile.hh:239
double weight() const
The generation weight associated with the event.
Definition: Event.cc:11
~PercentileTBase()
Empty destructor.
Definition: Percentile.hh:108
bool compatible(const PercentileBase &other) const
check if other PercentileBase is compatible with this.
Definition: Percentile.hh:52
PercentileXaxis< T > & operator-=(const PercentileXaxis< T > &rhs)
Subtract the contents fro another PecentileXaxis.
Definition: Percentile.hh:304
PercentileXaxis(Analysis *ana, string projName)
the main constructor
Definition: Percentile.hh:279
Percentile< T > * operator->()
Make this object look like a pointer.
Definition: Percentile.hh:248
PercentileXaxis()
Default constructor.
Definition: Percentile.hh:283
void normalizePerEvent()
Normalize each AnalysisObject.
Definition: Percentile.hh:152
const vector< pair< shared_ptr< T >, shared_ptr< Counter > > > & analysisObjects() const
Access the underlyng AnalysisObjects.
Definition: Percentile.hh:174
PercentileTBase()
Default constructor.
Definition: Percentile.hh:105
PercentileXaxis< T > * operator->()
Make this object look like a pointer.
Definition: Percentile.hh:320
void fill(Args... args)
Definition: Percentile.hh:224
PercentileXaxis< T > & operator+=(const PercentileXaxis< T > &rhs)
Add the contents fro another PecentileXaxis.
Definition: Percentile.hh:312
PercentileBase is the base class of all Percentile classes.
Definition: Percentile.hh:18
bool init(const Event &event)
initialize for a new event. Select which AnalysisObjects should be filled for this event...
Definition: Percentile.hh:141
void selectBins(const Event &)
Definition: Percentile.cc:9