00001 00002 // $Id: CandHandle.h,v 1.31 2006/06/21 00:47:01 rhatcher Exp $ 00003 // 00004 // CandHandle.h 00005 // 00006 // CandHandle is the base class for specialized access handles to 00007 // CandBase derived objects. 00008 // 00009 // Each concrete CandHandle must define a DupHandle function. 00010 // 00011 // Adapted from Babar's BtaCandidate (written by Gautier Hamel de 00012 // Monchenault and Bob Jacobsen). 00013 // 00014 // Author: G. Irwin 2/2000 00016 00017 #ifndef CANDHANDLE_H 00018 #define CANDHANDLE_H 00019 00020 #include "TObject.h" 00021 00022 #include "Candidate/CandBase.h" 00023 #include "Candidate/CandRefer.h" 00024 00025 class CandBase; 00026 class CandRecord; 00027 class CandUid; 00028 class TIter; 00029 class ViewableNotifier; 00030 class VldContext; 00031 00032 class CandHandle; 00033 std::ostream& operator<<(std::ostream& os, const CandHandle& ch); 00034 00035 class CandHandle : public TObject 00036 { 00037 00038 friend class CandBase; 00039 00040 public: 00041 CandHandle(); 00042 CandHandle(const CandHandle &ch); 00043 CandHandle(CandBase *cb); 00044 virtual ~CandHandle(); 00045 00046 CandHandle &operator=(const CandHandle &ch); 00047 Bool_t operator==(const CandHandle &ch) const; 00048 Bool_t operator!=(const CandHandle &ch) const; 00049 00050 const CandHandle *AddDaughterLink(CandHandle &ch, 00051 Bool_t check = kTRUE); 00052 const CandHandle *CloneInTree(const CandHandle &ch) const; 00053 virtual CandHandle *DupHandle() const; 00054 CandHandle *FindDaughter(const CandHandle *ch) const; 00055 const CandHandle *FindDaughter(const char *classname = 0, 00056 const char *objname = 0) const; 00057 const AlgConfig *GetAlgConfig() const; 00058 UInt_t GetArchUidInt() const; 00059 const CandBase *GetCandBase() const; 00060 CandBase *GetCandBase(); 00061 CandRecord *GetCandRecord() const; 00062 const CandHandle *GetDaughter(Int_t ndau) const; 00063 TIter GetDaughterIterator() const; 00064 const CandHandle *GetLocalHandle() const; 00065 const CandHandle *GetMother() const; 00066 const char *GetName() const; 00067 static Int_t GetNAlloc() {return fsNAlloc;} 00068 Int_t GetNDaughters() const; 00069 Int_t GetNRefers() const; 00070 const char *GetTitle() const; 00071 UInt_t GetUidInt() const; 00072 ViewableNotifier *GetViewableNotifier() {return fViewableNotifier;} 00073 const VldContext *GetVldContext() const; 00074 Bool_t HasOverlapWith(const CandHandle &ch) const; 00075 Bool_t IsCloneOf(const CandHandle &ch) const; 00076 Bool_t IsComposite() const; 00077 virtual Bool_t IsEqual(const TObject *rhs) const; 00078 virtual Bool_t IsEquivalent(const TObject *rhs) const; 00079 Bool_t IsLocal() const; 00080 Bool_t IsLocked() const {return fLocked;} 00081 static Bool_t IsSlushyEnabled() {return fsSlushyEnabled;} 00082 Bool_t RemoveDaughter(CandHandle *ch); 00083 void SetCandRecord(CandRecord *cr); 00084 void SetName(const char *name); 00085 void SetLock(); 00086 static void SetSlushyEnabled(Bool_t tf = kTRUE); 00087 void SetTitle(const char *title); 00088 void SetViewableNotifier(ViewableNotifier *vn = 0) 00089 {fViewableNotifier = vn;} 00090 virtual void Trace(const char *c = "") const; 00091 00092 virtual void Print(Option_t *option="nid3") const; 00093 virtual std::ostream& FormatToOStream(std::ostream& os, 00094 Option_t *option="nid3") const; 00095 00096 protected: 00097 CandBase *GetOwnedCandBase(); 00098 const CandRefer &GetCandRefer() const {return fCandRefer;} 00099 const CandUid &GetCandUid() const; 00100 00101 private: 00102 CandRefer fCandRefer; // Access to CandBase 00103 CandHandle *fMother; // Mother CandHandle of this CandHandle 00104 Bool_t fLocked; // If true, modifications are a fatal error 00105 static Int_t fsNAlloc; // Current number of CandHandle instances 00106 static Bool_t fsSlushyEnabled;// Freeze Candidates only after read-in 00107 ViewableNotifier *fViewableNotifier; 00108 00109 void DropMotherLink(); 00110 CandRefer &GetCandRefer() {return fCandRefer;} 00111 void SetMotherLink(CandHandle *ch); 00112 00113 ClassDef(CandHandle,2) // User Access channel for CandBase objects 00114 }; 00115 00116 #endif // CANDHANDLE_H
1.3.9.1