Closed gordonwatts closed 5 years ago
StatusCode query :: execute ()
{
// Here you do everything that needs to be done on every single
// events, e.g. read input variables, apply cuts, and fill
// histograms and trees. This is where most of your actual analysis
// code will go.
{
const xAOD::JetContainer* jets0;
{
const xAOD::JetContainer* result = 0;
ANA_CHECK (evtStore()->retrieve(result, "AntiKt4EMTopoJets"));
jets0 = result;
}
for (auto i_obj26 : *jets0)
{
if (((i_obj26->pt()/1000.0)>40.0))
{
const xAOD::EventInfo* eventinfo1;
std::vector<double> jets2;
std::vector<double> jets3;
std::vector<double> jets4;
std::vector<double> jets5;
std::vector<double> jets6;
std::vector<double> jets7;
std::vector<double> jets8;
std::vector<double> jets9;
std::vector<double> jets10;
std::vector<double> jets11;
std::vector<double> jets12;
std::vector<double> jets13;
std::vector<double> jets14;
std::vector<double> jets15;
std::vector<double> jets16;
std::vector<double> jets17;
std::vector<double> jets18;
std::vector<double> jets19;
std::vector<double> jets20;
std::vector<double> jets21;
std::vector<double> jets22;
std::vector<double> jets23;
std::vector<double> jets24;
std::vector<double> jets25;
{
const xAOD::EventInfo* result = 0;
ANA_CHECK (evtStore()->retrieve(result, "EventInfo"));
eventinfo1 = result;
}
{
auto result = i_obj26->getAttribute<std::vector<double>>("EnergyPerSampling");
jets2 = result;
}
{
auto result = i_obj26->getAttribute<std::vector<double>>("EnergyPerSampling");
jets3 = result;
}
{
auto result = i_obj26->getAttribute<std::vector<double>>("EnergyPerSampling");
jets4 = result;
}
{
auto result = i_obj26->getAttribute<std::vector<double>>("EnergyPerSampling");
jets5 = result;
}
{
auto result = i_obj26->getAttribute<std::vector<double>>("EnergyPerSampling");
jets6 = result;
}
{
auto result = i_obj26->getAttribute<std::vector<double>>("EnergyPerSampling");
jets7 = result;
}
{
auto result = i_obj26->getAttribute<std::vector<double>>("EnergyPerSampling");
jets8 = result;
}
{
auto result = i_obj26->getAttribute<std::vector<double>>("EnergyPerSampling");
jets9 = result;
}
{
auto result = i_obj26->getAttribute<std::vector<double>>("EnergyPerSampling");
jets10 = result;
}
{
auto result = i_obj26->getAttribute<std::vector<double>>("EnergyPerSampling");
jets11 = result;
}
{
auto result = i_obj26->getAttribute<std::vector<double>>("EnergyPerSampling");
jets12 = result;
}
{
auto result = i_obj26->getAttribute<std::vector<double>>("EnergyPerSampling");
jets13 = result;
}
{
auto result = i_obj26->getAttribute<std::vector<double>>("EnergyPerSampling");
jets14 = result;
}
{
auto result = i_obj26->getAttribute<std::vector<double>>("EnergyPerSampling");
jets15 = result;
}
{
auto result = i_obj26->getAttribute<std::vector<double>>("EnergyPerSampling");
jets16 = result;
}
{
auto result = i_obj26->getAttribute<std::vector<double>>("EnergyPerSampling");
jets17 = result;
}
{
auto result = i_obj26->getAttribute<std::vector<double>>("EnergyPerSampling");
jets18 = result;
}
{
auto result = i_obj26->getAttribute<std::vector<double>>("EnergyPerSampling");
jets19 = result;
}
{
auto result = i_obj26->getAttribute<std::vector<double>>("EnergyPerSampling");
jets20 = result;
}
{
auto result = i_obj26->getAttribute<std::vector<double>>("EnergyPerSampling");
jets21 = result;
}
{
auto result = i_obj26->getAttribute<std::vector<double>>("EnergyPerSampling");
jets22 = result;
}
{
auto result = i_obj26->getAttribute<std::vector<double>>("EnergyPerSampling");
jets23 = result;
}
{
auto result = i_obj26->getAttribute<std::vector<double>>("EnergyPerSampling");
jets24 = result;
}
{
auto result = i_obj26->getAttribute<std::vector<double>>("EnergyPerSampling");
jets25 = result;
}
_RunNumber27 = eventinfo1->runNumber();
_EventNumber28 = eventinfo1->eventNumber();
_JetEta30 = i_obj26->eta();
_EMM_BL031 = (jets2.at(0)/1000.0);
_EMM_BL132 = (jets3.at(1)/1000.0);
_EMM_BL233 = (jets4.at(2)/1000.0);
_EMM_BL334 = (jets5.at(3)/1000.0);
_EMM_EL035 = (jets6.at(4)/1000.0);
_EMM_EL136 = (jets7.at(5)/1000.0);
_EMM_EL237 = (jets8.at(6)/1000.0);
_EMM_EL338 = (jets9.at(7)/1000.0);
_EH_EL039 = (jets10.at(8)/1000.0);
_EH_EL140 = (jets11.at(9)/1000.0);
_EH_EL241 = (jets12.at(10)/1000.0);
_EH_EL342 = (jets13.at(11)/1000.0);
_EH_CBL043 = (jets14.at(12)/1000.0);
_EH_CBL144 = (jets15.at(13)/1000.0);
_EH_CVL245 = (jets16.at(14)/1000.0);
_EH_TGL046 = (jets17.at(15)/1000.0);
_EH_TGL147 = (jets18.at(16)/1000.0);
_EH_TGL248 = (jets19.at(17)/1000.0);
_EH_EBL049 = (jets20.at(18)/1000.0);
_EH_EBL150 = (jets21.at(19)/1000.0);
_EH_EBL251 = (jets22.at(20)/1000.0);
_FC_L052 = (jets23.at(21)/1000.0);
_FC_L153 = (jets24.at(22)/1000.0);
_FC_L254 = (jets25.at(23)/1000.0);
tree("analysis_tree55")->Fill();
}
_JetPt29 = (i_obj26->pt()/1000.0);
}
}
return StatusCode::SUCCESS;
}
From the above code you can see a few things wrong, but the one actual bug is that near the bottom _JetPt29
appears outside the tree fill. This makes sense - as that is the scope where the pt calc was done, so the code is behaving "correctly". However, in this case, we need it insde. We almost need a "greater than" so if the scope of the tree is deeper than the variable, then do the setting at the fill's scope. But if the scope of the variable is deeper than the tree, do it there (if we don't then the push-back's we've been doing won't work).
We just needed something that would examine the depth fo the scope and make sure we are at least as deep as we need to be.
Well... back to the same sort of problem we sometimes saw in the C# framework.