2201 {
2202 using namespace TestUtils;
2203
2204 knownColumns.push_back (std::make_shared<ColumnDataEventCount> ());
2205
2207 {
2208 tree->SetMakeClass(1);
2209 {
2210 std::unordered_map<std::string, TBranch*>
branches;
2211 {
2212 TIter branchIter(
tree->GetListOfBranches());
2213 TObject*
obj =
nullptr;
2214 while ((obj = branchIter()))
2215 {
2216 TBranch* branch = nullptr;
2217 if ((branch = dynamic_cast<TBranch*>(obj)))
2218 {
2219 branches.emplace(branch->GetName(), branch);
2220 TIter subBranchIter(branch->GetListOfBranches());
2221 while ((obj = subBranchIter()))
2222 {
2223 if (auto subBranch = dynamic_cast<TBranch*>(obj))
2224 branches.emplace(subBranch->GetName(), subBranch);
2225 }
2226 }
2227 }
2228 }
2229
2230 for (const auto& [name, branch] : branches)
2231 {
2232 if (
name.find(
"AuxDyn.") != std::string::npos ||
2233 name.find(
"Aux.") != std::string::npos)
2234 {
2235 TClass* branchClass = nullptr;
2236 EDataType branchType{};
2237 branch->GetExpectedType(branchClass, branchType);
2238 if (branchClass == nullptr)
2239 {
2240 switch (branchType)
2241 {
2242 case kInt_t:
2243 knownColumns.push_back(std::make_shared<ColumnDataScalar<std::int32_t, BranchReader>>(branch->GetName()));
2244 break;
2245 case kUInt_t:
2246 knownColumns.push_back(std::make_shared<ColumnDataScalar<std::uint32_t, BranchReader>>(branch->GetName()));
2247 break;
2248 case kULong_t:
2249 knownColumns.push_back(std::make_shared<ColumnDataScalar<std::uint64_t, BranchReader>>(branch->GetName()));
2250 break;
2251 case kULong64_t:
2252 knownColumns.push_back(std::make_shared<ColumnDataScalar<std::uint64_t, BranchReader>>(branch->GetName()));
2253 break;
2254 case kFloat_t:
2255 knownColumns.push_back(std::make_shared<ColumnDataScalar<float, BranchReader>>(branch->GetName()));
2256 break;
2257 default:
2258
2259 break;
2260 }
2261 } else
2262 {
2263 if (*branchClass->GetTypeInfo() == typeid(std::vector<float>))
2264 {
2265 knownColumns.push_back (std::make_shared<ColumnDataVector<float,BranchReader>> (branch->GetName()));
2266 } else if (*branchClass->GetTypeInfo() == typeid(std::vector<char>))
2267 {
2268 knownColumns.push_back (std::make_shared<ColumnDataVector<char,BranchReader>> (branch->GetName()));
2269 } else if (*branchClass->GetTypeInfo() == typeid(std::vector<std::int8_t>))
2270 {
2271 knownColumns.push_back (std::make_shared<ColumnDataVector<std::int8_t,BranchReader>> (branch->GetName()));
2272 } else if (*branchClass->GetTypeInfo() == typeid(std::vector<std::uint8_t>))
2273 {
2274 knownColumns.push_back (std::make_shared<ColumnDataVector<std::uint8_t,BranchReader>> (branch->GetName()));
2275 } else if (*branchClass->GetTypeInfo() == typeid(std::vector<std::int16_t>))
2276 {
2277 knownColumns.push_back (std::make_shared<ColumnDataVector<std::int16_t,BranchReader>> (branch->GetName()));
2278 } else if (*branchClass->GetTypeInfo() == typeid(std::vector<std::uint16_t>))
2279 {
2280 knownColumns.push_back (std::make_shared<ColumnDataVector<std::uint16_t,BranchReader>> (branch->GetName()));
2281 } else if (*branchClass->GetTypeInfo() == typeid(std::vector<std::int32_t>))
2282 {
2283 knownColumns.push_back (std::make_shared<ColumnDataVector<std::int32_t,BranchReader>> (branch->GetName()));
2284 } else if (*branchClass->GetTypeInfo() == typeid(std::vector<std::uint32_t>))
2285 {
2286 knownColumns.push_back (std::make_shared<ColumnDataVector<std::uint32_t,BranchReader>> (branch->GetName()));
2287 } else if (*branchClass->GetTypeInfo() == typeid(std::vector<std::int64_t>))
2288 {
2289 knownColumns.push_back (std::make_shared<ColumnDataVector<std::int64_t,BranchReader>> (branch->GetName()));
2290 } else if (*branchClass->GetTypeInfo() == typeid(std::vector<std::uint64_t>))
2291 {
2292 knownColumns.push_back (std::make_shared<ColumnDataVector<std::uint64_t,BranchReader>> (branch->GetName()));
2293 } else if (*branchClass->GetTypeInfo() == typeid(std::vector<std::vector<float>>))
2294 {
2295 knownColumns.push_back (std::make_shared<ColumnDataVectorVector<float,BranchReader>> (branch->GetName()));
2296 } else if (*branchClass->GetTypeInfo() == typeid(std::vector<std::vector<std::int32_t>>))
2297 {
2298 knownColumns.push_back (std::make_shared<ColumnDataVectorVector<std::int32_t,BranchReader>> (branch->GetName()));
2299 } else if (*branchClass->GetTypeInfo() == typeid(std::vector<std::vector<std::uint64_t>>))
2300 {
2301 knownColumns.push_back (std::make_shared<ColumnDataVectorVector<std::uint64_t,BranchReader>> (branch->GetName()));
2302 } else if (*branchClass->GetTypeInfo() == typeid(std::vector<std::vector<std::vector<std::size_t>>>))
2303 {
2304 knownColumns.push_back (std::make_shared<ColumnDataVectorVectorVector<std::size_t,BranchReader>> (branch->GetName()));
2305 } else if (*branchClass->GetTypeInfo() == typeid(std::vector<std::vector<std::vector<unsigned char>>>))
2306 {
2307 knownColumns.push_back (std::make_shared<ColumnDataVectorVectorVector<unsigned char,BranchReader>> (branch->GetName()));
2308 } else if (*branchClass->GetTypeInfo() == typeid(std::vector<std::string>))
2309 {
2310 knownColumns.push_back (std::make_shared<ColumnDataMetNames<BranchReader>> (branch->GetName()));
2311 }
2312 }
2313 }
2314 }
2315 }
2316
2317
2318
2319
2320
2321 knownColumns.push_back(std::make_shared<ColumnDataSamplingPattern<BranchReader>>(
"egammaClusters"));
2322
2323
2324
2325
2326
2327 knownColumns.push_back(std::make_shared<ColumnDataVectorVectorLink<xAOD::CaloClusterContainer,BranchReader>>(
"AnalysisElectronsAuxDyn.caloClusterLinks"));
2328 knownColumns.push_back(std::make_shared<ColumnDataVectorVectorLink<xAOD::TrackParticleContainer, BranchReader>>(
"AnalysisElectronsAuxDyn.trackParticleLinks"));
2329 knownColumns.push_back(std::make_shared<ColumnDataVectorVectorLink<xAOD::CaloClusterContainer,BranchReader>>(
"AnalysisPhotonsAuxDyn.caloClusterLinks"));
2330 knownColumns.push_back(std::make_shared<ColumnDataVectorVectorLink<xAOD::VertexContainer, BranchReader>>(
"AnalysisPhotonsAuxDyn.vertexLinks"));
2331 knownColumns.push_back(std::make_shared<ColumnDataVectorSplitLink<xAOD::TrackParticleContainer>>(
"AnalysisMuonsAuxDyn.inDetTrackParticleLink"));
2332 knownColumns.push_back(std::make_shared<ColumnDataVectorSplitLink<xAOD::TrackParticleContainer>>(
"AnalysisMuonsAuxDyn.combinedTrackParticleLink"));
2333 knownColumns.push_back(std::make_shared<ColumnDataVectorSplitLink<xAOD::TrackParticleContainer>>(
"AnalysisMuonsAuxDyn.extrapolatedMuonSpectrometerTrackParticleLink"));
2334 knownColumns.push_back(std::make_shared<ColumnDataVectorVectorLink<xAOD::TrackParticleContainer, BranchReader>>(
"GSFConversionVerticesAuxDyn.trackParticleLinks"));
2335 knownColumns.push_back(std::make_shared<ColumnDataVectorSplitLink<xAOD::TrackParticleContainer>>(
"GSFTrackParticlesAuxDyn.originalTrackParticle"));
2336 knownColumns.push_back(std::make_shared<ColumnDataVectorVectorVariantLink<xAOD::IParticleContainer, BranchReader>>(
"AnalysisJetsAuxDyn.GhostTrack"));
2337 knownColumns.push_back(std::make_shared<ColumnDataVectorLink<xAOD::JetContainer, BranchReader>>(
"METAssoc_AnalysisMETAux.jetLink"));
2338 knownColumns.push_back(std::make_shared<ColumnDataVectorVectorVariantLink<xAOD::IParticleContainer, BranchReader>>(
"METAssoc_AnalysisMETAux.objectLinks"));
2339
2341 {
2342 std::unordered_map<std::string, ROOT::DescriptorId_t>
fields;
2343 {
2345
2346 for (
const auto& field :
desc.GetTopLevelFields())
2347 {
2349
2350 std::vector<ROOT::DescriptorId_t> subFieldIds{
field.GetId()};
2351 while (!subFieldIds.empty())
2352 {
2353 const auto parentId = subFieldIds.back();
2354 auto parentname=
desc.GetQualifiedFieldName(parentId);
2355 subFieldIds.pop_back();
2356
2357 for (
const auto& subField :
desc.GetFieldIterable(parentId))
2358 {
2359 auto subFieldName =
desc.GetQualifiedFieldName(subField.GetId());
2360
2361 fields.emplace(
desc.GetQualifiedFieldName(subField.GetId()), subField.GetId());
2362
2363 subFieldIds.push_back(subField.GetId());
2364 }
2365 }
2366 }
2367 }
2368
2370 for (const auto& [name, fieldId] : fields)
2371 {
2373
2374 if (
name.find(
"AuxDyn:") != std::string::npos ||
2375 name.find(
"Aux:") != std::string::npos)
2376 {
2377
2378 const auto& fieldDesc =
desc.GetFieldDescriptor(fieldId);
2379 const std::string
typeName =
desc.GetTypeNameForComparison(fieldDesc);
2380 if (typeName == "std::int32_t" || typeName == "int")
2381 {
2382 knownColumns.push_back(std::make_shared<ColumnDataScalar<std::int32_t, RNTFieldReader>>(name));
2383 } else if (typeName == "std::uint32_t" || typeName == "unsigned int")
2384 {
2385 knownColumns.push_back(std::make_shared<ColumnDataScalar<std::uint32_t, RNTFieldReader>>(name));
2386 } else if (typeName == "std::uint64_t" || typeName == "unsigned long" || typeName == "unsigned long long")
2387 {
2388 knownColumns.push_back(std::make_shared<ColumnDataScalar<std::uint64_t, RNTFieldReader>>(name));
2389 } else if (typeName == "float")
2390 {
2391 knownColumns.push_back(std::make_shared<ColumnDataScalar<float, RNTFieldReader>>(name));
2392 } else if (typeName == "std::vector<float>")
2393 {
2394 knownColumns.push_back(std::make_shared<ColumnDataVector<float, RNTFieldReader>>(name));
2395 } else if (typeName == "std::vector<char>")
2396 {
2397 knownColumns.push_back(std::make_shared<ColumnDataVector<char, RNTFieldReader>>(name));
2398 } else if (typeName == "std::vector<std::int8_t>")
2399 {
2400 knownColumns.push_back(std::make_shared<ColumnDataVector<std::int8_t, RNTFieldReader>>(name));
2401 } else if (typeName == "std::vector<std::uint8_t>")
2402 {
2403 knownColumns.push_back(std::make_shared<ColumnDataVector<std::uint8_t, RNTFieldReader>>(name));
2404 } else if (typeName == "std::vector<std::int16_t>")
2405 {
2406 knownColumns.push_back(std::make_shared<ColumnDataVector<std::int16_t, RNTFieldReader>>(name));
2407 } else if (typeName == "std::vector<std::uint16_t>")
2408 {
2409 knownColumns.push_back(std::make_shared<ColumnDataVector<std::uint16_t, RNTFieldReader>>(name));
2410 } else if (typeName == "std::vector<std::int32_t>")
2411 {
2412 knownColumns.push_back(std::make_shared<ColumnDataVector<std::int32_t, RNTFieldReader>>(name));
2413 } else if (typeName == "std::vector<std::uint32_t>")
2414 {
2415 knownColumns.push_back(std::make_shared<ColumnDataVector<std::uint32_t, RNTFieldReader>>(name));
2416 } else if (typeName == "std::vector<std::int64_t>")
2417 {
2418 knownColumns.push_back(std::make_shared<ColumnDataVector<std::int64_t, RNTFieldReader>>(name));
2419 } else if (typeName == "std::vector<std::uint64_t>")
2420 {
2421 knownColumns.push_back(std::make_shared<ColumnDataVector<std::uint64_t, RNTFieldReader>>(name));
2422 } else if (typeName == "std::vector<std::vector<float>>")
2423 {
2424 knownColumns.push_back(std::make_shared<ColumnDataVectorVector<float, RNTFieldReader>>(name));
2425 } else if (typeName == "std::vector<std::vector<std::int32_t>>")
2426 {
2427 knownColumns.push_back(std::make_shared<ColumnDataVectorVector<std::int32_t, RNTFieldReader>>(name));
2428 } else if (typeName == "std::vector<std::vector<std::uint64_t>>")
2429 {
2430 knownColumns.push_back(std::make_shared<ColumnDataVectorVector<std::uint64_t, RNTFieldReader>>(name));
2431 } else if (typeName =="std::vector<std::vector<std::vector<std::size_t>>>")
2432 {
2433 knownColumns.push_back(std::make_shared<ColumnDataVectorVectorVector<std::size_t, RNTFieldReader>>(name));
2434 }else if (typeName =="std::vector<std::vector<std::vector<std::uint64_t>>>")
2435 {
2436 knownColumns.push_back(std::make_shared<ColumnDataVectorVectorVector<std::uint64_t, RNTFieldReader>>(name));
2437 }else if (typeName =="std::vector<std::vector<std::vector<std::uint8_t>>>")
2438 {
2439 knownColumns.push_back(std::make_shared<ColumnDataVectorVectorVector<std::uint8_t, RNTFieldReader>>(name));
2440 } else if (typeName =="std::vector<std::vector<std::vector<unsigned char>>>")
2441 {
2442 knownColumns.push_back(std::make_shared<ColumnDataVectorVectorVector<unsigned char, RNTFieldReader>>(name));
2443 } else if (typeName == "std::vector<std::string>")
2444 {
2445 knownColumns.push_back(std::make_shared<ColumnDataMetNames<RNTFieldReader>>(name));
2446 }
2447 }
2448 }
2449 knownColumns.push_back(std::make_shared<ColumnDataSamplingPattern<RNTFieldReader>>(
"egammaClusters"));
2450
2451 knownColumns.push_back(std::make_shared<ColumnDataVectorVectorLink<xAOD::CaloClusterContainer,RNTFieldReader>>(
"AnalysisElectronsAuxDyn:caloClusterLinks"));
2452 knownColumns.push_back(std::make_shared<ColumnDataVectorVectorLink<xAOD::TrackParticleContainer, RNTFieldReader>>(
"AnalysisElectronsAuxDyn:trackParticleLinks"));
2453 knownColumns.push_back(std::make_shared<ColumnDataVectorVectorLink<xAOD::CaloClusterContainer,RNTFieldReader>>(
"AnalysisPhotonsAuxDyn:caloClusterLinks"));
2454 knownColumns.push_back(std::make_shared<ColumnDataVectorVectorLink<xAOD::VertexContainer, RNTFieldReader>>(
"AnalysisPhotonsAuxDyn:vertexLinks"));
2455 knownColumns.push_back(std::make_shared<ColumnDataVectorRLink<xAOD::TrackParticleContainer,RNTFieldReader>>(
"AnalysisMuonsAuxDyn:inDetTrackParticleLink"));
2456 knownColumns.push_back(std::make_shared<ColumnDataVectorRLink<xAOD::TrackParticleContainer,RNTFieldReader>>(
"AnalysisMuonsAuxDyn:combinedTrackParticleLink"));
2457 knownColumns.push_back(std::make_shared<ColumnDataVectorRLink< xAOD::TrackParticleContainer, RNTFieldReader>>(
"AnalysisMuonsAuxDyn:extrapolatedMuonSpectrometerTrackParticleLink"));
2458 knownColumns.push_back(std::make_shared<ColumnDataVectorVectorLink<xAOD::TrackParticleContainer, RNTFieldReader>>(
"GSFConversionVerticesAuxDyn:trackParticleLinks"));
2459 knownColumns.push_back(std::make_shared<ColumnDataVectorRLink<xAOD::TrackParticleContainer,RNTFieldReader>>(
"GSFTrackParticlesAuxDyn:originalTrackParticle"));
2460 knownColumns.push_back(std::make_shared<ColumnDataVectorVectorVariantLink<xAOD::IParticleContainer, RNTFieldReader>>(
"AnalysisJetsAuxDyn:GhostTrack"));
2461 knownColumns.push_back(std::make_shared<ColumnDataVectorLink<xAOD::JetContainer, RNTFieldReader>>(
"METAssoc_AnalysisMETAux:.jetLink"));
2462 knownColumns.push_back(std::make_shared<ColumnDataVectorVectorVariantLink<xAOD::IParticleContainer, RNTFieldReader>>(
"METAssoc_AnalysisMETAux:.objectLinks"));
2463
2464 }
2465
2466
2467
2468
2469 std::vector<std::string> allMetTermNames;
2470 for (const auto& td : testDefinitions)
2471 {
2472 for (const auto& name : td.metTermNames)
2473 {
2474 if (std::find (allMetTermNames.begin(), allMetTermNames.end(), name) == allMetTermNames.end())
2475 allMetTermNames.push_back (name);
2476 }
2477 }
2478
2479
2481 {
2482 if (!allMetTermNames.empty())
2483 knownColumns.push_back(std::make_shared<ColumnDataOutputMet<BranchReader>>(
"OutputMET",allMetTermNames));
2484
2485
2486
2487 knownColumns.push_back(std::make_shared<ColumnDataOutVector<std::uint16_t, BranchReader>>(
"AnalysisMuons.objectType",
xAOD::Type::Muon));
2489 knownColumns.push_back(std::make_shared<ColumnDataOutVector<std::uint16_t, BranchReader>>(
"AnalysisJets.objectType",
xAOD::Type::Jet));
2490
2491
2492
2493
2494 knownColumns.push_back(std::make_shared<ColumnDataOutVector<float, BranchReader>>(
"AnalysisMuons.MetObjectWeight", 0));
2495 knownColumns.push_back(std::make_shared<ColumnDataOutVector<float, BranchReader>>(
"AnalysisJets.MetObjectWeight", 0));
2496 knownColumns.push_back(std::make_shared<ColumnDataOutVector<float, BranchReader>>(
"AnalysisJets.MetObjectWeightSoft", 0));
2497 knownColumns.push_back(std::make_shared<ColumnDataOutVector<MissingETBase::Types::bitmask_t,BranchReader>>(
"METAssoc_AnalysisMET.useObjectFlags", 0));
2499 {
2500 if (!allMetTermNames.empty())
2501 knownColumns.push_back(std::make_shared<ColumnDataOutputMet<BranchReader>>(
"OutputMET",allMetTermNames));
2502
2503
2504
2505 knownColumns.push_back(std::make_shared<ColumnDataOutVector<std::uint16_t, RNTFieldReader>>(
"AnalysisMuons.objectType",
xAOD::Type::Muon));
2507 knownColumns.push_back(std::make_shared<ColumnDataOutVector<std::uint16_t, RNTFieldReader>>(
"AnalysisJets.objectType",
xAOD::Type::Jet));
2508
2509
2510
2511
2512 knownColumns.push_back(std::make_shared<ColumnDataOutVector<float, RNTFieldReader>>(
"AnalysisMuons.MetObjectWeight", 0));
2513 knownColumns.push_back(std::make_shared<ColumnDataOutVector<float, RNTFieldReader>>(
"AnalysisJets.MetObjectWeight", 0));
2514 knownColumns.push_back(std::make_shared<ColumnDataOutVector<float, RNTFieldReader>>(
"AnalysisJets.MetObjectWeightSoft", 0));
2515 knownColumns.push_back(std::make_shared<ColumnDataOutVector<MissingETBase::Types::bitmask_t,RNTFieldReader>>(
"METAssoc_AnalysisMET.useObjectFlags", 0));
2516 }
2517 }
constexpr double muonMassInMeV
the mass of the muon (in MeV)
@ Jet
The object is a jet.
@ Muon
The object is a muon.