46 const TString &expectedTypeName,
47 const TString &elementTypeName =
"TObject") {
48 void **objRef = col->GetObjectRef(name);
50 return TString::Format(
"No input collection '%s'", name.Data());
53 T **cast_obj =
reinterpret_cast<T **
>(objRef);
55 if constexpr (std::is_same_v<T, TClonesArray>) {
57 return TString::Format(
"Input collection '%s' is null", name.Data());
59 const auto *cl = (*cast_obj)->GetClass();
60 if (!cl || !cl->InheritsFrom(elementTypeName)) {
61 return TString::Format(
"Invalid input collection '%s': not %s elements",
62 name.Data(), elementTypeName.Data());
65 TObject *obj =
static_cast<TObject *
>(*cast_obj);
66 if (!obj->InheritsFrom(expectedTypeName)) {
67 return TString::Format(
"Invalid input collection '%s': not %s",
68 name.Data(), expectedTypeName.Data());
100 const TString &expectedTypeName,
101 const TString &elementTypeName =
"art::TParameterObject") {
103 auto *objRef = col->GetInfo(name);
105 return TString::Format(
"No parameter object '%s'", name.Data());
108 auto *obj =
static_cast<TObject *
>(objRef);
109 if (!obj->InheritsFrom(expectedTypeName)) {
110 return TString::Format(
"Invalid input parameter '%s': not '%s'",
111 name.Data(), expectedTypeName.Data());
114 auto *prm_obj =
static_cast<T *
>(obj);
115 if constexpr (std::is_same_v<T, TClonesArray>) {
116 const auto *cl = prm_obj->GetClass();
117 if (!cl || !cl->InheritsFrom(elementTypeName)) {
118 return TString::Format(
"Invalid parameter element '%s': not %s",
119 name.Data(), elementTypeName.Data());