Project
Loading...
Searching...
No Matches
GRPLHCIFData.h
Go to the documentation of this file.
1// Copyright 2019-2020 CERN and copyright holders of ALICE O2.
2// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
3// All rights not expressly granted are reserved.
4//
5// This software is distributed under the terms of the GNU General Public
6// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
7//
8// In applying this license CERN does not waive the privileges and immunities
9// granted to it by virtue of its status as an Intergovernmental Organization
10// or submit itself to any jurisdiction.
11
14
15#ifndef O2_GRP_LHCIFDATA_H
16#define O2_GRP_LHCIFDATA_H
17
18#include <Rtypes.h>
19#include <string>
20#include <unordered_map>
21#include <cstdint>
22#include "CommonTypes/Units.h"
25
26namespace o2
27{
28namespace parameters
29{
30
32{
33
35
36 public:
37 GRPLHCIFData() = default;
38 ~GRPLHCIFData() = default;
39
40 static const std::unordered_map<unsigned int, unsigned int> mZtoA;
41
42 std::pair<long, int32_t> getBeamEnergyPerZWithTime() const { return mBeamEnergyPerZ; }
43 int32_t getBeamEnergyPerZ() const { return mBeamEnergyPerZ.second; }
44 float getBeamEnergyPerZinGeV() const { return mBeamEnergyPerZ.second * 0.12; }
45 long getBeamEnergyPerZTime() const { return mBeamEnergyPerZ.first; }
46 void setBeamEnergyPerZWithTime(std::pair<long, int32_t> p) { mBeamEnergyPerZ = p; }
47 void setBeamEnergyPerZWithTime(long t, int32_t v) { mBeamEnergyPerZ = std::make_pair(t, v); }
48
49 std::pair<long, int32_t> getFillNumberWithTime() const { return mFillNumber; }
50 int32_t getFillNumber() const { return mFillNumber.second; }
51 long getFillNumberTime() const { return mFillNumber.first; }
52 void setFillNumberWithTime(std::pair<long, int32_t> p) { mFillNumber = p; }
53 void setFillNumberWithTime(long t, int32_t v) { mFillNumber = std::make_pair(t, v); }
54
55 const std::pair<long, std::string>& getInjectionSchemeWithTime() const { return mInjectionScheme; }
56 const std::string& getInjectionScheme() const { return mInjectionScheme.second; }
57 long getInjectionSchemeTime() const { return mInjectionScheme.first; }
58 void setInjectionSchemeWithTime(std::pair<long, std::string> p) { mInjectionScheme = p; }
59 void setInjectionSchemeWithTime(long t, std::string v) { mInjectionScheme = std::make_pair(t, v); }
60
61 std::pair<long, int32_t> getAtomicNumberB1WithTime() const { return mAtomicNumberB1; }
62 int32_t getAtomicNumberB1() const { return mAtomicNumberB1.second; }
63 long getAtomicNumberB1Time() const { return mAtomicNumberB1.first; }
64 void setAtomicNumberB1WithTime(std::pair<long, int32_t> p) { mAtomicNumberB1 = p; }
65 void setAtomicNumberB1WithTime(long t, int32_t v) { mAtomicNumberB1 = std::make_pair(t, v); }
66
67 std::pair<long, int32_t> getAtomicNumberB2WithTime() const { return mAtomicNumberB2; }
68 int32_t getAtomicNumberB2() const { return mAtomicNumberB2.second; }
69 long getAtomicNumberB2Time() const { return mAtomicNumberB2.first; }
70 void setAtomicNumberB2WithTime(std::pair<long, int32_t> p) { mAtomicNumberB2 = p; }
71 void setAtomicNumberB2WithTime(long t, int32_t v) { mAtomicNumberB2 = std::make_pair(t, v); }
72
73 std::pair<long, o2::units::AngleRad_t> getCrossingAngleWithTime() const { return mCrossingAngle; }
74 o2::units::AngleRad_t getCrossingAngle() const { return mCrossingAngle.second; }
75 long getCrossingAngleTime() const { return mCrossingAngle.first; }
76 void setCrossingAngleWithTime(std::pair<long, o2::units::AngleRad_t> p) { mCrossingAngle = p; }
77 void setCrossingAngleWithTime(long t, o2::units::AngleRad_t v) { mCrossingAngle = std::make_pair(t, v); }
78
79 const std::pair<long, o2::BunchFilling>& getBunchFillingWithTime() const { return mBunchFilling; }
80 const o2::BunchFilling& getBunchFilling() const { return mBunchFilling.second; }
81 long getBunchFillingTime() const { return mBunchFilling.first; }
82 void setBunchFillingWithTime(std::pair<long, o2::BunchFilling> p) { mBunchFilling = p; }
83 void setBunchFillingWithTime(long t, o2::BunchFilling v) { mBunchFilling = std::make_pair(t, v); }
84
86 int getBeamZ(beamDirection beam) const { return mBeamAZ[static_cast<int>(beam)] & 0xffff; }
87 int getBeamA(beamDirection beam) const { return mBeamAZ[static_cast<int>(beam)] >> 16; }
88 int getBeamZ(int beam) const { return mBeamAZ[beam] & 0xffff; }
89 int getBeamA(int beam) const { return mBeamAZ[beam] >> 16; }
90 float getBeamZoverA(beamDirection beam) const;
91 float getBeamZoverA(int beam) const;
92 void setBeamAZ(int a, int z, beamDirection beam) { mBeamAZ[static_cast<int>(beam)] = (a << 16) + z; }
93 void setBeamAZ(beamDirection beam);
94 void setBeamAZ();
96 float getBeamEnergyPerNucleon(beamDirection beam) const { return mBeamEnergyPerZ.second * getBeamZoverA(beam); }
97 float getBeamEnergyPerNucleon(int beam) const { return mBeamEnergyPerZ.second * getBeamZoverA(beam); }
99 float getBeamEnergyPerNucleonInGeV(int beam) const { return getBeamEnergyPerZinGeV() * getBeamZoverA(beam); }
101 float getSqrtS() const;
103 void translateBucketsToBCNumbers(std::vector<int32_t>& bcNb, std::vector<int32_t>& buckets, int beam);
104
105 void print() const;
106 static GRPLHCIFData* loadFrom(const std::string& grpLHCIFFileName = "");
107
108 private:
109 std::pair<long, int32_t> mBeamEnergyPerZ{}; // beam energy per charge
110 std::pair<long, int32_t> mFillNumber{};
111 std::pair<long, std::string> mInjectionScheme{};
112 std::pair<long, int32_t> mAtomicNumberB1{}; // clockwise
113 std::pair<long, int32_t> mAtomicNumberB2{}; // anticlockwise
114 std::pair<long, o2::units::AngleRad_t> mCrossingAngle{};
115 int mBeamAZ[beamDirection::NBeamDirections] = {0, 0};
116 std::pair<long, o2::BunchFilling> mBunchFilling{};
117
118 ClassDefNV(GRPLHCIFData, 1);
119};
120
121//______________________________________________
123{
124 // Z/A of beam 0 or 1
125 int a = getBeamA(b);
126 return a ? getBeamZ(b) / static_cast<float>(a) : 0.f;
127}
128
129//______________________________________________
130inline float GRPLHCIFData::getBeamZoverA(int b) const
131{
132 // Z/A of beam 0 or 1
133 int a = getBeamA(b);
134 return a ? getBeamZ(b) / static_cast<float>(a) : 0.f;
135}
136
137} // namespace parameters
138} // namespace o2
139#endif
Header to collect LHC related constants.
Header to collect definitions for different units.
void setAtomicNumberB1WithTime(long t, int32_t v)
std::pair< long, o2::units::AngleRad_t > getCrossingAngleWithTime() const
float getBeamEnergyPerNucleon(int beam) const
float getBeamEnergyPerNucleonInGeV(int beam) const
std::pair< long, int32_t > getBeamEnergyPerZWithTime() const
void setBeamAZ(int a, int z, beamDirection beam)
float getBeamEnergyPerNucleonInGeV(beamDirection beam) const
std::pair< long, int32_t > getFillNumberWithTime() const
void setBunchFillingWithTime(std::pair< long, o2::BunchFilling > p)
void setBeamEnergyPerZWithTime(std::pair< long, int32_t > p)
void setCrossingAngleWithTime(std::pair< long, o2::units::AngleRad_t > p)
int getBeamA(beamDirection beam) const
void translateBucketsToBCNumbers(std::vector< int32_t > &bcNb, std::vector< int32_t > &buckets, int beam)
helper function for BunchFilling
const std::string & getInjectionScheme() const
float getBeamZoverA(beamDirection beam) const
int getBeamZ(beamDirection beam) const
getters/setters for given beam A and Z info, encoded as A<<16+Z
void setBunchFillingWithTime(long t, o2::BunchFilling v)
o2::units::AngleRad_t getCrossingAngle() const
void setBeamEnergyPerZWithTime(long t, int32_t v)
void setAtomicNumberB1WithTime(std::pair< long, int32_t > p)
void setFillNumberWithTime(long t, int32_t v)
const o2::BunchFilling & getBunchFilling() const
float getBeamEnergyPerZinGeV() const
int32_t getAtomicNumberB2() const
int32_t getBeamEnergyPerZ() const
long getInjectionSchemeTime() const
static GRPLHCIFData * loadFrom(const std::string &grpLHCIFFileName="")
void setFillNumberWithTime(std::pair< long, int32_t > p)
static const std::unordered_map< unsigned int, unsigned int > mZtoA
void setCrossingAngleWithTime(long t, o2::units::AngleRad_t v)
void setAtomicNumberB2WithTime(long t, int32_t v)
int32_t getAtomicNumberB1() const
int32_t getFillNumber() const
float getBeamEnergyPerNucleon(beamDirection beam) const
getters/setters for beam energy per charge and per nucleon
void setInjectionSchemeWithTime(std::pair< long, std::string > p)
const std::pair< long, std::string > & getInjectionSchemeWithTime() const
void setAtomicNumberB2WithTime(std::pair< long, int32_t > p)
std::pair< long, int32_t > getAtomicNumberB1WithTime() const
void setInjectionSchemeWithTime(long t, std::string v)
std::pair< long, int32_t > getAtomicNumberB2WithTime() const
const std::pair< long, o2::BunchFilling > & getBunchFillingWithTime() const
int getBeamZ(int beam) const
int getBeamA(int beam) const
float getSqrtS() const
calculate center of mass energy per nucleon collision
const GLdouble * v
Definition glcorearb.h:832
GLboolean GLboolean GLboolean b
Definition glcorearb.h:1233
GLboolean GLboolean GLboolean GLboolean a
Definition glcorearb.h:1233
GLdouble GLdouble GLdouble z
Definition glcorearb.h:843
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...