@@ -49,16 +49,18 @@ enum TriggerAliases { AllBCs = 0,
4949 FT0CE = 2 ,
5050 FDD = 3 ,
5151 NTriggerAliases };
52+
53+ // SL types must be after all the others
5254enum BCCategories { BCA = 0 , // A side BCs (bunch-crossings that had beam only from A side)
5355 BCB, // B type BCs (bunch-crossings that had beam from both sides)
5456 BCC, // C side BCs (bunch-crossings that had beam only from C side)
5557 BCE, // empty BCs (bunch-crossings that did not have beam from either side)
5658 BCL, // leading BCs (bunch-crossings that have not-B BCs for a configurable number of preceding BCs)
5759 BCLE, // leading BCs (bunch-crossings that did not have interacting bunches for a configurable number of preceding BCs)
58- BCSLFDD, // super-leading BCs for FDD (bunch-crossings that had beam from both sides but did not have FDD activity for a configurable number of preceding BCs)
59- BCSLFT0, // super-leading BCs for FT0 (bunch-crossings that had beam from both sides but did not have FT0 activity for a configurable number of preceding BCs)
6060 BCNL, // non-leading BCs of type B (bunch-crossings that come after a BCL and are of type B)
6161 BCNLE, // non-leading BCs of type B (bunch-crossings that come after a BCLE and are of type B)
62+ BCSLFDD, // super-leading BCs for FDD (bunch-crossings that had beam from both sides but did not have FDD activity for a configurable number of preceding BCs)
63+ BCSLFT0, // super-leading BCs for FT0 (bunch-crossings that had beam from both sides but did not have FT0 activity for a configurable number of preceding BCs)
6264 BCNSLFDD, // non-super-leading BCs for FDD of type B (bunch-crossings that had beam from both sides but are not SL for FDD activity for a configurable number of preceding BCs)
6365 BCNSLFT0, // non-super-leading BCs for FT0 of type B (bunch-crossings that had beam from both sides but are not SL for FT0 activity for a configurable number of preceding BCs)
6466 NBCCategories };
@@ -96,8 +98,8 @@ struct LumiStabilityPP {
9698
9799 std::array<std::array<std::map<int , std::shared_ptr<TH1>>, NBCCategories>, NTriggerAliases> histBcVsTime;
98100 std::array<std::array<std::map<int , std::shared_ptr<TH1>>, NBCCategories>, NTriggerAliases> histBcVsBcId;
99- std::array<std::array<std::map<int , std::shared_ptr<TH1>>, NBCCategories>, NTriggerAliases> histMu ;
100- std::array<std::array<std:: map<int , std::shared_ptr<TH2 >>, NBCCategories>, NTriggerAliases> histMuPerBcId;
101+ std::array<std::array<std::map<int , std::shared_ptr<TH1>>, NBCCategories>, NTriggerAliases> histBcInspectVsBcId ;
102+ std::array<std::map<int , std::shared_ptr<TH1 >>, BCSLFDD> histBcPattern; // undefined for BC(N)SL
101103 std::map<int , std::shared_ptr<TH1>> histNBcsVsTime;
102104 std::map<int , std::shared_ptr<TH1>> histNBcsVsBcId;
103105 std::map<int , std::shared_ptr<TH1>> histTfPerMin;
@@ -106,22 +108,24 @@ struct LumiStabilityPP {
106108 std::map<int , std::shared_ptr<TH1>> histInteractionRate;
107109
108110 static constexpr std::string_view NBCsVsTimeHistNames[NTriggerAliases][NBCCategories] =
109- {{" AllBCs/BC_A/nBCsVsTime" , " AllBCs/BC_B/nBCsVsTime" , " AllBCs/BC_C/nBCsVsTime" , " AllBCs/BC_E/nBCsVsTime" , " AllBCs/BC_L/nBCsVsTime" , " AllBCs/BC_LE/nBCsVsTime" , " AllBCs/BC_SL_FDD /nBCsVsTime" , " AllBCs/BC_SL_FT0 /nBCsVsTime" , " AllBCs/BC_NL /nBCsVsTime" , " AllBCs/BC_NLE /nBCsVsTime" , " AllBCs/BC_NSL_FT0/nBCsVsTime" , " AllBCs/BC_NSL_FDD/nBCsVsTime" },
110- {" FT0VTx/BC_A/nBCsVsTime" , " FT0VTx/BC_B/nBCsVsTime" , " FT0VTx/BC_C/nBCsVsTime" , " FT0VTx/BC_E/nBCsVsTime" , " FT0VTx/BC_L/nBCsVsTime" , " FT0VTx/BC_LE/nBCsVsTime" , " FT0VTx/BC_SL_FDD /nBCsVsTime" , " FT0VTx/BC_SL_FT0 /nBCsVsTime" , " FT0VTx/BC_NL /nBCsVsTime" , " FT0VTx/BC_NLE /nBCsVsTime" , " FT0VTx/BC_NSL_FT0/nBCsVsTime" , " FT0VTx/BC_NSL_FDD/nBCsVsTime" },
111- {" FT0CE/BC_A/nBCsVsTime" , " FT0CE/BC_B/nBCsVsTime" , " FT0CE/BC_C/nBCsVsTime" , " FT0CE/BC_E/nBCsVsTime" , " FT0CE/BC_L/nBCsVsTime" , " FT0CE/BC_LE/nBCsVsTime" , " FT0CE/BC_SL_FDD /nBCsVsTime" , " FT0CE/BC_SL_FT0 /nBCsVsTime" , " FT0CE/BC_NL /nBCsVsTime" , " FT0CE/BC_NLE /nBCsVsTime" , " FT0CE/BC_NSL_FT0/nBCsVsTime" , " FT0CE/BC_NSL_FDD/nBCsVsTime" },
112- {" FDD/BC_A/nBCsVsTime" , " FDD/BC_B/nBCsVsTime" , " FDD/BC_C/nBCsVsTime" , " FDD/BC_E/nBCsVsTime" , " FDD/BC_L/nBCsVsTime" , " FDD/BC_LE/nBCsVsTime" , " FDD/BC_SL_FDD /nBCsVsTime" , " FDD/BC_SL_FT0 /nBCsVsTime" , " FDD/BC_NL /nBCsVsTime" , " FDD/BC_NLE /nBCsVsTime" , " FDD/BC_NSL_FT0/nBCsVsTime" , " FDD/BC_NSL_FDD/nBCsVsTime" }};
111+ {{" AllBCs/BC_A/nBCsVsTime" , " AllBCs/BC_B/nBCsVsTime" , " AllBCs/BC_C/nBCsVsTime" , " AllBCs/BC_E/nBCsVsTime" , " AllBCs/BC_L/nBCsVsTime" , " AllBCs/BC_LE/nBCsVsTime" , " AllBCs/BC_NL /nBCsVsTime" , " AllBCs/BC_NLE /nBCsVsTime" , " AllBCs/BC_SL_FDD /nBCsVsTime" , " AllBCs/BC_SL_FT0 /nBCsVsTime" , " AllBCs/BC_NSL_FT0/nBCsVsTime" , " AllBCs/BC_NSL_FDD/nBCsVsTime" },
112+ {" FT0VTx/BC_A/nBCsVsTime" , " FT0VTx/BC_B/nBCsVsTime" , " FT0VTx/BC_C/nBCsVsTime" , " FT0VTx/BC_E/nBCsVsTime" , " FT0VTx/BC_L/nBCsVsTime" , " FT0VTx/BC_LE/nBCsVsTime" , " FT0VTx/BC_NL /nBCsVsTime" , " FT0VTx/BC_NLE /nBCsVsTime" , " FT0VTx/BC_SL_FDD /nBCsVsTime" , " FT0VTx/BC_SL_FT0 /nBCsVsTime" , " FT0VTx/BC_NSL_FT0/nBCsVsTime" , " FT0VTx/BC_NSL_FDD/nBCsVsTime" },
113+ {" FT0CE/BC_A/nBCsVsTime" , " FT0CE/BC_B/nBCsVsTime" , " FT0CE/BC_C/nBCsVsTime" , " FT0CE/BC_E/nBCsVsTime" , " FT0CE/BC_L/nBCsVsTime" , " FT0CE/BC_LE/nBCsVsTime" , " FT0CE/BC_NL /nBCsVsTime" , " FT0CE/BC_NLE /nBCsVsTime" , " FT0CE/BC_SL_FDD /nBCsVsTime" , " FT0CE/BC_SL_FT0 /nBCsVsTime" , " FT0CE/BC_NSL_FT0/nBCsVsTime" , " FT0CE/BC_NSL_FDD/nBCsVsTime" },
114+ {" FDD/BC_A/nBCsVsTime" , " FDD/BC_B/nBCsVsTime" , " FDD/BC_C/nBCsVsTime" , " FDD/BC_E/nBCsVsTime" , " FDD/BC_L/nBCsVsTime" , " FDD/BC_LE/nBCsVsTime" , " FDD/BC_NL /nBCsVsTime" , " FDD/BC_NLE /nBCsVsTime" , " FDD/BC_SL_FDD /nBCsVsTime" , " FDD/BC_SL_FT0 /nBCsVsTime" , " FDD/BC_NSL_FT0/nBCsVsTime" , " FDD/BC_NSL_FDD/nBCsVsTime" }};
113115
114116 static constexpr std::string_view NBCsVsBCIDHistNames[NTriggerAliases][NBCCategories] =
115- {{" AllBCs/BC_A/nBCsVsBCID" , " AllBCs/BC_B/nBCsVsBCID" , " AllBCs/BC_C/nBCsVsBCID" , " AllBCs/BC_E/nBCsVsBCID" , " AllBCs/BC_L/nBCsVsBCID" , " AllBCs/BC_LE/nBCsVsBCID" , " AllBCs/BC_SL_FDD /nBCsVsBCID" , " AllBCs/BC_SL_FT0 /nBCsVsBCID" , " AllBCs/BC_NL /nBCsVsBCID" , " AllBCs/BC_NLE /nBCsVsBCID" , " AllBCs/BC_NSL_FT0/nBCsVsBCID" , " AllBCs/BC_NSL_FDD/nBCsVsBCID" },
116- {" FT0VTx/BC_A/nBCsVsBCID" , " FT0VTx/BC_B/nBCsVsBCID" , " FT0VTx/BC_C/nBCsVsBCID" , " FT0VTx/BC_E/nBCsVsBCID" , " FT0VTx/BC_L/nBCsVsBCID" , " FT0VTx/BC_LE/nBCsVsBCID" , " FT0VTx/BC_SL_FDD /nBCsVsBCID" , " FT0VTx/BC_SL_FT0 /nBCsVsBCID" , " FT0VTx/BC_NL /nBCsVsBCID" , " FT0VTx/BC_NLE /nBCsVsBCID" , " FT0VTx/BC_NSL_FT0/nBCsVsBCID" , " FT0VTx/BC_NSL_FDD/nBCsVsBCID" },
117- {" FT0CE/BC_A/nBCsVsBCID" , " FT0CE/BC_B/nBCsVsBCID" , " FT0CE/BC_C/nBCsVsBCID" , " FT0CE/BC_E/nBCsVsBCID" , " FT0CE/BC_L/nBCsVsBCID" , " FT0CE/BC_LE/nBCsVsBCID" , " FT0CE/BC_SL_FDD /nBCsVsBCID" , " FT0CE/BC_SL_FT0 /nBCsVsBCID" , " FT0CE/BC_NL /nBCsVsBCID" , " FT0CE/BC_NLE /nBCsVsBCID" , " FT0CE/BC_NSL_FT0/nBCsVsBCID" , " FT0CE/BC_NSL_FDD/nBCsVsBCID" },
118- {" FDD/BC_A/nBCsVsBCID" , " FDD/BC_B/nBCsVsBCID" , " FDD/BC_C/nBCsVsBCID" , " FDD/BC_E/nBCsVsBCID" , " FDD/BC_L/nBCsVsBCID" , " FDD/BC_LE/nBCsVsBCID" , " FDD/BC_SL_FDD /nBCsVsBCID" , " FDD/BC_SL_FT0 /nBCsVsBCID" , " FDD/BC_NL /nBCsVsBCID" , " FDD/BC_NLE /nBCsVsBCID" , " FDD/BC_NSL_FT0/nBCsVsBCID" , " FDD/BC_NSL_FDD/nBCsVsBCID" }};
117+ {{" AllBCs/BC_A/nBCsVsBCID" , " AllBCs/BC_B/nBCsVsBCID" , " AllBCs/BC_C/nBCsVsBCID" , " AllBCs/BC_E/nBCsVsBCID" , " AllBCs/BC_L/nBCsVsBCID" , " AllBCs/BC_LE/nBCsVsBCID" , " AllBCs/BC_NL /nBCsVsBCID" , " AllBCs/BC_NLE /nBCsVsBCID" , " AllBCs/BC_SL_FDD /nBCsVsBCID" , " AllBCs/BC_SL_FT0 /nBCsVsBCID" , " AllBCs/BC_NSL_FT0/nBCsVsBCID" , " AllBCs/BC_NSL_FDD/nBCsVsBCID" },
118+ {" FT0VTx/BC_A/nBCsVsBCID" , " FT0VTx/BC_B/nBCsVsBCID" , " FT0VTx/BC_C/nBCsVsBCID" , " FT0VTx/BC_E/nBCsVsBCID" , " FT0VTx/BC_L/nBCsVsBCID" , " FT0VTx/BC_LE/nBCsVsBCID" , " FT0VTx/BC_NL /nBCsVsBCID" , " FT0VTx/BC_NLE /nBCsVsBCID" , " FT0VTx/BC_SL_FDD /nBCsVsBCID" , " FT0VTx/BC_SL_FT0 /nBCsVsBCID" , " FT0VTx/BC_NSL_FT0/nBCsVsBCID" , " FT0VTx/BC_NSL_FDD/nBCsVsBCID" },
119+ {" FT0CE/BC_A/nBCsVsBCID" , " FT0CE/BC_B/nBCsVsBCID" , " FT0CE/BC_C/nBCsVsBCID" , " FT0CE/BC_E/nBCsVsBCID" , " FT0CE/BC_L/nBCsVsBCID" , " FT0CE/BC_LE/nBCsVsBCID" , " FT0CE/BC_NL /nBCsVsBCID" , " FT0CE/BC_NLE /nBCsVsBCID" , " FT0CE/BC_SL_FDD /nBCsVsBCID" , " FT0CE/BC_SL_FT0 /nBCsVsBCID" , " FT0CE/BC_NSL_FT0/nBCsVsBCID" , " FT0CE/BC_NSL_FDD/nBCsVsBCID" },
120+ {" FDD/BC_A/nBCsVsBCID" , " FDD/BC_B/nBCsVsBCID" , " FDD/BC_C/nBCsVsBCID" , " FDD/BC_E/nBCsVsBCID" , " FDD/BC_L/nBCsVsBCID" , " FDD/BC_LE/nBCsVsBCID" , " FDD/BC_NL /nBCsVsBCID" , " FDD/BC_NLE /nBCsVsBCID" , " FDD/BC_SL_FDD /nBCsVsBCID" , " FDD/BC_SL_FT0 /nBCsVsBCID" , " FDD/BC_NSL_FT0/nBCsVsBCID" , " FDD/BC_NSL_FDD/nBCsVsBCID" }};
119121
120122 static constexpr std::string_view NBCsInspectVsBCIDHistNames[NTriggerAliases][NBCCategories] =
121- {{" AllBCs/BC_A/nBCsInspectedVsBCID" , " AllBCs/BC_B/nBCsInspectedVsBCID" , " AllBCs/BC_C/nBCsInspectedVsBCID" , " AllBCs/BC_E/nBCsInspectedVsBCID" , " AllBCs/BC_L/nBCsInspectedVsBCID" , " AllBCs/BC_LE/nBCsInspectedVsBCID" , " AllBCs/BC_SL_FDD/nBCsInspectedVsBCID" , " AllBCs/BC_SL_FT0/nBCsInspectedVsBCID" , " AllBCs/BC_NL/nBCsInspectedVsBCID" , " AllBCs/BC_NLE/nBCsInspectedVsBCID" , " AllBCs/BC_NSL_FT0/nBCsInspectedVsBCID" , " AllBCs/BC_NSL_FDD/nBCsInspectedVsBCID" },
122- {" FT0VTx/BC_A/nBCsInspectedVsBCID" , " FT0VTx/BC_B/nBCsInspectedVsBCID" , " FT0VTx/BC_C/nBCsInspectedVsBCID" , " FT0VTx/BC_E/nBCsInspectedVsBCID" , " FT0VTx/BC_L/nBCsInspectedVsBCID" , " FT0VTx/BC_LE/nBCsInspectedVsBCID" , " FT0VTx/BC_SL_FDD/nBCsInspectedVsBCID" , " FT0VTx/BC_SL_FT0/nBCsInspectedVsBCID" , " FT0VTx/BC_NL/nBCsInspectedVsBCID" , " FT0VTx/BC_NLE/nBCsInspectedVsBCID" , " FT0VTx/BC_NSL_FT0/nBCsInspectedVsBCID" , " FT0VTx/BC_NSL_FDD/nBCsInspectedVsBCID" },
123- {" FT0CE/BC_A/nBCsInspectedVsBCID" , " FT0CE/BC_B/nBCsInspectedVsBCID" , " FT0CE/BC_C/nBCsInspectedVsBCID" , " FT0CE/BC_E/nBCsInspectedVsBCID" , " FT0CE/BC_L/nBCsInspectedVsBCID" , " FT0CE/BC_LE/nBCsInspectedVsBCID" , " FT0CE/BC_SL_FDD/nBCsInspectedVsBCID" , " FT0CE/BC_SL_FT0/nBCsInspectedVsBCID" , " FT0CE/BC_NL/nBCsInspectedVsBCID" , " FT0CE/BC_NLE/nBCsInspectedVsBCID" , " FT0CE/BC_NSL_FT0/nBCsInspectedVsBCID" , " FT0CE/BC_NSL_FDD/nBCsInspectedVsBCID" },
124- {" FDD/BC_A/nBCsInspectedVsBCID" , " FDD/BC_B/nBCsInspectedVsBCID" , " FDD/BC_C/nBCsInspectedVsBCID" , " FDD/BC_E/nBCsInspectedVsBCID" , " FDD/BC_L/nBCsInspectedVsBCID" , " FDD/BC_LE/nBCsInspectedVsBCID" , " FDD/BC_SL_FDD/nBCsInspectedVsBCID" , " FDD/BC_SL_FT0/nBCsInspectedVsBCID" , " FDD/BC_NL/nBCsInspectedVsBCID" , " FDD/BC_NLE/nBCsInspectedVsBCID" , " FDD/BC_NSL_FT0/nBCsInspectedVsBCID" , " FDD/BC_NSL_FDD/nBCsInspectedVsBCID" }};
123+ {{" AllBCs/BC_A/nBCsInspectedVsBCID" , " AllBCs/BC_B/nBCsInspectedVsBCID" , " AllBCs/BC_C/nBCsInspectedVsBCID" , " AllBCs/BC_E/nBCsInspectedVsBCID" , " AllBCs/BC_L/nBCsInspectedVsBCID" , " AllBCs/BC_LE/nBCsInspectedVsBCID" , " AllBCs/BC_NL/nBCsInspectedVsBCID" , " AllBCs/BC_NLE/nBCsInspectedVsBCID" , " AllBCs/BC_SL_FDD/nBCsInspectedVsBCID" , " AllBCs/BC_SL_FT0/nBCsInspectedVsBCID" , " AllBCs/BC_NSL_FT0/nBCsInspectedVsBCID" , " AllBCs/BC_NSL_FDD/nBCsInspectedVsBCID" },
124+ {" FT0VTx/BC_A/nBCsInspectedVsBCID" , " FT0VTx/BC_B/nBCsInspectedVsBCID" , " FT0VTx/BC_C/nBCsInspectedVsBCID" , " FT0VTx/BC_E/nBCsInspectedVsBCID" , " FT0VTx/BC_L/nBCsInspectedVsBCID" , " FT0VTx/BC_LE/nBCsInspectedVsBCID" , " FT0VTx/BC_NL/nBCsInspectedVsBCID" , " FT0VTx/BC_NLE/nBCsInspectedVsBCID" , " FT0VTx/BC_SL_FDD/nBCsInspectedVsBCID" , " FT0VTx/BC_SL_FT0/nBCsInspectedVsBCID" , " FT0VTx/BC_NSL_FT0/nBCsInspectedVsBCID" , " FT0VTx/BC_NSL_FDD/nBCsInspectedVsBCID" },
125+ {" FT0CE/BC_A/nBCsInspectedVsBCID" , " FT0CE/BC_B/nBCsInspectedVsBCID" , " FT0CE/BC_C/nBCsInspectedVsBCID" , " FT0CE/BC_E/nBCsInspectedVsBCID" , " FT0CE/BC_L/nBCsInspectedVsBCID" , " FT0CE/BC_LE/nBCsInspectedVsBCID" , " FT0CE/BC_NL/nBCsInspectedVsBCID" , " FT0CE/BC_NLE/nBCsInspectedVsBCID" , " FT0CE/BC_SL_FDD/nBCsInspectedVsBCID" , " FT0CE/BC_SL_FT0/nBCsInspectedVsBCID" , " FT0CE/BC_NSL_FT0/nBCsInspectedVsBCID" , " FT0CE/BC_NSL_FDD/nBCsInspectedVsBCID" },
126+ {" FDD/BC_A/nBCsInspectedVsBCID" , " FDD/BC_B/nBCsInspectedVsBCID" , " FDD/BC_C/nBCsInspectedVsBCID" , " FDD/BC_E/nBCsInspectedVsBCID" , " FDD/BC_L/nBCsInspectedVsBCID" , " FDD/BC_LE/nBCsInspectedVsBCID" , " FDD/BC_NL/nBCsInspectedVsBCID" , " FDD/BC_NLE/nBCsInspectedVsBCID" , " FDD/BC_SL_FDD/nBCsInspectedVsBCID" , " FDD/BC_SL_FT0/nBCsInspectedVsBCID" , " FDD/BC_NSL_FT0/nBCsInspectedVsBCID" , " FDD/BC_NSL_FDD/nBCsInspectedVsBCID" }};
127+
128+ static constexpr std::string_view PatternHistNames[BCSLFDD] = {" BC_A/BcPattern" , " BC_B/BcPattern" , " BC_C/BcPattern" , " BC_E/BcPattern" , " BC_L/BcPattern" , " BC_LE/BcPattern" , " BC_NL/BcPattern" , " BC_NLE/BcPattern" };
125129
126130 const AxisSpec timeAxis{2880 , 0 ., 2880 ., " #bf{t-t_{SOF} (min)}" }, bcIDAxis{nBCsPerOrbit, -0.5 , static_cast <float >(nBCsPerOrbit) - 0.5 , " #bf{BC ID in orbit}" };
127131
@@ -153,6 +157,10 @@ struct LumiStabilityPP {
153157 }
154158 }
155159 }
160+
161+ for (int iBCCategory{0 }; iBCCategory < BCSLFDD ; ++iBCCategory) {
162+ histBcPattern[iBCCategory][runNumber] = registry.add <TH1>(Form (" %d/%s" , runNumber, std::string (PatternHistNames[iBCCategory]).c_str ()), " BC Pattern;#bf{BC ID in orbit};" , HistType::kTH1D , {bcIDAxis});
163+ }
156164 }
157165
158166 void setLHCIFData (const auto & bc)
@@ -232,6 +240,30 @@ struct LumiStabilityPP {
232240 totalLeadingBCs[1 ]++;
233241 }
234242 }
243+ if (bcPatternA[iBC]) {
244+ histBcPattern[BCA][runNumber]->Fill (iBC);
245+ }
246+ if (bcPatternB[iBC]) {
247+ histBcPattern[BCB][runNumber]->Fill (iBC);
248+ if (!bcPatternL[iBC]) {
249+ histBcPattern[BCNL][runNumber]->Fill (iBC);
250+ }
251+ if (!bcPatternLE[iBC]) {
252+ histBcPattern[BCNLE][runNumber]->Fill (iBC);
253+ }
254+ }
255+ if (bcPatternC[iBC]) {
256+ histBcPattern[BCC][runNumber]->Fill (iBC);
257+ }
258+ if (bcPatternE[iBC]) {
259+ histBcPattern[BCE][runNumber]->Fill (iBC);
260+ }
261+ if (bcPatternL[iBC]) {
262+ histBcPattern[BCL][runNumber]->Fill (iBC);
263+ }
264+ if (bcPatternLE[iBC]) {
265+ histBcPattern[BCLE][runNumber]->Fill (iBC);
266+ }
235267 }
236268 LOG (info) << " bcPatternL creation complete. Total leading BCs found: " << totalLeadingBCs[0 ];
237269 LOG (info) << " bcPatternLE creation complete. Total leading BCs found: " << totalLeadingBCs[1 ];
0 commit comments