129 cout << __func__ <<
' ' << slice <<
" start" << endl;
133 auto tIn1 = flow1.GetInputTree(slice);
134 auto tIn2 = flow2.GetInputTree(slice);
135 auto tOut2 = flow2.GetOutputTree(output);
136 auto tOut1 = flow1.GetOutputTree(output);
143 auto isMC = metainfo1.Get<
bool>(
"flags",
"isMC");
144 auto minpt = metainfo1.Get<
float>(
"skims",
"jets",
"minpt");
145 auto R = metainfo1.Get<
int>(
"flags",
"R");
149 auto recEvent1 = flow1.GetBranchReadWrite<RecEvent>(
"recEvent");
150 auto recEvent2 = flow2.GetBranchReadOnly <RecEvent>(
"recEvent");
151 auto genEvent1 =
isMC ? flow1.GetBranchReadWrite<GenEvent>(
"genEvent") :
nullptr;
152 auto genEvent2 =
isMC ? flow2.GetBranchReadOnly <GenEvent>(
"genEvent") :
nullptr;
153 auto recJets1 = flow1.GetBranchReadWrite<vector<RecJet>>(
"recJets");
154 auto recJets2 = flow2.GetBranchReadOnly <vector<RecJet>>(
"recJets");
155 auto genJets1 =
isMC ? flow1.GetBranchReadWrite<vector<GenJet>>(
"genJets") :
nullptr;
156 auto genJets2 =
isMC ? flow2.GetBranchReadOnly <vector<GenJet>>(
"genJets") :
nullptr;
158 const auto strategyStr =
config.get<
string>(
"corrections.event_mixing.overlap");
162 for (
DT::Looper looper1(tIn1), looper2(tIn2); looper1() && looper2(); ++looper1, ++looper2) {
166 if (recJets1 && recJets2) {
168 recJets1->insert(recJets1->end(), recJets2->begin(), recJets2->end());
169 recEvent1->weights.front() *= recEvent2->weights.front();
171 sort(recJets1->begin(), recJets1->end(),
pt_sort);
174 case RemovalStrategy::DeltaR:
177 case RemovalStrategy::AntikT:{
179 vector<fjcore::PseudoJet> inclusive_recJets =
cluster(*recJets1, R/10.0);
184 if (nJets1 != nJets2) {
185 cout <<
"Jet multiplicity changed: " << nJets1 <<
" -> " << nJets2 << endl;
187 for (
const auto& jet : *recJets1) cout << jet.CorrPt() <<
" ";
188 cout <<
"\nAnti-kT: ";
189 for (
const auto& jet : inclusive_recJets) cout << jet.pt() <<
" ";
198 if (
isMC && genJets1 && genJets2) {
200 genJets1->insert(genJets1->end(), genJets2->begin(), genJets2->end());
201 genEvent1->weights.front() *= genEvent2->weights.front();
203 sort(genJets1->begin(), genJets1->end(),
pt_sort);
206 case RemovalStrategy::DeltaR:
209 case RemovalStrategy::AntikT:{
211 vector<fjcore::PseudoJet> inclusive_genJets =
cluster(*genJets1, R/10.0);
216 if (nJets1 != nJets2) {
217 cout <<
"Jet multiplicity changed: " << nJets1 <<
" -> " << nJets2 << endl;
219 for (
const auto& jet : *genJets1) cout << jet.CorrPt() <<
" ";
220 cout <<
"\nAnti-kT: ";
221 for (
const auto& jet : inclusive_genJets) cout << jet.pt() <<
" ";
231 if (steering &
DT::fill) tOut1->Fill();
234 metainfo1.Set<
bool>(
"git",
"complete",
true);
235 cout << __func__ <<
' ' << slice <<
" stop" << endl;