Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-04-19 09:06:48

0001 // -*- C++ -*-
0002 #ifndef RIVET_HepMCHeavyIon_HH
0003 #define RIVET_HepMCHeavyIon_HH
0004 
0005 #include "Rivet/Projection.hh"
0006 #include "Rivet/Tools/RivetHepMC.hh"
0007 #include "Rivet/Event.hh"
0008 
0009 namespace Rivet {
0010 
0011 
0012   class HepMCHeavyIon : public Projection {
0013   public:
0014 
0015     /// @name Constructors etc.
0016     /// @{
0017 
0018     /// Constructor
0019     HepMCHeavyIon();
0020 
0021     /// Clone on the heap.
0022     RIVET_DEFAULT_PROJ_CLONE(HepMCHeavyIon);
0023 
0024     /// @}
0025 
0026     /// Import to avoid warnings about overload-hiding
0027     using Projection::operator =;
0028 
0029 
0030   protected:
0031 
0032     /// Perform the projection on the Event
0033     void project(const Event& e);
0034 
0035     /// Compare with other projections
0036     //int compare(const Projection& p) const;
0037     // Taken from Thrust.hh
0038     CmpState compare(const Projection&) const {
0039       return CmpState::EQ;
0040     }
0041 
0042   public:
0043 
0044     /// Check that there were at all any heavy ion info in HepMC
0045     bool ok() const { return _hi != nullptr; }
0046 
0047     /// @brief the number of hard nucleon-nucleon collisions.
0048     ///
0049     /// Model-dependent. Usually the number of nucleon-nucleon
0050     /// collisions containing a special signal process. A negative
0051     /// value means that the information is not available.
0052     int    Ncoll_hard() const;
0053 
0054     /// @brief the number of participating nucleons in the projectile.
0055     ///
0056     /// The number of nucleons in the projectile participating in an
0057     /// inelastic collision (see Ncoll). A negative value means that
0058     /// the information is not available.
0059     int    Npart_proj() const;
0060 
0061     /// @brief the number of participating nucleons in the target.
0062     ///
0063     /// The number of nucleons in the target participating in an
0064     /// inelastic collision (see Ncoll). A negative value means that
0065     /// the information is not available.
0066     int    Npart_targ() const;
0067 
0068     /// @brief the number of inelastic nucleon-nucleon collisions.
0069     ///
0070     /// Note that a one participating nucleon can be involved in many
0071     /// inelastic collisions, and that inelastic also includes
0072     /// diffractive excitation. A negative value means that the
0073     /// information is not available.
0074     ///
0075     int    Ncoll() const;
0076     /// @brief Collisions with a diffractively excited target nucleon.
0077     ///
0078     /// The number of single diffractive nucleon-nucleon collisions
0079     /// where the target nucleon is excited. A negative value means
0080     /// that the information is not available.
0081     int    N_Nwounded_collisions() const;
0082 
0083     /// @brief Collisions with a diffractively excited projectile nucleon.
0084     ///
0085     /// The number of single diffractive nucleon-nucleon collisions
0086     /// where the projectile nucleon is excited. A negative value
0087     /// means that the information is not available.
0088     int    Nwounded_N_collisions() const;
0089 
0090     /// @brief Non-diffractive or doubly diffractive collisions.
0091     ///
0092     /// The number of nucleon-nucleon collisions where both projectile
0093     /// and target nucleons are wounded. A negative value means that
0094     /// the information is not available.
0095     int    Nwounded_Nwounded_collisions() const;
0096 
0097     /// @brief The impact parameter.
0098     ///
0099     /// The impact parameter given in units of femtometer. A negative
0100     /// value means that the information is not available.
0101     double impact_parameter() const;
0102 
0103     /// @brief The event plane angle.
0104     ///
0105     /// The angle wrt. the x-axix of the impact parameter vector
0106     /// (pointing frm the target to the projectile). A positive number
0107     /// between 0 and two pi. A negative value means that the
0108     /// information is not available.
0109     double event_plane_angle() const;
0110     /// @brief The assumed inelastic nucleon-nucleon cross section
0111     ///
0112     /// in units of millibarn. As used in a Glauber calculation to
0113     /// simulate the distribution in Ncoll. A negative value means
0114     /// that the information is not available.
0115     double sigma_inel_NN() const;
0116 
0117     /// @brief The centrality.
0118     ///
0119     /// The generated centrality in percentiles, where 0 is the
0120     /// maximally central and 100 is the minimally central. A negative
0121     /// value means that the information is not available.
0122     double centrality() const;
0123 
0124     /// @brief A user defined centrality estimator.
0125     ///
0126     /// This variable may contain anything a generator feels is
0127     /// reasonable for estimating centrality. The value should be
0128     /// non-negative, and a low value corresponds to a low
0129     /// centrality. A negative value indicatess that the information
0130     /// is not available.
0131     double user_cent_estimate() const;
0132 
0133     /// @brief The number of spectator neutrons in the projectile
0134     ///
0135     /// ie. those that thave not participated in any inelastic
0136     /// nucleon-nucleon collision. A negative value indicatess that
0137     /// the information is not available.
0138     int Nspec_proj_n() const;
0139 
0140     /// @brief The number of spectator neutrons in the target
0141     ///
0142     /// ie. those that thave not participated in any inelastic
0143     /// nucleon-nucleon collision. A negative value indicatess that
0144     /// the information is not available.
0145     int Nspec_targ_n() const;
0146 
0147     /// @brief The number of spectator protons in the projectile
0148     ///
0149     /// ie. those that thave not participated in any inelastic
0150     /// nucleon-nucleon collision. A negative value indicatess that
0151     /// the information is not available.
0152     int Nspec_proj_p() const;
0153 
0154     /// @brief The number of spectator protons in the target
0155     ///
0156     /// ie. those that thave not participated in any inelastic
0157     /// nucleon-nucleon collision. A negative value indicatess that
0158     /// the information is not available.
0159     int Nspec_targ_p() const;
0160 
0161     /// @brief Participant plane angles
0162     ///
0163     /// calculated to different orders. The key of the map specifies
0164     /// the order, and the value gives to the angle wrt. the
0165     /// event plane.
0166     map<int,double> participant_plane_angles() const;
0167 
0168     /// @brief Eccentricities
0169     ///
0170     /// Calculated to different orders. The key of the map specifies
0171     /// the order, and the value gives the corresponding eccentricity.
0172     map<int,double> eccentricities() const;
0173 
0174 
0175   protected:
0176 
0177     /// A pointer to the actual heavy-ion object
0178     ConstGenHeavyIonPtr _hi;
0179 
0180   };
0181 }
0182 
0183 
0184 #endif