Go to the documentation of this file.00001 #ifndef FORIA_TRACKDICER_HH
00002 #define FORIA_TRACKDICER_HH
00003
00004 #include "ForIA/IFourMomentum.hh"
00005
00006 #include <gsl/gsl_rng.h>
00007
00008 class TH2;
00009
00010 namespace ForIA{
00011
00012
00014 class TrackDicer{
00015
00016 public:
00017
00018 enum Efficiency{NOMINAL, SYST_UP, SYST_DOWN};
00019
00021 TrackDicer();
00022
00024 void initialise(Efficiency effType=NOMINAL);
00025
00027 double trackEfficiency(IFourMomentumConstPtr track)const;
00028
00036 template<typename T>
00037 T remove(const T &tracks)const{
00038
00039 T diced;
00040
00041 for(typename T::const_iterator track = tracks.begin();
00042 track != tracks.end(); ++track){
00043 if(gsl_rng_uniform(m_randomGenerator) < trackEfficiency(*track)){
00044 diced.push_back(*track);
00045 }
00046 }
00047 return diced;
00048 }
00049
00050 private:
00051
00052 bool m_doInitialise;
00053
00054 TH2 *m_efficiencyPlot;
00055 TH2 *m_efficiencySystematic;
00056
00057 gsl_rng *m_randomGenerator;
00058
00059 Efficiency m_efficiencyType;
00060
00061 };
00062 }
00063
00064 #endif