57 std::vector<int> bitVec = {};
58 std::vector<int> filledVec = {};
59 std::vector<int> emptyVec = {};
60 std::vector<int> unpairIsoVec = {};
61 std::vector<int> unpairNonIsoVec = {};
66 if ( !(bgWord & 1<<bkg) ) {
70 bitVec.push_back(bkg);
72 filledVec.push_back(bkg);
74 emptyVec.push_back(bkg);
75 }
else if (unpairIso) {
76 unpairIsoVec.push_back(bkg);
77 }
else if (unpairNonIso) {
78 unpairNonIsoVec.push_back(bkg);
83 auto bitSetFilled =
Collection(
"bitSetFilled",filledVec);
84 auto bitSetEmpty =
Collection(
"bitSetEmpty",emptyVec);
85 auto bitSetUnpairIso =
Collection(
"bitSetUnpairIso",unpairIsoVec);
86 auto bitSetUnpairNonIso =
Collection(
"bitSetUnpairNonIso",unpairNonIsoVec);
87 fill(group,bitSet,bitSetFilled,bitSetEmpty,bitSetUnpairIso,bitSetUnpairNonIso);
89 ATH_MSG_WARNING(
"Event data invalid. Background word histograms are being skipped.");
96 std::for_each(sctSP->begin(),sctSP->end(),[&nSctSPs](
const auto coll){if (coll) nSctSPs+=coll->size();});
99 std::for_each(pixSP->begin(),pixSP->end(),[&nPixSPs](
const auto coll){if (coll) nPixSPs+=coll->size();});
101 fill(group,nPixSPs,nSctSPs,unpairIso,unpairNonIso);
103 fill(
"lowMultiplicityPixGroup",nPixSPs,unpairIso,unpairNonIso);
106 fill(
"lowMultiplicitySctGroup",nSctSPs,unpairIso,unpairNonIso);
109 ATH_MSG_WARNING(
"Pixe/SCT Spacepoint data invalid. nPix/nSct is being skipped.");
114 auto LArECTimeDiff =
Scalar<float>(
"LArECTimeDiff", tps->timeA()-tps->timeC());
115 fill(group,LArECTimeDiff);
123 auto MBTStimeDiff =
Scalar<float>(
"MBTStimeDiff", mbtsTime->time());
124 fill(group,MBTStimeDiff);
127 ATH_MSG_WARNING(
"MBTSCollisionTime data invalid. MBTStimeDiff is being skipped.");
130 if ( tileCellContainer.
isValid() ) {
132 for (
auto tileCell : *tileCellContainer ) {
138 fill(group,MBTSCount);
140 ATH_MSG_WARNING(
"TileCell data invalid. MBTSvetoHits is being skipped.");
148 fill(group,LUCIDCounter);
154 if (beamBackgroundData.
isValid() ) {
156 std::vector<double> muSegXVec = {};
157 std::vector<double> muSegYVec = {};
158 for (
int iSeg=0; iSeg<beamBackgroundData->GetNumSegment(); iSeg++) {
159 const Trk::Segment* trkSeg = beamBackgroundData->GetIndexSeg(iSeg);
162 muSegXVec.push_back(muonSeg->
x()*1e-3);
163 muSegYVec.push_back(muonSeg->
y()*1e-3);
166 auto muSegXCollection =
Collection(
"muonSegmentX",muSegXVec);
167 auto muSegYCollection =
Collection(
"muonSegmentY",muSegYVec);
169 std::vector<double> clusterEnergyVec = {};
170 std::vector<double> clusterEtaVec = {};
171 std::vector<double> clusterPhiVec = {};
172 std::vector<double> clusterTimeVec = {};
173 for (
int i=0; i<beamBackgroundData->GetNumMatched(); i++) {
175 clusterEnergyVec.push_back(cluster->
e()*1e-3);
176 clusterEtaVec.push_back(cluster->
eta());
177 clusterPhiVec.push_back(cluster->
phi());
178 clusterTimeVec.push_back(cluster->
time());
180 auto clusterEnergyCollection =
Collection(
"clusterEnergy",clusterEnergyVec);
181 auto clusterEtaCollection =
Collection(
"clusterEta",clusterEtaVec);
182 auto clusterPhiCollection =
Collection(
"clusterPhi",clusterPhiVec);
183 auto clusterTimeCollection =
Collection(
"clusterTime",clusterTimeVec);
185 fill(group,muSegXCollection,muSegYCollection,clusterEnergyCollection,
186 clusterEtaCollection,clusterPhiCollection,clusterTimeCollection);
189 if ( beamBackgroundData->GetNumNoTimeTight() ) {
190 std::vector<int> jetIndexVec = {};
191 for (
int i=0; i<beamBackgroundData->GetNumJet(); i++) {
192 const xAOD::Jet*
jet = beamBackgroundData->GetIndexJet(i);
193 int jetIndex = beamBackgroundData->GetIndexJet(
jet);
194 jetIndexVec.push_back(jetIndex);
206 std::vector<float> sumPt_v;
208 bool hasSumPt =
jet->getAttribute<std::vector<float>>(trkPtAttr, sumPt_v);
209 double sumPtTrk = hasSumPt ? sumPt_v[0] : 0.;
215 auto jetIndexCollection =
Collection(
"jetIndex",jetIndexVec);
218 auto isAC =
Scalar<bool>(
"isAC", beamBackgroundData->GetDirection()>0);
219 auto isCA =
Scalar<bool>(
"isCA", beamBackgroundData->GetDirection()<0);
220 bool isOneSided = beamBackgroundData->GetNumOneSidedLoose();
221 auto isACOneSided =
Scalar<bool>(
"isACOneSided", isAC && isOneSided );
222 auto isCAOneSided =
Scalar<bool>(
"isCAOneSided", isCA && isOneSided );
223 fill(group,jetIndexCollection,bcid,isAC,isCA,isACOneSided,isCAOneSided);
226 ATH_MSG_WARNING(
"BeamBackgroundData data invalid. Muons are being skipped.");
230 if (vertexContainer.
isValid()) {
232 auto nVertex =
Scalar<int>(
"nVertex", vertexContainer->size()-1);
233 fill(group,nVertex,unpairIso,unpairNonIso);
235 ATH_MSG_DEBUG(
"Primary vertex data invalid. Primary vertex counts are being skipped.");
237 return StatusCode::SUCCESS;