[95a917c] | 1 | // -*- C++ -*-
|
---|
| 2 | //
|
---|
| 3 | // This file is part of HepMC
|
---|
| 4 | // Copyright (C) 2014-2020 The HepMC collaboration (see AUTHORS for details)
|
---|
| 5 | //
|
---|
| 6 | #ifndef HEPMC3_HEAVYION_H
|
---|
| 7 | #define HEPMC3_HEAVYION_H
|
---|
| 8 | /**
|
---|
| 9 | * @file GenHeavyIon.h
|
---|
| 10 | * @brief Definition of attribute \b class GenHeavyIon
|
---|
| 11 | *
|
---|
| 12 | * @class HepMC3::GenHeavyIon
|
---|
| 13 | * @brief Stores additional information about Heavy Ion generator
|
---|
| 14 | *
|
---|
| 15 | * This is an example of event attribute used to store Heavy Ion information
|
---|
| 16 | *
|
---|
| 17 | * @ingroup attributes
|
---|
| 18 | *
|
---|
| 19 | */
|
---|
| 20 | #include <iostream>
|
---|
| 21 | #include <map>
|
---|
| 22 | #include "HepMC3/Attribute.h"
|
---|
| 23 |
|
---|
| 24 | namespace HepMC3 {
|
---|
| 25 | /** Deprecated */
|
---|
| 26 | using namespace std;
|
---|
| 27 |
|
---|
| 28 | class GenHeavyIon : public Attribute {
|
---|
| 29 |
|
---|
| 30 | public:
|
---|
| 31 |
|
---|
| 32 | /// Empty default constructor.
|
---|
| 33 | GenHeavyIon()
|
---|
| 34 | : Ncoll_hard(-1), Npart_proj(-1), Npart_targ(-1), Ncoll(-1),
|
---|
| 35 | #ifndef HEPMC3_NO_DEPRECATED
|
---|
| 36 | spectator_neutrons(-1), spectator_protons(-1),
|
---|
| 37 | #endif
|
---|
| 38 | N_Nwounded_collisions(-1), Nwounded_N_collisions(-1),
|
---|
| 39 | Nwounded_Nwounded_collisions(-1), impact_parameter(-1.0),
|
---|
| 40 | event_plane_angle(-1.0),
|
---|
| 41 | #ifndef HEPMC3_NO_DEPRECATED
|
---|
| 42 | eccentricity(-1.0),
|
---|
| 43 | #endif
|
---|
| 44 | sigma_inel_NN(-1.0), centrality(-1.0), user_cent_estimate(-1.0),
|
---|
| 45 | Nspec_proj_n(-1), Nspec_targ_n(-1),
|
---|
| 46 | Nspec_proj_p(-1), Nspec_targ_p(-1), forceoldformat(false) {}
|
---|
| 47 |
|
---|
| 48 | //
|
---|
| 49 | // Fields
|
---|
| 50 | //
|
---|
| 51 | public:
|
---|
| 52 |
|
---|
| 53 | ///
|
---|
| 54 | /// @brief the number of hard nucleon-nucleon collisions.
|
---|
| 55 | ///
|
---|
| 56 | /// Model-dependent. Usually the number of nucleon-nucleon
|
---|
| 57 | /// collisions containing a special signal process. A negative
|
---|
| 58 | /// value means that the information is not available.
|
---|
| 59 | int Ncoll_hard;
|
---|
| 60 |
|
---|
| 61 | /// @brief the number of participating nucleons in the projectile.
|
---|
| 62 | ///
|
---|
| 63 | /// The number of nucleons in the projectile participating in an
|
---|
| 64 | /// inelastic collision (see Ncoll). A negative value means that
|
---|
| 65 | /// the information is not available.
|
---|
| 66 | int Npart_proj;
|
---|
| 67 |
|
---|
| 68 | /// @brief the number of participating nucleons in the target.
|
---|
| 69 | ///
|
---|
| 70 | /// The number of nucleons in the target participating in an
|
---|
| 71 | /// inelastic collision (see Ncoll). A negative value means that
|
---|
| 72 | /// the information is not available.
|
---|
| 73 | int Npart_targ;
|
---|
| 74 |
|
---|
| 75 | /// @brief the number of inelastic nucleon-nucleon collisions.
|
---|
| 76 | ///
|
---|
| 77 | /// Note that a one participating nucleon can be involved in many
|
---|
| 78 | /// inelastic collisions, and that inelastic also includes
|
---|
| 79 | /// diffractive excitation. A negative value means that the
|
---|
| 80 | /// information is not available.
|
---|
| 81 | ///
|
---|
| 82 | int Ncoll;
|
---|
| 83 |
|
---|
| 84 | #ifndef HEPMC3_NO_DEPRECATED
|
---|
| 85 | /// @brief Total number of spectator neutrons.
|
---|
| 86 | ///
|
---|
| 87 | /// HEPMC3_DEPRECATED("Use Nspec_proj_n and Nspec_targ_n instead.")
|
---|
| 88 | int spectator_neutrons;
|
---|
| 89 |
|
---|
| 90 | /// @brief Total number of spectator protons.
|
---|
| 91 | ///
|
---|
| 92 | /// HEPMC3_DEPRECATED("Use Nspec_proj_p and Nspec_targ_p instead.")
|
---|
| 93 | int spectator_protons;
|
---|
| 94 | #endif
|
---|
| 95 |
|
---|
| 96 | /// @brief Collisions with a diffractively excited target nucleon.
|
---|
| 97 | ///
|
---|
| 98 | /// The number of single diffractive nucleon-nucleon collisions
|
---|
| 99 | /// where the target nucleon is excited. A negative value means
|
---|
| 100 | /// that the information is not available.
|
---|
| 101 | int N_Nwounded_collisions;
|
---|
| 102 |
|
---|
| 103 | /// @brief Collisions with a diffractively excited projectile nucleon.
|
---|
| 104 | ///
|
---|
| 105 | /// The number of single diffractive nucleon-nucleon collisions
|
---|
| 106 | /// where the projectile nucleon is excited. A negative value
|
---|
| 107 | /// means that the information is not available.
|
---|
| 108 | int Nwounded_N_collisions;
|
---|
| 109 |
|
---|
| 110 | /// @brief Non-diffractive or doubly diffractive collisions.
|
---|
| 111 | ///
|
---|
| 112 | /// The number of nucleon-nucleon collisions where both projectile
|
---|
| 113 | /// and target nucleons are wounded. A negative value means that
|
---|
| 114 | /// the information is not available.
|
---|
| 115 | int Nwounded_Nwounded_collisions;
|
---|
| 116 |
|
---|
| 117 | /// @brief The impact parameter.
|
---|
| 118 | ///
|
---|
| 119 | /// The impact parameter given in units of femtometer. A negative
|
---|
| 120 | /// value means that the information is not available.
|
---|
| 121 | double impact_parameter;
|
---|
| 122 |
|
---|
| 123 | /// @brief The event plane angle.
|
---|
| 124 | ///
|
---|
| 125 | /// The angle wrt. the x-axix of the impact parameter vector
|
---|
| 126 | /// (pointing frm the target to the projectile). A positive number
|
---|
| 127 | /// between 0 and two pi. A negative value means that the
|
---|
| 128 | /// information is not available.
|
---|
| 129 | double event_plane_angle;
|
---|
| 130 |
|
---|
| 131 | #ifndef HEPMC3_NO_DEPRECATED
|
---|
| 132 | /// @brief The eccentricity.
|
---|
| 133 | ///
|
---|
| 134 | /// HEPMC3_DEPRECATED("Use eccentricities insted.")
|
---|
| 135 | double eccentricity;
|
---|
| 136 | #endif
|
---|
| 137 |
|
---|
| 138 | /// @brief The assumed inelastic nucleon-nucleon cross section
|
---|
| 139 | ///
|
---|
| 140 | /// in units of millibarn. As used in a Glauber calculation to
|
---|
| 141 | /// simulate the distribution in Ncoll. A negative value means
|
---|
| 142 | /// that the information is not available.
|
---|
| 143 | double sigma_inel_NN;
|
---|
| 144 |
|
---|
| 145 | /// @brief The centrality.
|
---|
| 146 | ///
|
---|
| 147 | /// The generated centrality in percentiles, where 0 is the
|
---|
| 148 | /// maximally central and 100 is the minimally central. A negative
|
---|
| 149 | /// value means that the information is not available.
|
---|
| 150 | double centrality;
|
---|
| 151 |
|
---|
| 152 | /// @brief A user defined centrality estimator.
|
---|
| 153 | ///
|
---|
| 154 | /// This variable may contain anything a generator feels is
|
---|
| 155 | /// reasonable for estimating centrality. The value should be
|
---|
| 156 | /// non-negative, and a low value corresponds to a low
|
---|
| 157 | /// centrality. A negative value indicatess that the information
|
---|
| 158 | /// is not available.
|
---|
| 159 | double user_cent_estimate;
|
---|
| 160 |
|
---|
| 161 |
|
---|
| 162 | /// @brief The number of spectator neutrons in the projectile
|
---|
| 163 | ///
|
---|
| 164 | /// ie. those that thave not participated in any inelastic
|
---|
| 165 | /// nucleon-nucleon collision. A negative value indicatess that
|
---|
| 166 | /// the information is not available.
|
---|
| 167 | int Nspec_proj_n;
|
---|
| 168 |
|
---|
| 169 | /// @brief The number of spectator neutrons in the target
|
---|
| 170 | ///
|
---|
| 171 | /// ie. those that thave not participated in any inelastic
|
---|
| 172 | /// nucleon-nucleon collision. A negative value indicatess that
|
---|
| 173 | /// the information is not available.
|
---|
| 174 | int Nspec_targ_n;
|
---|
| 175 |
|
---|
| 176 | /// @brief The number of spectator protons in the projectile
|
---|
| 177 | ///
|
---|
| 178 | /// ie. those that thave not participated in any inelastic
|
---|
| 179 | /// nucleon-nucleon collision. A negative value indicatess that
|
---|
| 180 | /// the information is not available.
|
---|
| 181 | int Nspec_proj_p;
|
---|
| 182 |
|
---|
| 183 | /// @brief The number of spectator protons in the target
|
---|
| 184 | ///
|
---|
| 185 | /// ie. those that thave not participated in any inelastic
|
---|
| 186 | /// nucleon-nucleon collision. A negative value indicatess that
|
---|
| 187 | /// the information is not available.
|
---|
| 188 | int Nspec_targ_p;
|
---|
| 189 |
|
---|
| 190 | /// @brief Participant plane angles
|
---|
| 191 | ///
|
---|
| 192 | /// calculated to different orders. The key of the map specifies
|
---|
| 193 | /// the order, and the value gives to the angle wrt. the
|
---|
| 194 | /// event plane.
|
---|
| 195 | std::map<int,double> participant_plane_angles;
|
---|
| 196 |
|
---|
| 197 | /// @brief Eccentricities
|
---|
| 198 | ///
|
---|
| 199 | /// Calculated to different orders. The key of the map specifies
|
---|
| 200 | /// the order, and the value gives the corresponding eccentricity.
|
---|
| 201 | std::map<int,double> eccentricities;
|
---|
| 202 |
|
---|
| 203 | //
|
---|
| 204 | // Functions
|
---|
| 205 | //
|
---|
| 206 | public:
|
---|
| 207 |
|
---|
| 208 | /// @brief Implementation of Attribute::from_string.
|
---|
| 209 | bool from_string(const std::string &att) override;
|
---|
| 210 |
|
---|
| 211 | /// @brief Implementation of Attribute::to_string.
|
---|
| 212 | bool to_string(std::string &att) const override;
|
---|
| 213 |
|
---|
| 214 | #ifndef HEPMC3_NO_DEPRECATED
|
---|
| 215 |
|
---|
| 216 | /// @brief Operator ==
|
---|
| 217 | ///
|
---|
| 218 | bool operator==( const GenHeavyIon& ) const;
|
---|
| 219 | /// @brief Operator !=
|
---|
| 220 | ///
|
---|
| 221 | bool operator!=( const GenHeavyIon& ) const;
|
---|
| 222 |
|
---|
| 223 | /// @brief Set all fields.
|
---|
| 224 | ///
|
---|
| 225 | /// HEPMC3_DEPRECATED("Set individual fields directly instead.")
|
---|
| 226 | /** @brief Set all fields */
|
---|
| 227 | void set( const int&nh, const int&np, const int&nt, const int&nc, const int&ns, const int&nsp,
|
---|
| 228 | const int&nnw=0, const int&nwn=0, const int&nwnw=0,
|
---|
| 229 | const double& im=0., const double& pl=0., const double& ec=0., const double& s=0., const double& cent=0., const double& ucent=0. );
|
---|
| 230 |
|
---|
| 231 | /// @brief Verify that the instance contains non-zero information.
|
---|
| 232 | ///
|
---|
| 233 | /// HEPMC3_DEPRECATED("Each filed now have default values meaning
|
---|
| 234 | /// that they have not been set")
|
---|
| 235 | bool is_valid() const;
|
---|
| 236 |
|
---|
| 237 | /// @brief force writing in old format for compatibility purposes.
|
---|
| 238 | ///
|
---|
| 239 | /// HEPMC3_DEPRECATED("This should really not be needed");
|
---|
| 240 | bool forceoldformat;
|
---|
| 241 |
|
---|
| 242 | #endif
|
---|
| 243 |
|
---|
| 244 | };
|
---|
| 245 |
|
---|
| 246 |
|
---|
| 247 | #ifndef HEPMC3_NO_DEPRECATED
|
---|
| 248 | typedef GenHeavyIon HeavyIon; ///< Backward compatibility typedef
|
---|
| 249 | #endif
|
---|
| 250 |
|
---|
| 251 |
|
---|
| 252 | } // namespace HepMC3
|
---|
| 253 |
|
---|
| 254 | #endif
|
---|