#ifndef FITTER_RECOHITPRODUCER_H #define FITTER_RECOHITPRODUCER_H #include #include #include #include "TClonesArray.h" #include "FitterExceptions.h" class AbsRecoHit; class AbsRecoHitProducer { public: virtual AbsRecoHit* produce(int index)=0; virtual ~AbsRecoHitProducer(); }; template class RecoHitProducer : public AbsRecoHitProducer { private: TClonesArray* hitArray; public: RecoHitProducer(TClonesArray*); virtual ~RecoHitProducer(); virtual AbsRecoHit* produce(int index); }; template RecoHitProducer::RecoHitProducer(TClonesArray* theArr) { hitArray = theArr; } template RecoHitProducer::~RecoHitProducer() { } template AbsRecoHit* RecoHitProducer::produce(int index) { //the ROOT guys really use 0 and not NULL grrr... if(hitArray->At(index) == 0) { throw FitterException("In RecoHitProducer: index for hit in TClonesArray out of bounds",__LINE__,__FILE__); } return ( new recoHit_T( (hit_T*) hitArray->At(index) ) ); } #endif // FITTER_RECOHITPRODUCER_H