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