File indexing completed on 2024-04-06 12:02:31
0001 #ifndef CondFormats_RunInfo_FillInfo_H
0002 #define CondFormats_RunInfo_FillInfo_H
0003
0004 #include "CondFormats/Serialization/interface/Serializable.h"
0005
0006 #include "CondFormats/Common/interface/Time.h"
0007 #include <bitset>
0008 #include <iostream>
0009 #include <string>
0010 #include <sstream>
0011 #include <vector>
0012
0013 class FillInfo {
0014 public:
0015 enum FillType { UNKNOWN = 0, PROTONS = 1, IONS = 2, COSMICS = 3, GAP = 4 };
0016 enum ParticleType { NONE = 0, PROTON = 1, PB82 = 2, AR18 = 3, D = 4, XE54 = 5 };
0017 typedef FillType FillTypeId;
0018 typedef ParticleType ParticleTypeId;
0019 FillInfo();
0020 FillInfo(unsigned short const &lhcFill, bool const &fromData = true);
0021 ~FillInfo();
0022
0023
0024 static size_t const bunchSlots = 3564;
0025
0026
0027 static size_t const availableBunchSlots = 2808;
0028
0029
0030 void setFill(unsigned short const &lhcFill, bool const &fromData = true);
0031
0032
0033 unsigned short const fillNumber() const;
0034
0035 bool const isData() const;
0036
0037 unsigned short const bunchesInBeam1() const;
0038
0039 unsigned short const bunchesInBeam2() const;
0040
0041 unsigned short const collidingBunches() const;
0042
0043 unsigned short const targetBunches() const;
0044
0045 FillTypeId const fillType() const;
0046
0047 ParticleTypeId const particleTypeForBeam1() const;
0048
0049 ParticleTypeId const particleTypeForBeam2() const;
0050
0051 float const crossingAngle() const;
0052
0053 float const betaStar() const;
0054
0055 float const intensityForBeam1() const;
0056
0057 float const intensityForBeam2() const;
0058
0059 float const energy() const;
0060
0061 cond::Time_t const createTime() const;
0062
0063 cond::Time_t const beginTime() const;
0064
0065 cond::Time_t const endTime() const;
0066
0067 std::string const &injectionScheme() const;
0068
0069
0070
0071 bool is25nsBunchSpacing() const;
0072
0073
0074 bool isBunchInBeam1(size_t const &bunch) const;
0075
0076 bool isBunchInBeam2(size_t const &bunch) const;
0077
0078
0079 std::vector<unsigned short> bunchConfigurationForBeam1() const;
0080
0081 std::vector<unsigned short> bunchConfigurationForBeam2() const;
0082
0083
0084 void setBunchesInBeam1(unsigned short const &bunches);
0085
0086 void setBunchesInBeam2(unsigned short const &bunches);
0087
0088 void setCollidingBunches(unsigned short const &collidingBunches);
0089
0090 void setTargetBunches(unsigned short const &targetBunches);
0091
0092 void setFillType(FillTypeId const &fillType);
0093
0094 void setParticleTypeForBeam1(ParticleTypeId const &particleType);
0095
0096 void setParticleTypeForBeam2(ParticleTypeId const &particleType);
0097
0098 void setCrossingAngle(float const &angle);
0099
0100 void setBetaStar(float const &betaStar);
0101
0102 void setIntensityForBeam1(float const &intensity);
0103
0104 void setIntensityForBeam2(float const &intensity);
0105
0106 void setEnergy(float const &energy);
0107
0108 void setCreationTime(cond::Time_t const &createTime);
0109
0110 void setBeginTime(cond::Time_t const &beginTime);
0111
0112 void setEndTime(cond::Time_t const &endTime);
0113
0114 void setInjectionScheme(std::string const &injectionScheme);
0115
0116
0117 void setBeamInfo(unsigned short const &bunches1,
0118 unsigned short const &bunches2,
0119 unsigned short const &collidingBunches,
0120 unsigned short const &targetBunches,
0121 FillTypeId const &fillType,
0122 ParticleTypeId const &particleType1,
0123 ParticleTypeId const &particleType2,
0124 float const &angle,
0125 float const &beta,
0126 float const &intensity1,
0127 float const &intensity2,
0128 float const &energy,
0129 cond::Time_t const &createTime,
0130 cond::Time_t const &beginTime,
0131 cond::Time_t const &endTime,
0132 std::string const &scheme,
0133 std::bitset<bunchSlots + 1> const &bunchConf1,
0134 std::bitset<bunchSlots + 1> const &bunchConf2);
0135
0136
0137 void print(std::stringstream &ss) const;
0138
0139 protected:
0140 std::bitset<bunchSlots + 1> const &bunchBitsetForBeam1() const;
0141
0142 std::bitset<bunchSlots + 1> const &bunchBitsetForBeam2() const;
0143
0144 void setBunchBitsetForBeam1(std::bitset<bunchSlots + 1> const &bunchConfiguration);
0145
0146 void setBunchBitsetForBeam2(std::bitset<bunchSlots + 1> const &bunchConfiguration);
0147
0148 private:
0149 bool m_isData;
0150 unsigned short m_lhcFill;
0151 unsigned short m_bunches1, m_bunches2, m_collidingBunches, m_targetBunches;
0152 FillTypeId m_fillType;
0153 ParticleTypeId m_particles1, m_particles2;
0154 float m_crossingAngle, m_betastar, m_intensity1, m_intensity2, m_energy;
0155 cond::Time_t m_createTime, m_beginTime, m_endTime;
0156 std::string m_injectionScheme;
0157
0158
0159
0160 std::bitset<bunchSlots + 1> m_bunchConfiguration1, m_bunchConfiguration2;
0161
0162 COND_SERIALIZABLE;
0163 };
0164
0165 std::ostream &operator<<(std::ostream &, FillInfo fillInfo);
0166
0167 #endif