2200 {
2201 using namespace TestUtils;
2202
2203 knownColumns.push_back (std::make_shared<ColumnDataEventCount> ());
2204
2206 {
2207 tree->SetMakeClass(1);
2208 {
2209 std::unordered_map<std::string, TBranch*>
branches;
2210 {
2211 TIter branchIter(
tree->GetListOfBranches());
2212 TObject*
obj =
nullptr;
2213 while ((obj = branchIter()))
2214 {
2215 TBranch* branch = nullptr;
2216 if ((branch = dynamic_cast<TBranch*>(obj)))
2217 {
2218 branches.emplace(branch->GetName(), branch);
2219 TIter subBranchIter(branch->GetListOfBranches());
2220 while ((obj = subBranchIter()))
2221 {
2222 if (auto subBranch = dynamic_cast<TBranch*>(obj))
2223 branches.emplace(subBranch->GetName(), subBranch);
2224 }
2225 }
2226 }
2227 }
2228
2229 for (const auto& [name, branch] : branches)
2230 {
2231 if (
name.find(
"AuxDyn.") != std::string::npos ||
2232 name.find(
"Aux.") != std::string::npos)
2233 {
2234 TClass* branchClass = nullptr;
2235 EDataType branchType{};
2236 branch->GetExpectedType(branchClass, branchType);
2237 if (branchClass == nullptr)
2238 {
2239 switch (branchType)
2240 {
2241 case kInt_t:
2242 knownColumns.push_back(std::make_shared<ColumnDataScalar<std::int32_t, BranchReader>>(branch->GetName()));
2243 break;
2244 case kUInt_t:
2245 knownColumns.push_back(std::make_shared<ColumnDataScalar<std::uint32_t, BranchReader>>(branch->GetName()));
2246 break;
2247 case kULong_t:
2248 knownColumns.push_back(std::make_shared<ColumnDataScalar<std::uint64_t, BranchReader>>(branch->GetName()));
2249 break;
2250 case kULong64_t:
2251 knownColumns.push_back(std::make_shared<ColumnDataScalar<std::uint64_t, BranchReader>>(branch->GetName()));
2252 break;
2253 case kFloat_t:
2254 knownColumns.push_back(std::make_shared<ColumnDataScalar<float, BranchReader>>(branch->GetName()));
2255 break;
2256 default:
2257
2258 break;
2259 }
2260 } else
2261 {
2262 if (*branchClass->GetTypeInfo() == typeid(std::vector<float>))
2263 {
2264 knownColumns.push_back (std::make_shared<ColumnDataVector<float,BranchReader>> (branch->GetName()));
2265 } else if (*branchClass->GetTypeInfo() == typeid(std::vector<char>))
2266 {
2267 knownColumns.push_back (std::make_shared<ColumnDataVector<char,BranchReader>> (branch->GetName()));
2268 } else if (*branchClass->GetTypeInfo() == typeid(std::vector<std::int8_t>))
2269 {
2270 knownColumns.push_back (std::make_shared<ColumnDataVector<std::int8_t,BranchReader>> (branch->GetName()));
2271 } else if (*branchClass->GetTypeInfo() == typeid(std::vector<std::uint8_t>))
2272 {
2273 knownColumns.push_back (std::make_shared<ColumnDataVector<std::uint8_t,BranchReader>> (branch->GetName()));
2274 } else if (*branchClass->GetTypeInfo() == typeid(std::vector<std::int16_t>))
2275 {
2276 knownColumns.push_back (std::make_shared<ColumnDataVector<std::int16_t,BranchReader>> (branch->GetName()));
2277 } else if (*branchClass->GetTypeInfo() == typeid(std::vector<std::uint16_t>))
2278 {
2279 knownColumns.push_back (std::make_shared<ColumnDataVector<std::uint16_t,BranchReader>> (branch->GetName()));
2280 } else if (*branchClass->GetTypeInfo() == typeid(std::vector<std::int32_t>))
2281 {
2282 knownColumns.push_back (std::make_shared<ColumnDataVector<std::int32_t,BranchReader>> (branch->GetName()));
2283 } else if (*branchClass->GetTypeInfo() == typeid(std::vector<std::uint32_t>))
2284 {
2285 knownColumns.push_back (std::make_shared<ColumnDataVector<std::uint32_t,BranchReader>> (branch->GetName()));
2286 } else if (*branchClass->GetTypeInfo() == typeid(std::vector<std::int64_t>))
2287 {
2288 knownColumns.push_back (std::make_shared<ColumnDataVector<std::int64_t,BranchReader>> (branch->GetName()));
2289 } else if (*branchClass->GetTypeInfo() == typeid(std::vector<std::uint64_t>))
2290 {
2291 knownColumns.push_back (std::make_shared<ColumnDataVector<std::uint64_t,BranchReader>> (branch->GetName()));
2292 } else if (*branchClass->GetTypeInfo() == typeid(std::vector<std::vector<float>>))
2293 {
2294 knownColumns.push_back (std::make_shared<ColumnDataVectorVector<float,BranchReader>> (branch->GetName()));
2295 } else if (*branchClass->GetTypeInfo() == typeid(std::vector<std::vector<std::int32_t>>))
2296 {
2297 knownColumns.push_back (std::make_shared<ColumnDataVectorVector<std::int32_t,BranchReader>> (branch->GetName()));
2298 } else if (*branchClass->GetTypeInfo() == typeid(std::vector<std::vector<std::uint64_t>>))
2299 {
2300 knownColumns.push_back (std::make_shared<ColumnDataVectorVector<std::uint64_t,BranchReader>> (branch->GetName()));
2301 } else if (*branchClass->GetTypeInfo() == typeid(std::vector<std::vector<std::vector<std::size_t>>>))
2302 {
2303 knownColumns.push_back (std::make_shared<ColumnDataVectorVectorVector<std::size_t,BranchReader>> (branch->GetName()));
2304 } else if (*branchClass->GetTypeInfo() == typeid(std::vector<std::vector<std::vector<unsigned char>>>))
2305 {
2306 knownColumns.push_back (std::make_shared<ColumnDataVectorVectorVector<unsigned char,BranchReader>> (branch->GetName()));
2307 } else if (*branchClass->GetTypeInfo() == typeid(std::vector<std::string>))
2308 {
2309 knownColumns.push_back (std::make_shared<ColumnDataMetNames<BranchReader>> (branch->GetName()));
2310 }
2311 }
2312 }
2313 }
2314 }
2315
2316
2317
2318
2319
2320 knownColumns.push_back(std::make_shared<ColumnDataSamplingPattern<BranchReader>>(
"egammaClusters"));
2321
2322
2323
2324
2325
2326 knownColumns.push_back(std::make_shared<ColumnDataVectorVectorLink<xAOD::CaloClusterContainer,BranchReader>>(
"AnalysisElectronsAuxDyn.caloClusterLinks"));
2327 knownColumns.push_back(std::make_shared<ColumnDataVectorVectorLink<xAOD::TrackParticleContainer, BranchReader>>(
"AnalysisElectronsAuxDyn.trackParticleLinks"));
2328 knownColumns.push_back(std::make_shared<ColumnDataVectorVectorLink<xAOD::CaloClusterContainer,BranchReader>>(
"AnalysisPhotonsAuxDyn.caloClusterLinks"));
2329 knownColumns.push_back(std::make_shared<ColumnDataVectorVectorLink<xAOD::VertexContainer, BranchReader>>(
"AnalysisPhotonsAuxDyn.vertexLinks"));
2330 knownColumns.push_back(std::make_shared<ColumnDataVectorSplitLink<xAOD::TrackParticleContainer>>(
"AnalysisMuonsAuxDyn.inDetTrackParticleLink"));
2331 knownColumns.push_back(std::make_shared<ColumnDataVectorSplitLink<xAOD::TrackParticleContainer>>(
"AnalysisMuonsAuxDyn.combinedTrackParticleLink"));
2332 knownColumns.push_back(std::make_shared<ColumnDataVectorSplitLink<xAOD::TrackParticleContainer>>(
"AnalysisMuonsAuxDyn.extrapolatedMuonSpectrometerTrackParticleLink"));
2333 knownColumns.push_back(std::make_shared<ColumnDataVectorVectorLink<xAOD::TrackParticleContainer, BranchReader>>(
"GSFConversionVerticesAuxDyn.trackParticleLinks"));
2334 knownColumns.push_back(std::make_shared<ColumnDataVectorSplitLink<xAOD::TrackParticleContainer>>(
"GSFTrackParticlesAuxDyn.originalTrackParticle"));
2335 knownColumns.push_back(std::make_shared<ColumnDataVectorVectorVariantLink<xAOD::IParticleContainer, BranchReader>>(
"AnalysisJetsAuxDyn.GhostTrack"));
2336 knownColumns.push_back(std::make_shared<ColumnDataVectorLink<xAOD::JetContainer, BranchReader>>(
"METAssoc_AnalysisMETAux.jetLink"));
2337 knownColumns.push_back(std::make_shared<ColumnDataVectorVectorVariantLink<xAOD::IParticleContainer, BranchReader>>(
"METAssoc_AnalysisMETAux.objectLinks"));
2338
2340 {
2341 std::unordered_map<std::string, ROOT::DescriptorId_t>
fields;
2342 {
2344
2345 for (
const auto& field :
desc.GetTopLevelFields())
2346 {
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.