From a5790649e0fb231a7cbc426a7ac546686fb3fd54 Mon Sep 17 00:00:00 2001 From: Sven Dildick Date: Sun, 3 Oct 2021 09:37:38 -0500 Subject: [PATCH 1/2] Fix thread-safety problems with simhit fitting --- Validation/MuonHits/BuildFile.xml | 1 + Validation/MuonHits/src/CSCSimHitMatcher.cc | 7 ++++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/Validation/MuonHits/BuildFile.xml b/Validation/MuonHits/BuildFile.xml index d27bfdba5b88a..bf0af0c9516a7 100644 --- a/Validation/MuonHits/BuildFile.xml +++ b/Validation/MuonHits/BuildFile.xml @@ -12,6 +12,7 @@ + diff --git a/Validation/MuonHits/src/CSCSimHitMatcher.cc b/Validation/MuonHits/src/CSCSimHitMatcher.cc index 4734f8e2637d7..429d1d6ef8b6c 100644 --- a/Validation/MuonHits/src/CSCSimHitMatcher.cc +++ b/Validation/MuonHits/src/CSCSimHitMatcher.cc @@ -1,6 +1,7 @@ #include "Validation/MuonHits/interface/CSCSimHitMatcher.h" #include "TGraphErrors.h" #include "TF1.h" +#include "TMinuitMinimizer.h" using namespace std; @@ -13,6 +14,10 @@ CSCSimHitMatcher::CSCSimHitMatcher(const edm::ParameterSet& ps, edm::ConsumesCol simHitInput_ = iC.consumes(simHitPSet_.getParameter("inputTag")); geomToken_ = iC.esConsumes(); + + //In order to make fitting ROOT histograms thread safe + // one must call this undocumented function + TMinuitMinimizer::UseStaticMinuit(false); } /// initialize the event @@ -237,7 +242,7 @@ void CSCSimHitMatcher::fitHitsInChamber(unsigned int detid, float& intercept, fl std::unique_ptr gr(new TGraphErrors(x.size(), &x[0], &y[0], &xe[0], &ye[0])); std::unique_ptr fit(new TF1("fit", "pol1", -3, 4)); - gr->Fit("fit", "EMQ"); + gr->Fit("fit", "EMQN"); intercept = fit->GetParameter(0); slope = fit->GetParameter(1); From 35bcf43f0ea73c66cedcb9ae4b4c882f923b5eca Mon Sep 17 00:00:00 2001 From: Sven Dildick Date: Mon, 4 Oct 2021 12:30:58 -0500 Subject: [PATCH 2/2] Suggestion by Chris Jones --- Validation/MuonHits/src/CSCSimHitMatcher.cc | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Validation/MuonHits/src/CSCSimHitMatcher.cc b/Validation/MuonHits/src/CSCSimHitMatcher.cc index 429d1d6ef8b6c..e05554563d8f5 100644 --- a/Validation/MuonHits/src/CSCSimHitMatcher.cc +++ b/Validation/MuonHits/src/CSCSimHitMatcher.cc @@ -241,11 +241,11 @@ void CSCSimHitMatcher::fitHitsInChamber(unsigned int detid, float& intercept, fl return; std::unique_ptr gr(new TGraphErrors(x.size(), &x[0], &y[0], &xe[0], &ye[0])); - std::unique_ptr fit(new TF1("fit", "pol1", -3, 4)); - gr->Fit("fit", "EMQN"); + TF1 fit("fit", "pol1", -3, 4); + gr->Fit(&fit, "EMQN"); - intercept = fit->GetParameter(0); - slope = fit->GetParameter(1); + intercept = fit.GetParameter(0); + slope = fit.GetParameter(1); } float CSCSimHitMatcher::simHitsMeanStrip(const edm::PSimHitContainer& sim_hits) const {