[807] | 1 | // |
---|
| 2 | // ******************************************************************** |
---|
| 3 | // * License and Disclaimer * |
---|
| 4 | // * * |
---|
| 5 | // * The Geant4 software is copyright of the Copyright Holders of * |
---|
| 6 | // * the Geant4 Collaboration. It is provided under the terms and * |
---|
| 7 | // * conditions of the Geant4 Software License, included in the file * |
---|
| 8 | // * LICENSE and available at http://cern.ch/geant4/license . These * |
---|
| 9 | // * include a list of copyright holders. * |
---|
| 10 | // * * |
---|
| 11 | // * Neither the authors of this software system, nor their employing * |
---|
| 12 | // * institutes,nor the agencies providing financial support for this * |
---|
| 13 | // * work make any representation or warranty, express or implied, * |
---|
| 14 | // * regarding this software system or assume any liability for its * |
---|
| 15 | // * use. Please see the license in the file LICENSE and URL above * |
---|
| 16 | // * for the full disclaimer and the limitation of liability. * |
---|
| 17 | // * * |
---|
| 18 | // * This code implementation is the result of the scientific and * |
---|
| 19 | // * technical work of the GEANT4 collaboration. * |
---|
| 20 | // * By using, copying, modifying or distributing the software (or * |
---|
| 21 | // * any work based on the software) you agree to acknowledge its * |
---|
| 22 | // * use in resulting scientific publications, and indicate your * |
---|
| 23 | // * acceptance of all terms of the Geant4 Software license. * |
---|
| 24 | // ******************************************************************** |
---|
| 25 | // |
---|
| 26 | // |
---|
[1342] | 27 | // $Id: OlapManagerMessenger.cc,v 1.4 2010/08/24 07:57:14 gcosmo Exp $ |
---|
| 28 | // GEANT4 tag $Name: examples-V09-03-09 $ |
---|
[807] | 29 | // |
---|
| 30 | // |
---|
| 31 | // -------------------------------------------------------------- |
---|
| 32 | // OlapManagerMessenger |
---|
| 33 | // |
---|
| 34 | // Author: Martin Liendl - Martin.Liendl@cern.ch |
---|
| 35 | // |
---|
| 36 | // -------------------------------------------------------------- |
---|
| 37 | // |
---|
| 38 | #include "OlapManagerMessenger.hh" |
---|
| 39 | #include "OlapManager.hh" |
---|
| 40 | #include "OlapLogManager.hh" |
---|
| 41 | |
---|
[1342] | 42 | #include "G4GeometryTolerance.hh" |
---|
[807] | 43 | #include "G4UIdirectory.hh" |
---|
| 44 | #include "G4UIcmdWithAString.hh" |
---|
| 45 | #include "G4UIcmdWithAnInteger.hh" |
---|
| 46 | #include "G4UIcmdWithADoubleAndUnit.hh" |
---|
| 47 | #include "G4UIcmdWithoutParameter.hh" |
---|
| 48 | #include "G4UIcmdWith3Vector.hh" |
---|
| 49 | #include "G4UIcmdWithABool.hh" |
---|
| 50 | #include "G4UIcmdWith3VectorAndUnit.hh" |
---|
| 51 | |
---|
| 52 | OlapManagerMessenger::OlapManagerMessenger(OlapManager* aManager) |
---|
| 53 | : theManager(aManager) |
---|
| 54 | { |
---|
| 55 | |
---|
| 56 | theLogManager = OlapLogManager::GetOlapLogManager(); |
---|
| 57 | |
---|
[1342] | 58 | G4double delta = G4GeometryTolerance::GetInstance()->GetAngularTolerance(); |
---|
| 59 | |
---|
[807] | 60 | theOlapDir = new G4UIdirectory("/olap/"); |
---|
| 61 | theOlapDir->SetGuidance("Overlap detection facility"); |
---|
| 62 | |
---|
| 63 | theRotationCmd = new G4UIcmdWith3VectorAndUnit("/olap/rotate",this); |
---|
| 64 | theRotationCmd->SetGuidance("rotate the new-world"); |
---|
| 65 | theRotationCmd->AvailableForStates(G4State_Idle); |
---|
| 66 | theRotationCmd->SetUnitCategory("Angle"); |
---|
| 67 | theRotationCmd->SetParameterName("rotAxisTheta", "rotAxisPhi", "rotAngle",true,true); |
---|
| 68 | |
---|
| 69 | theTriggerCmd = new G4UIcmdWithoutParameter("/olap/trigger",this); |
---|
| 70 | theTriggerCmd->SetGuidance("starts a single mother-daughters overlap detection."); |
---|
| 71 | theTriggerCmd->AvailableForStates(G4State_Idle); |
---|
| 72 | |
---|
| 73 | theTriggerFullCmd = new G4UIcmdWithAnInteger("/olap/triggerFull",this); |
---|
| 74 | theTriggerFullCmd->SetGuidance("starts a series of scans (only where mothers have"); |
---|
| 75 | theTriggerFullCmd->SetGuidance("daughters. (-1 ... full detector)"); |
---|
| 76 | theTriggerFullCmd->SetDefaultValue(1); |
---|
| 77 | theTriggerFullCmd->SetParameterName("nr",true); |
---|
| 78 | theTriggerFullCmd->SetRange("nr>=-1"); |
---|
| 79 | theTriggerFullCmd->AvailableForStates(G4State_Idle); |
---|
| 80 | |
---|
| 81 | theDeltaCmd = new G4UIcmdWithADoubleAndUnit("/olap/delta",this); |
---|
| 82 | theDeltaCmd->SetGuidance("set boundary tolerance for overlaps in units of length"); |
---|
[1342] | 83 | theDeltaCmd->SetDefaultValue(delta); |
---|
[807] | 84 | theDeltaCmd->SetParameterName("delta",true); |
---|
| 85 | theDeltaCmd->SetRange("delta>=1.e-9"); // current G4-accuracy |
---|
| 86 | theDeltaCmd->SetUnitCategory("Length"); |
---|
| 87 | theDeltaCmd->AvailableForStates(G4State_Idle); |
---|
| 88 | |
---|
| 89 | theSetGridCmd = new G4UIcmdWith3Vector("/olap/grid",this); |
---|
| 90 | theSetGridCmd->SetGuidance("set the grid for the generator (x-, y-, z- grid)"); |
---|
| 91 | theSetGridCmd->SetDefaultValue(G4ThreeVector(3.,3.,3.)); |
---|
| 92 | theSetGridCmd->SetParameterName("xGrid", "yGrid", "zGrid", true); |
---|
| 93 | theSetGridCmd->SetRange("xGrid>2. && yGrid >2. && zGrid >2."); |
---|
| 94 | theSetGridCmd->AvailableForStates(G4State_Idle); |
---|
| 95 | |
---|
| 96 | thePwdCmd = new G4UIcmdWithoutParameter("/olap/pwd",this); |
---|
| 97 | thePwdCmd->SetGuidance("show the position in the logical volume hierachy of the new world"); |
---|
| 98 | thePwdCmd->AvailableForStates(G4State_Idle); |
---|
| 99 | |
---|
| 100 | theLsCmd = new G4UIcmdWithoutParameter("/olap/ls",this); |
---|
| 101 | theLsCmd->SetGuidance("lists the logical daughters of the current NewWorld"); |
---|
| 102 | theLsCmd->AvailableForStates(G4State_Idle); |
---|
| 103 | |
---|
| 104 | theListCmd = new G4UIcmdWithAString("/olap/list",this); |
---|
| 105 | theListCmd->SetGuidance("lists all logical volumes which name matches regexp"); |
---|
| 106 | theListCmd->AvailableForStates(G4State_Idle); |
---|
| 107 | |
---|
| 108 | theCdCmd = new G4UIcmdWithAString("/olap/cd",this); |
---|
| 109 | theCdCmd->SetGuidance("change to NewWorld like unix-cd"); |
---|
| 110 | theCdCmd->AvailableForStates(G4State_Idle); |
---|
| 111 | |
---|
| 112 | theGotoWorldCmd = new G4UIcmdWithAString("/olap/goto",this); |
---|
| 113 | theGotoWorldCmd->SetGuidance("setting first logical vol matching regexp as NewWorld"); |
---|
| 114 | theGotoWorldCmd->AvailableForStates(G4State_Idle); |
---|
| 115 | |
---|
| 116 | theLogCmd = new G4UIcmdWithAString("/olap/log", this); |
---|
| 117 | theLogCmd->SetGuidance("puts output into a single logfile"); |
---|
| 118 | theLogCmd->SetDefaultValue("olap.log"); |
---|
| 119 | theLogCmd->SetParameterName("name of logfile",true); |
---|
| 120 | theLogCmd->AvailableForStates(G4State_Idle); |
---|
| 121 | |
---|
| 122 | theLogByVolumeCmd = new G4UIcmdWithAString("/olap/logByVolume", this); |
---|
| 123 | theLogByVolumeCmd->SetGuidance("puts output into a logfile for each volume"); |
---|
| 124 | theLogByVolumeCmd->SetDefaultValue(""); |
---|
| 125 | theLogByVolumeCmd->SetParameterName("path of logfile(s)",true); |
---|
| 126 | theLogByVolumeCmd->AvailableForStates(G4State_Idle); |
---|
| 127 | |
---|
| 128 | } |
---|
| 129 | |
---|
| 130 | |
---|
| 131 | OlapManagerMessenger::~OlapManagerMessenger() |
---|
| 132 | { |
---|
| 133 | delete theTriggerCmd; |
---|
| 134 | delete theTriggerFullCmd; |
---|
| 135 | delete theWhereIsCmd; |
---|
| 136 | delete theListCmd; |
---|
| 137 | delete theSetGridCmd; |
---|
| 138 | delete theGotoWorldCmd; |
---|
| 139 | delete theCdCmd; |
---|
| 140 | delete thePwdCmd; |
---|
| 141 | delete theLsCmd; |
---|
| 142 | delete theDeltaCmd; |
---|
| 143 | delete theOlapDir; |
---|
| 144 | delete theLogCmd; |
---|
| 145 | delete theLogByVolumeCmd; |
---|
| 146 | delete theRotationCmd; |
---|
| 147 | } |
---|
| 148 | |
---|
| 149 | |
---|
| 150 | void OlapManagerMessenger::SetNewValue(G4UIcommand* aCmd, G4String aVal) |
---|
| 151 | { |
---|
| 152 | |
---|
| 153 | if( aCmd == theTriggerCmd ) |
---|
| 154 | { theManager->TriggerRun();} |
---|
| 155 | |
---|
| 156 | if( aCmd == theTriggerFullCmd ) |
---|
| 157 | { theManager->TriggerFull(theTriggerFullCmd->GetNewIntValue(aVal)); } |
---|
| 158 | |
---|
| 159 | if( aCmd == theLsCmd ) |
---|
| 160 | { theManager->LsLV(); } |
---|
| 161 | |
---|
| 162 | if( aCmd == thePwdCmd ) |
---|
| 163 | { theManager->PwdLV(); } |
---|
| 164 | |
---|
| 165 | if( aCmd == theListCmd ) |
---|
| 166 | { theManager->ListLV(aVal); } |
---|
| 167 | |
---|
| 168 | if( aCmd == theGotoWorldCmd ) |
---|
| 169 | { theManager->GotoLV(aVal); } |
---|
| 170 | |
---|
| 171 | if( aCmd == theCdCmd ) |
---|
| 172 | { theManager->ChangeLV(aVal); } |
---|
| 173 | |
---|
| 174 | if ( aCmd == theSetGridCmd ) |
---|
| 175 | { G4ThreeVector vec = theSetGridCmd->GetNew3VectorValue(aVal); |
---|
| 176 | theManager->SetGrid(G4int(vec[0]),G4int(vec[1]),G4int(vec[2])); |
---|
| 177 | } |
---|
| 178 | |
---|
| 179 | if ( aCmd == theDeltaCmd ) |
---|
| 180 | { |
---|
| 181 | theManager->SetDelta(theDeltaCmd->GetNewDoubleValue(aVal)); |
---|
| 182 | G4cout << "boundary tolerance set to " << theManager->Delta()/mm << "mm." << G4endl; |
---|
| 183 | } |
---|
| 184 | if ( aCmd == theLogCmd ) |
---|
| 185 | { theLogManager->Logging(aVal); } |
---|
| 186 | |
---|
| 187 | if (aCmd == theLogByVolumeCmd ) |
---|
| 188 | { theLogManager->LogByVolume(aVal); } |
---|
| 189 | |
---|
| 190 | if (aCmd == theRotationCmd ) |
---|
| 191 | { G4ThreeVector vec = theRotationCmd->GetNew3VectorValue(aVal); |
---|
| 192 | theManager->SetRotation(vec[0],vec[1],vec[2]); } |
---|
| 193 | } |
---|