// // ******************************************************************** // * License and Disclaimer * // * * // * The Geant4 software is copyright of the Copyright Holders of * // * the Geant4 Collaboration. It is provided under the terms and * // * conditions of the Geant4 Software License, included in the file * // * LICENSE and available at http://cern.ch/geant4/license . These * // * include a list of copyright holders. * // * * // * Neither the authors of this software system, nor their employing * // * institutes,nor the agencies providing financial support for this * // * work make any representation or warranty, express or implied, * // * regarding this software system or assume any liability for its * // * use. Please see the license in the file LICENSE and URL above * // * for the full disclaimer and the limitation of liability. * // * * // * This code implementation is the result of the scientific and * // * technical work of the GEANT4 collaboration. * // * By using, copying, modifying or distributing the software (or * // * any work based on the software) you agree to acknowledge its * // * use in resulting scientific publications, and indicate your * // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // // $Id: G4HepRepMessenger.cc 66870 2013-01-14 23:38:59Z adotti $ // #include "G4HepRepMessenger.hh" G4HepRepMessenger* G4HepRepMessenger::fpInstance = 0; G4HepRepMessenger* G4HepRepMessenger::GetInstance() { if (!fpInstance) fpInstance = new G4HepRepMessenger; return fpInstance; } G4HepRepMessenger::G4HepRepMessenger() : fileDir(""), fileName("G4Data"), overwrite(false), cullInvisibles(false), cylAsPolygons(false), scale(1.), suffix (""), geometry(true), solids(true), invisibles(true) { heprepDirectory = new G4UIdirectory("/vis/heprep/"); heprepDirectory->SetGuidance("HepRep commands."); setFileDirCommand = new G4UIcmdWithAString("/vis/heprep/setFileDir", this); setFileDirCommand->SetGuidance("Set directory for output."); setFileDirCommand->SetGuidance("This command is used by HepRepFile, not by HepRepXML."); setFileDirCommand->SetParameterName("directory",false); if ( getenv( "G4HEPREPFILE_DIR" ) == NULL ) { setFileDirCommand->SetDefaultValue(""); } else { setFileDirCommand->SetDefaultValue(getenv("G4HEPREPFILE_DIR")); fileDir = getenv("G4HEPREPFILE_DIR"); } setFileDirCommand->AvailableForStates(G4State_Idle); setFileNameCommand = new G4UIcmdWithAString("/vis/heprep/setFileName", this); setFileNameCommand->SetGuidance("Set file name for output."); setFileNameCommand->SetGuidance("This command is used by HepRepFile, not by HepRepXML."); setFileNameCommand->SetParameterName("directory",false); if ( getenv( "G4HEPREPFILE_NAME" ) == NULL ) { setFileNameCommand->SetDefaultValue("G4Data"); } else { setFileNameCommand->SetDefaultValue(getenv("G4HEPREPFILE_NAME")); fileName = getenv("G4HEPREPFILE_NAME"); } setFileNameCommand->AvailableForStates(G4State_Idle); setOverwriteCommand = new G4UIcmdWithABool("/vis/heprep/setOverwrite", this); setOverwriteCommand->SetGuidance("Set true to write all output to exact same file name."); setOverwriteCommand->SetGuidance("Set false to increment the file name for each new output."); setOverwriteCommand->SetGuidance("This command is used by HepRepFile, not by HepRepXML."); setOverwriteCommand->SetParameterName("flag",false); if ( getenv( "G4HEPREPFILE_OVERWRITE" ) == NULL ) { setOverwriteCommand->SetDefaultValue(false); } else { setOverwriteCommand->SetDefaultValue(getenv("G4HEPREPFILE_OVERWRITE")); overwrite = setOverwriteCommand->ConvertToBool(getenv("G4HEPREPFILE_OVERWRITE")); } setOverwriteCommand->AvailableForStates(G4State_Idle); setCullInvisiblesCommand = new G4UIcmdWithABool("/vis/heprep/setCullInvisibles", this); setCullInvisiblesCommand->SetGuidance("Remove invisible objects from output file."); setCullInvisiblesCommand->SetGuidance("This command is used by HepRepFile, not by HepRepXML."); setCullInvisiblesCommand->SetParameterName("flag",false); if ( getenv( "G4HEPREPFILE_CULL" ) == NULL ) { setCullInvisiblesCommand->SetDefaultValue(false); } else { setCullInvisiblesCommand->SetDefaultValue(getenv("G4HEPREPFILE_CULL")); cullInvisibles = setCullInvisiblesCommand->ConvertToBool(getenv("G4HEPREPFILE_CULL")); } setCullInvisiblesCommand->AvailableForStates(G4State_Idle); renderCylAsPolygonsCommand = new G4UIcmdWithABool("/vis/heprep/renderCylAsPolygons", this); renderCylAsPolygonsCommand->SetGuidance("Render cylinders and cones as polygons."); renderCylAsPolygonsCommand->SetGuidance("This command is used by HepRepFile, not by HepRepXML."); renderCylAsPolygonsCommand->SetParameterName("flag",false); renderCylAsPolygonsCommand->SetDefaultValue(false); renderCylAsPolygonsCommand->AvailableForStates(G4State_Idle); setScaleCommand = new G4UIcmdWithADouble("/vis/heprep/scale",this); setScaleCommand->SetGuidance("Re-Scale coordinates."); setScaleCommand->SetParameterName("Scale",true); setScaleCommand->SetDefaultValue(1.); setScaleCommand->SetRange("Scale > 0"); setCenterCommand = new G4UIcmdWith3VectorAndUnit("/vis/heprep/center",this); setCenterCommand->SetGuidance("Re-Center coordinates."); setCenterCommand->SetParameterName("CenterX","CenterY","CenterZ",true); setCenterCommand->SetDefaultValue(G4ThreeVector(0.,0.,0.)); setCenterCommand->SetDefaultUnit("m"); setEventNumberSuffixCommand = new G4UIcmdWithAString("/vis/heprep/setEventNumberSuffix", this); setEventNumberSuffixCommand->SetGuidance("Write separate event files, appended with given suffix."); setEventNumberSuffixCommand->SetGuidance("Define the suffix with a pattern such as '-0000'."); setEventNumberSuffixCommand->SetGuidance("This command is used by HepRepXML, not by HepRepFile."); setEventNumberSuffixCommand->SetParameterName("suffix",false); setEventNumberSuffixCommand->SetDefaultValue(""); setEventNumberSuffixCommand->AvailableForStates(G4State_Idle); appendGeometryCommand = new G4UIcmdWithABool("/vis/heprep/appendGeometry", this); appendGeometryCommand->SetGuidance("Appends copy of geometry to every event."); appendGeometryCommand->SetGuidance("This command is used by HepRepXML, not by HepRepFile."); appendGeometryCommand->SetParameterName("flag",false); appendGeometryCommand->SetDefaultValue(true); appendGeometryCommand->AvailableForStates(G4State_Idle); addPointAttributesCommand = new G4UIcmdWithABool("/vis/heprep/addPointAttributes", this); addPointAttributesCommand->SetGuidance("Adds point attributes to the points of trajectories."); addPointAttributesCommand->SetGuidance("This command is used by HepRepXML, not by HepRepFile."); addPointAttributesCommand->SetParameterName("flag",false); addPointAttributesCommand->SetDefaultValue(false); addPointAttributesCommand->AvailableForStates(G4State_Idle); useSolidsCommand = new G4UIcmdWithABool("/vis/heprep/useSolids", this); useSolidsCommand->SetGuidance("Use HepRep Solids, rather than Geant4 Primitives."); useSolidsCommand->SetGuidance("This command is used by HepRepXML, not by HepRepFile.."); useSolidsCommand->SetParameterName("flag",false); useSolidsCommand->SetDefaultValue(true); useSolidsCommand->AvailableForStates(G4State_Idle); } G4HepRepMessenger::~G4HepRepMessenger() { delete setFileDirCommand; delete setFileNameCommand; delete setOverwriteCommand; delete setCullInvisiblesCommand; delete renderCylAsPolygonsCommand; delete setScaleCommand; delete setCenterCommand; delete setEventNumberSuffixCommand; delete appendGeometryCommand; delete addPointAttributesCommand; delete useSolidsCommand; delete heprepDirectory; } G4String G4HepRepMessenger::GetCurrentValue(G4UIcommand * command) { if (command==setFileDirCommand) { return fileDir; } else if (command==setFileNameCommand) { return fileName; } else if (command==setOverwriteCommand) { return overwrite; } else if (command==setCullInvisiblesCommand) { return cullInvisibles; } else if (command==renderCylAsPolygonsCommand) { return renderCylAsPolygonsCommand->ConvertToString(cylAsPolygons); } else if (command==setScaleCommand) { return setScaleCommand->ConvertToString(scale); } else if (command==setCenterCommand) { return setCenterCommand->ConvertToString(center,"m"); } else if (command==setEventNumberSuffixCommand) { return suffix; } else if (command==appendGeometryCommand) { return appendGeometryCommand->ConvertToString(geometry); } else if (command==addPointAttributesCommand) { return addPointAttributesCommand->ConvertToString(pointAttributes); } else if (command==useSolidsCommand) { return useSolidsCommand->ConvertToString(solids); } else { return ""; } } void G4HepRepMessenger::SetNewValue(G4UIcommand * command, G4String newValue) { if (command==setFileDirCommand) { fileDir = newValue; } else if (command==setFileNameCommand) { fileName = newValue; } else if (command==setOverwriteCommand) { overwrite = setOverwriteCommand->GetNewBoolValue(newValue); } else if (command==setCullInvisiblesCommand) { cullInvisibles = setCullInvisiblesCommand->GetNewBoolValue(newValue); } else if (command==renderCylAsPolygonsCommand) { cylAsPolygons = renderCylAsPolygonsCommand->GetNewBoolValue(newValue); } else if (command==setScaleCommand) { scale = setScaleCommand->GetNewDoubleValue(newValue); } else if (command==setCenterCommand) { center = setCenterCommand->GetNew3VectorValue(newValue); } else if (command==setEventNumberSuffixCommand) { suffix = newValue; } else if (command==appendGeometryCommand) { geometry = appendGeometryCommand->GetNewBoolValue(newValue); } else if (command==addPointAttributesCommand) { pointAttributes = addPointAttributesCommand->GetNewBoolValue(newValue); } else if (command==useSolidsCommand) { solids = useSolidsCommand->GetNewBoolValue(newValue); } } G4String G4HepRepMessenger::getFileDir() { return fileDir; } G4String G4HepRepMessenger::getFileName() { return fileName; } G4bool G4HepRepMessenger::getOverwrite() { return overwrite; } G4bool G4HepRepMessenger::getCullInvisibles() { return cullInvisibles; } G4bool G4HepRepMessenger::renderCylAsPolygons() { return cylAsPolygons; } G4double G4HepRepMessenger::getScale() { return scale; } G4ThreeVector G4HepRepMessenger::getCenter() { return center; } G4String G4HepRepMessenger::getEventNumberSuffix() { return suffix; } G4bool G4HepRepMessenger::appendGeometry() { return geometry; } G4bool G4HepRepMessenger::addPointAttributes() { return pointAttributes; } G4bool G4HepRepMessenger::useSolids() { return solids; } G4bool G4HepRepMessenger::writeInvisibles() { return invisibles; }