#ifndef HGEANTRPC_H
#define HGEANTRPC_H
#include "hlinkeddataobject.h"
class HGeantRpc : public HLinkedDataObject
{
private:
Int_t trackNumber;
Float_t trackLength;
Float_t loctrackLength;
Float_t eHit;
Float_t xHit;
Float_t yHit;
Float_t zHit;
Float_t tofHit;
Float_t momHit;
Float_t thetaHit;
Float_t phiHit;
Short_t detectorID;
Float_t loctrackLength1;
Float_t eHit1;
Float_t xHit1;
Float_t yHit1;
Float_t momHit1;
Float_t loctrackLength2;
Float_t eHit2;
Float_t xHit2;
Float_t yHit2;
Float_t momHit2;
Float_t loctrackLength3;
Float_t eHit3;
Float_t xHit3;
Float_t yHit3;
Float_t momHit3;
Short_t HGeantRpc_version;
public:
HGeantRpc(void);
~HGeantRpc(void);
inline void setTrack(Int_t atrackNumber) {trackNumber = atrackNumber;}
inline void setDetectorID(Short_t adetectorID) {detectorID = adetectorID;}
inline void setAddress(Int_t sec, Int_t col, Int_t cel, Int_t gap);
inline void setVersion(Int_t aHGeantRpc_version) {HGeantRpc_version = aHGeantRpc_version;}
void setIncidence(Float_t athetaHit, Float_t aphiHit);
void setHit(Float_t axHit, Float_t ayHit, Float_t azHit, Float_t atofHit,
Float_t amomHit, Float_t eHit);
void setTLength(Float_t atracklength, Float_t aloctracklength);
void setHit(Float_t axHit, Float_t ayHit, Float_t azHit, Float_t atofHit,
Float_t amomHit, Float_t eHit, Float_t aloctracklength);
void setGap(Int_t nGap, Float_t axHit, Float_t ayHit, Float_t amomHit,
Float_t eHit, Float_t aloctrackLength);
inline void setTLengthHit(Float_t atrackLength) {trackLength = atrackLength;};
inline void setZHit(Float_t azHit) {zHit = azHit;};
inline void setTofHit(Float_t atofHit) {tofHit = atofHit;};
inline Int_t getSector(void) const;
inline Int_t getColumn(void) const;
inline Int_t getCell(void) const;
inline Int_t getGap(void) const;
inline Int_t getTrack(void) {return trackNumber;};
inline Int_t getDetectorID(void) {return detectorID;};
inline Int_t getNLocationIndex(void) {return 4;};
inline Int_t getLocationIndex(Int_t i);
inline Int_t getVersion(void) {return HGeantRpc_version;};
void getIncidence(Float_t& athetaHit, Float_t& aphiHit);
void getTLength(Float_t& atracklength, Float_t& aloctracklength);
void getHit(Float_t& axHit, Float_t& ayHit, Float_t& azHit,
Float_t& atofHit, Float_t& amomHit, Float_t& aeHit);
Float_t getlocTLengthGap(Int_t nGap);
void getGap(Int_t nGap, Float_t& axHit, Float_t& ayHit, Float_t& amomHit,
Float_t& aeHit, Float_t& aloctrackLength);
void getGap(Int_t nGap, Float_t& axHit, Float_t& ayHit, Float_t& amomHit,
Float_t& aeHit);
void getGap(Int_t nGap, Float_t& axHit, Float_t& ayHit, Float_t& amomHit);
inline Float_t getTLengthHit(void) {return trackLength;};
inline Float_t getZHit(void) {return zHit;};
inline Float_t getTofHit(void) {return tofHit;};
void getHit(Float_t& axHit, Float_t& ayHit, Float_t& azHit, Float_t& atofHit,
Float_t& amomHit, Float_t& aeHit, Float_t& aloctrackLength);
void getHit(Float_t& axHit, Float_t& ayHit, Float_t& azHit, Float_t& atofHit,
Float_t& amomHit);
void getHit(Float_t& axHit, Float_t& ayHit, Float_t& azHit, Float_t& atofHit);
void getHitDigi(Float_t& axHit, Float_t& atofHit, Float_t& amomHit,
Float_t& aloctrackLength);
void getCellAverage(Float_t gap, Float_t& axHit, Float_t& ayHit, Float_t& azHit,
Float_t& atofHit, Float_t& amomHit, Float_t& aeHit,
Float_t& aloctrackLength);
void getCellAverage(Float_t& axHit, Float_t& ayHit, Float_t& azHit,
Float_t& atofHit, Float_t& amomHit, Float_t& aeHit);
void getCellAverage(Float_t& axHit, Float_t& ayHit, Float_t& azHit,
Float_t& atofHit, Float_t& amomHit);
void getCellAverage(Float_t& axHit, Float_t& ayHit, Float_t& azHit,
Float_t& atofHit);
void getCellAverageDigi(Float_t gap, Float_t& axHit, Float_t& atofHit,
Float_t& amomHit, Float_t& aloctrackLength);
ClassDef(HGeantRpc,5)
};
inline Int_t HGeantRpc::getSector(void) const{
if (detectorID<0) return -1*(detectorID+1);
else return detectorID>>11;
}
inline Int_t HGeantRpc::getColumn(void) const{
if (detectorID<0) return -1;
else return ((detectorID>>8) & 7);
}
inline Int_t HGeantRpc::getCell(void) const{
if (detectorID<0) return -1;
else return ((detectorID>>2) & 63);
}
inline Int_t HGeantRpc::getGap(void) const {
if (detectorID<0) return -1;
else return (detectorID & 3);
}
inline void HGeantRpc::setAddress(Int_t sec, Int_t col, Int_t cel, Int_t gap) {
detectorID = (sec<<11) + (col<<8) + (cel<<2) + gap;
}
inline Int_t HGeantRpc::getLocationIndex(Int_t i) {
switch (i) {
case 0 : return getSector();
case 1 : return getColumn();
case 2 : return getCell();
case 3 : return getGap();
}
return -1;
}
#endif /*! HGEANTRPC_H */