Functions.C 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. // Function to read either Qn::DataContainerStatCollect or Qn::DataContainerStatCalculate from the file into dc_calc
  2. Bool_t GetDCStatCalculate(TFile *const& file, std::string name, Qn::DataContainerStatCalculate& dc_calc)
  3. {
  4. Qn::DataContainerStatCollect *tmp_dc_collect{nullptr};
  5. Qn::DataContainerStatCalculate *tmp_dc_calculate{nullptr};
  6. file->GetObject(name.c_str(), tmp_dc_calculate);
  7. if (!tmp_dc_calculate)
  8. {
  9. file->GetObject(name.c_str(), tmp_dc_collect);
  10. if (!tmp_dc_collect)
  11. {
  12. std::cerr << "Cannot get the object " << name << "!" << std::endl;
  13. return false;
  14. }
  15. dc_calc = (Qn::DataContainerStatCalculate) *tmp_dc_collect;
  16. }
  17. else
  18. {
  19. dc_calc = (Qn::DataContainerStatCalculate) *tmp_dc_calculate;
  20. }
  21. return true;
  22. }
  23. // Returns mean value from dc1 and dc2
  24. Qn::DataContainerStatCalculate Merge(Qn::DataContainerStatCalculate dc1, Qn::DataContainerStatCalculate dc2)
  25. {
  26. Qn::DataContainerStatCalculate result = dc1;
  27. if (dc1.size() != dc2.size())
  28. {
  29. std::cerr << "Merge: dc1 and dc2 has different sizes!" << std::endl;
  30. return result;
  31. }
  32. for (int i=0; i<result.size(); i++)
  33. {
  34. result.At(i) = Qn::Merge(dc1.At(i), dc2.At(i));
  35. }
  36. return result;
  37. }