// -*- mode: c++ -*- For Emacs // $Id: BrDetectorParamsTPC.h,v 1.3 2002/02/22 21:47:49 videbaek Exp $ // $Author: videbaek $ // $Date: 2002/02/22 21:47:49 $ // // /////////////////////////////////////////////////////////////////////// // // // BrDetectorParamsTPC // // // // // /////////////////////////////////////////////////////////////////////// #ifndef BRAT_BrDetectorParamsTPC #define BRAT_BrDetectorParamsTPC #ifndef BRAT_BrDetectorParamsBase #include "BrDetectorParamsBase.h" #endif const Int_t kMaxRows = 20; class BrDetectorParamsTPC : public BrDetectorParamsBase { public: BrDetectorParamsTPC(); BrDetectorParamsTPC(Char_t *name,Char_t *title); BrDetectorParamsTPC(Char_t *name,Char_t *title,Char_t *filename); virtual ~BrDetectorParamsTPC(); void ListParameters() const; void ListPadStatus() const; void SetDefaultParams(); Float_t GetAnodeGap() const {return fAnodeGap;} Float_t GetTwoPar() const {return fTwoPar;} Float_t GetDlong() const {return fDlong; } Float_t GetDtrans() const {return fDtrans;} Float_t GetEff() const {return fEff;} Float_t GetADCGain() const {return fADCGain;} Int_t GetADCChannels() const {return fADCChannels;} Float_t GetDriftv() const {return fDriftVelocity;} Float_t GetDriftVelocity() const {return fDriftVelocity;} Float_t GetHitWidthX() const {return fHitWidthX;} Float_t GetHitWidthY() const {return fHitWidthY;} Float_t GetTimeBucket() const {return fTimeBucket;} Float_t GetShapingTime() const {return fShapingTime;} Int_t GetNoBuckets() const {return fNoBuckets;} Int_t GetNumberOfRows() const {return fNumberOfRows;} Int_t GetNumberOfActiveRows() const {return fNumberOfActiveRows;} Int_t GetPadsprow() const {return fPadsPerRow;} Float_t GetPadBasePosition() const {return fPadBasePosition;} Float_t GetPadDistance() const {return fPadDistance;} Float_t GetPadWidth() const {return fPadWidth;} Float_t GetPadLength() const {return fPadLength;} Float_t GetRowDistance() const {return fRowDistance;} Float_t GetTimingOffset() const { return fTimingOffset;} Float_t GetTimeBasePosition() const {return fTimeBasePosition;} Float_t GetRowPosition(Int_t row) const {return fRowPosition[row-1];} Float_t GetActiveRowPosition(Int_t activeRow) const {return fRowPosition[fActiveRowNumber[activeRow-1]];} Int_t GetActiveRowNumber(Int_t activeRow) const {return fActiveRowNumber[activeRow-1]+1;} Int_t GetRowNumber(Int_t row) const; Float_t GetTimeCorrection(Int_t row) const {return fRowTimeCorrection[row-1];} Float_t GetTimeCorrectionSlope(Int_t row) const {return fRowTimeCorrectionSlope[row-1];} Bool_t IsPadActive(Int_t row, Int_t pad) const { return fPadRowStatus[row-1][pad] == kPadActive;} Bool_t IsPadDead(Int_t row, Int_t pad) const { return fPadRowStatus[row-1][pad] == kPadDead;} void SetRowActive(Int_t irow); void SetRowInActive(Int_t irow); void SetADCGain(Float_t ADCGain){fADCGain = ADCGain;} void SetADCChannels(Int_t ADCChannels){fADCChannels = ADCChannels;} void SetAnodeGap(Float_t AnodeGap){fAnodeGap = AnodeGap;} void SetDlong(const Float_t Dlong) {fDlong = Dlong;} void SetDtrans(Float_t Dtrans){fDtrans=Dtrans;} void SetDriftv(Float_t Driftv){fDriftVelocity = Driftv;} void SetDriftVelocity(Float_t Driftv){fDriftVelocity = Driftv;} void SetEff(Float_t Eff){fEff=Eff;} void SetHitWidthX(Float_t value){fHitWidthX = value;} void SetHitWidthY(Float_t value){fHitWidthY = value;} void SetNoBuckets(Int_t val) {fNoBuckets = val;} void SetNumberOfRows(Int_t NumberOfRows){fNumberOfRows = NumberOfRows;} void SetPadBasePosition(Float_t PadBasePosition) {fPadBasePosition = PadBasePosition;} void SetPadDistance(Float_t PadDistance){fPadDistance=PadDistance;} void SetPadPerRow(Int_t PadsPerRow){fPadsPerRow = PadsPerRow;} void SetPadWidth(Float_t PadWidth){fPadWidth = PadWidth;} void SetPadLength(Float_t PadLength){fPadLength = PadLength;} void SetDeadPad(Int_t row, Int_t pad); void SetDeadPad(Int_t row, Int_t pad1, Int_t pad2); void SetDummyPad(Int_t row, Int_t pad); void SetDummyPad(Int_t row, Int_t pad1, Int_t pad2); void SetRowDistance(Float_t RowDistance){fRowDistance = RowDistance;} void SetRowPosition(Int_t irow,Float_t xpos); void SetShapingTime(Float_t ShapingTime){fShapingTime = ShapingTime;} void SetTimeBucket(Float_t TimeBucket){fTimeBucket = TimeBucket;} void SetTimeBasePosition(Float_t value){fTimeBasePosition = value;} void SetTimingOffset(Float_t TimeOffset){fTimingOffset = TimeOffset;} void SetTimeCorrection(Int_t row, Float_t offset, Float_t slope = 0); Float_t PadToIntrinsic(Float_t pad); Float_t IntrinsicToPad(Float_t pos); Float_t IntrinsicToTime(Int_t row, Float_t time); Float_t IntrinsicToTime(Float_t time); Float_t IntrinsicToDrift(Float_t pos); Float_t IntrinsicToDistance(Float_t pos); Float_t DriftToIntrinsic(Float_t drift); Float_t DriftToTime(Float_t drift); Float_t DriftToTime(Int_t row, Float_t drift); Float_t DistanceToIntrinsic(Float_t pos); Float_t DistanceToPad(Float_t pos); Float_t TimeToDrift(Float_t time); Float_t TimeToIntrinsic(Float_t time); Float_t TimeToDrift(Int_t row, Float_t time); Float_t TimeToIntrinsic(Int_t row, Float_t time); virtual void SetASCIIParameters(Char_t *line); enum { kPadActive = 1, kPadNotInstrumented = 2, kPadDead = 3}; private: Float_t AddTimeCorrection(Int_t row, Float_t &time); Float_t BinToTime(Float_t bin) {return bin + 0.5;} void SetActiveParameters(); Float_t RemoveTimeCorrection(Int_t row, Float_t &time); Float_t TimeToBin(Float_t time) {return time - 0.5;} private: // // Simulation parameters // Float_t fTwoPar; // Twoparticle resolution (not used) Float_t fDlong; // Longitudinal Diffusion coeffecient Float_t fDtrans; // Transverse Diffisuion coefficient Float_t fEff; // Efficiency for padrows Float_t fAnodeGap; // Distance between Pad and anode wire // The proper sim and analysis parameter is really // the pad resolution function (PRF) // // Gas and readout parameters // Float_t fDriftVelocity;// Drift velocity Float_t fTimeBucket; // Bucket size (nsec) Float_t fShapingTime; // Preamp shaper time (FWHM - nsec) Float_t fADCGain; // Gain of Preamp Int_t fADCChannels; // Number of bins in adc (512, 1024) Float_t fTimingOffset; // Time in nsec from interaction to readout start. Float_t fRowTimeCorrection[kMaxRows]; // Calibration for outrow timing diffs Float_t fRowTimeCorrectionSlope[kMaxRows]; // Calibration for outrow timing diffs // // Geometry parameters // Float_t fRowDistance; // Distance between Rows Int_t fNoBuckets; // Number of time buckets Int_t fNumberOfRows; // Number of Rows Int_t fPadsPerRow; // Number of Pads per row Float_t fPadDistance; // Distance between pads (pitch) Float_t fPadWidth; // Width of Pads Float_t fPadLength; // Length of pads Float_t fRowPosition[kMaxRows]; // Z position of rows Bool_t fRowActive[kMaxRows]; // Status of given row Int_t fNumberOfActiveRows; // Number of active rows Int_t fActiveRowNumber[kMaxRows]; // Actual Row number for active row; Float_t fPadBasePosition; // Intrinsic coordinate for first pad (left) Float_t fTimeBasePosition; // Intrinsic coordinate for first timebin // (calibration parameter in reality) Short_t **fPadRowStatus; //! maintaining pad status. Should be filled from DB eventually. Float_t fHitWidthX; // error on x coordinate of hit Float_t fHitWidthY; // error on y coordinate of hit public: ClassDef(BrDetectorParamsTPC,1) // BRAHMS TPC parameter class }; #endif ///////////////////////////////////////////////////////////////////////// // // CVSLOG // // $Log: BrDetectorParamsTPC.h,v $ // Revision 1.3 2002/02/22 21:47:49 videbaek // Add setter and getter for PadBasePosition. // // Revision 1.2 2001/10/12 11:05:16 pchristi // Added new variables fHitWidthX and fHitWidthY and setters and getters // plus a new method ListPadStatus() for printing out the status of all // pads in tpc. CVS: // ---------------------------------------------------------------------- // BrDetectorParamsTPC.cxx BrDetectorParamsTPC.h CVS: // ---------------------------------------------------------------------- // // Revision 1.1.1.1 2001/06/21 14:55:00 hagel // Initial revision of brat2 // // Revision 1.27 2001/02/09 18:16:20 pchristi // Modified methods that have to do with transformations between time and // another coordinate. I introduced a new test TestBrDetectorParamsTPC that // test that the time transformations are consistent. // // Revision 1.26 2001/01/30 10:34:29 pchristi // Fixed a memory leak in BrTPCClusterTable and added a new method GetRowNumber to BrDetectorParamsTPC. // // Revision 1.25 2001/01/26 17:36:07 ejkim // *** empty log message *** // // Revision 1.24 2000/12/16 01:08:59 videbaek // Add deviations per row. // Also some cleanup cosmetically. // // Revision 1.23 2000/10/12 12:58:37 videbaek // Added a row,pad map to BrDetectorParameters. This padmap is meant to maintain // the status of each single pad i.e. instrumented, dead etc. So far the default is // to have all pads active. The BrTPCPreprocess module is also changed to check all // sequences for active, non-active pad status. // // Revision 1.22 2000/10/02 17:07:28 pchristi // Cleaned up headers and source files in the tpc dir // // Revision 1.21 2000/09/07 20:05:25 videbaek // Add methods for row setting, and Modified to proper row numbers 1,2... // // Revision 1.20 2000/08/28 00:17:42 videbaek // Mostly moved CVS log information to end of header files. Other changes // documenter in message to listserver August 26. // // // Revision 1.4 1998/05/08 20:45:55 videbaek // TPC class updates; added functionality // // Revision 1.3 1998/05/08 00:58:42 videbaek // TPC code updates // // Revision 1.2 1998/04/01 22:10:57 hagel // Changes for adding local tracking // // Revision 1.1.1.1 1998/03/04 21:34:02 brahmlib // Brat tpc //