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 {
2350
2351 std::vector<ROOT::DescriptorId_t> subFieldIds{
field.GetId()};
2352 while (!subFieldIds.empty())
2353 {
2354 const auto parentId = subFieldIds.back();
2355 auto parentname=
desc.GetQualifiedFieldName(parentId);
2356 subFieldIds.pop_back();
2357
2358 for (
const auto& subField :
desc.GetFieldIterable(parentId))
2359 {
2360 auto subFieldName =
desc.GetQualifiedFieldName(subField.GetId());
2361
2362 fields.emplace(
desc.GetQualifiedFieldName(subField.GetId()), subField.GetId());
2363
2364 subFieldIds.push_back(subField.GetId());
2365 }
2366 }
2367 }
2368 }
2369
2371 for (const auto& [name, fieldId] : fields)
2372 {
2374
2375 if (
name.find(
"AuxDyn:") != std::string::npos ||
2376 name.find(
"Aux:") != std::string::npos)
2377 {
2378
2379 const auto& fieldDesc =
desc.GetFieldDescriptor(fieldId);
2380 const std::string
typeName =
desc.GetTypeNameForComparison(fieldDesc);
2381 if (typeName == "std::int32_t" || typeName == "int")
2382 {
2383 knownColumns.push_back(std::make_shared<ColumnDataScalar<std::int32_t, RNTFieldReader>>(name));
2384 } else if (typeName == "std::uint32_t" || typeName == "unsigned int")
2385 {
2386 knownColumns.push_back(std::make_shared<ColumnDataScalar<std::uint32_t, RNTFieldReader>>(name));
2387 } else if (typeName == "std::uint64_t" || typeName == "unsigned long" || typeName == "unsigned long long")
2388 {
2389 knownColumns.push_back(std::make_shared<ColumnDataScalar<std::uint64_t, RNTFieldReader>>(name));
2390 } else if (typeName == "float")
2391 {
2392 knownColumns.push_back(std::make_shared<ColumnDataScalar<float, RNTFieldReader>>(name));
2393 } else if (typeName == "std::vector<float>")
2394 {
2395 knownColumns.push_back(std::make_shared<ColumnDataVector<float, RNTFieldReader>>(name));
2396 } else if (typeName == "std::vector<char>")
2397 {
2398 knownColumns.push_back(std::make_shared<ColumnDataVector<char, RNTFieldReader>>(name));
2399 } else if (typeName == "std::vector<std::int8_t>")
2400 {
2401 knownColumns.push_back(std::make_shared<ColumnDataVector<std::int8_t, RNTFieldReader>>(name));
2402 } else if (typeName == "std::vector<std::uint8_t>")
2403 {
2404 knownColumns.push_back(std::make_shared<ColumnDataVector<std::uint8_t, RNTFieldReader>>(name));
2405 } else if (typeName == "std::vector<std::int16_t>")
2406 {
2407 knownColumns.push_back(std::make_shared<ColumnDataVector<std::int16_t, RNTFieldReader>>(name));
2408 } else if (typeName == "std::vector<std::uint16_t>")
2409 {
2410 knownColumns.push_back(std::make_shared<ColumnDataVector<std::uint16_t, RNTFieldReader>>(name));
2411 } else if (typeName == "std::vector<std::int32_t>")
2412 {
2413 knownColumns.push_back(std::make_shared<ColumnDataVector<std::int32_t, RNTFieldReader>>(name));
2414 } else if (typeName == "std::vector<std::uint32_t>")
2415 {
2416 knownColumns.push_back(std::make_shared<ColumnDataVector<std::uint32_t, RNTFieldReader>>(name));
2417 } else if (typeName == "std::vector<std::int64_t>")
2418 {
2419 knownColumns.push_back(std::make_shared<ColumnDataVector<std::int64_t, RNTFieldReader>>(name));
2420 } else if (typeName == "std::vector<std::uint64_t>")
2421 {
2422 knownColumns.push_back(std::make_shared<ColumnDataVector<std::uint64_t, RNTFieldReader>>(name));
2423 } else if (typeName == "std::vector<std::vector<float>>")
2424 {
2425 knownColumns.push_back(std::make_shared<ColumnDataVectorVector<float, RNTFieldReader>>(name));
2426 } else if (typeName == "std::vector<std::vector<std::int32_t>>")
2427 {
2428 knownColumns.push_back(std::make_shared<ColumnDataVectorVector<std::int32_t, RNTFieldReader>>(name));
2429 } else if (typeName == "std::vector<std::vector<std::uint64_t>>")
2430 {
2431 knownColumns.push_back(std::make_shared<ColumnDataVectorVector<std::uint64_t, RNTFieldReader>>(name));
2432 } else if (typeName =="std::vector<std::vector<std::vector<std::size_t>>>")
2433 {
2434 knownColumns.push_back(std::make_shared<ColumnDataVectorVectorVector<std::size_t, RNTFieldReader>>(name));
2435 }else if (typeName =="std::vector<std::vector<std::vector<std::uint64_t>>>")
2436 {
2437 knownColumns.push_back(std::make_shared<ColumnDataVectorVectorVector<std::uint64_t, RNTFieldReader>>(name));
2438 }else if (typeName =="std::vector<std::vector<std::vector<std::uint8_t>>>")
2439 {
2440 knownColumns.push_back(std::make_shared<ColumnDataVectorVectorVector<std::uint8_t, RNTFieldReader>>(name));
2441 } else if (typeName =="std::vector<std::vector<std::vector<unsigned char>>>")
2442 {
2443 knownColumns.push_back(std::make_shared<ColumnDataVectorVectorVector<unsigned char, RNTFieldReader>>(name));
2444 } else if (typeName == "std::vector<std::string>")
2445 {
2446 knownColumns.push_back(std::make_shared<ColumnDataMetNames<RNTFieldReader>>(name));
2447 }
2448 }
2449 }
2450 knownColumns.push_back(std::make_shared<ColumnDataSamplingPattern<RNTFieldReader>>(
"egammaClusters"));
2451
2452 knownColumns.push_back(std::make_shared<ColumnDataVectorVectorLink<xAOD::CaloClusterContainer,RNTFieldReader>>(
"AnalysisElectronsAuxDyn:caloClusterLinks"));
2453 knownColumns.push_back(std::make_shared<ColumnDataVectorVectorLink<xAOD::TrackParticleContainer, RNTFieldReader>>(
"AnalysisElectronsAuxDyn:trackParticleLinks"));
2454 knownColumns.push_back(std::make_shared<ColumnDataVectorVectorLink<xAOD::CaloClusterContainer,RNTFieldReader>>(
"AnalysisPhotonsAuxDyn:caloClusterLinks"));
2455 knownColumns.push_back(std::make_shared<ColumnDataVectorVectorLink<xAOD::VertexContainer, RNTFieldReader>>(
"AnalysisPhotonsAuxDyn:vertexLinks"));
2456 knownColumns.push_back(std::make_shared<ColumnDataVectorRLink<xAOD::TrackParticleContainer,RNTFieldReader>>(
"AnalysisMuonsAuxDyn:inDetTrackParticleLink"));
2457 knownColumns.push_back(std::make_shared<ColumnDataVectorRLink<xAOD::TrackParticleContainer,RNTFieldReader>>(
"AnalysisMuonsAuxDyn:combinedTrackParticleLink"));
2458 knownColumns.push_back(std::make_shared<ColumnDataVectorRLink< xAOD::TrackParticleContainer, RNTFieldReader>>(
"AnalysisMuonsAuxDyn:extrapolatedMuonSpectrometerTrackParticleLink"));
2459 knownColumns.push_back(std::make_shared<ColumnDataVectorVectorLink<xAOD::TrackParticleContainer, RNTFieldReader>>(
"GSFConversionVerticesAuxDyn:trackParticleLinks"));
2460 knownColumns.push_back(std::make_shared<ColumnDataVectorRLink<xAOD::TrackParticleContainer,RNTFieldReader>>(
"GSFTrackParticlesAuxDyn:originalTrackParticle"));
2461 knownColumns.push_back(std::make_shared<ColumnDataVectorVectorVariantLink<xAOD::IParticleContainer, RNTFieldReader>>(
"AnalysisJetsAuxDyn:GhostTrack"));
2462 knownColumns.push_back(std::make_shared<ColumnDataVectorLink<xAOD::JetContainer, RNTFieldReader>>(
"METAssoc_AnalysisMETAux:.jetLink"));
2463 knownColumns.push_back(std::make_shared<ColumnDataVectorVectorVariantLink<xAOD::IParticleContainer, RNTFieldReader>>(
"METAssoc_AnalysisMETAux:.objectLinks"));
2464
2465 }
2466
2467
2468
2469
2470 std::vector<std::string> allMetTermNames;
2471 for (const auto& td : testDefinitions)
2472 {
2473 for (const auto& name : td.metTermNames)
2474 {
2475 if (std::find (allMetTermNames.begin(), allMetTermNames.end(), name) == allMetTermNames.end())
2476 allMetTermNames.push_back (name);
2477 }
2478 }
2479
2480
2482 {
2483 if (!allMetTermNames.empty())
2484 knownColumns.push_back(std::make_shared<ColumnDataOutputMet<BranchReader>>(
"OutputMET",allMetTermNames));
2485
2486
2487
2488 knownColumns.push_back(std::make_shared<ColumnDataOutVector<std::uint16_t, BranchReader>>(
"AnalysisMuons.objectType",
xAOD::Type::Muon));
2490 knownColumns.push_back(std::make_shared<ColumnDataOutVector<std::uint16_t, BranchReader>>(
"AnalysisJets.objectType",
xAOD::Type::Jet));
2491
2492
2493
2494
2495 knownColumns.push_back(std::make_shared<ColumnDataOutVector<float, BranchReader>>(
"AnalysisMuons.MetObjectWeight", 0));
2496 knownColumns.push_back(std::make_shared<ColumnDataOutVector<float, BranchReader>>(
"AnalysisJets.MetObjectWeight", 0));
2497 knownColumns.push_back(std::make_shared<ColumnDataOutVector<float, BranchReader>>(
"AnalysisJets.MetObjectWeightSoft", 0));
2498 knownColumns.push_back(std::make_shared<ColumnDataOutVector<MissingETBase::Types::bitmask_t,BranchReader>>(
"METAssoc_AnalysisMET.useObjectFlags", 0));
2500 {
2501 if (!allMetTermNames.empty())
2502 knownColumns.push_back(std::make_shared<ColumnDataOutputMet<BranchReader>>(
"OutputMET",allMetTermNames));
2503
2504
2505
2506 knownColumns.push_back(std::make_shared<ColumnDataOutVector<std::uint16_t, RNTFieldReader>>(
"AnalysisMuons.objectType",
xAOD::Type::Muon));
2508 knownColumns.push_back(std::make_shared<ColumnDataOutVector<std::uint16_t, RNTFieldReader>>(
"AnalysisJets.objectType",
xAOD::Type::Jet));
2509
2510
2511
2512
2513 knownColumns.push_back(std::make_shared<ColumnDataOutVector<float, RNTFieldReader>>(
"AnalysisMuons.MetObjectWeight", 0));
2514 knownColumns.push_back(std::make_shared<ColumnDataOutVector<float, RNTFieldReader>>(
"AnalysisJets.MetObjectWeight", 0));
2515 knownColumns.push_back(std::make_shared<ColumnDataOutVector<float, RNTFieldReader>>(
"AnalysisJets.MetObjectWeightSoft", 0));
2516 knownColumns.push_back(std::make_shared<ColumnDataOutVector<MissingETBase::Types::bitmask_t,RNTFieldReader>>(
"METAssoc_AnalysisMET.useObjectFlags", 0));
2517 }
2518 }
constexpr double muonMassInMeV
the mass of the muon (in MeV)
@ Jet
The object is a jet.
@ Muon
The object is a muon.