#ifndef TPCDIGIMAPPER_H #define TPCDIGIMAPPER_H #include "TVector3.h" #include "TpcGas.h" #include "TpcSample.h" #include "TpcDigi.h" #include "TpcGem.h" #include "TpcPadShapePool.h" #include "TpcPadPlane.h" #include "TpcPad.h" class TpcDigiPar; //singleton that can give x,y,z from TpcDigi s class TpcDigiMapper { private: virtual ~TpcDigiMapper(); TpcDigiMapper(); TpcDigiMapper(const TpcDigiMapper& notAllowed) {;} TpcDigiMapper& operator=(const TpcDigiMapper& notAllowed) {;} static TpcDigiMapper *finstance; const TpcGas *fgas; const TpcGem *fgem; const TpcPadShapePool *fpadShapes; TpcPadPlane *fpadPlane; double ft0; double ftbin; // ns double fzDrift; double fManDrift; unsigned int fmaxSamples; bool fForceDrift; bool fInit; bool fFieldCorrection; public: void init(TpcDigiPar* dp); //standard way in framework macros void init(TpcPadPlane* plane, const TpcGem* gem, //deprecated const TpcGas* gas, const TpcPadShapePool* padShapes, double t0, double samplFreqMhz, unsigned int maxSamples=512, double zDrift=72.78, double driftvel=0); //for special applications void forceManualDriftVel(bool opt = true) {fForceDrift=opt;}; void setDigiFieldCorrection(bool opt=true){fFieldCorrection=opt;} void padsize(const unsigned int id, double& dx, double& dy); void map(const TpcDigi* const fdig, TVector3& fvec); void map(const TpcSample* const fsamp, TVector3& fvec); double t_from_z(double z) const; double z_from_tick(double t,double vdr=-1.) const; double tick_from_z(double z, double vdr=-1); double t_to_ticks(double t) const; double t_from_tick(double samples) const; TpcPadPlane* getPadPlane() {return fpadPlane;} const TpcPadShapePool * getPadShapePool() {return fpadShapes;} const TpcGas* const getGas() {return fgas;} const TpcGem* const getGem() {return fgem;} //Returns start of read out window (cm) //ft0*v_drift //double windowMin(); //Returns end of read out window (cm), //If time window extends past z-position of cathode, z-position of cathode is returned //Normal windowMin+maxSamples*dt*v_drift // double windowMax(); TpcPad* getPad(unsigned int id); inline static TpcDigiMapper* getInstance() { if(finstance == NULL) { finstance = new TpcDigiMapper(); } return finstance; } inline static void destruct() { if(finstance != NULL) { delete finstance; finstance = NULL; } } }; #endif //TPCDIGIMAPPER_H