Import Geant4 6.2.0 source tree
This commit is contained in:
@@ -20,8 +20,8 @@
|
||||
// * statement, and all its terms. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: G4HepRepSceneHandler.cc,v 1.70 2004/02/05 18:41:49 duns Exp $
|
||||
// GEANT4 tag $Name: geant4-06-00-patch-01 $
|
||||
// $Id: G4HepRepSceneHandler.cc,v 1.76 2004/05/28 04:59:54 perl Exp $
|
||||
// GEANT4 tag $Name: geant4-06-02 $
|
||||
//
|
||||
|
||||
/**
|
||||
@@ -43,6 +43,8 @@
|
||||
#include "HEPREP/HepRep.h"
|
||||
|
||||
//G4
|
||||
#include "G4Vector3D.hh"
|
||||
#include "G4RunManagerKernel.hh"
|
||||
#include "G4Types.hh"
|
||||
#include "G4Point3D.hh"
|
||||
#include "G4Normal3D.hh"
|
||||
@@ -78,6 +80,7 @@ using namespace std;
|
||||
|
||||
G4int G4HepRepSceneHandler::sceneCount = 0;
|
||||
|
||||
//#define LDEBUG 1
|
||||
//#define SDEBUG 1
|
||||
//#define PDEBUG 1
|
||||
|
||||
@@ -100,10 +103,11 @@ G4HepRepSceneHandler::G4HepRepSceneHandler (G4VGraphicsSystem& system, G4HepRepM
|
||||
currentDepth (0),
|
||||
currentPV (0),
|
||||
currentLV (0),
|
||||
_heprep (NULL)
|
||||
_heprep (NULL),
|
||||
_heprepGeometry (NULL)
|
||||
{
|
||||
|
||||
#ifdef SDEBUG
|
||||
#ifdef LDEBUG
|
||||
cout << "G4HepRepSceneHandler::G4HepRepSceneHandler: " << system << endl;
|
||||
#endif
|
||||
|
||||
@@ -121,7 +125,7 @@ G4HepRepSceneHandler::G4HepRepSceneHandler (G4VGraphicsSystem& system, G4HepRepM
|
||||
|
||||
|
||||
G4HepRepSceneHandler::~G4HepRepSceneHandler () {
|
||||
#ifdef SDEBUG
|
||||
#ifdef LDEBUG
|
||||
cout << "G4HepRepSceneHandler::~G4HepRepSceneHandler() " << endl;
|
||||
#endif
|
||||
close();
|
||||
@@ -137,7 +141,7 @@ void G4HepRepSceneHandler::open(G4String name) {
|
||||
if (writer != NULL) return;
|
||||
|
||||
if (name == "stdout") {
|
||||
#ifdef SDEBUG
|
||||
#ifdef LDEBUG
|
||||
cout << "G4HepRepSceneHandler::Open() stdout" << endl;
|
||||
#endif
|
||||
writer = factory->createHepRepWriter(&cout, false, false);
|
||||
@@ -150,7 +154,7 @@ void G4HepRepSceneHandler::open(G4String name) {
|
||||
eventNumber = 0;
|
||||
eventNumberWidth = 0;
|
||||
} else if (name == "stderr") {
|
||||
#ifdef SDEBUG
|
||||
#ifdef LDEBUG
|
||||
cout << "G4HepRepSceneHandler::Open() stderr" << endl;
|
||||
#endif
|
||||
writer = factory->createHepRepWriter(&cerr, false, false);
|
||||
@@ -163,7 +167,7 @@ void G4HepRepSceneHandler::open(G4String name) {
|
||||
eventNumber = 0;
|
||||
eventNumberWidth = 0;
|
||||
} else {
|
||||
#ifdef SDEBUG
|
||||
#ifdef LDEBUG
|
||||
cout << "G4HepRepSceneHandler::Open() " << name << endl;
|
||||
#endif
|
||||
if (eventNumberWidth < 0) {
|
||||
@@ -231,13 +235,14 @@ void G4HepRepSceneHandler::open(G4String name) {
|
||||
|
||||
|
||||
void G4HepRepSceneHandler::openHepRep() {
|
||||
#ifdef SDEBUG
|
||||
#ifdef LDEBUG
|
||||
cout << "G4HepRepSceneHandler::OpenHepRep() " << endl;
|
||||
#endif
|
||||
|
||||
if (_heprep != NULL) return;
|
||||
|
||||
// all done on demand, once pointers are set to NULL
|
||||
_heprepGeometry = NULL;
|
||||
_geometryInstanceTree = NULL;
|
||||
_geometryRootInstance = NULL;
|
||||
_geometryInstance.clear();
|
||||
@@ -262,7 +267,7 @@ void G4HepRepSceneHandler::openHepRep() {
|
||||
bool G4HepRepSceneHandler::closeHepRep(bool final) {
|
||||
if (_heprep == NULL) return true;
|
||||
|
||||
#ifdef SDEBUG
|
||||
#ifdef LDEBUG
|
||||
cout << "G4HepRepSceneHandler::CloseHepRep() start" << endl;
|
||||
#endif
|
||||
|
||||
@@ -278,10 +283,21 @@ bool G4HepRepSceneHandler::closeHepRep(bool final) {
|
||||
// using DrawView() called from /vis/viewer/flush)
|
||||
if (_eventInstanceTree != NULL) {
|
||||
GetCurrentViewer()->DrawView();
|
||||
|
||||
// couple geometry to event if geometry was written
|
||||
if ((_geometryInstanceTree != NULL)) {
|
||||
getEventInstanceTree()->addInstanceTree(getGeometryInstanceTree());
|
||||
|
||||
// couple geometry
|
||||
if (messenger.appendGeometry()) {
|
||||
// couple geometry to event if geometry was written
|
||||
if ((_geometryInstanceTree != NULL)) {
|
||||
getEventInstanceTree()->addInstanceTree(getGeometryInstanceTree());
|
||||
}
|
||||
} else {
|
||||
char name[128];
|
||||
if (writeMultipleFiles) {
|
||||
sprintf(name, "%s%s%s#%s", baseName.c_str(), "-geometry", extension.c_str(), "G4GeometryData");
|
||||
} else {
|
||||
sprintf(name, "%s%s#%s", "geometry", ".heprep", "G4GeometryData");
|
||||
}
|
||||
getEventInstanceTree()->addInstanceTree(factory->createHepRepTreeID(name, "1.0"));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -296,16 +312,31 @@ bool G4HepRepSceneHandler::closeHepRep(bool final) {
|
||||
|
||||
// Give this HepRep all of the layer order info for both geometry and event,
|
||||
// since these will both end up in a single HepRep.
|
||||
if (_geometryRootType != NULL) _heprep->addLayer(geometryLayer);
|
||||
if (_eventType != NULL) _heprep->addLayer(eventLayer);
|
||||
if (_calHitType != NULL) _heprep->addLayer(calHitLayer);
|
||||
if (_trajectoryType != NULL) _heprep->addLayer(trajectoryLayer);
|
||||
if (_hitType != NULL) _heprep->addLayer(hitLayer);
|
||||
writeLayers(_heprepGeometry);
|
||||
writeLayers(_heprep);
|
||||
|
||||
// open heprep file
|
||||
if (writer == NULL) {
|
||||
open((GetScene() == NULL) ? G4String("G4HepRepOutput.heprep.zip") : GetScene()->GetName());
|
||||
}
|
||||
|
||||
// write out separate geometry
|
||||
if (!messenger.appendGeometry() && (_heprepGeometry != NULL)) {
|
||||
if (writeMultipleFiles) {
|
||||
char fileName[128];
|
||||
sprintf(fileName, "%s%s%s", baseName.c_str(), "-geometry", extension.c_str());
|
||||
openFile(G4String(fileName));
|
||||
}
|
||||
|
||||
if (!writeMultipleFiles) writer->addProperty("RecordLoop.ignore", "geometry.heprep");
|
||||
|
||||
writer->write(_heprepGeometry, G4String("geometry.heprep"));
|
||||
|
||||
delete _heprepGeometry;
|
||||
_heprepGeometry = NULL;
|
||||
|
||||
if (writeMultipleFiles) closeFile();
|
||||
}
|
||||
|
||||
if (writeMultipleFiles) {
|
||||
// NOTE: does not work on Solaris 5.2 and Linux 2.95.2
|
||||
@@ -346,16 +377,19 @@ bool G4HepRepSceneHandler::closeHepRep(bool final) {
|
||||
|
||||
void G4HepRepSceneHandler::close() {
|
||||
|
||||
#ifdef SDEBUG
|
||||
#ifdef LDEBUG
|
||||
cout << "G4HepRepSceneHandler::Close() " << endl;
|
||||
#endif
|
||||
|
||||
if (writer == NULL) return;
|
||||
|
||||
|
||||
if (!writeMultipleFiles) {
|
||||
closeHepRep(true);
|
||||
closeFile();
|
||||
}
|
||||
|
||||
G4HepRepViewer* viewer = dynamic_cast<G4HepRepViewer*>(GetCurrentViewer());
|
||||
viewer->reset();
|
||||
}
|
||||
|
||||
void G4HepRepSceneHandler::openFile(G4String name) {
|
||||
@@ -372,6 +406,14 @@ void G4HepRepSceneHandler::closeFile() {
|
||||
out = NULL;
|
||||
}
|
||||
|
||||
void G4HepRepSceneHandler::writeLayers(HepRep* heprep) {
|
||||
if (heprep == NULL) return;
|
||||
heprep->addLayer(geometryLayer);
|
||||
heprep->addLayer(eventLayer);
|
||||
heprep->addLayer(calHitLayer);
|
||||
heprep->addLayer(trajectoryLayer);
|
||||
heprep->addLayer(hitLayer);
|
||||
}
|
||||
|
||||
void G4HepRepSceneHandler::EstablishSpecials(G4PhysicalVolumeModel& model) {
|
||||
#ifdef SDEBUG
|
||||
@@ -937,6 +979,43 @@ bool G4HepRepSceneHandler::isEventData () {
|
||||
return !currentPV || fReadyForTransients;
|
||||
}
|
||||
|
||||
void G4HepRepSceneHandler::addTopLevelAttributes(HepRepType* type) {
|
||||
|
||||
// Some non-standard attributes
|
||||
type->addAttDef( "Generator", "Generator of the file", "General", "");
|
||||
type->addAttValue("Generator", G4String("Geant4"));
|
||||
|
||||
type->addAttDef( "GeneratorVersion", "Version of the Generator", "General", "");
|
||||
type->addAttValue("GeneratorVersion", G4RunManagerKernel::GetRunManagerKernel()->GetVersionString());
|
||||
|
||||
type->addAttDef( "CoordinateSystem", "Coordinate System", "Draw", "");
|
||||
type->addAttValue("CoordinateSystem", messenger.getCoordinateSystem());
|
||||
|
||||
const G4ViewParameters parameters = GetCurrentViewer()->GetViewParameters();
|
||||
const G4Vector3D& viewPointDirection = parameters.GetViewpointDirection();
|
||||
type->addAttDef( "ViewTheta", "Theta of initial suggested viewpoint", "Draw", "rad");
|
||||
type->addAttValue("ViewTheta", viewPointDirection.theta());
|
||||
|
||||
type->addAttDef( "ViewPhi", "Phi of initial suggested viewpoint", "Draw", "rad");
|
||||
type->addAttValue("ViewPhi", viewPointDirection.phi());
|
||||
|
||||
type->addAttDef( "ViewScale", "Scale of initial suggested viewpoint", "Draw", "");
|
||||
type->addAttValue("ViewScale", parameters.GetZoomFactor());
|
||||
|
||||
// FIXME, no way to set these
|
||||
type->addAttDef( "ViewTranslateX", "Translate in X of initial suggested viewpoint", "Draw", "");
|
||||
type->addAttValue("ViewTranslateX", 0.0);
|
||||
|
||||
type->addAttDef( "ViewTranslateY", "Translate in Y of initial suggested viewpoint", "Draw", "");
|
||||
type->addAttValue("ViewTranslateY", 0.0);
|
||||
|
||||
type->addAttDef( "ViewTranslateZ", "Translate in Z of initial suggested viewpoint", "Draw", "");
|
||||
type->addAttValue("ViewTranslateZ", 0.0);
|
||||
|
||||
type->addAttDef( "PointUnit", "Length", "Physics", "");
|
||||
type->addAttValue("PointUnit", G4String("m"));
|
||||
}
|
||||
|
||||
HepRep* G4HepRepSceneHandler::getHepRep() {
|
||||
if (_heprep == NULL) {
|
||||
// Create the HepRep that holds the Trees.
|
||||
@@ -945,11 +1024,23 @@ HepRep* G4HepRepSceneHandler::getHepRep() {
|
||||
return _heprep;
|
||||
}
|
||||
|
||||
HepRep* G4HepRepSceneHandler::getHepRepGeometry() {
|
||||
if (_heprepGeometry == NULL) {
|
||||
// Create the HepRep that holds the Trees.
|
||||
_heprepGeometry = factory->createHepRep();
|
||||
}
|
||||
return _heprepGeometry;
|
||||
}
|
||||
|
||||
HepRepInstanceTree* G4HepRepSceneHandler::getGeometryInstanceTree() {
|
||||
if (_geometryInstanceTree == NULL) {
|
||||
// Create the Geometry InstanceTree.
|
||||
_geometryInstanceTree = factory->createHepRepInstanceTree("G4GeometryData", "1.0", getGeometryTypeTree());
|
||||
getHepRep()->addInstanceTree(_geometryInstanceTree);
|
||||
if (messenger.appendGeometry()) {
|
||||
getHepRep()->addInstanceTree(_geometryInstanceTree);
|
||||
} else {
|
||||
getHepRepGeometry()->addInstanceTree(_geometryInstanceTree);
|
||||
}
|
||||
}
|
||||
return _geometryInstanceTree;
|
||||
}
|
||||
@@ -965,12 +1056,14 @@ HepRepInstance* G4HepRepSceneHandler::getGeometryRootInstance() {
|
||||
HepRepInstance* G4HepRepSceneHandler::getGeometryInstance(G4LogicalVolume* volume, int depth) {
|
||||
HepRepInstance* instance = getGeometryInstance(volume->GetName(), depth);
|
||||
|
||||
setAttribute(instance, "LVol", volume->GetName());
|
||||
setAttribute(instance, "Solid", volume->GetSolid()->GetName());
|
||||
setAttribute(instance, "EType", volume->GetSolid()->GetEntityType());
|
||||
setAttribute(instance, "Material", volume->GetMaterial()->GetName());
|
||||
setAttribute(instance, "Density", volume->GetMaterial()->GetDensity());
|
||||
setAttribute(instance, "Radlen", volume->GetMaterial()->GetRadlen());
|
||||
setAttribute(instance, "LVol", volume->GetName());
|
||||
setAttribute(instance, "Region", volume->GetRegion()->GetName());
|
||||
setAttribute(instance, "RootRegion", volume->IsRootRegion());
|
||||
setAttribute(instance, "Solid", volume->GetSolid()->GetName());
|
||||
setAttribute(instance, "EType", volume->GetSolid()->GetEntityType());
|
||||
setAttribute(instance, "Material", volume->GetMaterial()->GetName());
|
||||
setAttribute(instance, "Density", volume->GetMaterial()->GetDensity());
|
||||
setAttribute(instance, "Radlen", volume->GetMaterial()->GetRadlen());
|
||||
|
||||
G4String state = materialState[volume->GetMaterial()->GetState()];
|
||||
setAttribute(instance, "State", state);
|
||||
@@ -1004,7 +1097,11 @@ HepRepTypeTree* G4HepRepSceneHandler::getGeometryTypeTree() {
|
||||
// Create the Geometry TypeTree.
|
||||
HepRepTreeID* geometryTreeID = factory->createHepRepTreeID("G4GeometryTypes", "1.0");
|
||||
_geometryTypeTree = factory->createHepRepTypeTree(geometryTreeID);
|
||||
getHepRep()->addTypeTree(_geometryTypeTree);
|
||||
if (messenger.appendGeometry()) {
|
||||
getHepRep()->addTypeTree(_geometryTypeTree);
|
||||
} else {
|
||||
getHepRepGeometry()->addTypeTree(_geometryTypeTree);
|
||||
}
|
||||
}
|
||||
return _geometryTypeTree;
|
||||
}
|
||||
@@ -1012,12 +1109,16 @@ HepRepTypeTree* G4HepRepSceneHandler::getGeometryTypeTree() {
|
||||
HepRepType* G4HepRepSceneHandler::getGeometryRootType() {
|
||||
if (_geometryRootType == NULL) {
|
||||
// Create the top level Geometry Type.
|
||||
_geometryRootType = factory->createHepRepType(NULL, rootVolumeName);
|
||||
_geometryRootType = factory->createHepRepType(getGeometryTypeTree(), rootVolumeName);
|
||||
_geometryRootType->addAttValue("Layer", geometryLayer);
|
||||
|
||||
// Add attdefs used by all geometry types.
|
||||
_geometryRootType->addAttDef ("LVol", "Logical Volume", "Physics","");
|
||||
_geometryRootType->addAttValue("LVol", G4String(""));
|
||||
_geometryRootType->addAttDef ("Region", "Cuts Region", "Physics","");
|
||||
_geometryRootType->addAttValue("Region", G4String(""));
|
||||
_geometryRootType->addAttDef ("RootRegion", "Root Region", "Physics","");
|
||||
_geometryRootType->addAttValue("RootRegion", false);
|
||||
_geometryRootType->addAttDef ("Solid", "Solid Name", "Physics","");
|
||||
_geometryRootType->addAttValue("Solid", G4String(""));
|
||||
_geometryRootType->addAttDef ("EType", "Entity Type", "Physics","");
|
||||
@@ -1042,9 +1143,9 @@ HepRepType* G4HepRepSceneHandler::getGeometryRootType() {
|
||||
|
||||
_geometryRootType->addAttValue("MarkSizeMultiplier", 4.0);
|
||||
_geometryRootType->addAttValue("LineWidthMultiplier", 1.0);
|
||||
|
||||
getGeometryTypeTree()->addType(_geometryRootType);
|
||||
|
||||
|
||||
addTopLevelAttributes(_geometryRootType);
|
||||
|
||||
_geometryType["/"+_geometryRootType->getName()] = _geometryRootType;
|
||||
}
|
||||
return _geometryRootType;
|
||||
@@ -1129,7 +1230,7 @@ HepRepTypeTree* G4HepRepSceneHandler::getEventTypeTree() {
|
||||
HepRepType* G4HepRepSceneHandler::getEventType() {
|
||||
if (_eventType == NULL) {
|
||||
// Create the top level Event Type.
|
||||
_eventType = factory->createHepRepType(NULL, "Event");
|
||||
_eventType = factory->createHepRepType(getEventTypeTree(), "Event");
|
||||
_eventType->addAttValue("Layer", eventLayer);
|
||||
|
||||
// add defaults for Events
|
||||
@@ -1144,11 +1245,7 @@ HepRepType* G4HepRepSceneHandler::getEventType() {
|
||||
_eventType->addAttValue("MarkSizeMultiplier", 4.0);
|
||||
_eventType->addAttValue("LineWidthMultiplier", 1.0);
|
||||
|
||||
// Some non-standard attributes
|
||||
_eventType->addAttDef("PointUnit", "Length", "Physics", "");
|
||||
_eventType->addAttValue("PointUnit", G4String("m"));
|
||||
|
||||
getEventTypeTree()->addType(_eventType);
|
||||
addTopLevelAttributes(_eventType);
|
||||
}
|
||||
|
||||
return _eventType;
|
||||
|
||||
Reference in New Issue
Block a user