@@ -327,6 +327,7 @@ struct HfFilter { // Main struct for HF triggers
327327 std::array<std::vector<std::vector<int64_t >>, kNCharmParticles > outputShapesML{};
328328 std::array<std::shared_ptr<Ort::Experimental::Session>, kNCharmParticles > sessionML = {nullptr , nullptr , nullptr , nullptr , nullptr };
329329 std::array<Ort::SessionOptions, kNCharmParticles > sessionOptions{};
330+ std::array<int , kNCharmParticles > dataTypeML{};
330331 std::array<Ort::Env, kNCharmParticles > env = {
331332 Ort::Env{ORT_LOGGING_LEVEL_WARNING , " ml-model-d0-triggers" },
332333 Ort::Env{ORT_LOGGING_LEVEL_WARNING , " ml-model-dplus-triggers" },
@@ -392,6 +393,10 @@ struct HfFilter { // Main struct for HF triggers
392393 }
393394 outputNamesML[iCharmPart] = sessionML[iCharmPart]->GetOutputNames ();
394395 outputShapesML[iCharmPart] = sessionML[iCharmPart]->GetOutputShapes ();
396+
397+ Ort::TypeInfo typeInfo = sessionML[iCharmPart]->GetInputTypeInfo (0 );
398+ auto tensorInfo = typeInfo.GetTensorTypeAndShapeInfo ();
399+ dataTypeML[iCharmPart] = tensorInfo.GetElementType ();
395400 }
396401 }
397402 }
@@ -698,9 +703,16 @@ struct HfFilter { // Main struct for HF triggers
698703 // apply ML models
699704 if (applyML && onnxFiles[kD0 ] != " " ) {
700705 // TODO: add more feature configurations
701- std::vector<float > inputFeaturesD0{trackPos.pt (), trackPos.dcaXY (), trackPos.dcaZ (), trackNeg.pt (), trackNeg.dcaXY (), trackNeg.dcaZ ()};
702706 std::vector<Ort::Value> inputTensorD0;
703- inputTensorD0.push_back (Ort::Experimental::Value::CreateTensor<float >(inputFeaturesD0.data (), inputFeaturesD0.size (), inputShapesML[kD0 ][0 ]));
707+ std::vector<float > inputFeaturesD0{trackPos.pt (), trackPos.dcaXY (), trackPos.dcaZ (), trackNeg.pt (), trackNeg.dcaXY (), trackNeg.dcaZ ()};
708+ std::vector<double > inputFeaturesDoD0{trackPos.pt (), trackPos.dcaXY (), trackPos.dcaZ (), trackNeg.pt (), trackNeg.dcaXY (), trackNeg.dcaZ ()};
709+ if (dataTypeML[kD0 ] == 1 ) {
710+ inputTensorD0.push_back (Ort::Experimental::Value::CreateTensor<float >(inputFeaturesD0.data (), inputFeaturesD0.size (), inputShapesML[kD0 ][0 ]));
711+ } else if (dataTypeML[kD0 ] == 11 ) {
712+ inputTensorD0.push_back (Ort::Experimental::Value::CreateTensor<double >(inputFeaturesDoD0.data (), inputFeaturesDoD0.size (), inputShapesML[kD0 ][0 ]));
713+ } else {
714+ LOG (fatal) << " Error running model inference: Unexpected input data type." ;
715+ }
704716
705717 // double-check the dimensions of the input tensor
706718 if (inputTensorD0[0 ].GetTensorTypeAndShapeInfo ().GetShape ()[0 ] > 0 ) { // vectorial models can have negative shape if the shape is unknown
@@ -826,9 +838,16 @@ struct HfFilter { // Main struct for HF triggers
826838 if (applyML) {
827839 // TODO: add more feature configurations
828840 std::vector<float > inputFeatures{trackFirst.pt (), trackFirst.dcaXY (), trackFirst.dcaZ (), trackSecond.pt (), trackSecond.dcaXY (), trackSecond.dcaZ (), trackThird.pt (), trackThird.dcaXY (), trackThird.dcaZ ()};
841+ std::vector<double > inputFeaturesD{trackFirst.pt (), trackFirst.dcaXY (), trackFirst.dcaZ (), trackSecond.pt (), trackSecond.dcaXY (), trackSecond.dcaZ (), trackThird.pt (), trackThird.dcaXY (), trackThird.dcaZ ()};
829842 for (auto iCharmPart{0 }; (iCharmPart < kNCharmParticles - 1 ) && is3Prong[iCharmPart] && onnxFiles[iCharmPart + 1 ] != " " ; ++iCharmPart) {
830843 std::vector<Ort::Value> inputTensor;
831- inputTensor.push_back (Ort::Experimental::Value::CreateTensor<float >(inputFeatures.data (), inputFeatures.size (), inputShapesML[iCharmPart + 1 ][0 ]));
844+ if (dataTypeML[iCharmPart + 1 ] == 1 ) {
845+ inputTensor.push_back (Ort::Experimental::Value::CreateTensor<float >(inputFeatures.data (), inputFeatures.size (), inputShapesML[iCharmPart + 1 ][0 ]));
846+ } else if (dataTypeML[iCharmPart + 1 ] == 11 ) {
847+ inputTensor.push_back (Ort::Experimental::Value::CreateTensor<double >(inputFeaturesD.data (), inputFeaturesD.size (), inputShapesML[iCharmPart + 1 ][0 ]));
848+ } else {
849+ LOG (error) << " Error running model inference: Unexpected input data type." ;
850+ }
832851
833852 // double-check the dimensions of the input tensor
834853 if (inputTensor[0 ].GetTensorTypeAndShapeInfo ().GetShape ()[0 ] > 0 ) { // vectorial models can have negative shape if the shape is unknown
0 commit comments