Geant4 Cross Reference |
1 // 1 // 2 // ******************************************* 2 // ******************************************************************** 3 // * License and Disclaimer 3 // * License and Disclaimer * 4 // * 4 // * * 5 // * The Geant4 software is copyright of th 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/ 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. 9 // * include a list of copyright holders. * 10 // * 10 // * * 11 // * Neither the authors of this software syst 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing fin 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warran 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assum 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitatio 16 // * for the full disclaimer and the limitation of liability. * 17 // * 17 // * * 18 // * This code implementation is the result 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboratio 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distri 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you ag 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publicati 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Sof 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************* 24 // ******************************************************************** 25 // 25 // 26 /* 26 /* 27 * =========================================== 27 * ============================================================================= 28 * 28 * 29 * Filename: CexmcScenePrimitivesMessen 29 * Filename: CexmcScenePrimitivesMessenger.cc 30 * 30 * 31 * Description: draw auxiliary scene primi 31 * Description: draw auxiliary scene primitives 32 * 32 * 33 * Version: 1.0 33 * Version: 1.0 34 * Created: 03.01.2011 12:42:03 34 * Created: 03.01.2011 12:42:03 35 * Revision: none 35 * Revision: none 36 * Compiler: gcc 36 * Compiler: gcc 37 * 37 * 38 * Author: Alexey Radkov (), 38 * Author: Alexey Radkov (), 39 * Company: PNPI 39 * Company: PNPI 40 * 40 * 41 * =========================================== 41 * ============================================================================= 42 */ 42 */ 43 43 44 #include <sstream> 44 #include <sstream> 45 #include <cctype> 45 #include <cctype> 46 #include <G4UIparameter.hh> 46 #include <G4UIparameter.hh> 47 #include <G4UIcommand.hh> 47 #include <G4UIcommand.hh> 48 #include <G4UIcmdWith3Vector.hh> 48 #include <G4UIcmdWith3Vector.hh> 49 #include <G4UIcmdWithABool.hh> 49 #include <G4UIcmdWithABool.hh> 50 #include <G4UIcmdWithoutParameter.hh> 50 #include <G4UIcmdWithoutParameter.hh> 51 #include <G4Colour.hh> 51 #include <G4Colour.hh> 52 #include "CexmcScenePrimitives.hh" 52 #include "CexmcScenePrimitives.hh" 53 #include "CexmcScenePrimitivesMessenger.hh" 53 #include "CexmcScenePrimitivesMessenger.hh" 54 #include "CexmcMessenger.hh" 54 #include "CexmcMessenger.hh" 55 55 56 56 57 CexmcScenePrimitivesMessenger::CexmcScenePrimi 57 CexmcScenePrimitivesMessenger::CexmcScenePrimitivesMessenger( 58 CexmcScene << 58 CexmcScenePrimitives * scenePrimitives ) : 59 scenePrimitives( scenePrimitives_ ), drawR << 59 scenePrimitives( scenePrimitives ), drawRadialLine( NULL ), 60 clearRadialLines( NULL ), markTargetCenter 60 clearRadialLines( NULL ), markTargetCenter( NULL ), 61 highlightInnerCrystals( NULL ), setColour( 61 highlightInnerCrystals( NULL ), setColour( NULL ) 62 { 62 { 63 drawRadialLine = new G4UIcmdWith3Vector( 63 drawRadialLine = new G4UIcmdWith3Vector( 64 ( CexmcMessenger::visDirName + "drawRa 64 ( CexmcMessenger::visDirName + "drawRadialLine" ).c_str(), this ); 65 drawRadialLine->SetGuidance( "Draw radial 65 drawRadialLine->SetGuidance( "Draw radial line with specified theta, phi " 66 "(both in deg 66 "(both in deg!)\n and length (in cm!)" ); 67 drawRadialLine->SetParameterName( "RadialL 67 drawRadialLine->SetParameterName( "RadialLineTheta", "RadialLinePhi", 68 "RadialL 68 "RadialLineLength", true ); 69 drawRadialLine->SetRange( "RadialLineLengt 69 drawRadialLine->SetRange( "RadialLineLength >= 0." ); 70 drawRadialLine->SetDefaultValue( G4ThreeVe 70 drawRadialLine->SetDefaultValue( G4ThreeVector( 0., 0., 100. ) ); 71 drawRadialLine->AvailableForStates( G4Stat 71 drawRadialLine->AvailableForStates( G4State_PreInit, G4State_Idle ); 72 72 73 clearRadialLines = new G4UIcmdWithoutParam 73 clearRadialLines = new G4UIcmdWithoutParameter( 74 ( CexmcMessenger::visDirName + "clearR 74 ( CexmcMessenger::visDirName + "clearRadialLines" ).c_str(), this ); 75 clearRadialLines->SetGuidance( "Clear all 75 clearRadialLines->SetGuidance( "Clear all existing radial lines" ); 76 clearRadialLines->AvailableForStates( G4St 76 clearRadialLines->AvailableForStates( G4State_PreInit, G4State_Idle ); 77 77 78 markTargetCenter = new G4UIcmdWithABool( 78 markTargetCenter = new G4UIcmdWithABool( 79 ( CexmcMessenger::visDirName + "markTa 79 ( CexmcMessenger::visDirName + "markTargetCenter" ).c_str(), this ); 80 markTargetCenter->SetGuidance( "Mark/unmar 80 markTargetCenter->SetGuidance( "Mark/unmark target center" ); 81 markTargetCenter->SetParameterName( "MarkT 81 markTargetCenter->SetParameterName( "MarkTargetCenter", true ); 82 markTargetCenter->SetDefaultValue( true ); 82 markTargetCenter->SetDefaultValue( true ); 83 markTargetCenter->AvailableForStates( G4St 83 markTargetCenter->AvailableForStates( G4State_PreInit, G4State_Idle ); 84 84 85 highlightInnerCrystals = new G4UIcmdWithAB 85 highlightInnerCrystals = new G4UIcmdWithABool( 86 ( CexmcMessenger::visDirName + "hlIC" 86 ( CexmcMessenger::visDirName + "hlIC" ).c_str(), this ); 87 highlightInnerCrystals->SetGuidance( "High 87 highlightInnerCrystals->SetGuidance( "Highlight inner crystals in " 88 "calo 88 "calorimeters on/off" ); 89 highlightInnerCrystals->SetParameterName( 89 highlightInnerCrystals->SetParameterName( "HighlightInnerCrystals", true ); 90 highlightInnerCrystals->SetDefaultValue( t 90 highlightInnerCrystals->SetDefaultValue( true ); 91 highlightInnerCrystals->AvailableForStates 91 highlightInnerCrystals->AvailableForStates( G4State_PreInit, G4State_Idle ); 92 92 93 setColour = new G4UIcommand( 93 setColour = new G4UIcommand( 94 ( CexmcMessenger::visDirName + "setCol 94 ( CexmcMessenger::visDirName + "setColour" ).c_str(), this ); 95 setColour->SetGuidance( "Set colour of spe 95 setColour->SetGuidance( "Set colour of specified scene primitive" ); 96 G4UIparameter * parameter( new G4UIparame 96 G4UIparameter * parameter( new G4UIparameter( "ScenePrimitive", 's', 97 97 false ) ); 98 parameter->SetGuidance( "Scene primitive, 98 parameter->SetGuidance( "Scene primitive, possible values:\n" 99 " tc - target center mark,\n" 99 " tc - target center mark,\n" 100 " rl - radial lines,\n" 100 " rl - radial lines,\n" 101 " ic - inner crystal highlights" ); 101 " ic - inner crystal highlights" ); 102 parameter->SetParameterCandidates( "tc rl 102 parameter->SetParameterCandidates( "tc rl ic" ); 103 setColour->SetParameter( parameter ); 103 setColour->SetParameter( parameter ); 104 parameter = new G4UIparameter( "red", 's', 104 parameter = new G4UIparameter( "red", 's', true ); 105 parameter->SetGuidance( "Red component or 105 parameter->SetGuidance( "Red component or string, e.g. \"blue\", in which " 106 "case succeeding colour\n component 106 "case succeeding colour\n components are ignored" ); 107 parameter->SetDefaultValue( "1.0" ); 107 parameter->SetDefaultValue( "1.0" ); 108 setColour->SetParameter( parameter ); 108 setColour->SetParameter( parameter ); 109 parameter = new G4UIparameter( "green", 'd 109 parameter = new G4UIparameter( "green", 'd', true ); 110 parameter->SetGuidance( "Green component" 110 parameter->SetGuidance( "Green component" ); 111 parameter->SetDefaultValue( 1.0 ); 111 parameter->SetDefaultValue( 1.0 ); 112 setColour->SetParameter( parameter ); 112 setColour->SetParameter( parameter ); 113 parameter = new G4UIparameter( "blue", 'd' 113 parameter = new G4UIparameter( "blue", 'd', true ); 114 parameter->SetGuidance( "Blue component" ) 114 parameter->SetGuidance( "Blue component" ); 115 parameter->SetDefaultValue( 1.0 ); 115 parameter->SetDefaultValue( 1.0 ); 116 setColour->SetParameter( parameter ); 116 setColour->SetParameter( parameter ); 117 parameter = new G4UIparameter( "opacity", 117 parameter = new G4UIparameter( "opacity", 'd', true ); 118 parameter->SetGuidance( "Opacity" ); 118 parameter->SetGuidance( "Opacity" ); 119 parameter->SetDefaultValue( 1.0 ); 119 parameter->SetDefaultValue( 1.0 ); 120 setColour->SetParameter( parameter ); 120 setColour->SetParameter( parameter ); 121 setColour->AvailableForStates( G4State_Pre 121 setColour->AvailableForStates( G4State_PreInit, G4State_Idle ); 122 } 122 } 123 123 124 124 125 CexmcScenePrimitivesMessenger::~CexmcScenePrim 125 CexmcScenePrimitivesMessenger::~CexmcScenePrimitivesMessenger() 126 { 126 { 127 delete drawRadialLine; 127 delete drawRadialLine; 128 delete clearRadialLines; 128 delete clearRadialLines; 129 delete markTargetCenter; 129 delete markTargetCenter; 130 delete highlightInnerCrystals; 130 delete highlightInnerCrystals; 131 delete setColour; 131 delete setColour; 132 } 132 } 133 133 134 134 135 void CexmcScenePrimitivesMessenger::SetNewVal 135 void CexmcScenePrimitivesMessenger::SetNewValue( G4UIcommand * cmd, 136 136 G4String value ) 137 { 137 { 138 do 138 do 139 { 139 { 140 if ( cmd == drawRadialLine ) 140 if ( cmd == drawRadialLine ) 141 { 141 { 142 G4ThreeVector line( G4UIcmdWith3V 142 G4ThreeVector line( G4UIcmdWith3Vector::GetNew3VectorValue( 143 143 value ) ); 144 scenePrimitives->DrawRadialLine( l 144 scenePrimitives->DrawRadialLine( line ); 145 break; 145 break; 146 } 146 } 147 if ( cmd == clearRadialLines ) 147 if ( cmd == clearRadialLines ) 148 { 148 { 149 scenePrimitives->ClearRadialLines( 149 scenePrimitives->ClearRadialLines(); 150 break; 150 break; 151 } 151 } 152 if ( cmd == markTargetCenter ) 152 if ( cmd == markTargetCenter ) 153 { 153 { 154 scenePrimitives->MarkTargetCenter( 154 scenePrimitives->MarkTargetCenter( 155 G4UIcmdWithABo 155 G4UIcmdWithABool::GetNewBoolValue( value ) ); 156 break; 156 break; 157 } 157 } 158 if ( cmd == highlightInnerCrystals ) 158 if ( cmd == highlightInnerCrystals ) 159 { 159 { 160 scenePrimitives->HighlightInnerCry 160 scenePrimitives->HighlightInnerCrystals( 161 G4UIcmdWithABo 161 G4UIcmdWithABool::GetNewBoolValue( value ) ); 162 break; 162 break; 163 } 163 } 164 if ( cmd == setColour ) 164 if ( cmd == setColour ) 165 { 165 { 166 G4String name; 166 G4String name; 167 G4String redOrString; 167 G4String redOrString; 168 G4double green( 1 ); 168 G4double green( 1 ); 169 G4double blue( 1 ); 169 G4double blue( 1 ); 170 G4double opacity( 1 ); 170 G4double opacity( 1 ); 171 G4Colour colour( 1, gre 171 G4Colour colour( 1, green, blue, opacity ); 172 std::istringstream iss( value ); 172 std::istringstream iss( value ); 173 173 174 iss >> name >> redOrString >> gree 174 iss >> name >> redOrString >> green >> blue >> opacity; 175 175 176 if ( std::isalpha( redOrString[ si 176 if ( std::isalpha( redOrString[ size_t( 0 ) ] ) ) 177 { 177 { 178 G4Colour::GetColour( redOrStri 178 G4Colour::GetColour( redOrString, colour ); 179 } 179 } 180 else 180 else 181 { 181 { 182 colour = G4Colour( G4UIcommand 182 colour = G4Colour( G4UIcommand::ConvertToDouble( redOrString ), 183 green, blue 183 green, blue ); 184 } 184 } 185 colour = G4Colour( colour.GetRed() 185 colour = G4Colour( colour.GetRed(), colour.GetGreen(), 186 colour.GetBlue( 186 colour.GetBlue(), opacity ); 187 187 188 CexmcSPType primitive( CexmcTarge 188 CexmcSPType primitive( CexmcTargetCenterMark_SP ); 189 do 189 do 190 { 190 { 191 if ( name == "tc" ) 191 if ( name == "tc" ) 192 { 192 { 193 primitive = CexmcTargetCen 193 primitive = CexmcTargetCenterMark_SP; 194 break; 194 break; 195 } 195 } 196 if ( name == "rl" ) 196 if ( name == "rl" ) 197 { 197 { 198 primitive = CexmcRadialLin 198 primitive = CexmcRadialLine_SP; 199 break; 199 break; 200 } 200 } 201 if ( name == "ic" ) 201 if ( name == "ic" ) 202 { 202 { 203 primitive = CexmcInnerCrys 203 primitive = CexmcInnerCrystalsHl_SP; 204 break; 204 break; 205 } 205 } 206 return; 206 return; 207 } while ( false ); 207 } while ( false ); 208 208 209 scenePrimitives->SetColour( primit 209 scenePrimitives->SetColour( primitive, colour ); 210 break; 210 break; 211 } 211 } 212 } while ( false ); 212 } while ( false ); 213 } 213 } 214 214 215 215