00001 #ifndef FASTSHOWER_S0EMECALBAR1_H
00002 #define FASTSHOWER_S0EMECALBAR1_H
00003
00004 #ifndef FASTSHOWER_ISAMPLER_H
00005 #include "FastShowerUtils/ISampler.h"
00006 #endif
00007
00008 #ifndef FASTSHOWER_DEBUGBASE_H
00009 #include "FastShowerUtils/DebugBase.h"
00010 #endif
00011
00012 #ifndef FASTSHOWER_IUPDATINGGAUSSIAN_H
00013 #include "FastShowerUtils/IUpdatingGaussian.h"
00014 #endif
00015
00016 #ifndef FASTSHOWER_ISLICE0_H
00017 #include "FastShowerUtils/ISlice0.h"
00018 #endif
00019
00020 #ifndef FASTSHOWER_SP_H
00021 #include "FastShowerUtils/SP.h"
00022 #endif
00023
00024 #ifndef STD_VECTOR_H
00025 #define STD_VECTOR_H
00026 #include <vector>
00027 #endif
00028
00029 #ifndef STD_STRING_H
00030 #define STD_STRING_H
00031 #include <string>
00032 #endif
00033
00034 namespace FastShower{
00053 class IInTail;
00054 class CoreSamples;
00055 class IProcessedDist;
00056 class PolyArgs;
00057 class IFn;
00058 class IConfigurer;
00059
00060 class S0EmEcalBar1:
00061 virtual public ISampler,
00062 public ISlice0, private DebugBase{
00063 public:
00064
00065 S0EmEcalBar1(IUpdatingGaussian*, IProcessedDist*, IInTail*, IFn*);
00066 S0EmEcalBar1(const IConfigurer*, const std::string&);
00068 virtual ISampler* clone() const;
00069
00070 virtual void sample(const PolyArgs&, CoreSamples&) const;
00071 virtual double lastValue(const CoreSamples&) const;
00072 virtual void components(IDebug::Cpts& ) const;
00073
00074 private:
00075
00076 double evalTail(const PolyArgs&) const;
00077 double evalPeak(const PolyArgs&) const;
00078
00079 SP<IUpdatingGaussian> m_peak;
00080 SP<IProcessedDist> m_tail;
00081 SP<IInTail> m_inTail;
00082 SP<IFn> m_tailLowerBound;
00083 static const double s_nSigma;
00084 static const double s_tailFluctScale;
00085
00086 };
00087 }
00088 #endif
00089
00090
00091
00092
00093
00094
00095