rivet is hosted by Hepforge, IPPP Durham

Rivet analyses reference

STAR_2017_I1510593

Bulk properties of identified hadrons in the Au Au medium from the RHIC beam-energy scan
Experiment: STAR (RHIC)
Inspire ID: 1510593
Status: UNVALIDATED
Authors:
  • Johannes Jahan
  • Gabriela Pokropska
  • Maria Stefaniak
References:
  • Phys.Rev. C96 (2017) no.4, 044904
  • DOI: 10.1103/PhysRevC.96.044904
  • arXiv: 1701.07065
Beams: 1000791970 1000791970
Beam energies: (758.5, 758.5); (1132.8, 1132.8); (1930.6, 1930.6); (2659.5, 2659.5); (3841.5, 3841.5) GeV
Run details:
  • Minimum bias AuAu events at various collision energies. Beam energy must be specified as analysis option "ENERGY" when rivet-merging samples.

Results of measurements of bulk properties of the matter in Au+Au collisions at energies of the Beam Energy Scan program, using pions, kaons and protons identified : $\frac{dN}{dy}$ spectra, $\langle p_\perp \rangle$ spectra and particles ratios are shown. Beam energy must be specified as analysis option "ENERGY" when rivet-merging samples.

Source code: STAR_2017_I1510593.cc
  1// -*- C++ -*-
  2#include <complex>
  3#include <iostream>
  4#include <string>
  5#include "Rivet/Analysis.hh"
  6#include "Rivet/Projections/ChargedFinalState.hh"
  7#include "Rivet/Projections/FinalState.hh"
  8#include "Rivet/Projections/ImpactParameterProjection.hh"
  9#include "Rivet/Projections/SingleValueProjection.hh"
 10#include "Rivet/Tools/Percentile.hh"
 11#include "Rivet/Tools/RHICCommon.hh"
 12#include "Rivet/Projections/HepMCHeavyIon.hh"
 13
 14namespace Rivet {
 15
 16
 17  /// pT distributions, ratios and production yields of hadrons in STAR
 18  class STAR_2017_I1510593 : public Analysis {
 19  public:
 20
 21    RIVET_DEFAULT_ANALYSIS_CTOR(STAR_2017_I1510593);
 22
 23    string coStr(int i, int j, int k) {
 24      return "/TMP/d" + toString(i) + "x" + toString(j) + "y" + toString(k);
 25    }
 26
 27
 28    /// Book histograms and initialise projections before the run
 29    void init() {
 30      // Initialise and register projections
 31      declareCentrality(STAR_BES_Centrality(), "STAR_BES_CALIB", "CMULT", "CMULT");
 32
 33      // The observed particles.
 34      declare(ChargedFinalState(Cuts::abseta < 0.5 &&
 35                                Cuts::absrap < 0.1 && Cuts::pT > 0.2), "CFS");
 36
 37      // Access the HepMC heavy ion info
 38      declare(HepMCHeavyIon(), "HepMC");
 39
 40
 41      // Energy bins
 42      energies = {7.7, 11.5, 19.6, 27.0, 39.0};
 43      for (size_t i = 0, N = energies.size(); i < N; ++i) {
 44        if (isCompatibleWithSqrtS(197.*energies[i])) enebin = i;
 45      }
 46
 47      // Centrality bins
 48      centralities = {5, 10, 20, 30, 40, 50, 60, 70, 80};
 49
 50      // Energy bins for Fig. 25
 51      enebinfig = -1;
 52      if (isCompatibleWithSqrtS(197.*energies[0])) enebinfig = 0;
 53      if (isCompatibleWithSqrtS(197.*energies[4])) enebinfig = 1;
 54
 55      // Book all histograms for all energies in order to use re-entrant finalize
 56      /// @todo Raw arrays would be a *lot* easier to read here (and N_cent is fixed)
 57      _h_dpT_Piplus = vector<vector<Histo1DPtr> >(energies.size(), vector<Histo1DPtr>(centralities.size()));
 58      _h_dpT_Pi = vector<vector<Histo1DPtr> >(energies.size(), vector<Histo1DPtr>(centralities.size()));
 59      _h_dpT_Kaonplus = vector<vector<Histo1DPtr> >(energies.size(), vector<Histo1DPtr>(centralities.size()));
 60      _h_dpT_Kaon = vector<vector<Histo1DPtr> >(energies.size(), vector<Histo1DPtr>(centralities.size()));
 61      _h_dpT_Proton = vector<vector<Histo1DPtr> >(energies.size(), vector<Histo1DPtr>(centralities.size()));
 62      _h_dpT_AntiProton = vector<vector<Histo1DPtr> >(energies.size(), vector<Histo1DPtr>(centralities.size()));
 63      _wght_PiPlus = vector<vector<CounterPtr> >(energies.size(), vector<CounterPtr>(centralities.size()));
 64      _wght_Pi = vector<vector<CounterPtr> >(energies.size(), vector<CounterPtr>(centralities.size()));
 65      _wght_KaonPlus = vector<vector<CounterPtr> >(energies.size(), vector<CounterPtr>(centralities.size()));
 66      _wght_Kaon = vector<vector<CounterPtr> >(energies.size(), vector<CounterPtr>(centralities.size()));
 67      _wght_Proton = vector<vector<CounterPtr> >(energies.size(), vector<CounterPtr>(centralities.size()));
 68      _wght_AntiProton = vector<vector<CounterPtr> >(energies.size(), vector<CounterPtr>(centralities.size()));
 69      _h_npart_PiPlus = vector<Histo1DPtr>(energies.size());
 70      _h_npart_PiMinus = vector<Histo1DPtr>(energies.size());
 71      _h_npart_KaPlus = vector<Histo1DPtr>(energies.size());
 72      _h_npart_KaMinus = vector<Histo1DPtr>(energies.size());
 73      _h_npart_Proton = vector<Histo1DPtr>(energies.size());
 74      _h_npart_AntiProton = vector<Histo1DPtr>(energies.size());
 75      _wght_npart_PiPlus = vector<CounterPtr>(energies.size());
 76      _wght_npart_PiMinus = vector<CounterPtr>(energies.size());
 77      _wght_npart_KaonPlus = vector<CounterPtr>(energies.size());
 78      _wght_npart_KaonMinus = vector<CounterPtr>(energies.size());
 79      _wght_npart_Proton = vector<CounterPtr>(energies.size());
 80      _wght_npart_AntiProton = vector<CounterPtr>(energies.size());
 81      _h_npart_pT_PiPlus = vector<Profile1DPtr>(energies.size());
 82      _h_npart_pT_PiMinus = vector<Profile1DPtr>(energies.size());
 83      _h_npart_pT_KaPlus = vector<Profile1DPtr>(energies.size());
 84      _h_npart_pT_KaMinus = vector<Profile1DPtr>(energies.size());
 85      _h_npart_pT_Proton = vector<Profile1DPtr>(energies.size());
 86      _h_npart_pT_AntiProton = vector<Profile1DPtr>(energies.size());
 87
 88      _h_npart_Piratio = vector<Profile1DPtr>(energies.size());
 89      _h_npart_Karatio = vector<Profile1DPtr>(energies.size());
 90      _h_npart_Pratio = vector<Profile1DPtr>(energies.size());
 91      _h_npart_KaPi = vector<Profile1DPtr>(energies.size());
 92      _h_npart_AntiPPi = vector<Profile1DPtr>(energies.size());
 93      _h_npart_KaPiplus = vector<Profile1DPtr>(energies.size());
 94      _h_npart_PPiplus = vector<Profile1DPtr>(energies.size());
 95
 96      for (int j = 0, N = energies.size(); j < N; ++j) {		
 97        for (int i = 0, M = centralities.size(); i < M; ++i) {
 98          /// Book [energy][centrality] histograms.
 99          book(_h_dpT_Pi[j][i], 2+j*6, 1, i+1);
100          book(_h_dpT_Piplus[j][i], 3+j*6, 1, i+1);
101          book(_h_dpT_Kaon[j][i], 4+j*6, 1, i+1);
102          book(_h_dpT_Kaonplus[j][i], 5+j*6, 1, i+1);
103          book(_h_dpT_AntiProton[j][i], 6+j*6, 1, i+1);
104          book(_h_dpT_Proton[j][i], 7+j*6, 1, i+1);
105          /// ...and the weights
106          book(_wght_Pi[j][i], coStr(2+j*6, 1, i+1));
107          book(_wght_PiPlus[j][i], coStr(3+j*6, 1, i+1));
108          book(_wght_Kaon[j][i], coStr(4+j*6, 1, i+1));
109          book(_wght_KaonPlus[j][i], coStr(5+j*6, 1, i+1));
110          book(_wght_AntiProton[j][i], coStr(6+j*6, 1, i+1));
111          book(_wght_Proton[j][i], coStr(7+j*6, 1, i+1));
112        }
113      }
114		
115      /// Booking npart histograms
116      for (int i = 0, N = energies.size(); i < N; ++i) {
117        book(_h_npart_PiMinus[i], 32+i, 1, 1);
118        book(_h_npart_PiPlus[i], 32+i, 1, 2);
119        book(_h_npart_KaMinus[i], 32+i, 1, 3);
120        book(_h_npart_KaPlus[i], 32+i, 1, 4);
121        book(_h_npart_AntiProton[i], 32+i, 1, 5);
122        book(_h_npart_Proton[i], 32+i, 1, 6);
123        /// ...and the weights.
124        book(_wght_npart_PiMinus[i],coStr(32+i, 1, 1));
125        book(_wght_npart_PiPlus[i],coStr(32+i, 1, 2));
126        book(_wght_npart_KaonMinus[i],coStr(32+i, 1, 3));
127        book(_wght_npart_KaonPlus[i],coStr(32+i, 1, 4));
128        book(_wght_npart_AntiProton[i],coStr(32+i, 1, 5));
129        book(_wght_npart_Proton[i],coStr(32+i, 1, 6));
130        /// ... and the profiles.
131        book(_h_npart_pT_PiMinus[i], 37+i, 1, 1);
132        book(_h_npart_pT_PiPlus[i], 37+i, 1, 2);
133        book(_h_npart_pT_KaMinus[i], 37+i, 1, 3);
134        book(_h_npart_pT_KaPlus[i], 37+i, 1, 4);
135        book(_h_npart_pT_AntiProton[i], 37+i, 1, 5);
136        book(_h_npart_pT_Proton[i], 37+i, 1, 6);
137
138        book(_h_npart_Piratio[i], 42+i, 1, 1);
139        book(_h_npart_Karatio[i], 42+i, 1, 2);
140        book(_h_npart_Pratio[i], 42+i, 1, 3);
141        book(_h_npart_KaPi[i], 47+i, 1, 1);
142        book(_h_npart_AntiPPi[i], 47+i, 1, 2);
143        book(_h_npart_KaPiplus[i], 47+i, 1, 3);
144        book(_h_npart_PPiplus[i], 47+i, 1, 4);
145
146      }
147
148      book(_h_snn_npart_PiMinus, 52, 1, 1);
149      book(_h_snn_npart_PiPlus, 52, 1, 2);
150      book(_h_snn_npart_KaMinus, 52, 1, 3);
151      book(_h_snn_npart_KaPlus, 52, 1, 4);
152      book(_h_snn_npart_AntiProton, 52, 1, 5);
153      book(_h_snn_npart_Proton, 52, 1, 6);
154
155      book(_h_snn_mt_PiPlus, 53, 1, 1);
156      book(_h_snn_mt_PiMinus, 53, 1, 2);
157      book(_h_snn_mt_KaPlus, 53, 1, 3);
158      book(_h_snn_mt_KaMinus, 53, 1, 4);
159      book(_h_snn_mt_Proton, 53, 1, 5);
160      book(_h_snn_mt_AntiProton, 53, 1, 6);
161
162      book(_h_snn_Piratio, 54, 1, 1);
163      book(_h_snn_Karatio, 54, 1, 2);
164      book(_h_snn_Pratio, 54, 1, 3);
165      book(_h_snn_KaPiplus, 55, 1, 1);
166      book(_h_snn_KaPiminus, 55, 1, 2);
167
168      _h_yields = vector<Profile1DPtr>(2);
169      _h_ratios = vector<Profile1DPtr>(2);
170      for (int i = 0; i < 2; ++i) {
171        book(_h_yields[i], 56, 1, 1+i);
172        book(_h_ratios[i], 57, 1, 1+i);
173      }
174    }
175
176    /// Perform the per-event analysis
177    void analyze(const Event& event) {
178      const ChargedFinalState& cfs = applyProjection<ChargedFinalState>(event, "CFS");
179      // Require at least two charged particles for the analysis to
180      // make sense. No further triggers are described in the paper.
181      const Particles& particles = cfs.particles();
182      nprtcl = particles.size();
183      if (nprtcl < 2) return;
184
185      /// Determine the centrality
186      const CentralityProjection& cent = apply<CentralityProjection>(event, "CMULT");
187      const double c = cent();
188
189      /// Determine the impact parameter
190      const HepMCHeavyIon & hi = apply<HepMCHeavyIon>(event, "HepMC");
191      const double Npart = hi.Npart_targ();
192
193      /// Determine the centrality bin
194      cenbin = (c < 5) ? 0 : c / 10 + 1;
195
196      /// Initializing for each event
197      for (size_t i = 0; i < 10; ++i) nparts[i] = 0;
198      for (size_t i = 0, N = energies.size(); i < N; ++i) {
199        nPi[i] = 0;
200        nPiPlus[i] = 0;
201        nKaon[i] = 0;
202        nKaonPlus[i] = 0;
203        nProton[i] = 0;
204        nAntiProton[i] = 0;
205      }
206
207      /// Loop over all charged particles of the CFS
208      for (const Particle& p : cfs.particles()) {
209        double pT = p.pT()/GeV;
210        double mass = p.mass()/GeV;
211        double mTm = sqrt(pT * pT + mass * mass) - mass;
212        if (p.absrap() < 0.1) {
213          const PdgId id = p.pid();
214          switch (id) {
215          case 211:
216            if (c < 80) {
217              _h_dpT_Piplus[enebin][cenbin]->fill(pT, 1. / pT);
218              _h_npart_PiPlus[enebin]->fill(Npart, 1. / (0.2 * 0.5 * Npart));
219              _h_npart_pT_PiPlus[enebin]->fill(Npart, pT, 5);
220            }
221            if (c < 5) {
222              ++nparts[0];
223              _h_snn_npart_PiPlus->fill(energies[enebin], 1.0 / (0.2 * 0.5 * Npart));
224              _h_snn_mt_PiPlus->fillBin(enebin, mTm);
225            }
226            ++nPiPlus[enebin];
227            break;
228          case -211:
229            if (c < 80) {
230              _h_dpT_Pi[enebin][cenbin]->fill(pT, 1.0 / pT);
231              _h_npart_PiMinus[enebin]->fill(Npart, 1.0 / (0.2 * 0.5 * Npart));
232              _h_npart_pT_PiMinus[enebin]->fill(Npart, pT, 5);
233            }
234            if (c < 5) {
235              ++nparts[1];
236              _h_snn_npart_PiMinus->fillBin(enebin, 1.0 / (0.2 * 0.5 * Npart));
237              _h_snn_mt_PiMinus->fillBin(enebin, mTm);
238            }
239            ++nPi[enebin];
240            break;
241          case 321:
242            if (c < 80) {
243              _h_dpT_Kaonplus[enebin][cenbin]->fill(pT, 1.0 / pT);
244              _h_npart_KaPlus[enebin]->fill(Npart, 1.0 /(0.2 * 0.5 * Npart));
245              _h_npart_pT_KaPlus[enebin]->fill(Npart, pT, 5);
246            }
247            if (c < 5) {
248              ++nparts[2];
249              _h_snn_npart_KaPlus->fillBin(enebin, 1.0 / (0.2 * 0.5 * Npart));
250              _h_snn_mt_KaPlus->fillBin(enebin, mTm);
251            }
252            ++nKaonPlus[enebin];
253            break;
254          case -321:
255            if (c < 80) {
256              _h_dpT_Kaon[enebin][cenbin]->fill(pT, 1.0 / pT);
257              _h_npart_KaMinus[enebin]->fill(Npart, 1.0 / (0.2 * 0.5 * Npart));
258              _h_npart_pT_KaMinus[enebin]->fill(Npart, pT, 5);
259            }
260            if (c < 5) {
261              ++nparts[3];
262              _h_snn_npart_KaMinus->fillBin(enebin, 1.0 / (0.2 * 0.5 * Npart));
263              _h_snn_mt_KaMinus->fillBin(enebin, mTm);
264            }
265            ++nKaon[enebin];
266            break;
267          case 2212:
268            if (c < 80) {
269              _h_dpT_Proton[enebin][cenbin]->fill(pT, 1.0 / pT);
270              _h_npart_Proton[enebin]->fill(Npart, 1.0 /(0.2 * 0.5 * Npart));
271              _h_npart_pT_Proton[enebin]->fill(Npart, pT, 5);
272            }
273            if (c < 5) {
274              ++nparts[4];
275              _h_snn_npart_Proton->fillBin(enebin, 1.0 / (0.2 * 0.5 * Npart));
276              _h_snn_mt_Proton->fillBin(enebin, mTm);
277            }
278            ++nProton[enebin];
279            break;
280          case -2212:
281            if (c < 80) {
282              _h_dpT_AntiProton[enebin][cenbin]->fill(pT, 1.0 / pT);
283              _h_npart_AntiProton[enebin]->fill(Npart, 1.0 / (0.2 * 0.5 * Npart));
284              _h_npart_pT_AntiProton[enebin]->fill(Npart, pT, 5);
285            }
286            if (c < 5) {
287              ++nparts[5];
288              _h_snn_npart_AntiProton->fillBin(enebin, 1.0 / (0.2 * 0.5 * Npart));
289              _h_snn_mt_AntiProton->fillBin(enebin, mTm);
290            }
291            ++nAntiProton[enebin];
292            break;
293          case 3122:
294            if (c < 5) ++nparts[6];
295            break;
296          case -3122:
297            if (c < 5) ++nparts[7];
298            break;
299          case 3312:
300            if (c < 5) ++nparts[8];
301            break;
302          case -3312:
303            if (c < 5) ++nparts[9];
304            break;
305          }
306        }
307      }
308
309      /// Particle Ratios
310      //"if( > 1e-6)" because "> 0" or "!= 0" can cause errors
311      if (nPiPlus[enebin] > 1e-6) {
312        _h_npart_Piratio[enebin]->fill(Npart, nPi[enebin] / nPiPlus[enebin], 5);
313        _h_npart_KaPiplus[enebin]->fill(Npart, nKaonPlus[enebin] / nPiPlus[enebin], 5);
314        _h_npart_PPiplus[enebin]->fill(Npart, nProton[enebin] / nPiPlus[enebin], 5);
315      }
316
317      if (nPi[enebin] > 1e-6) {
318        _h_npart_KaPi[enebin]->fill(Npart, nKaon[enebin] / nPi[enebin], 5);
319        _h_npart_AntiPPi[enebin]->fill(Npart, nAntiProton[enebin] / nPi[enebin], 5);
320      }
321
322      if (nKaonPlus[enebin] > 1e-6)
323        _h_npart_Karatio[enebin]->fill(Npart, nKaon[enebin] / nKaonPlus[enebin], 5);
324
325      if (nProton[enebin] > 1e-6)
326        _h_npart_Pratio[enebin]->fill(Npart, nAntiProton[enebin] / nProton[enebin], 5);
327
328      /// Particle Yields
329      if (enebinfig == 0 || enebinfig == 1) {
330        for (size_t i = 0; i < 10; i++) {
331          if (nparts[i] > 1e-6)
332            _h_yields[enebinfig]->fill(i + 1, nparts[i], 5);
333        }
334        if (nparts[0] > 1e-6)
335          _h_ratios[enebinfig]->fill(1, nparts[1] / nparts[0], 5);
336        if (nparts[2] > 1e-6)
337          _h_ratios[enebinfig]->fill(2, nparts[3] / nparts[2], 5);
338        if (nparts[4] > 1e-6)
339          _h_ratios[enebinfig]->fill(3, nparts[5] / nparts[4], 5);
340        if (nparts[6] > 1e-6)
341          _h_ratios[enebinfig]->fill(4, nparts[7] / nparts[6], 5);
342        if (nparts[8] > 1e-6)
343          _h_ratios[enebinfig]->fill(5, nparts[9] / nparts[8], 5);
344        if (nparts[1] > 1e-6) {
345          _h_ratios[enebinfig]->fill(6, nparts[3] / nparts[1], 5);
346          _h_ratios[enebinfig]->fill(7, nparts[5] / nparts[1], 5);
347          _h_ratios[enebinfig]->fill(8, nparts[6] / nparts[1], 5);
348          _h_ratios[enebinfig]->fill(9, nparts[9] / nparts[1], 5);
349        }
350      }
351
352      if (nparts[0] > 1e-6) {
353        _h_snn_Piratio->fill(energies[enebin], nparts[1] / nparts[0], 5);
354        _h_snn_KaPiplus->fill(energies[enebin], nparts[2] / nparts[0], 5);
355      }
356
357      if (nparts[1] > 1e-6)
358        _h_snn_KaPiminus->fill(energies[enebin],nparts[3] / nparts[1], 5);
359      if (nparts[2] > 1e-6)
360        _h_snn_Karatio->fill(energies[enebin],nparts[3] / nparts[2], 5);
361      if (nparts[4] > 1e-6)
362        _h_snn_Pratio->fill(energies[enebin],nparts[5] / nparts[4], 5);
363
364      /// Sum the weight of the event
365      if (c < 80) {
366        _wght_Pi[enebin][cenbin]->fill();
367        _wght_PiPlus[enebin][cenbin]->fill();
368        _wght_Kaon[enebin][cenbin]->fill();
369        _wght_KaonPlus[enebin][cenbin]->fill();
370        _wght_Proton[enebin][cenbin]->fill();
371        _wght_AntiProton[enebin][cenbin]->fill();
372        _wght_npart_PiPlus[enebin]->fill();
373        _wght_npart_PiMinus[enebin]->fill();
374        _wght_npart_KaonPlus[enebin]->fill();
375        _wght_npart_KaonMinus[enebin]->fill();
376        _wght_npart_Proton[enebin]->fill();
377        _wght_npart_AntiProton[enebin]->fill();
378      }
379    }
380
381
382    /// Normalise histograms etc., after the run
383    void finalize() {
384      /// Normalisation
385      for (size_t j = 0; j < 5; ++j) {
386        for (size_t i = 0; i < 9; ++i) {
387          if (_h_dpT_Pi[j][i]->integral() != 0 && _wght_Pi[j][i]->sumW() != 0)
388            scale(_h_dpT_Pi[j][i], 1. / (TWOPI * 0.2 * _wght_Pi[j][i]->sumW()));
389          if (_h_dpT_Piplus[j][i]->integral() != 0 && _wght_PiPlus[j][i]->sumW() != 0)
390            scale(_h_dpT_Piplus[j][i], 1. / (TWOPI * 0.2 * _wght_PiPlus[j][i]->sumW()));
391          if (_h_dpT_Kaon[j][i]->integral() != 0 && _wght_Kaon[j][i]->sumW() != 0)
392            scale(_h_dpT_Kaon[j][i], 1. / (TWOPI * 0.2 * _wght_Kaon[j][i]->sumW()));
393          if (_h_dpT_Kaonplus[j][i]->integral() != 0 && _wght_KaonPlus[j][i]->sumW() != 0)
394            scale(_h_dpT_Kaonplus[j][i], 1. / (TWOPI * 0.2 * _wght_KaonPlus[j][i]->sumW()));
395          if (_h_dpT_AntiProton[j][i]->integral() != 0 && _wght_Proton[j][i]->sumW() != 0)
396            scale(_h_dpT_AntiProton[j][i], 1. / (TWOPI * 0.2 * _wght_Proton[j][i]->sumW()));
397          if (_h_dpT_Proton[j][i]->integral() != 0 && _wght_AntiProton[j][i]->sumW() != 0)
398            scale(_h_dpT_Proton[j][i], 1. / (TWOPI * 0.2 * _wght_AntiProton[j][i]->sumW()));
399        }
400      }
401
402      /// Filling the bins with a value (here out of the defined
403      /// screening range of the plot) when it has not been filled by
404      /// anything, otherwise it won't want to plot
405      for (size_t j = 0, N = energies.size(); j < N; ++j) {
406        for (size_t i = 0, M = _h_npart_PiPlus[j]->numBins(); i < M; ++i)
407          if (_h_npart_PiPlus[j]->bin(i).numEntries() == 0)
408            _h_npart_PiPlus[j]->fillBin(i, -0.1);
409
410        for (size_t i = 0, M = _h_npart_PiMinus[j]->numBins(); i < M; ++i)
411          if (_h_npart_PiMinus[j]->bin(i).numEntries() == 0)
412            _h_npart_PiMinus[j]->fillBin(i, -0.1);
413
414        for (size_t i = 0, M = _h_npart_KaPlus[j]->numBins(); i < M; ++i)
415          if (_h_npart_KaPlus[j]->bin(i).numEntries() == 0)
416            _h_npart_KaPlus[j]->fillBin(i, -0.1);
417
418        for (size_t i = 0, M = _h_npart_KaMinus[j]->numBins(); i < M; ++i)
419          if (_h_npart_KaMinus[j]->bin(i).numEntries() == 0)
420            _h_npart_KaMinus[j]->fillBin(i, -0.1);
421
422        for (size_t i = 0, M = _h_npart_Proton[j]->numBins(); i < M; ++i)
423          if (_h_npart_Proton[j]->bin(i).numEntries() == 0)
424            _h_npart_Proton[j]->fillBin(i, -0.1);
425
426        for (size_t i = 0, M = _h_npart_AntiProton[j]->numBins(); i < M; ++i)
427          if (_h_npart_AntiProton[j]->bin(i).numEntries() == 0)
428            _h_npart_AntiProton[j]->fillBin(i, -0.1);
429
430        for (size_t i = 0, M = _h_npart_pT_PiPlus[j]->numBins(); i < M; ++i)
431          if (_h_npart_pT_PiPlus[j]->bin(i).numEntries() == 0)
432            _h_npart_pT_PiPlus[j]->fillBin(i, -0.1);
433
434        for (size_t i = 0, M = _h_npart_pT_PiMinus[j]->numBins(); i < M; ++i)
435          if (_h_npart_pT_PiMinus[j]->bin(i).numEntries() == 0)
436            _h_npart_pT_PiMinus[j]->fillBin(i, -0.1);
437
438        for (size_t i = 0, M = _h_npart_pT_KaPlus[j]->numBins(); i < M; ++i)
439          if (_h_npart_pT_KaPlus[j]->bin(i).numEntries() == 0)
440            _h_npart_pT_KaPlus[j]->fillBin(i, -0.1);
441
442        for (size_t i = 0, M = _h_npart_pT_KaMinus[j]->numBins(); i < M; ++i)
443          if (_h_npart_pT_KaMinus[j]->bin(i).numEntries() == 0)
444            _h_npart_pT_KaMinus[j]->fillBin(i, -0.1);
445
446        for (size_t i = 0, M = _h_npart_pT_Proton[j]->numBins(); i < M; ++i)
447          if (_h_npart_pT_Proton[j]->bin(i).numEntries() == 0)
448            _h_npart_pT_Proton[j]->fillBin(i, -0.1);
449
450        for (size_t i = 0, M = _h_npart_pT_AntiProton[j]->numBins(); i < M; ++i)
451          if (_h_npart_pT_AntiProton[j]->bin(i).numEntries() == 0)
452            _h_npart_pT_AntiProton[j]->fillBin(i, -0.1);
453      }
454
455      for (size_t j = 0; j < 5; ++j)
456        for (size_t i = 0; i < 9; ++i) {
457          if (_h_npart_Piratio[j]->bin(i).numEntries() == 0)
458            _h_npart_Piratio[j]->fillBin(i, -0.1);
459
460          if (_h_npart_Karatio[j]->bin(i).numEntries() == 0)
461            _h_npart_Karatio[j]->fillBin(i, -0.1);
462
463          if (_h_npart_Pratio[j]->bin(i).numEntries() == 0)
464            _h_npart_Pratio[j]->fillBin(i, -0.1);
465
466          if (_h_npart_KaPi[j]->bin(i).numEntries() == 0)
467            _h_npart_KaPi[j]->fillBin(i, -0.1);
468
469          if (_h_npart_AntiPPi[j]->bin(i).numEntries() == 0)
470            _h_npart_AntiPPi[j]->fillBin(i, -0.1);
471
472          if (_h_npart_KaPiplus[j]->bin(i).numEntries() == 0)
473            _h_npart_KaPiplus[j]->fillBin(i, -0.1);
474
475          if (_h_npart_PPiplus[j]->bin(i).numEntries() == 0)
476            _h_npart_PPiplus[j]->fillBin(i, -0.1);
477        }
478
479
480      for (size_t j = 0; j < 2; ++j) {
481        for (size_t i = 0, N = _h_ratios[j]->numBins(); i < N; ++i)
482          if (_h_ratios[j]->bin(i).numEntries() == 0)
483            _h_ratios[j]->fillBin(i, -0.1);
484        for (size_t i = 0, N = _h_yields[j]->numBins(); i < N; ++i)
485          if (_h_yields[j]->bin(i).numEntries() == 0)
486            _h_yields[j]->fillBin(i, -0.1);
487      }
488
489      for (size_t i = 0, N = energies.size(); i < N; ++i) {
490        if (_h_snn_npart_PiPlus->bin(i).numEntries() == 0)
491          _h_snn_npart_PiPlus->fillBin(i, -0.1);
492
493        if (_h_snn_npart_PiMinus->bin(i).numEntries() == 0)
494          _h_snn_npart_PiMinus->fillBin(i, -0.1);
495
496        if (_h_snn_npart_KaPlus->bin(i).numEntries() == 0)
497          _h_snn_npart_KaPlus->fillBin(i, -0.1);
498
499        if (_h_snn_npart_KaMinus->bin(i).numEntries() == 0)
500          _h_snn_npart_KaMinus->fillBin(i, -0.1);
501
502        if (_h_snn_npart_Proton->bin(i).numEntries() == 0)
503          _h_snn_npart_Proton->fillBin(i, -0.1);
504
505        if (_h_snn_npart_AntiProton->bin(i).numEntries() == 0)
506          _h_snn_npart_AntiProton->fillBin(i, -0.1);
507
508        if (_h_snn_mt_PiPlus->bin(i).numEntries() == 0)
509          _h_snn_mt_PiPlus->fillBin(i, -0.1);
510
511        if (_h_snn_mt_PiMinus->bin(i).numEntries() == 0)
512          _h_snn_mt_PiMinus->fillBin(i, -0.1);
513
514        if (_h_snn_mt_KaPlus->bin(i).numEntries() == 0)
515          _h_snn_mt_KaPlus->fillBin(i, -0.1);
516
517        if (_h_snn_mt_KaMinus->bin(i).numEntries() == 0)
518          _h_snn_mt_KaMinus->fillBin(i, -0.1);
519
520        if (_h_snn_mt_Proton->bin(i).numEntries() == 0)
521          _h_snn_mt_Proton->fillBin(i, -0.1);
522
523        if (_h_snn_mt_AntiProton->bin(i).numEntries() == 0)
524          _h_snn_mt_AntiProton->fillBin(i, -0.1);
525
526        if (_h_snn_KaPiplus->bin(i).numEntries() == 0)
527          _h_snn_KaPiplus->fillBin(i, -0.1);
528
529        if (_h_snn_KaPiminus->bin(i).numEntries() == 0)
530          _h_snn_KaPiminus->fillBin(i, -0.1);
531
532        if (_h_snn_Piratio->bin(i).numEntries() == 0)
533          _h_snn_Piratio->fillBin(i, -0.1);
534
535        if (_h_snn_Karatio->bin(i).numEntries() == 0)
536          _h_snn_Karatio->fillBin(i, -0.1);
537
538        if (_h_snn_Pratio->bin(i).numEntries() == 0)
539          _h_snn_Pratio->fillBin(i, -0.1);
540      }
541    }
542
543
544  private:
545
546    /// @name Histograms
547    /// @{
548    vector<vector<Histo1DPtr>> _h_dpT_Pi;
549    vector<vector<Histo1DPtr>> _h_dpT_Piplus;
550    vector<vector<Histo1DPtr>> _h_dpT_Kaon;
551    vector<vector<Histo1DPtr>> _h_dpT_Kaonplus;
552    vector<vector<Histo1DPtr>> _h_dpT_AntiProton;
553    vector<vector<Histo1DPtr>> _h_dpT_Proton;
554
555    vector<vector<CounterPtr>> _wght_Pi;
556    vector<vector<CounterPtr>> _wght_PiPlus;
557    vector<vector<CounterPtr>> _wght_Kaon;
558    vector<vector<CounterPtr>> _wght_KaonPlus;
559    vector<vector<CounterPtr>> _wght_Proton;
560    vector<vector<CounterPtr>> _wght_AntiProton;
561
562    vector<Profile1DPtr> _h_npart_Piratio;
563    vector<Profile1DPtr> _h_npart_Karatio;
564    vector<Profile1DPtr> _h_npart_Pratio;
565    vector<Profile1DPtr> _h_npart_KaPi;
566    vector<Profile1DPtr> _h_npart_AntiPPi;
567    vector<Profile1DPtr> _h_npart_KaPiplus;
568    vector<Profile1DPtr> _h_npart_PPiplus;
569    vector<Profile1DPtr> _h_yields;
570    vector<Profile1DPtr> _h_ratios;
571
572    vector<Histo1DPtr> _h_npart_PiPlus;
573    vector<Histo1DPtr> _h_npart_PiMinus;
574    vector<Histo1DPtr> _h_npart_KaPlus;
575    vector<Histo1DPtr> _h_npart_KaMinus;
576    vector<Histo1DPtr> _h_npart_Proton;
577    vector<Histo1DPtr> _h_npart_AntiProton;
578
579    vector<CounterPtr> _wght_npart_PiPlus;
580    vector<CounterPtr> _wght_npart_PiMinus;
581    vector<CounterPtr> _wght_npart_KaonPlus;
582    vector<CounterPtr> _wght_npart_KaonMinus;
583    vector<CounterPtr> _wght_npart_Proton;
584    vector<CounterPtr> _wght_npart_AntiProton;
585
586    vector<Profile1DPtr> _h_npart_pT_PiPlus;
587    vector<Profile1DPtr> _h_npart_pT_PiMinus;
588    vector<Profile1DPtr> _h_npart_pT_KaPlus;
589    vector<Profile1DPtr> _h_npart_pT_KaMinus;
590    vector<Profile1DPtr> _h_npart_pT_Proton;
591    vector<Profile1DPtr> _h_npart_pT_AntiProton;
592
593    Histo1DPtr _h_snn_npart_PiPlus;
594    Histo1DPtr _h_snn_npart_PiMinus;
595    Histo1DPtr _h_snn_npart_KaPlus;
596    Histo1DPtr _h_snn_npart_KaMinus;
597    Histo1DPtr _h_snn_npart_Proton;
598    Histo1DPtr _h_snn_npart_AntiProton;
599    Profile1DPtr _h_snn_mt_PiPlus;
600    Profile1DPtr _h_snn_mt_PiMinus;
601    Profile1DPtr _h_snn_mt_KaPlus;
602    Profile1DPtr _h_snn_mt_KaMinus;
603    Profile1DPtr _h_snn_mt_Proton;
604    Profile1DPtr _h_snn_mt_AntiProton;
605    Profile1DPtr _h_snn_KaPiplus;
606    Profile1DPtr _h_snn_KaPiminus;
607    Profile1DPtr _h_snn_Piratio;
608    Profile1DPtr _h_snn_Karatio;
609    Profile1DPtr _h_snn_Pratio;
610    /// @}
611
612    /// @name Variables
613    /// @{
614    vector<double> energies;
615    vector<double> centralities;
616    int cenbin, enebin = 0, enebinfig = 0;
617    double nprtcl, nPi[5], nPiPlus[5], nKaon[5], nKaonPlus[5], nProton[5],
618    nAntiProton[5];
619    // The following vector contains the counters for all particles used in
620    // Fig. 25. In the right order : pi+, pi-, K+, K-, p, Antip, Lambda,
621    // AntiLambda, Xi, AntiXi
622    double nparts[10];
623    /// @}
624
625  };
626
627
628  RIVET_DECLARE_PLUGIN(STAR_2017_I1510593);
629
630}