00001 #ifndef StiDetectorGroup_H_INCLUDED
00002 #define StiDetectorGroup_H_INCLUDED
00003
00004 #include <stdexcept>
00005
00006 #include "Sti/StiGenericDetectorGroup.h"
00007 #include "Sti/Base/Factory.h"
00008 #include "Sti/StiToolkit.h"
00009 template<class Event,class Detector> class StiHitLoader;
00010 class StiElossCalculator;
00011
00012 template<class Event>
00013 class StiDetectorGroup : public StiGenericDetectorGroup
00014 {
00015 public:
00016
00018 virtual StiHitLoader<Event,StiDetectorBuilder> * getHitLoader();
00019 StiHitLoader<Event,StiDetectorBuilder> *hitLoader() {return _hitLoader;}
00020
00021 protected:
00022
00023 StiDetectorGroup(const string & name);
00024 StiDetectorGroup(const string & name,
00025 StiHitLoader<Event,StiDetectorBuilder> * hitLoader,
00026 StiDetectorBuilder * detectorBuilder,
00027 StiElossCalculator * elossCalculator);
00028 ~StiDetectorGroup();
00029 StiHitLoader<Event,StiDetectorBuilder> * _hitLoader;
00030 };
00031
00032
00033 template<class Event>
00034 StiDetectorGroup<Event>::StiDetectorGroup(const string & name,
00035 StiHitLoader<Event,StiDetectorBuilder> * hitLoader,
00036 StiDetectorBuilder * detectorBuilder,
00037 StiElossCalculator * elossCalculator)
00038 : StiGenericDetectorGroup(name,detectorBuilder,elossCalculator),
00039 _hitLoader(hitLoader)
00040 {
00041
00042 if (_hitLoader)
00043 {
00044 _hitLoader->setDetector(detectorBuilder);
00045 }
00046 initialize();
00047 }
00048
00049 template<class Event>
00050 StiDetectorGroup<Event>::StiDetectorGroup(const string & name)
00051 : StiGenericDetectorGroup(name),
00052 _hitLoader(0)
00053 {
00054 initialize();
00055 }
00056
00057 template<class Event>
00058 StiDetectorGroup<Event>::~StiDetectorGroup()
00059 {
00060 delete _hitLoader;
00061 }
00062
00064 template<class Event>
00065 StiHitLoader<Event,StiDetectorBuilder> * StiDetectorGroup<Event>::getHitLoader()
00066 {
00067 if (_detectorBuilder==0)
00068 {
00069 string message = "StiDetectorGroup::getHitLoader() - ERROR - Hit loader requested for non active detector:";
00070 message += getName();
00071
00072 }
00073
00074
00075
00076
00077
00078
00079 return _hitLoader;
00080 }
00081 #endif
00082