#ifndef RootGeo_ZGeoOverlap_H
#define RootGeo_ZGeoOverlap_H
#include <Glasses/ZNode.h>
#include <Glasses/ZGeoOvl.h>
#include <Stones/ZColor.h>
#include <TObject.h>
#include <TGeoNode.h>
class ZGeoOvlMgr : public ZGeoNode
{
MAC_RNR_FRIENDS(ZGeoOvlMgr);
private:
void _init();
protected:
ZColor mMotherCol;
ZColor mExtrCol;
ZColor mOvlpCol1;
ZColor mOvlpCol2;
ZColor mPMExtrCol;
ZColor mPMOvlpCol;
Float_t mResol;
public:
void RecalculateOvl();
protected:
Float_t mMinOvl;
Float_t mMaxOvl;
public:
void RnrOvlInterval();
typedef list<TGeoNode*> lgn_t;
typedef list<TGeoNode*>::iterator lgn_i;
typedef list<TGeoNode*>::reverse_iterator lgn_ri;
protected:
ZTrans get_ztrans(TGeoMatrix* gm);
Bool_t locate_first_from_top(TGeoNode* cur_node, TGeoVolume* v,
ZGeoNode* zn, lgn_t& result);
TString setup_absolute_matrix(TGeoNode* top_node, TGeoVolume* v,
ZGeoNode* zn);
ZGeoNode* create_standalone_node(const Text_t* n, const Text_t* t,
TGeoNode* gnode=0, TGeoMatrix* gmatrix=0);
void set_tnode_by_path(TString path, TGeoNode*& gn);
public:
ZGeoOvlMgr(const Text_t* n="ZGeoOvlMgr", const Text_t* t=0) :
ZGeoNode(n,t) { _init(); }
virtual ~ZGeoOvlMgr() {}
void ImportOverlaps(TObjArray* lOverlaps, TGeoNode* top_node);
virtual void Restore();
void DumpOvlMgr();
#include "ZGeoOvlMgr.h7"
ClassDef(ZGeoOvlMgr, 1);
};
#endif