Back to home page

Project CMSSW displayed by LXR

 
 

    


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     // clean up everything
0022     delete f1;
0023   }
0024 
0025   std::pair<float, float> dedx(const reco::DeDxHitCollection& Hits) override {
0026     // if there is no hit, returns invalid.
0027     if (Hits.empty())
0028       return std::make_pair(-1, -1);
0029     // sets the initial parameters
0030     f1->SetParameters(3.0, 0.3);
0031     // fills a temporary array and performs the fit
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     // fit !
0037     fitter.fit(Hits.size(), data);
0038     // returns the mpv and its error
0039     return std::make_pair(f1->GetParameter(0), f1->GetParError(0));
0040   }
0041 
0042   // ----------member data ---------------------------
0043   double data[50];
0044   TF1* f1;
0045   UnbinnedLikelihoodFit fitter;
0046 };
0047 
0048 #endif