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