ROOT logo
#ifndef HGEOMNODE_H
#define HGEOMNODE_H

using namespace std;
#include <fstream> 
#include <iomanip>
#include "hgeomvolume.h"
#include "hgeombasicshape.h"
#include "hgeommedium.h"
#include "TArrayD.h"

enum EHGeomNodeType {
  kHGeomElement = 0,
  kHGeomKeepin  = 1,
  kHGeomModule  = 2,
  kHGeomTopNode = 3,
  kHGeomRefNode = 4 };

class TGeoVolume;

class HGeomNode : public HGeomVolume {
protected:
  HGeomBasicShape* pShape;      // pointer to the shape
  HGeomNode* pMother;           // pointer to the mother volume
  HGeomMedium* medium;          // pointer to medium
  EHGeomNodeType volumeType;    // type of volume
  Bool_t active;                // in/out flag for creation
  HGeomTransform center;        // position of the GEANT/ROOT center
  HGeomTransform* labTransform; // Transformation to the LAB system  
  HGeomNode* copyNode;          // pointer to the reference volume for a copy
  Bool_t created;               // Flag set kTRUE after creation of volume
  TGeoVolume* rootVolume;       // pointer to the ROOT node
public:
  HGeomNode();
  HGeomNode(HGeomNode&);
  ~HGeomNode();
  EHGeomNodeType getVolumeType() { return volumeType; }
  Bool_t isTopNode() { return (Bool_t)(volumeType == kHGeomTopNode);}
  Bool_t isRefNode() { return (Bool_t)(volumeType == kHGeomRefNode);}
  Bool_t isKeepin()  { return (Bool_t)(volumeType == kHGeomKeepin);}
  Bool_t isModule()  { return (Bool_t)(volumeType == kHGeomModule);}
  Int_t getCopyNo();
  HGeomBasicShape* getShapePointer() { return pShape; }
  HGeomNode* getMotherNode() {return pMother;}
  HGeomMedium* getMedium() {return medium;}
  Bool_t isActive() {return active;}
  HGeomTransform& getCenterPosition() {return center;}
  TArrayD* getParameters();
  HGeomTransform* getPosition();
  HGeomTransform* getLabTransform();
  HGeomNode* getCopyNode() {return copyNode;}    
  TGeoVolume* getRootVolume() {return rootVolume;}
  TList* getTree();
  Bool_t isSensitive();
  Bool_t isCreated() {return created;}
  void setCreated() {created=kTRUE;}
  void setName(const Text_t* s);
  void setVolumeType(EHGeomNodeType t) {volumeType=t;}
  void setVolumePar(HGeomNode&);
  void setShape(HGeomBasicShape* s);
  void setMother(HGeomNode* s);
  void setMedium(HGeomMedium* m) {medium=m; }
  void setActive(Bool_t a=kTRUE) {active=a;}
  void setCenterPosition(const HGeomTransform& t) {center=t;}
  void setCopyNode(HGeomNode* p) {copyNode=p;}
  void setRootVolume(TGeoVolume* p) {rootVolume=p;}
  HGeomTransform* calcLabTransform();
  void setLabTransform(HGeomTransform&);
  Bool_t calcModuleTransform(HGeomTransform&);
  Bool_t calcRefPos(HGeomVector&);
  void clear();
  void print();
  Bool_t write(fstream&);
  Int_t compare(HGeomNode&);
  ClassDef(HGeomNode,0) // basic geometry parameters of a volume
};

// -------------------- inlines --------------------------

inline void HGeomNode::setName(const Text_t* s) {
  // Sets the name of the volume
  fName=s;
  fName.ToUpper();
}

inline void HGeomNode::setShape(HGeomBasicShape* s) {
  // Sets the shape of the volume
  if (s) {
    pShape=s;
    shape=pShape->GetName();
  }
}

inline void HGeomNode::setMother(HGeomNode* m) {
  // Sets the mother of the volume
  if (m) {
    pMother=m;
    mother=pMother->GetName();
  }
}

inline Bool_t HGeomNode::isSensitive() {
  if (medium) return medium->isSensitive();
  else return kFALSE;
}

#endif /* !HGEOMNODE_H */
 hgeomnode.h:1
 hgeomnode.h:2
 hgeomnode.h:3
 hgeomnode.h:4
 hgeomnode.h:5
 hgeomnode.h:6
 hgeomnode.h:7
 hgeomnode.h:8
 hgeomnode.h:9
 hgeomnode.h:10
 hgeomnode.h:11
 hgeomnode.h:12
 hgeomnode.h:13
 hgeomnode.h:14
 hgeomnode.h:15
 hgeomnode.h:16
 hgeomnode.h:17
 hgeomnode.h:18
 hgeomnode.h:19
 hgeomnode.h:20
 hgeomnode.h:21
 hgeomnode.h:22
 hgeomnode.h:23
 hgeomnode.h:24
 hgeomnode.h:25
 hgeomnode.h:26
 hgeomnode.h:27
 hgeomnode.h:28
 hgeomnode.h:29
 hgeomnode.h:30
 hgeomnode.h:31
 hgeomnode.h:32
 hgeomnode.h:33
 hgeomnode.h:34
 hgeomnode.h:35
 hgeomnode.h:36
 hgeomnode.h:37
 hgeomnode.h:38
 hgeomnode.h:39
 hgeomnode.h:40
 hgeomnode.h:41
 hgeomnode.h:42
 hgeomnode.h:43
 hgeomnode.h:44
 hgeomnode.h:45
 hgeomnode.h:46
 hgeomnode.h:47
 hgeomnode.h:48
 hgeomnode.h:49
 hgeomnode.h:50
 hgeomnode.h:51
 hgeomnode.h:52
 hgeomnode.h:53
 hgeomnode.h:54
 hgeomnode.h:55
 hgeomnode.h:56
 hgeomnode.h:57
 hgeomnode.h:58
 hgeomnode.h:59
 hgeomnode.h:60
 hgeomnode.h:61
 hgeomnode.h:62
 hgeomnode.h:63
 hgeomnode.h:64
 hgeomnode.h:65
 hgeomnode.h:66
 hgeomnode.h:67
 hgeomnode.h:68
 hgeomnode.h:69
 hgeomnode.h:70
 hgeomnode.h:71
 hgeomnode.h:72
 hgeomnode.h:73
 hgeomnode.h:74
 hgeomnode.h:75
 hgeomnode.h:76
 hgeomnode.h:77
 hgeomnode.h:78
 hgeomnode.h:79
 hgeomnode.h:80
 hgeomnode.h:81
 hgeomnode.h:82
 hgeomnode.h:83
 hgeomnode.h:84
 hgeomnode.h:85
 hgeomnode.h:86
 hgeomnode.h:87
 hgeomnode.h:88
 hgeomnode.h:89
 hgeomnode.h:90
 hgeomnode.h:91
 hgeomnode.h:92
 hgeomnode.h:93
 hgeomnode.h:94
 hgeomnode.h:95
 hgeomnode.h:96
 hgeomnode.h:97
 hgeomnode.h:98
 hgeomnode.h:99
 hgeomnode.h:100
 hgeomnode.h:101
 hgeomnode.h:102
 hgeomnode.h:103
 hgeomnode.h:104
 hgeomnode.h:105
 hgeomnode.h:106
 hgeomnode.h:107