#ifndef __HPARTICLEDEF_H__
#define __HPARTICLEDEF_H__
#include "Rtypes.h"
#include "haddef.h"
typedef Float16_t SmallFloat;
const Cat_t catParticleCand   = PARTICLE_OFFSET + 1;
const Cat_t catParticleEvtInfo= PARTICLE_OFFSET + 2;
const Cat_t catParticleDebug  = PARTICLE_OFFSET + 3;
const Cat_t catParticleCal    = PARTICLE_OFFSET + 4;
const Cat_t catParticlePair   = PARTICLE_OFFSET + 5;
const Cat_t catParticleMdc    = PARTICLE_OFFSET + 6;
const Cat_t catParticleBtRing = PARTICLE_OFFSET + 7;
const Cat_t catParticleBtRingInfo = PARTICLE_OFFSET + 8;
namespace Particle {
    
    
    
enum eSelMeta {
	kNoUse     =-1,
	kTofClst   = 0,
	kTofHit1   = 1,
	kTofHit2   = 2,
	kRpcClst   = 3,
	kShowerHit = 4,
	kEmcClst   = 5
};
enum eDetBits
{
    
	kIsNotSet          = 0x00,  
	kIsInRICHIPU       = 0x01,  
    
	kIsInOuterMDC      = 0x02,  
	kIsInRICH          = 0x04,  
	kIsInInnerMDC      = 0x08,  
    
	kIsInSHOWER        = 0x10,  
	kIsInEMC           = 0x10,  
	kIsInTOF           = 0x20,  
	kIsInRPC           = 0x40,  
	kIsInMETA          = 0x80,  
        kIsGhost           = 0x100, 
	kIsInnerGhost      = 0x200, 
	kIsOuterGhost      = 0x400  
};
enum eMatching
{
    
	kIsNoMatch     = 0x00,  
	kIsRICHMDC     = 0x01,  
	kIsRICHRK      = 0x02   
};
enum eVertex
{
	kVertexCluster     = 1,  
	kVertexSegment     = 2,  
	kVertexParticle    = 3,  
	kVertexUser        = 4   
};
enum eMomReco
{
    
	kMomSpline     = 1,  
	kMomRK         = 2,  
	kMomKalman     = 3   
};
enum ePair
{
    
	kIsUS          =    0,  
	kIsLSPos       =    1,  
	kIsLSNeg       =    2   
};
enum eFlagBits {
    kIsDoubleHitRICH       =  0,    
    kIsDoubleHitInnerMDC   =  1,    
    kIsDoubleHitOuterMDC   =  2,    
    kIsDoubleHitMETA       =  3,    
    kIsBestHitRICH         =  4,    
    kIsBestHitInnerMDC     =  5,    
    kIsBestHitOuterMDC     =  6,    
    kIsBestHitMETA         =  7,    
    kIsBestRK              =  8,    
    kIsBestRKRKMETA        =  9,    
    kIsBestRKRKMETARadius  = 10,    
    kIsBestUser            = 11,    
    kIsAcceptedHitRICH     = 12,    
    kIsAcceptedHitRICHMDC  = 13,    
    kIsAcceptedHitInnerMDC = 14,    
    kIsAcceptedHitOuterMDC = 15,    
    kIsAcceptedHitMETA     = 16,    
    kIsAcceptedRKMETA      = 17,    
    kIsAcceptedRKRICH      = 18,    
    kIsAcceptedRK          = 19,    
    kIsAcceptedRKRKMETA    = 20,    
    kIsAcceptedRKRKMETARadius= 21,  
    kIsAcceptedUser          = 22,  
    
    kIsLepton              = 29,    
    kIsUsed                = 30,    
    kIsRejected            = 31     
};
enum ERichMatch {
    kUseRICHIndexSorter         = 0,   
    kUseRKRICHCorrelationSorter = 1,   
    kUseRKRICHWindowSorter      = 2    
};
enum ESelect {
    kIsLeptonSorter = 0,
    kIsHadronSorter = 1
};
enum ESwitch {
    kIsIndexRICHSorter         =  0,    
    kIsIndexInnerMDCSorter     =  1,    
    kIsIndexOuterMDCSorter     =  2,    
    kIsIndexTOFSorter          =  3,    
    kIsIndexSHOWERSorter       =  4,    
    kIsIndexRPCSorter          =  5,    
    kIsIndexMETASorter         =  6,    
    kIsBestHitRICHSorter       =  7,    
    kIsBestHitInnerMDCSorter   =  8,    
    kIsBestHitOuterMDCSorter   =  9,    
    kIsBestHitMETASorter       = 10,    
    kIsBestRKSorter            = 11,    
    kIsBestRKRKMETASorter      = 12,    
    kIsBestRKRKMETARadiusSorter= 13,    
    kIsBestUserSorter          = 14     
};
enum eClosePairSelect {
    kSameRICH              = 0x01,        
    kSameInnerMDC          = 0x02,        
    kSameOuterMDC          = 0x04,        
    kSameMETA              = 0x08,        
    kSamePosPolarity       = 0x10,        
    kSameNegPolarity       = 0x20,        
    kSamePolarity          = 0x40,        
    kRICH2                 =  0x80,       
    kFittedInnerMDC2       =  0x100,      
    kFittedOuterMDC2       =  0x200,      
    kOuterMDC2             =  0x400,      
    kRK2                   =  0x800,      
    kMETA2                 =  0x1000,     
    kIsLepton2             =  0x2000,     
    kIsUsed2               =  0x4000,     
    kNoSameRICH            =  0x8000,     
    kNoSameInnerMDC        =  0x10000,    
    kNoSameOuterMDC        =  0x20000,    
    kNoSameMETA            =  0x40000,    
    kNoSamePosPolarity     =  0x80000,    
    kNoSameNegPolarity     =  0x100000,   
    kNoSamePolarity        =  0x200000,   
    kNoRICH2               =  0x400000,   
    kNoFittedInnerMDC2     =  0x800000,   
    kNoFittedOuterMDC2     =  0x1000000,  
    kNoOuterMDC2           =  0x2000000,  
    kNoRK2                 =  0x4000000,  
    kNoMETA2               =  0x8000000,  
    kNoIsLepton2           =  0x10000000, 
    kNoIsUsed2             =  0x20000000, 
    kNoUseRICH             =  0x40000000  
};
enum ePairCase {
    
    kPairCase1            = kNoSameRICH|kNoSameInnerMDC|kNoSameOuterMDC|kNoSameMETA|kRICH2|kOuterMDC2|kMETA2,
    kPairCase2            = kNoSameRICH|kNoSameInnerMDC|kNoSameOuterMDC|kSameMETA  |kRICH2|kOuterMDC2|kMETA2,
    kPairCase3            = kNoSameRICH|kNoSameInnerMDC|kSameOuterMDC  |kSameMETA  |kRICH2|kOuterMDC2|kMETA2,
    kPairCase4            = kNoSameRICH|kNoSameInnerMDC|kSameOuterMDC  |kNoSameMETA|kRICH2|kOuterMDC2|kMETA2,
    kPairCase5            = kNoSameRICH|kSameInnerMDC  |kNoSameOuterMDC|kNoSameMETA|kRICH2|kOuterMDC2|kMETA2,
    kPairCase6            = kSameRICH  |kSameInnerMDC  |kNoSameOuterMDC|kNoSameMETA|kRICH2|kOuterMDC2|kMETA2,
    kPairCase7            = kSameRICH  |kNoSameInnerMDC|kNoSameOuterMDC|kNoSameMETA|kRICH2|kOuterMDC2|kMETA2,
    kPairCase8            = kSameRICH  |kNoSameInnerMDC|kNoSameOuterMDC|kSameMETA  |kRICH2|kOuterMDC2|kMETA2,
    kPairCase9            = kSameRICH  |kSameInnerMDC  |kNoSameOuterMDC|kSameMETA  |kRICH2|kOuterMDC2|kMETA2,
    kPairCase10           = kSameRICH  |kSameInnerMDC  |kSameOuterMDC  |kNoSameMETA|kRICH2|kOuterMDC2|kMETA2,
    kPairCase11           = kNoSameRICH|kNoSameInnerMDC|kNoSameOuterMDC            |kRICH2|kOuterMDC2|kNoMETA2,
    kPairCase12           = kSameRICH  |kNoSameInnerMDC|kNoSameOuterMDC            |kRICH2|kOuterMDC2|kNoMETA2,
    kPairCase13           = kSameRICH  |kSameInnerMDC  |kNoSameOuterMDC            |kRICH2|kOuterMDC2|kNoMETA2,
    kPairCase14           = kNoSameRICH|kNoSameInnerMDC                            |kRICH2|kNoOuterMDC2|kNoMETA2,
    kPairCase15           = kSameRICH  |kNoSameInnerMDC                            |kRICH2|kNoOuterMDC2|kNoMETA2,
    
    kPairCase16           = kNoUseRICH |kNoSameInnerMDC|kNoSameOuterMDC|kNoSameMETA|kOuterMDC2|kMETA2,
    kPairCase17           = kNoUseRICH |kNoSameInnerMDC|kNoSameOuterMDC|kSameMETA  |kOuterMDC2|kMETA2,
    kPairCase18           = kNoUseRICH |kNoSameInnerMDC|kSameOuterMDC  |kSameMETA  |kOuterMDC2|kMETA2,
    kPairCase19           = kNoUseRICH |kNoSameInnerMDC|kSameOuterMDC  |kNoSameMETA|kOuterMDC2|kMETA2,
    kPairCase20           = kNoUseRICH |kSameInnerMDC  |kNoSameOuterMDC|kSameMETA  |kOuterMDC2|kMETA2,
    kPairCase21           = kNoUseRICH |kSameInnerMDC  |kSameOuterMDC  |kNoSameMETA|kOuterMDC2|kMETA2,
    kPairCase22           = kNoUseRICH |kSameInnerMDC  |kNoSameOuterMDC|kNoSameMETA|kOuterMDC2|kMETA2,
    kPairCase23           = kNoUseRICH |kNoSameInnerMDC|kNoSameOuterMDC            |kOuterMDC2|kNoMETA2,
    kPairCase24           = kNoUseRICH |kSameInnerMDC  |kNoSameOuterMDC            |kOuterMDC2|kNoMETA2,
    kPairCase25           = kNoUseRICH |kNoSameInnerMDC                            |kNoOuterMDC2|kNoMETA2,
    
    kPairCase26           = kNoSameRICH|kNoSameInnerMDC|kNoSameOuterMDC|kNoSameMETA|kNoRICH2|kOuterMDC2|kMETA2,
    kPairCase27           = kNoSameRICH|kNoSameInnerMDC|kNoSameOuterMDC|kSameMETA  |kNoRICH2|kOuterMDC2|kMETA2,
    kPairCase28           = kNoSameRICH|kNoSameInnerMDC|kSameOuterMDC  |kSameMETA  |kNoRICH2|kOuterMDC2|kMETA2,
    kPairCase29           = kNoSameRICH|kNoSameInnerMDC|kSameOuterMDC  |kNoSameMETA|kNoRICH2|kOuterMDC2|kMETA2,
    kPairCase30           = kNoSameRICH|kSameInnerMDC  |kNoSameOuterMDC|kNoSameMETA|kNoRICH2|kOuterMDC2|kMETA2,
    kPairCase31           = kNoSameRICH|kNoSameInnerMDC|kNoSameOuterMDC            |kNoRICH2|kOuterMDC2|kNoMETA2,
    kPairCase32           = kNoSameRICH|kNoSameInnerMDC                            |kNoRICH2|kNoOuterMDC2|kNoMETA2
};
enum eEventSelect {  
    kGoodVertexClust       = 0x01,        
    kGoodVertexCand        = 0x02,        
    kGoodSTART             = 0x04,        
    kNoPileUpSTART         = 0x08,        
    kNoPileUpMETA          = 0x10,        
    kNoPileUpMDC           = 0x20,        
    kNoFlashMDC            = 0x40,        
    kGoodMDCMult           = 0x80,        
    kGoodMDCMIPSMult       = 0x100,       
    kGoodLepMult           = 0x200,       
    kGoodTRIGGER           = 0x400,       
    kGoodSTART2            = 0x800,       
    kNoVETO                = 0x1000,      
    kGoodSTARTVETO         = 0x2000,      
    kGoodSTARTMETA         = 0x4000,      
    kNoDeltaElectron       = 0x8000,      
    kNoSTART               = 0x10000,     
    kNoEventPileUp         = 0x20000      
};
enum eBeamTime {
    kUnknownBeam = 0,
    kApr12       = 1,
    kJul14       = 2,
    kAug14       = 3,
    kMar19       = 4
};
}
#endif // __HPARTICLEDEF_H__