87G4int G4HepRepSceneHandler::sceneIdCount = 0;
95 geometryLayer (
"Geometry"),
97 calHitLayer (
"CalHit"),
98 trajectoryLayer (
"Trajectory"),
100 rootVolumeName (
"Geometry"),
102 eventNumberPrefix (
""),
103 eventNumberSuffix (
""),
105 eventNumberWidth (-1),
110 writeMultipleFiles (false),
114 _heprepGeometry (NULL)
118 cout <<
"G4HepRepSceneHandler::G4HepRepSceneHandler: " << system << endl;
136 cout <<
"G4HepRepSceneHandler::~G4HepRepSceneHandler() " << endl;
147void G4HepRepSceneHandler::open(
G4String name) {
148 if (writer != NULL)
return;
150 if (name ==
"stdout") {
152 cout <<
"G4HepRepSceneHandler::Open() stdout" << endl;
157 eventNumberPrefix =
"";
158 eventNumberSuffix =
"";
163 writeMultipleFiles =
false;
165 eventNumberWidth = 0;
166 }
else if (name ==
"stderr") {
168 cout <<
"G4HepRepSceneHandler::Open() stderr" << endl;
173 eventNumberPrefix =
"";
174 eventNumberSuffix =
"";
179 writeMultipleFiles =
false;
181 eventNumberWidth = 0;
184 cout <<
"G4HepRepSceneHandler::Open() " << name << endl;
186 if (eventNumberWidth < 0) {
189 const unsigned int numberOfExtensions = 8;
190 string ext[numberOfExtensions] = {
".heprep",
".heprep.xml",
".heprep.zip",
".heprep.gz",
191 ".bheprep",
".bheprep.xml",
".bheprep.zip",
".bheprep.gz"};
193 while (i < numberOfExtensions) {
194 int dot = name.size() - ext[i].size();
196 (name.substr(dot, ext[i].size()) == ext[i]))
break;
200 if (i != numberOfExtensions) {
202 writeBinary = i >= (numberOfExtensions/2);
203 writeZip = (i == 2) || (i == 6);
204 writeGZ = (i == 3) || (i == 7);
206 int dot = name.length() - extension.length();
207 baseName = (dot >= 0) ? name.substr(0, dot) :
"";
209#ifndef G4LIB_USE_ZLIB
212 cerr <<
"WARNING: the .gz output file you are creating will be a plain file," << endl;
213 cerr <<
" since compression support (ZLIB) was not compiled into the Geant4." << endl;
214 cerr <<
" To avoid confusion with real gz files, the output filename has been" << endl;
215 cerr <<
" extended with the name '.no-gz'." << endl;
216 cerr <<
" A plain heprep or bheprep file can be fairly large." << endl;
220 cerr <<
"WARNING: the .zip output file you are creating will not be compressed," << endl;
221 cerr <<
" since compression support (ZLIB) was not compiled into the Geant4." << endl;
222 cerr <<
" A zip file containing non-compressed heprep or bheprep files can" << endl;
223 cerr <<
" be fairly large." << endl;
225 if (writeGZ || writeZip) {
226 cerr <<
"SOLUTION: To add compression support using ZLIB, you need to:" << endl;
227 cerr <<
" 1. Define G4LIB_USE_ZLIB and recompile the visualization category." << endl;
228 cerr <<
" 2. Optionally define G4_LIB_BUILD_ZLIB if your system does not have" << endl;
229 cerr <<
" zlib installed (e.g. WIN32-VC)." << endl;
230 cerr <<
" 3. Relink your application code." << endl;
234 extension = extension +
".no-gz";
240 extension =
".heprep.zip";
247 writeMultipleFiles =
false;
248 int startDigit = -1;
int endDigit = -1;
255 endDigit = suffix.length()-1;
256 while (endDigit >= 0) {
257 if (isdigit(suffix.at(endDigit)))
break;
261 cerr <<
"/vis/heprep/appendEventNumberSuffix contains no digits" << endl;
263 writeMultipleFiles =
true;
264 startDigit = endDigit;
265 while (startDigit >= 0) {
266 if (!isdigit(suffix.at(startDigit)))
break;
273 if (writeMultipleFiles) {
274 eventNumberPrefix = suffix.substr(0, startDigit);
275 eventNumber = atoi(suffix.substr(startDigit, endDigit).c_str());
276 eventNumberWidth = endDigit +1 - startDigit;
277 eventNumberSuffix = suffix.substr(endDigit+1);
283 eventNumberWidth = 10;
284 eventNumberPrefix =
"";
285 eventNumberSuffix =
"";
294 cout <<
"G4HepRepSceneHandler::OpenHepRep() " << endl;
297 if (_heprep != NULL)
return;
300 _heprepGeometry = NULL;
301 _geometryInstanceTree = NULL;
302 _geometryRootInstance = NULL;
303 _geometryInstance.clear();
304 _geometryTypeTree = NULL;
305 _geometryRootType = NULL;
306 _geometryTypeName.clear();
307 _geometryType.clear();
308 _eventInstanceTree = NULL;
309 _eventInstance = NULL;
310 _eventTypeTree = NULL;
312 _trajectoryType = NULL;
315 _calHitFaceType = NULL;
323 if (_heprep == NULL)
return true;
326 cout <<
"G4HepRepSceneHandler::CloseHepRep() start" << endl;
331 if (_eventInstanceTree != NULL) {
332 cerr <<
"WARNING: you probably used '/vis/viewer/endOfEventAction accumulate' and "
333 <<
"forgot to call /vis/viewer/update before exit. No event written." << endl;
341 if (_eventInstanceTree != NULL) {
348 if ((_geometryInstanceTree != NULL)) {
353 if (writeMultipleFiles) {
354 sprintf(name,
"%s%s%s#%s", baseName.c_str(),
"-geometry", extension.c_str(),
"G4GeometryData");
356 sprintf(name,
"%s%s#%s",
"geometry", (writeBinary ?
".bheprep" :
".heprep"),
"G4GeometryData");
363 if (_eventInstanceTree != NULL) {
373 writeLayers(_heprepGeometry);
374 writeLayers(_heprep);
377 if (writer == NULL) {
383 if (writeMultipleFiles) {
385 sprintf(fileName,
"%s%s%s", baseName.c_str(),
"-geometry", extension.c_str());
390 sprintf(name,
"%s%s",
"geometry", (writeBinary ?
".bheprep" :
".heprep"));
391 if (!writeMultipleFiles) {
397 delete _heprepGeometry;
398 _heprepGeometry = NULL;
403 if (writeMultipleFiles) {
410 char fileFormat[128];
411 sprintf(fileFormat,
"%s%d%s",
"%s%s%0", eventNumberWidth,
"d%s%s");
412 sprintf(fileName, fileFormat, baseName.c_str(), eventNumberPrefix.c_str(), eventNumber, eventNumberSuffix.c_str(), extension.c_str());
423 char eventFormat[128];
424 sprintf(eventFormat,
"%s%d%s%s",
"event-%0", eventNumberWidth,
"d", (writeBinary ?
".bheprep" :
".heprep"));
425 sprintf(eventName, eventFormat, eventNumber);
440void G4HepRepSceneHandler::close() {
443 cout <<
"G4HepRepSceneHandler::Close() " << endl;
446 if (writer == NULL)
return;
448 if (!writeMultipleFiles) {
458 out =
new ofstream(name.c_str(), std::ios::out | std::ios::binary );
471void G4HepRepSceneHandler::writeLayers(
HepRep* heprep) {
472 if (heprep == NULL)
return;
482 cout <<
"G4HepRepSceneHandler::BeginModeling() " << endl;
490 cout <<
"G4HepRepSceneHandler::EndModeling() " << endl;
497 cout <<
"G4HepRepSceneHandler::AddSolid(const G4Box& box)" << endl;
500 if (dontWrite())
return;
522 vertex1 = (transform) * vertex1;
523 vertex2 = (transform) * vertex2;
524 vertex3 = (transform) * vertex3;
525 vertex4 = (transform) * vertex4;
526 vertex5 = (transform) * vertex5;
527 vertex6 = (transform) * vertex6;
528 vertex7 = (transform) * vertex7;
529 vertex8 = (transform) * vertex8;
531 HepRepInstance* instance = getGeometryOrEventInstance(getCalHitType());
532 addAttributes(instance, getCalHitType());
534 setAttribute(instance,
"DrawAs",
G4String(
"Prism"));
536 setVisibility(instance, box);
537 setLine(instance, box);
538 setColor(instance, getColorFor(box));
553 cout <<
"G4HepRepSceneHandler::AddSolid(const G4Cons& cons)" << endl;
556 if (dontWrite())
return;
579 vertex1 = (transform) * vertex1;
580 vertex2 = (transform) * vertex2;
582 HepRepInstance* instance = getGeometryInstance(pCurrentLV, pCurrentMaterial, currentDepth);
583 setAttribute(instance,
"DrawAs",
G4String(
"Cylinder"));
585 setVisibility(instance, cons);
586 setLine(instance, cons);
587 setColor(instance, getColorFor(cons));
617 cout <<
"G4HepRepSceneHandler::AddSolid(const G4Tubs& tubs)" << endl;
620 if (dontWrite())
return;
643 vertex1 = (transform) * vertex1;
644 vertex2 = (transform) * vertex2;
646 HepRepInstance* instance = getGeometryInstance(pCurrentLV, pCurrentMaterial, currentDepth);
647 setAttribute(instance,
"DrawAs",
G4String(
"Cylinder"));
649 setVisibility(instance, tubs);
650 setLine(instance, tubs);
651 setColor(instance, getColorFor(tubs));
677 cout <<
"G4HepRepSceneHandler::AddSolid(const G4Trd& trd)" << endl;
679 if (dontWrite())
return;
703 vertex1 = (transform) * vertex1;
704 vertex2 = (transform) * vertex2;
705 vertex3 = (transform) * vertex3;
706 vertex4 = (transform) * vertex4;
707 vertex5 = (transform) * vertex5;
708 vertex6 = (transform) * vertex6;
709 vertex7 = (transform) * vertex7;
710 vertex8 = (transform) * vertex8;
712 HepRepInstance* instance = getGeometryOrEventInstance(getCalHitType());
714 addAttributes(instance, getCalHitType());
716 setAttribute(instance,
"DrawAs",
G4String(
"Prism"));
718 setVisibility(instance, trd);
719 setLine(instance, trd);
720 setColor(instance, getColorFor(trd));
733 if (dontWrite())
return;
738 if (dontWrite())
return;
743 if (dontWrite())
return;
748 if (dontWrite())
return;
753 if (dontWrite())
return;
758 if (dontWrite())
return;
763 if (dontWrite())
return;
771 cout <<
"G4HepRepSceneHandler::AddPrimitive(G4Polyline&) " << line.size() << endl;
773 if (dontWrite())
return;
776 static G4bool warned =
false;
780 (
"G4HepRepSceneHandler::AddPrimitive (const G4Polyline&)",
782 "2D polylines not implemented. Ignored.");
789 addAttributes(instance, getTrajectoryType());
793 setVisibility(instance, line);
795 setLine(instance, line);
797 for (
size_t i=0; i < line.size(); i++) {
807 cout <<
"G4HepRepSceneHandler::AddPrimitive(G4Polymarker&) " << line.size() << endl;
809 if (dontWrite())
return;
812 static G4bool warned =
false;
816 (
"G4HepRepSceneHandler::AddPrimitive (const G4Polymarker&)",
818 "2D polymarkers not implemented. Ignored.");
825 addAttributes(instance, getHitType());
829 setVisibility(instance, line);
831 setMarker(instance, line);
837 if (mtype == line.
dots) {
838 setAttribute(instance,
"Fill",
true);
840 }
else if (mtype == line.
circles) {
842 setAttribute(instance,
"MarkName",
G4String(
"Box"));
845 setAttribute(instance,
"MarkName",
G4String(
"Plus"));
848 for (
size_t i=0; i < line.size(); i++) {
857 cout <<
"G4HepRepSceneHandler::AddPrimitive(G4Circle&) " << endl;
859 if (dontWrite())
return;
862 static G4bool warned =
false;
866 (
"G4HepRepSceneHandler::AddPrimitive (const G4Circle&)",
868 "2D circles not implemented. Ignored.");
875 addAttributes(instance, getHitType());
879 setColor (instance,
GetColor(circle));
881 setVisibility(instance, circle);
883 setMarker(instance, circle);
892 cout <<
"G4HepRepSceneHandler::AddPrimitive(G4Polyhedron&) " << endl;
894 if (dontWrite())
return;
897 static G4bool warned =
false;
901 (
"G4HepRepSceneHandler::AddPrimitive (const G4Polyhedron&)",
903 "2D polyhedra not implemented. Ignored.");
913 HepRepInstance* instance = getGeometryOrEventInstance(getCalHitType());
915 addAttributes(instance, getCalHitType());
917 setVisibility(instance, polyhedron);
919 G4int currentDepth = 0;
930 face = getGeometryInstance(
"*Face", currentDepth+1);
931 setAttribute(face,
"PickParent",
true);
932 setAttribute(face,
"DrawAs",
G4String(
"Polygon"));
935 setLine(face, polyhedron);
936 setColor(face,
GetColor(polyhedron));
937 if (isEventData()) setColor(face,
GetColor(polyhedron),
G4String(
"FillColor"));
945 vertex = transform * vertex;
947 }
while (notLastEdge);
948 }
while (notLastFace);
954 cout <<
"G4HepRepSceneHandler::AddPrimitive(G4Text&) " << endl;
956 if (dontWrite())
return;
972 cout <<
"G4HepRepSceneHandler::AddPrimitive G4Text : not yet implemented. " << endl;
978 cout <<
"G4HepRepSceneHandler::AddPrimitive(G4Square&) " << endl;
980 if (dontWrite())
return;
983 static G4bool warned =
false;
987 (
"G4HepRepSceneHandler::AddPrimitive (const G4Square&)",
989 "2D squares not implemented. Ignored.");
996 addAttributes(instance, getHitType());
1000 setColor (instance, getColorFor(square));
1002 setVisibility(instance, square);
1004 setMarker(instance, square);
1011 cout <<
"G4HepRepSceneHandler::AddPrimitive(G4NURBS&) " << endl;
1013 if (dontWrite())
return;
1029 cout <<
"G4HepRepSceneHandler::AddPrimitive G4NURBS : not yet implemented. " << endl;
1033 if (dontWrite())
return;
1039 cout <<
"G4HepRepSceneHandler::AddCompound(G4VTrajectory&) " << endl;
1041 if (dontWrite())
return;
1043 currentTrack = &trajectory;
1045 currentTrack = NULL;
1051 cout <<
"G4HepRepSceneHandler::AddCompound(G4VHit&) " << endl;
1053 if (dontWrite())
return;
1065 transform = objectTransformation;
1067 cout <<
"G4HepRepSceneHandler::PreAddSolid(G4Transform3D&, G4VisAttributes&)" << endl;
1074 cout <<
"G4HepRepSceneHandler::PostAddSolid()" << endl;
1082 cout <<
"G4HepRepSceneHandler::BeginPrimitives(G4Transform3D&)" << endl;
1086 transform = objectTransformation;
1092 cout <<
"G4HepRepSceneHandler::EndPrimitives" << endl;
1098G4bool G4HepRepSceneHandler::dontWrite() {
1107 cout <<
"G4HepRepSceneHandler::setColor : red : " << color.
GetRed () <<
1108 " green : " << color.
GetGreen () <<
1109 " blue : " << color.
GetBlue () << endl;
1130 setAttribute(attribute,
"Visibility", (
atts && (
atts->IsVisible()==0)) ?
false :
true);
1134 setAttribute(attribute,
"LineWidth", 1.0);
1140 setAttribute(attribute,
"LineWidth", (
atts != NULL) ?
atts->GetLineWidth() : 1.0);
1143 switch (
atts->GetLineStyle()) {
1145 setAttribute(attribute,
"LineStyle",
G4String(
"Dotted"));
1148 setAttribute(attribute,
"LineStyle",
G4String(
"Dashed"));
1161 setAttribute(attribute,
"MarkSize", size);
1163 if (markerType ==
screen) setAttribute(attribute,
"MarkType",
G4String(
"Symbol"));
1165 setAttribute(attribute,
"Fill",
false);
1174 const map<G4String,G4AttDef>* hitAttDefs = currentHit->
GetAttDefs();
1176 addAttDefs(getHitType(), hitAttDefs);
1187 addAttVals(instance, hitAttDefs, hitAttValues);
1189 delete hitAttValues;
1191 }
else if (currentTrack) {
1192 vector<G4AttValue>* trajectoryAttValues = currentTrack->
CreateAttValues();
1193 const map<G4String,G4AttDef>* trajectoryAttDefs = currentTrack->
GetAttDefs();
1195 addAttDefs(type, trajectoryAttDefs);
1207 addAttVals(instance, trajectoryAttDefs, trajectoryAttValues);
1209 delete trajectoryAttValues;
1216 if ((attValue == NULL) || (attValue->
getString() != value)) {
1218 if (point != NULL) {
1225 if (instance != NULL) {
1228 attribute = instance->
getType();
1238 if ((attValue == NULL) || (attValue->
getBoolean() != value)) {
1240 if (point != NULL) {
1247 if (instance != NULL) {
1250 attribute = instance->
getType();
1260 if ((attValue == NULL) || (attValue->
getDouble() != value)) {
1262 if (point != NULL) {
1269 if (instance != NULL) {
1272 attribute = instance->
getType();
1282 if ((attValue == NULL) || (attValue->
getInteger() != value)) {
1284 if (point != NULL) {
1291 if (instance != NULL) {
1294 attribute = instance->
getType();
1302void G4HepRepSceneHandler::setAttribute(
HepRepAttribute* attribute,
G4String name,
double red,
double green,
double blue,
double alpha) {
1304 vector<double> color;
1305 if (attValue != NULL) color = attValue->
getColor();
1306 if ((color.size() == 0) ||
1307 (color[0] != red) ||
1308 (color[1] != green) ||
1309 (color[2] != blue) ||
1310 ((color.size() > 3) && (color[3] != alpha))) {
1313 if (point != NULL) {
1320 if (instance != NULL) {
1323 attribute = instance->
getType();
1327 attribute->
addAttValue(name, red, green, blue, alpha);
1331void G4HepRepSceneHandler::addAttDefs(
HepRepDefinition* definition,
const map<G4String,G4AttDef>* attDefs) {
1332 if (attDefs == NULL)
return;
1335 map<G4String,G4AttDef>::const_iterator attDefIterator = attDefs->begin();
1336 while (attDefIterator != attDefs->end()) {
1337 definition->
addAttDef(attDefIterator->first, attDefIterator->second.GetDesc(),
1338 attDefIterator->second.GetCategory(), attDefIterator->second.GetExtra());
1343void G4HepRepSceneHandler::addAttVals(
HepRepAttribute* attribute,
const map<G4String,G4AttDef>* attDefs, vector<G4AttValue>* attValues) {
1344 if (attValues == NULL)
return;
1347 for (vector<G4AttValue>::iterator attValIterator = attValues->begin(); attValIterator != attValues->end(); attValIterator++) {
1348 G4String name = attValIterator->GetName();
1351 if ((name ==
"Pos") && (point != NULL)) {
1352 G4String pos = attValIterator->GetValue();
1358 for (
unsigned int i=0; i<pos.length(); i++) {
1359 if (pos[i] ==
' ') {
1362 double factor = atof(pos.substr(is, i-is).c_str())/point->
getX();
1363 im = (int)(std::log10(factor)+((factor < 1) ? -0.5 : 0.5));
1365 }
else if (in == 3) {
1367 unit = pos.substr(is, i-is);
1370 }
else if (unit ==
G4String(
"mm")) {
1372 }
else if (unit ==
G4String(
"cm")) {
1374 }
else if (unit ==
G4String(
"m")) {
1376 }
else if (unit ==
G4String(
"km")) {
1379 cerr <<
"HepRepSceneHandler: Unrecognized Unit: '" << unit <<
"'" << endl;
1403 cerr <<
"HepRepSceneHandler: No valid unit found for im: " << im << endl;
1408 setAttribute(attribute,
G4String(
"PointUnit"), unit);
1413 if (name ==
"NTP")
continue;
1416 const map<G4String,G4AttDef>::const_iterator attDefIterator = attDefs->find(name);
1417 G4String type = attDefIterator->second.GetValueType();
1420 if ((type ==
"G4double") || (type ==
"double")) {
1421 setAttribute(attribute, attValIterator->GetName(), atof(attValIterator->GetValue()));
1422 }
else if ((type ==
"G4int") || (type ==
"int")) {
1423 setAttribute(attribute, attValIterator->GetName(), atoi(attValIterator->GetValue()));
1425 setAttribute(attribute, attValIterator->GetName(), attValIterator->GetValue());
1431bool G4HepRepSceneHandler::isEventData () {
1437void G4HepRepSceneHandler::addTopLevelAttributes(
HepRepType* type) {
1440 type->
addAttDef(
"Generator",
"Generator of the file",
"General",
"");
1443 type->
addAttDef(
"GeneratorVersion",
"Version of the Generator",
"General",
"");
1444 G4String versionString = G4Version;
1445 versionString = versionString.substr(1,versionString.size()-2);
1446 versionString =
" Geant4 version " + versionString +
" " + G4Date;
1447 type->
addAttValue(
"GeneratorVersion", versionString);
1451 type->
addAttDef(
"ViewTheta",
"Theta of initial suggested viewpoint",
"Draw",
"rad");
1454 type->
addAttDef(
"ViewPhi",
"Phi of initial suggested viewpoint",
"Draw",
"rad");
1457 type->
addAttDef(
"ViewScale",
"Scale of initial suggested viewpoint",
"Draw",
"");
1461 type->
addAttDef(
"ViewTranslateX",
"Translate in X of initial suggested viewpoint",
"Draw",
"");
1464 type->
addAttDef(
"ViewTranslateY",
"Translate in Y of initial suggested viewpoint",
"Draw",
"");
1467 type->
addAttDef(
"ViewTranslateZ",
"Translate in Z of initial suggested viewpoint",
"Draw",
"");
1470 type->
addAttDef(
"PointUnit",
"Length",
"Physics",
"");
1475 type->
addAttDef(
"UseSolids",
"Use HepRep Solids rather than Geant4 Primitives",
"Draw",
"");
1478 type->
addAttDef(
"WriteInvisibles",
"Write Invisible Objects",
"Draw",
"");
1484 if (isEventData()) {
1492 return getGeometryInstance(pCurrentLV, pCurrentMaterial, currentDepth);
1496HepRep* G4HepRepSceneHandler::getHepRep() {
1497 if (_heprep == NULL) {
1504HepRep* G4HepRepSceneHandler::getHepRepGeometry() {
1505 if (_heprepGeometry == NULL) {
1509 return _heprepGeometry;
1513 if (_geometryInstanceTree == NULL) {
1524 return _geometryInstanceTree;
1528 if (_geometryRootInstance == NULL) {
1530 _geometryRootInstance = factory->
createHepRepInstance(getGeometryInstanceTree(), getGeometryRootType());
1532 return _geometryRootInstance;
1538 setAttribute(instance,
"LVol", volume->
GetName());
1541 setAttribute(instance,
"Region", regionName);
1542 setAttribute(instance,
"RootRegion", volume->
IsRootRegion());
1546 setAttribute(instance,
"Material", matName );
1548 setAttribute(instance,
"Density", matDensity);
1550 setAttribute(instance,
"Radlen", matRadlen);
1553 G4String state = materialState[matState];
1554 setAttribute(instance,
"State", state);
1563 while ((
int)_geometryInstance.size() > depth) {
1564 _geometryInstance.pop_back();
1568 HepRepInstance* parent = (_geometryInstance.empty()) ? getGeometryRootInstance() : _geometryInstance.back();
1571 HepRepType* type = getGeometryType(volumeName, depth);
1575 _geometryInstance.push_back(instance);
1581 if (_geometryTypeTree == NULL) {
1590 getHepRepGeometry()->
addTypeTree(_geometryTypeTree);
1593 return _geometryTypeTree;
1596HepRepType* G4HepRepSceneHandler::getGeometryRootType() {
1597 if (_geometryRootType == NULL) {
1599 _geometryRootType = factory->
createHepRepType(getGeometryTypeTree(), rootVolumeName);
1600 _geometryRootType->
addAttValue(
"Layer", geometryLayer);
1603 _geometryRootType->
addAttDef (
"LVol",
"Logical Volume",
"Physics",
"");
1605 _geometryRootType->
addAttDef (
"Region",
"Cuts Region",
"Physics",
"");
1607 _geometryRootType->
addAttDef (
"RootRegion",
"Root Region",
"Physics",
"");
1608 _geometryRootType->
addAttValue(
"RootRegion",
false);
1609 _geometryRootType->
addAttDef (
"Solid",
"Solid Name",
"Physics",
"");
1611 _geometryRootType->
addAttDef (
"EType",
"Entity Type",
"Physics",
"");
1613 _geometryRootType->
addAttDef (
"Material",
"Material Name",
"Physics",
"");
1615 _geometryRootType->
addAttDef (
"Density",
"Material Density",
"Physics",
"");
1617 _geometryRootType->
addAttDef (
"State",
"Material State",
"Physics",
"");
1619 _geometryRootType->
addAttDef (
"Radlen",
"Material Radiation Length",
"Physics",
"");
1623 _geometryRootType->
addAttValue(
"Color", 0.8, 0.8, 0.8, 1.0);
1624 _geometryRootType->
addAttValue(
"Visibility",
true);
1625 _geometryRootType->
addAttValue(
"FillColor", 0.8, 0.8, 0.8, 1.0);
1628 _geometryRootType->
addAttValue(
"PickParent",
false);
1629 _geometryRootType->
addAttValue(
"ShowParentAttributes",
true);
1631 _geometryRootType->
addAttValue(
"MarkSizeMultiplier", 4.0);
1632 _geometryRootType->
addAttValue(
"LineWidthMultiplier", 1.0);
1634 addTopLevelAttributes(_geometryRootType);
1636 _geometryType[
"/"+_geometryRootType->
getName()] = _geometryRootType;
1638 return _geometryRootType;
1643 getGeometryRootType();
1646 G4String name = getFullTypeName(volumeName, depth);
1651 G4String parentName = getParentTypeName(depth);
1652 HepRepType* parentType = _geometryType[parentName];
1655 _geometryType[name] = type;
1660G4String G4HepRepSceneHandler::getFullTypeName(
G4String volumeName,
int depth) {
1662 if (depth > (
int)_geometryTypeName.size()) {
1664 G4String problem =
"HierarchyProblem";
1665 if (_geometryType[
"/"+problem] == NULL) {
1668 _geometryType[
"/"+problem] = type;
1670 return "/" + problem +
"/" + volumeName;
1674 while ((
int)_geometryTypeName.size() > depth) {
1675 _geometryTypeName.pop_back();
1679 G4String name = (_geometryTypeName.empty()) ?
G4String(
"/"+rootVolumeName) : _geometryTypeName.back();
1680 name = name +
"/" + volumeName;
1681 _geometryTypeName.push_back(name);
1685G4String G4HepRepSceneHandler::getParentTypeName(
int depth) {
1686 return (depth >= 1) ? _geometryTypeName[depth-1] :
G4String(
"/"+rootVolumeName);
1690 if (_eventInstanceTree == NULL) {
1695 return _eventInstanceTree;
1699 if (_eventInstance == NULL) {
1703 return _eventInstance;
1707 if (_eventTypeTree == NULL) {
1714 return _eventTypeTree;
1717HepRepType* G4HepRepSceneHandler::getEventType() {
1718 if (_eventType == NULL) {
1725 _eventType->
addAttValue(
"Color", 1.0, 1.0, 1.0, 1.0);
1726 _eventType->
addAttValue(
"FillColor", 1.0, 1.0, 1.0, 1.0);
1730 _eventType->
addAttValue(
"ShowParentAttributes",
false);
1732 _eventType->
addAttValue(
"MarkSizeMultiplier", 4.0);
1733 _eventType->
addAttValue(
"LineWidthMultiplier", 1.0);
1735 addTopLevelAttributes(_eventType);
1741HepRepType* G4HepRepSceneHandler::getTrajectoryType() {
1742 if (_trajectoryType == NULL) {
1745 _trajectoryType->
addAttValue(
"Layer", trajectoryLayer);
1748 _trajectoryType->
addAttValue(
"LineWidthMultiplier", 2.0);
1756 return _trajectoryType;
1759HepRepType* G4HepRepSceneHandler::getHitType() {
1760 if (_hitType == NULL) {
1772HepRepType* G4HepRepSceneHandler::getCalHitType() {
1773 if (_calHitType == NULL) {
1782HepRepType* G4HepRepSceneHandler::getCalHitFaceType() {
1783 if (_calHitFaceType == NULL) {
1784 _calHitFaceType = factory->
createHepRepType(getCalHitType(),
"CalHitFace");
1787 return _calHitFaceType;
HepGeom::Point3D< G4double > G4Point3D
G4double GetYHalfLength() const
G4double GetZHalfLength() const
G4double GetXHalfLength() const
G4double GetAlpha() const
G4double GetGreen() const
G4double GetOuterRadiusPlusZ() const
G4double GetDeltaPhiAngle() const
G4double GetInnerRadiusMinusZ() const
G4double GetInnerRadiusPlusZ() const
G4double GetOuterRadiusMinusZ() const
G4double GetZHalfLength() const
virtual G4bool writeInvisibles()
virtual G4bool useSolids()
virtual G4String getEventNumberSuffix()
virtual G4bool appendGeometry()
static G4HepRepMessenger * GetInstance()
void AddCompound(const G4VTrajectory &)
void openFile(G4String name)
void BeginPrimitives(const G4Transform3D &objectTransformation)
void AddPrimitive(const G4Polyline &)
G4HepRepSceneHandler(G4VGraphicsSystem &system, const G4String &name="")
void AddSolid(const G4Box &box)
bool closeHepRep(bool final=false)
void PreAddSolid(const G4Transform3D &objectTransformation, const G4VisAttributes &visAttribs)
virtual ~G4HepRepSceneHandler()
G4VSolid * GetSolid() const
G4bool IsRootRegion() const
G4Region * GetRegion() const
G4double GetDensity() const
G4double GetRadlen() const
const G4String & GetName() const
G4LogicalVolume * GetCurrentLV() const
G4Material * GetCurrentMaterial() const
G4int GetCurrentDepth() const
MarkerType GetMarkerType() const
const G4String & GetName() const
G4double GetXHalfLength2() const
G4double GetYHalfLength2() const
G4double GetXHalfLength1() const
G4double GetYHalfLength1() const
G4double GetZHalfLength() const
G4double GetZHalfLength() const
G4double GetInnerRadius() const
G4double GetOuterRadius() const
G4double GetDeltaPhiAngle() const
virtual std::vector< G4AttValue > * CreateAttValues() const
virtual const std::map< G4String, G4AttDef > * GetAttDefs() const
FillStyle GetFillStyle() const
G4Point3D GetPosition() const
virtual void BeginModeling()
const G4Colour & GetColor(const G4Visible &)
G4VGraphicsSystem * GetGraphicsSystem() const
G4double GetMarkerRadius(const G4VMarker &, MarkerSizeType &)
G4Scene * GetScene() const
virtual void EndPrimitives()
G4VViewer * GetCurrentViewer() const
virtual void EndModeling()
virtual void PreAddSolid(const G4Transform3D &objectTransformation, const G4VisAttributes &)
virtual void PostAddSolid()
const G4String & GetName() const
virtual void BeginPrimitives(const G4Transform3D &objectTransformation)
const G4VisAttributes * fpVisAttribs
G4bool fReadyForTransients
virtual void AddSolid(const G4Box &)
virtual void AddCompound(const G4VTrajectory &)
virtual void AddPrimitive(const G4Polyline &)=0
virtual G4GeometryType GetEntityType() const =0
virtual std::vector< G4AttValue > * CreateAttValues() const
virtual const std::map< G4String, G4AttDef > * GetAttDefs() const
virtual void DrawView()=0
const G4ViewParameters & GetViewParameters() const
const G4Vector3D & GetViewpointDirection() const
G4double GetZoomFactor() const
const G4Color & GetColor() const
const G4VisAttributes * GetVisAttributes() const
virtual std::vector< double > getColor()=0
virtual bool getBoolean()=0
virtual std::string getString()=0
virtual double getDouble()=0
virtual int getInteger()=0
virtual HepRepAttValue * getAttValue(std::string name)=0
virtual HepRepAttValue * getAttValueFromNode(std::string lowerCaseName)=0
virtual void addAttValue(HepRepAttValue *attValue)=0
virtual void addAttDef(std::string name, std::string desc, std::string category, std::string extra)=0
virtual HepRepInstanceTree * createHepRepInstanceTree(std::string name, std::string version, HepRepTreeID *typeTree)=0
virtual HepRepTypeTree * createHepRepTypeTree(HepRepTreeID *treeID)=0
virtual HepRepInstance * createHepRepInstance(HepRepInstance *parent, HepRepType *type)=0
virtual HepRepWriter * createHepRepWriter(std::ostream *out, bool randomAccess, bool compress)=0
virtual HepRepPoint * createHepRepPoint(HepRepInstance *instance, double x, double y, double z)=0
virtual HepRepType * createHepRepType(HepRepTypeTree *parent, std::string name)=0
virtual HepRep * createHepRep()=0
virtual HepRepTreeID * createHepRepTreeID(std::string name, std::string version, std::string qualifier="top-level")=0
virtual void addInstanceTree(HepRepTreeID *instanceTree)=0
virtual HepRepType * getType()=0
virtual HepRepInstance * getInstance()=0
virtual std::string getName()=0
virtual bool addProperty(std::string key, std::string value)=0
virtual bool write(HepRep *heprep, std::string name)=0
virtual void addInstanceTree(HepRepInstanceTree *instanceTree)=0
virtual void addTypeTree(HepRepTypeTree *typeTree)=0
virtual void addLayer(std::string layer)=0
G4bool GetNextNormal(G4Normal3D &normal) const
G4bool GetNextVertex(G4Point3D &vertex, G4int &edgeFlag) const
G4int GetNoFacets() const
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)