#ifndef __HPARTICLECANDSIM_H__
#define __HPARTICLECANDSIM_H__
#include "hparticlecand.h"
#include "hvirtualcandsim.h"
class HParticleCandSim : public HParticleCand, public HVirtualCandSim
{
private:
Int_t fGeantTrackRich [3];
Int_t fGeantTrackMeta [4];
Int_t fGeantTrackShower[4];
Int_t fGeantTrackInnerMdc[2];
Int_t fGeantTrackOuterMdc[2];
Char_t fGeantTrackInnerMdcN[2];
Char_t fGeantTrackOuterMdcN[2];
public:
HParticleCandSim()
{
for(Int_t i=0;i<4;i++){
fGeantTrackMeta[i]=-1;
fGeantTrackShower[i]=-1;
}
for(Int_t i=0;i<3;i++){
fGeantTrackRich[i]=-1;
}
for(Int_t i=0;i<2;i++){
fGeantTrackInnerMdc[i]=-1;
fGeantTrackOuterMdc[i]=-1;
fGeantTrackInnerMdcN[i]=0;
fGeantTrackOuterMdcN[i]=0;
}
}
~HParticleCandSim() {}
void setGeantTrackRich(Int_t a,Int_t i) { if(i<3 && i>=0) fGeantTrackRich [i] = a; }
void setGeantTrackMeta(Int_t a,Int_t i) { if(i<4 && i>=0) fGeantTrackMeta [i] = a; }
void setGeantTrackShower(Int_t a,Int_t i) { if(i<4 && i>=0) fGeantTrackShower[i] = a; }
void setGeantTrackEmc (Int_t a,Int_t i) { if(i<4 && i>=0) fGeantTrackShower[i] = a; }
void setGeantTrackInnerMdc(Int_t a,Int_t i,Int_t n) { if(i<2 && i>=0) { fGeantTrackInnerMdc[i] = a; fGeantTrackInnerMdcN[i] = n; }}
void setGeantTrackOuterMdc(Int_t a,Int_t i,Int_t n) { if(i<2 && i>=0) { fGeantTrackOuterMdc[i] = a; fGeantTrackOuterMdcN[i] = n; }}
Int_t getGeantTrackRich(Int_t i) { return (i<3 && i>=0)? fGeantTrackRich [i] :-1; }
Int_t getGeantTrackMeta(Int_t i) { return (i<4 && i>=0)? fGeantTrackMeta [i] :-1; }
Int_t getGeantTrackShower(Int_t i) { return (i<4 && i>=0)? fGeantTrackShower[i] :-1; }
Int_t getGeantTrackEmc (Int_t i) { return (i<4 && i>=0)? fGeantTrackShower[i] :-1; }
Int_t getGeantTrackInnerMdc(Int_t i) { return (i<2 && i>=0)? fGeantTrackInnerMdc[i] :-1; }
Int_t getGeantTrackOuterMdc(Int_t i) { return (i<2 && i>=0)? fGeantTrackOuterMdc[i] :-1; }
Int_t getGeantTrackInnerMdcN(Int_t i) { return (i<2 && i>=0)? fGeantTrackInnerMdcN[i] : 0; }
Int_t getGeantTrackOuterMdcN(Int_t i) { return (i<2 && i>=0)? fGeantTrackOuterMdcN[i] : 0; }
Float_t getGeantTrackInnerMdcWeight(Int_t i) { return (i<2 && i>=0 && getNWSeg(0) !=0 )? Float_t(fGeantTrackInnerMdcN[i])/getNWSeg(0) : 0; }
Float_t getGeantTrackOuterMdcWeight(Int_t i) { return (i<2 && i>=0 && getNWSeg(0) !=0 )? Float_t(fGeantTrackOuterMdcN[i])/getNWSeg(1) : 0; }
Bool_t isGhostTrack() const { return (getGeantCorrTrackIds()&kIsGhost) == 0 ? kFALSE:kTRUE; }
Bool_t isInDetector (eDetBits det) const { return (getGeantCorrTrackIds()&det) == 0 ? kFALSE:kTRUE; }
Bool_t isInDetectors(UInt_t flagdetbits) const { return (getGeantCorrTrackIds()&flagdetbits) == flagdetbits ? kTRUE:kFALSE; }
Int_t getNDetector() const {
Int_t n=0;
if(getGeantCorrTrackIds()&kIsInRICH) n+=1;
if(getGeantCorrTrackIds()&kIsInInnerMDC) n+=1;
if(getGeantCorrTrackIds()&kIsInOuterMDC) n+=1;
if(getGeantCorrTrackIds()&kIsInTOF) n+=1;
if(getGeantCorrTrackIds()&kIsInRPC) n+=1;
if(getGeantCorrTrackIds()&kIsInSHOWER||getGeantCorrTrackIds()&kIsInEMC) n+=1;
return n;
}
Bool_t isGoodMDCWires (Int_t tr,Int_t minInner=7 ,Int_t minOuter=7 , Bool_t checkall=kFALSE,Bool_t requireOuter=kTRUE);
Bool_t isGoodMDCWeight(Int_t tr,Float_t minInner=0.5,Float_t minOuter=0.5, Bool_t checkall=kFALSE,Bool_t requireOuter=kTRUE);
Bool_t isGoodMDC (Int_t tr,Float_t minInner=0.5,Float_t minOuter=0.5,Int_t minInnerW=5,Int_t minOuterW=5,Bool_t checkall=kFALSE,Bool_t requireOuter=kTRUE);
virtual void print(UInt_t selection=31);
void OldStreamer(TBuffer &R__b, Int_t version);
ClassDef(HParticleCandSim,4)
};
#endif // __HPARTICLECANDSIM_H__