#ifndef HPIDTRACKCAND_H
#define HPIDTRACKCAND_H
#include "TObject.h"
#include "TString.h"
#include "piddef.h"
#include "hpidhitdata.h"
#include "hpidtrackdata.h"
#include <iostream>
using namespace std;
class HCategory;
class HPidTrackCand : public TObject
{
 public:
  
  HPidTrackCand(void);
  HPidTrackCand(HMetaMatch* pMetaMatch, Int_t iMatchIndex);
  
  HPidHitData itsHitData;        
  HPidTrackData itsTrackData;    
  Int_t flags;                   
  
  
  enum EflagBits {kIsDoubleHitRICH       =  0,    
                  kIsDoubleHitInnerMDC   =  1,    
                  kIsDoubleHitOuterMDC   =  2,    
		  kIsDoubleHitMETA       =  3,    
		  kIsBestHitRICH         =  4,    
		  kIsBestHitInnerMDC     =  5,    
		  kIsBestHitOuterMDC     =  6,    
		  kIsBestHitMETA         =  7,    
		  kIsBestRKMETA          =  8,    
		  kIsBestRKRICH          =  9,    
		  kIsBestRK              = 10,    
		  kIsBestSPLINE          = 11,    
		  kIsBestKICK            = 12,    
		  kIsBestRKRKMETA        = 13,    
		  kIsBestRKRKRICH        = 14,     
                  kIsBestRKMETAQA        = 15,     
		  kIsAcceptedHitRICH     = 16,    
		  kIsAcceptedHitInnerMDC = 17,    
		  kIsAcceptedHitOuterMDC = 18,    
		  kIsAcceptedHitMETA     = 19,    
		  kIsAcceptedRKMETA      = 20,    
		  kIsAcceptedRKRICH      = 21,    
		  kIsAcceptedRK          = 22,    
		  kIsAcceptedSPLINE      = 23,    
		  kIsAcceptedKICK        = 24,    
		  kIsAcceptedRKRKMETA    = 25,    
		  kIsAcceptedRKRKRICH    = 26,    
                  kIsAcceptedRKMETAQA    = 27,    
                  kIsLepton              = 29,    
		  kIsUsed                = 30,    
		  kIsRejected            = 31     
  };
  void   setFlagBit   (EflagBits bit)  { flags |=  ( 0x01 << bit ); }
  void   unsetFlagBit (EflagBits bit)  { flags &= ~( 0x01 << bit ); }
  Bool_t isFlagBit    (EflagBits bit)  { return (flags >> bit ) & 0x01 ; }
  void   setFlagBit   (Int_t bit);
  void   unsetFlagBit (Int_t bit);
  Bool_t isFlagBit    (Int_t bit);
  void   setFlagBitByValue(EflagBits bit, Bool_t val)  { val ? setFlagBit(bit) : unsetFlagBit(bit); }
  void   setFlagBitByValue(Int_t     bit, Bool_t val)  { val ? setFlagBit(bit) : unsetFlagBit(bit); }
  Bool_t isFlagDoubleHit ()            { return (flags & 0xF) == 0x0 ? kFALSE : kTRUE; }
  Bool_t isFlagAllBestHit()            { return ((flags >> 4 ) & 0xF) == 0xF ? kTRUE : kFALSE; }
  Bool_t isFlagNoBestHit ()            { return ((flags >> 4 ) & 0xF) == 0x0 ? kTRUE : kFALSE; }
  Int_t  getFlagField()                { return flags;  }
  void   setFlagField(Int_t field)     { flags = field; }
  Bool_t isFlagAND(Int_t num, ...);
  Bool_t isFlagOR (Int_t num, ...);
  Int_t  getDoubleHitsLeptons(){ return (flags & 0xF);}
  Int_t  getDoubleHitsHadrons(){ return ((flags >> 1) & 0x7);}
  void   printFlags(TString comment="");
  void   printInfo();
  Bool_t select(Bool_t (*function)(HPidTrackCand* )) { return  (*function)(this); }
  
  
  
  virtual void       Clear(Option_t *  = "");
  
  
  void               print(void) const;
  void               Print(Option_t *o = "") const { print();                   }
  HPidTrackData*     getTrackData(void) {return &itsTrackData;}
  HPidHitData*       getHitData(void) {return &itsHitData;}
  
  
  
  static HCategory*  buildPidTrackCandCategory(void);
  
  
  ClassDef(HPidTrackCand, 2)  
};
    
#endif //HPIDTRACKCAND_H
Last change: Sat May 22 13:07:31 2010
Last generated: 2010-05-22 13:07
This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to ROOT support, or contact the developers with any questions or problems regarding ROOT.