File indexing completed on 2024-04-06 12:28:05
0001 #ifndef RecoTrackerDeDx_UnbinnedFitDeDxEstimator_h
0002 #define RecoTrackerDeDx_UnbinnedFitDeDxEstimator_h
0003
0004 #include "DataFormats/TrackReco/interface/DeDxHit.h"
0005 #include "RecoTracker/DeDx/interface/BaseDeDxEstimator.h"
0006 #include "RecoTracker/DeDx/interface/DeDxTools.h"
0007 #include "RecoTracker/DeDx/interface/UnbinnedLikelihoodFit.h"
0008
0009 #include <TF1.h>
0010
0011 #include <iostream>
0012 #include <vector>
0013
0014 class UnbinnedFitDeDxEstimator : public BaseDeDxEstimator {
0015 public:
0016 UnbinnedFitDeDxEstimator(const edm::ParameterSet& iConfig) {
0017 fitter.setFunction((f1 = new TF1("myLandau", "TMath::Landau(x,[0],[1],1)", 0, 255)));
0018 }
0019
0020 ~UnbinnedFitDeDxEstimator() override {
0021
0022 delete f1;
0023 }
0024
0025 std::pair<float, float> dedx(const reco::DeDxHitCollection& Hits) override {
0026
0027 if (Hits.empty())
0028 return std::make_pair(-1, -1);
0029
0030 f1->SetParameters(3.0, 0.3);
0031
0032 uint32_t i = 0;
0033 for (reco::DeDxHitCollection::const_iterator hit = Hits.begin(); hit != Hits.end(); ++hit, ++i) {
0034 data[i] = hit->charge();
0035 }
0036
0037 fitter.fit(Hits.size(), data);
0038
0039 return std::make_pair(f1->GetParameter(0), f1->GetParError(0));
0040 }
0041
0042
0043 double data[50];
0044 TF1* f1;
0045 UnbinnedLikelihoodFit fitter;
0046 };
0047
0048 #endif