#ifndef __HVIRTUALCANDSIM_H__
#define __HVIRTUALCANDSIM_H__
#include "TObject.h"
#include "hvirtualcand.h"
class HVirtualCandSim
{
protected:
    
    Int_t   fGeantPID;                
    Int_t   fGeantTrack;              
    UInt_t  fGeantCorrTrackIds;       
    Float_t fGeantxMom;               
    Float_t fGeantyMom;               
    Float_t fGeantzMom;               
    Float_t fGeantxVertex;            
    Float_t fGeantyVertex;            
    Float_t fGeantzVertex;            
    Int_t   fGeantParentTrackNum;     
    Int_t   fGeantParentPID;          
    Int_t   fGeantGrandParentTrackNum;
    Int_t   fGeantGrandParentPID;     
    Int_t   fGeantCreationMechanism;  
    Int_t   fGeantMediumNumber;       
    Float_t fGeantgeninfo;            
    Float_t fGeantgeninfo1;           
    Float_t fGeantgeninfo2;           
    Float_t fGeantgenweight;          
public:
    HVirtualCandSim() :
    fGeantPID(0),fGeantTrack(-1), fGeantCorrTrackIds(0),
    fGeantxMom(-1), fGeantyMom(-1), fGeantzMom(-1), fGeantxVertex(-1), fGeantyVertex(-1), fGeantzVertex(-1),
    fGeantParentTrackNum(0),fGeantParentPID(-1),fGeantGrandParentTrackNum(0),fGeantGrandParentPID(-1), 
    fGeantCreationMechanism(0), fGeantMediumNumber(0),
    fGeantgeninfo(-1),fGeantgeninfo1(-1),fGeantgeninfo2(-1),fGeantgenweight(0)
    {
    }
    virtual ~HVirtualCandSim();
    void     setGeantPID(Int_t a)                 { fGeantPID = a;                   }
    void     setGeantTrack(Int_t a)               { fGeantTrack = a;                 }
    void     setGeantCorrTrackIds(UInt_t a)       { fGeantCorrTrackIds = a;          }
    void     setGeantxMom(Float_t a)              { fGeantxMom = a;                  }
    void     setGeantyMom(Float_t a)              { fGeantyMom = a;                  }
    void     setGeantzMom(Float_t a)              { fGeantzMom = a;                  }
    void     setGeantxVertex(Float_t a)           { fGeantxVertex = a;               }
    void     setGeantyVertex(Float_t a)           { fGeantyVertex = a;               }
    void     setGeantzVertex(Float_t a)           { fGeantzVertex = a;               }
    void     setGeantParentTrackNum(Int_t a)      { fGeantParentTrackNum = a;        }
    void     setGeantParentPID(Int_t a)           { fGeantParentPID = a;             }
    void     setGeantGrandParentTrackNum(Int_t a) { fGeantGrandParentTrackNum = a;   }
    void     setGeantGrandParentPID(Int_t a)      { fGeantGrandParentPID = a;        }
    void     setGeantCreationMechanism(Int_t a)   { fGeantCreationMechanism = a;     }
    void     setGeantMediumNumber(Int_t a)        { fGeantMediumNumber = a;          }
    void     setGeantGeninfo(Float_t a)           { fGeantgeninfo = a;               }
    void     setGeantGeninfo1(Float_t a)          { fGeantgeninfo1 = a;              }
    void     setGeantGeninfo2(Float_t a)          { fGeantgeninfo2 = a;              }
    void     setGeantGenweight(Float_t a)         { fGeantgenweight = a;             }
    Int_t    getGeantPID()                 const  { return fGeantPID;                }
    Int_t    getGeantTrack()               const  { return fGeantTrack;              }
    UInt_t   getGeantCorrTrackIds()        const  { return fGeantCorrTrackIds;       }
    Float_t  getGeantxMom()                const  { return fGeantxMom;               }
    Float_t  getGeantyMom()                const  { return fGeantyMom;               }
    Float_t  getGeantzMom()                const  { return fGeantzMom;               }
    Float_t  getGeantTotalMom()            const  { return (fGeantxMom ==-1 && fGeantyMom ==-1 && fGeantzMom ==-1 ) ? -1 : sqrt(fGeantxMom*fGeantxMom+fGeantyMom*fGeantyMom+fGeantzMom*fGeantzMom);}
    Float_t  getGeantxVertex()             const  { return fGeantxVertex;            }
    Float_t  getGeantyVertex()             const  { return fGeantyVertex;            }
    Float_t  getGeantzVertex()             const  { return fGeantzVertex;            }
    Int_t    getGeantParentTrackNum()      const  { return fGeantParentTrackNum;     }
    Int_t    getGeantParentPID()           const  { return fGeantParentPID;          }
    Int_t    getGeantGrandParentTrackNum() const  { return fGeantGrandParentTrackNum;}
    Int_t    getGeantGrandParentPID()      const  { return fGeantGrandParentPID;     }
    Int_t    getGeantCreationMechanism()   const  { return fGeantCreationMechanism;  }
    Int_t    getGeantMediumNumber()        const  { return fGeantMediumNumber;       }
    Float_t  getGeantGeninfo()             const  { return fGeantgeninfo;            }
    Float_t  getGeantGeninfo1()            const  { return fGeantgeninfo1;           }
    Float_t  getGeantGeninfo2()            const  { return fGeantgeninfo2;           }
    Float_t  getGeantGenweight()           const  { return fGeantgenweight;          }
    virtual void   print(UInt_t selection=31);
    ClassDef(HVirtualCandSim,1)  
};
#endif // __HVIRTUALCANDSIM_H__