#ifndef ALITPCROC_H
#define ALITPCROC_H
#include <TObject.h>
class AliTPCROC : public TObject {
public:
static AliTPCROC* Instance();
AliTPCROC();
AliTPCROC(const AliTPCROC &roc);
AliTPCROC &operator = (const AliTPCROC & roc);
void Init();
virtual ~AliTPCROC();
void GetPositionLocal(UInt_t sector, UInt_t row, UInt_t pad, Float_t *pos);
void GetPositionGlobal(UInt_t sector, UInt_t row, UInt_t pad, Float_t *pos);
UInt_t GetNSectors() const { return fNSectorsAll;}
UInt_t GetNRows(UInt_t sector) const { return (sector<fNSectors[1]) ? fNRows[0]:fNRows[1];}
UInt_t GetNChannels(UInt_t sector) const { return (sector<fNSectors[1]) ? fNChannels[0]:fNChannels[1];}
UInt_t GetNPads(UInt_t sector,UInt_t row) const {
UInt_t irow=(row<GetNRows(sector))?row:(GetNRows(sector)-1);
return (sector<fNSectors[1]) ? fNPads[0][irow]:fNPads[1][irow];}
const UInt_t * GetRowIndexes(UInt_t sector) const {return (sector<fNSectors[1]) ? fRowPosIndex[0]:fRowPosIndex[1];}
Float_t GetInnerRadiusLow() const {return fInnerRadiusLow;}
Float_t GetInnerRadiusUp() const {return fInnerRadiusUp;}
Float_t GetOuterRadiusLow() const {return fOuterRadiusLow;}
Float_t GetOuterRadiusUp() const {return fOuterRadiusUp;}
Float_t GetInnerFrameSpace() const {return fInnerFrameSpace;}
Float_t GetOuterFrameSpace() const {return fOuterFrameSpace;}
Float_t GetInnerWireMount() const {return fInnerWireMount;}
Float_t GetOuterWireMount() const {return fOuterWireMount;}
Float_t GetInnerAngle() const {return fInnerAngle;}
Float_t GetOuterAngle() const {return fOuterAngle;}
UInt_t GetNInnerSector() const {return fNSectors[0];}
UInt_t GetNOuterSector() const {return fNSectors[1];}
UInt_t GetNSector() const {return fNSectorsAll;}
Float_t GetZLength(Int_t sector) const {return (sector<35) ? fZLength-0.275 : fZLength-0.302;}
Float_t GetPadRowRadiiLow(UInt_t irow) const {return ( irow<fNRowLow ) ? fPadRowLow[irow]: 0;}
Float_t GetPadRowRadiiUp(UInt_t irow) const {return ( irow<fNRowUp ) ? fPadRowUp[irow]: 0;}
Float_t GetPadRowRadii(UInt_t isec, UInt_t irow) const {
return ( (isec < fNSectors[0]) ?GetPadRowRadiiLow(irow):GetPadRowRadiiUp(irow));}
static UInt_t GetTPCUniqueID(UInt_t sector, UInt_t row, UInt_t pad){UInt_t uid=pad+row*140+sector*140*159; return uid; }
protected:
void SetGeometry();
UInt_t fNSectorsAll;
UInt_t fNSectors[2];
UInt_t fNRows[2];
UInt_t fNChannels[2];
UInt_t *fNPads[2];
UInt_t *fRowPosIndex[2];
Float_t fInnerRadiusLow;
Float_t fInnerRadiusUp;
Float_t fOuterRadiusUp;
Float_t fOuterRadiusLow;
Float_t fInnerFrameSpace;
Float_t fOuterFrameSpace;
Float_t fInnerWireMount;
Float_t fOuterWireMount;
Float_t fZLength;
Float_t fInnerAngle;
Float_t fOuterAngle;
UInt_t fNInnerWiresPerPad;
Float_t fInnerWWPitch;
UInt_t fInnerDummyWire;
Float_t fInnerOffWire;
Float_t fRInnerFirstWire;
Float_t fRInnerLastWire;
Float_t fLastWireUp1;
UInt_t fNOuter1WiresPerPad;
UInt_t fNOuter2WiresPerPad;
Float_t fOuterWWPitch;
UInt_t fOuterDummyWire;
Float_t fOuterOffWire;
Float_t fROuterFirstWire;
Float_t fROuterLastWire;
Float_t fInnerPadPitchLength;
Float_t fInnerPadPitchWidth;
Float_t fInnerPadLength;
Float_t fInnerPadWidth;
Float_t fOuter1PadPitchLength;
Float_t fOuter2PadPitchLength;
Float_t fOuterPadPitchWidth;
Float_t fOuter1PadLength;
Float_t fOuter2PadLength;
Float_t fOuterPadWidth;
UInt_t fNRowLow;
UInt_t fNRowUp1;
UInt_t fNRowUp2;
UInt_t fNRowUp;
UInt_t fNtRows;
Float_t fPadRowLow[100];
Float_t fPadRowUp[100];
UInt_t fNPadsLow[100];
UInt_t fNPadsUp[100];
Float_t fYInner[100];
Float_t fYOuter[100];
protected:
static AliTPCROC* fgInstance;
ClassDef(AliTPCROC,0)
};
#endif