00001 #ifndef FASTSHOWER_SAMPLERROUTER_H
00002 #define FASTSHOWER_SAMPLERROUTER_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_POLYARGS_H
00013 #include "FastShowerUtils/PolyArgs.h"
00014 #endif
00015
00016 #ifndef STD_MAP_H
00017 #define STD_MAP_H
00018 #include <map>
00019 #endif
00020
00021
00022 #ifndef STD_VECTOR_H
00023 #define STD_VECTOR_H
00024 #include <vector>
00025 #endif
00026
00027 #include <iostream>
00028
00029
00030
00031 namespace FastShower{
00036
00037
00038
00039
00040 class ParticleParameters;
00041 class CoreSamples;
00042 class SamplerRouter: virtual public ISampler, private DebugBase{
00043 public:
00046 SamplerRouter(const std::vector<std::pair<double, ISampler*> >&,
00047 double floor=0.0, std::string label="");
00048 SamplerRouter(const SamplerRouter&);
00049 ~SamplerRouter(){}
00050
00051 virtual void sample(const PolyArgs&, CoreSamples&) const;
00052
00053 virtual double lastValue(const CoreSamples&) const;
00054
00055 virtual double indexQ(const ParticleParameters&,
00056 const CoreSamples&) const = 0;
00058 void components(std::vector<const IDebug*>& v) const;
00059 private:
00061 double m_floor;
00064 typedef std::map<double, ISampler* > SamplerTable;
00065 SamplerTable m_samplers;
00066 };
00067 }
00068 #endif
00069
00070
00071
00072
00073
00074