Import Geant4 9.0.0 source tree

This commit is contained in:
Gabriele Cosmo
2016-06-09 15:16:48 +02:00
parent 75c7fd177d
commit a8e9364cea
6592 changed files with 84274 additions and 69292 deletions
+4 -1
View File
@@ -1,4 +1,4 @@
$Id: History,v 1.29 2007/01/05 17:01:16 allison Exp $
$Id: History,v 1.30 2007/03/27 15:11:43 allison Exp $
-------------------------------------------------------------------
=========================================================
@@ -24,6 +24,9 @@ committal in the CVS repository !
History file for visualization/Tree sub-category
------------------------------------------------
25th March 2007 John Allison (vistree-V08-02-01)
- Removed GAGTree.
5th January 2007 John Allison (vistree-V08-02-00)
- Bug fix: Format of total mass.
@@ -25,7 +25,7 @@
//
//
// $Id: G4ASCIITree.hh,v 1.7 2006/06/29 21:24:27 gunter Exp $
// GEANT4 tag $Name: geant4-08-02 $
// GEANT4 tag $Name: geant4-09-00 $
//
//
// John Allison 5th April 2001
@@ -25,7 +25,7 @@
//
//
// $Id: G4ASCIITreeMessenger.hh,v 1.7 2006/06/29 21:24:29 gunter Exp $
// GEANT4 tag $Name: geant4-08-02 $
// GEANT4 tag $Name: geant4-09-00 $
//
//
// John Allison 5th April 2001
@@ -25,7 +25,7 @@
//
//
// $Id: G4ASCIITreeSceneHandler.hh,v 1.17 2006/12/11 21:14:45 allison Exp $
// GEANT4 tag $Name: geant4-08-03 $
// GEANT4 tag $Name: geant4-09-00 $
//
//
// John Allison 5th April 2001
@@ -25,7 +25,7 @@
//
//
// $Id: G4ASCIITreeViewer.hh,v 1.5 2006/06/29 21:24:33 gunter Exp $
// GEANT4 tag $Name: geant4-08-02 $
// GEANT4 tag $Name: geant4-09-00 $
//
//
// John Allison 5th April 2001
@@ -1,50 +0,0 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
// Satoshi Tanaka 31 May 2001
// A graphics system to dump geometry hierarchy to GAG.
//
#ifndef G4GAGTREE_HH
#define G4GAGTREE_HH
#include "G4VTree.hh"
class G4GAGTreeMessenger;
class G4GAGTree: public G4VTree {
public:
G4GAGTree ();
virtual ~G4GAGTree ();
G4VSceneHandler* CreateSceneHandler (const G4String& name = "");
G4VViewer* CreateViewer (G4VSceneHandler&, const G4String& name = "");
void SetVerbosity(G4int verbosity) {fVerbosity = verbosity;}
G4int GetVerbosity() const {return fVerbosity;}
protected:
G4int fVerbosity;
G4GAGTreeMessenger* fpMessenger;
};
#endif
@@ -1,395 +0,0 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//////////////////////////////////
///// G4GAGTreeList.hh ///////
///// Satoshi Tanaka ///////
//////////////////////////////////
#if !defined G4GAGTREELIST_HH
#define G4GAGTREELIST_HH
#include <iostream>
#include "globals.hh"
/////////////////////////////////
///// class G4GAGTreeNode /////
/////////////////////////////////
template <class Type> class G4GAGTreeNode {
public:
Type item ; // item
G4GAGTreeNode<Type>* down ; // address of neighboring node (downward)
G4GAGTreeNode<Type>* up ; // address of neighboring node (upward)
} ; // G4GAGTreeNode
///////////////////////////////////////
///// class G4GAGTreeList<Type> /////
///////////////////////////////////////
template <class Type> class G4GAGTreeList {
private:
//----- constants
enum { ERROR = 0, NORMAL = 1 };
G4GAGTreeNode<Type>* head ; // head of list
G4GAGTreeNode<Type>* tail ; // tail of list
G4GAGTreeNode<Type>* cur ; // current node
//----- number of items in list
int nItem ; // number of stored items
public:
//----- Constructor
//..... Initialize head and current node of list to NULL.
//..... Set name of list ( default name is "no_name")
G4GAGTreeList( const char* name_ = "no_name" ) ;
//----- Destructor
~G4GAGTreeList() { this->Clear() ; }
//----- Add an item to list and make it a new head.
//..... Return: NORMAL = 1 (normal)
//..... ERROOR = 0 (error)
int AddItem( const Type& item );
//----- Delete an item of current node
//..... Return: NORMAL = 1 if deleted.
//..... ERROR = 0 if not deleted ( cur = NULL or nItem = 1).
//..... In case of NORMAL, cur moves to cur->down.
int DeleteItem() ;
//----- Set current node to the head of list.
void ToHead() { cur = head ; }
//----- Set current node to the tail of list.
void ToTail() { cur = tail ; }
//----- Increment current node to downward direction by 1 step
//..... Return: NORMAL = 1 (normal)
//..... ERROOR = 0 (if cur = NULL)
int Downward();
//----- Increment current node to upward direction by 1 step
//..... Return: NORMAL = 1 (normal)
//..... ERROOR = 0 (if cur = NULL)
int Upward();
//----- Get current item
//..... The obtained item is returned to the argument.
//..... Return: NORMAL = 1 (normal)
//..... ERROR = 0 (error)
int GetItem( Type& item );
//----- Get position of current node counting from tail
//..... Return: 0, 1, 2, ..... , nItem -1
//..... If cur == tail, 0 is returned.
//..... If cur == NULL, -1 is returned.
//..... Current node is not modified after calling this function
int WhereIsCurrentNode() ;
//----- Check if current node is NULL
//..... Return 1: if cur == NULL
//..... 0: if cur != NULL
int IsCurrentNodeNull() { return ( cur == NULL ) ; }
//----- Get number of stored items
int GetNumItem() const { return nItem ; }
//----- Get number of stored items minus one
//..... Note: If the list is empty, -1 is returned
int GetHeadIndex() const { return (nItem - 1) ; }
//----- delete all items
//..... All nodes are deleted.
//..... head, tail, cur are reset to NULL.
void Clear();
//----- For use of STACK: Push
//..... Added new node becomes a new current node.
//..... Return: NORMAL = 1 (normal)
//..... ERROOR = 0 (error)
//..... Added new node becomes a new current node.
int Push( const Type& item ) { return AddItem( item ) ; }
//----- For use of STACK
//..... Get head->item and then delete it.
//..... The obtained item is returned to the argument.
//..... Return: NORMAL = 1 (normal)
//..... ERROR = 0 (error)
//..... In case of NORMAL, cur moves to cur->down.
int Pop( Type& item ) ;
//----- For use of STACK: pop
void Pop( void ) { this->ToHead(); this->DeleteItem(); }
} ; // class G4GAGTreeList
////////////////////////////////////////////////////////////////
///// Inline Member functions of class "G4GAGTreeList" ///////
////////////////////////////////////////////////////////////////
//-----
template <class Type>
inline G4GAGTreeList<Type>::G4GAGTreeList( const char* )
{
cur = head = tail = NULL ;
nItem = 0 ;
} // G4GAGTreeList<Type>::G4GAGTreeList()
//-----
template <class Type>
inline int G4GAGTreeList<Type>::AddItem( const Type& item )
{
//----- local
int status ;
G4GAGTreeNode<Type>* old_head = head ; // store old head
//----- allocate dynamical memory for added node
head = new G4GAGTreeNode<Type> ;
if( !head ){
//----- failed to allocate dynamical memory
status = ERROR ;
} else {
//----- increment number of stored items
nItem++ ;
//----- set tail of list in the first push
if( nItem == 1 ) { tail = head ; }
//----- set current node to added node
cur = head ;
//----- add an item
head->item = item ; // add an item
//----- make links
//..... 2 1
//..... NULL <----- head -----> old_head
//..... <-----
//..... 3
head->down = old_head ; // make link 1
head->up = NULL ; // make link 2
if( old_head != NULL ) {
old_head->up = head ; // make link 3
}
//----- set status
status = NORMAL ;
} // if--else
//----- return status
return status ;
}
//-----
template <class Type>
inline int G4GAGTreeList<Type>::DeleteItem()
{
//----- local variables
int status ;
G4GAGTreeNode<Type>* cur_old ; // backup of current node
//----- ERROR if current node does not have an item
//...... or no item exist in list
if ( cur == NULL || nItem == 0 ) {
status = ERROR ;
} else {
//----- Below cur != NULL, nItem >= 1,
//..... head != NULL, and tail != NULL
//----- make backup of current node
cur_old = cur ;
//----- remake links
if( cur == head ) {
cur = cur->down ;
head = cur ;
if ( head != NULL ) {
head->up = NULL ;
delete cur_old ; nItem-- ;
} else {
//----- In case that head = NULL:
//..... This case occurs in case that
//..... head = tail i.e. nItem = 1.
//..... At the end of this function,
//..... head = tail = cur = NULL, nItem = 0
tail = NULL ;
delete cur_old ;
nItem = 0 ;
// nItem-- ;
}
} else if( cur == tail ){
//----- Here, cur != head && cur == tail.
//..... So, tail != head.
//..... It means, at least 2 items exist in the list.
//..... So, tail->up is not NULL.
tail = tail->up ;
tail->down = NULL;
cur = NULL ;
delete cur_old ; nItem-- ;
} else { //----- In case that cur is neither head or tail.
//..... head --- .... --- cur ---... --- tail.
(cur->up)->down = cur->down ;
(cur->down)->up = cur->up ;
cur = cur->down ;
delete cur_old ; nItem-- ;
} // if-else_if-else
status = NORMAL;
} // if--else
//----- return (successfully deleted)
return status ;
}
//-----
template <class Type>
inline int G4GAGTreeList<Type>::Downward()
{
int status ;
if( cur == NULL ) {
status = ERROR ; // do nothing
} else {
cur = cur->down ; // move dawnward
status = NORMAL ;
}
return status ;
}
//-----
template <class Type>
inline int G4GAGTreeList<Type>::Upward()
{
int status ;
if( cur == NULL ) {
status = ERROR ; // do nothing
} else {
cur = cur->up ; // move upward
status = NORMAL ;
}
return status ;
}
//-----
template <class Type>
inline int G4GAGTreeList<Type>::GetItem( Type& item )
{
//----- return value
int state ;
//----- get an item of current node
if ( cur == NULL ) {
state = ERROR ;
} else {
state = NORMAL ;
item = cur->item ;
}
//----- return
return state ;
}
//-----
template <class Type>
inline int G4GAGTreeList<Type>::WhereIsCurrentNode()
{
G4GAGTreeNode<Type>* tmp = cur ;// copy current node
int n = -1 ; // counter
//----- count how many steps there are until tail.
while( tmp != NULL ) { n++ ; tmp = tmp->down ;}
//----- return steps
return n ;
}
//-----
template <class Type>
inline void G4GAGTreeList<Type>::Clear()
{
//----- delete items
cur = head ;
while( cur != NULL )
{
G4GAGTreeNode<Type>* tmp = cur ;
cur = cur->down ;
delete tmp ; // destructor called
}
//----- reset head and current node
cur = head = tail = NULL ;
//----- reset number of stored items
nItem = 0 ;
}
//----- Pop()
template <class Type>
inline int G4GAGTreeList<Type>::Pop( Type& item )
{
//----- local variables
int status ;
//----- get head->item
ToHead() ;
status = GetItem( item ) ;
//----- delete head->item if it exists
//..... and make cur move to cur->down
if( status ) { DeleteItem(); }
//----- RETURN
return status ;
}
//////////////
#endif
////////////// end of list.h
@@ -1,52 +0,0 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
// Satoshi Tanaka 31th May 2001
//
// A messenger for G4GAGTree driver.
#ifndef G4GAGTREEMESSENGER_HH
#define G4GAGTREEMESSENGER_HH
#include "G4UImessenger.hh"
class G4UIcommand;
class G4UIcmdWithAnInteger;
class G4GAGTree;
class G4GAGTreeMessenger: public G4UImessenger {
public:
G4GAGTreeMessenger(G4GAGTree*);
virtual ~G4GAGTreeMessenger();
G4String GetCurrentValue (G4UIcommand* command);
void SetNewValue (G4UIcommand* command, G4String newValue);
private:
G4GAGTree* fpGAGTree;
G4UIcommand* fpDirectory;
G4UIcmdWithAnInteger* fpCommandVerbose;
};
#endif
@@ -1,110 +0,0 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
// Satoshi Tanaka 31th April 2001
// A scene handler to dump geometry hierarchy GAG
#ifndef G4GAGTREESCENEHANDLER_HH
#define G4GAGTREESCENEHANDLER_HH
#include "G4VTreeSceneHandler.hh"
#include <set>
class G4VPhysicalVolume;
/////////////////////////////
#include "G4GAGTreeList.hh"
class G4String ;
/////////////////////////////
///////////////////////////////////////////////////////////////////
// The algorithm of re-generating a geometry tree
// of physical volumes (PV):
//
// In each addition of the N-th PV with a given depth D, P(N;D) to
// the tree, we use the following rules:
//
// R1. We can add P(N;D) to one of the previously-generated PV nodes,
// P(N_mother <N; D_mother), if D_mother = D - 1.
//
// R2. The mother PV node P(N_mother, D_mother) of P(N,D)
// is searched in the direction to the root node
// (the world volume), starting from P(N-1;*).
//
// R3. The first PV node found in R2 is adopted as the mother.
//
// This rule can be easily implemented with a stack.
//
///////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
// The output to G4cout becomes, for example,
//
// @@DTREEBegin
// /WORLD.0/PV1.1
// /WORLD.0/PV1.1/PV2.2
// /WORLD.0/PV1.1/PV3.3
// /WORLD.0/PV1.1/PV3.3/PV4.4
// /WORLD.0/PV5.5
// ...
// @@DTREEBegin
//
// where ".number" is the index label added by the
// G4GAGTree driver.
///////////////////////////////////////////////////////////////////
class G4GAGTreeSceneHandler: public G4VTreeSceneHandler {
public:
G4GAGTreeSceneHandler(G4VGraphicsSystem& system,
const G4String& name);
virtual ~G4GAGTreeSceneHandler();
void BeginModeling();
void EndModeling();
protected:
void RequestPrimitives(const G4VSolid&);
// Overrides G4VScenehandler::RequestPrimitives and implements dump
// of the geometry hierarchy.
std::set<G4LogicalVolume*,std::less<G4LogicalVolume*> > fLVSet;
typedef
std::set<G4LogicalVolume*,std::less<G4LogicalVolume*> >::iterator
LVSetIterator;
std::set<G4VPhysicalVolume*,std::less<G4VPhysicalVolume*> > fReplicaSet;
typedef
std::set<G4VPhysicalVolume*,std::less<G4VPhysicalVolume*> >::iterator
ReplicaSetIterator;
/////////////////////////////
void ClearPVList(void);
void InitializePVList(void);
G4GAGTreeList<G4String> fPVNameList ;
G4int fPrevDepth ;
G4String fPrevAbsPVName ;
G4int fPVCounter ;
/////////////////////////////
};
#endif
@@ -1,40 +0,0 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
// Satoshi Tanaka 31th May 2001
// A dummy viewer for GAGTreeSceneHandler.
#ifndef G4GAGTREEVIEWER_HH
#define G4GAGTREEVIEWER_HH
#include "G4VTreeViewer.hh"
class G4GAGTreeViewer: public G4VTreeViewer {
public:
G4GAGTreeViewer(G4VSceneHandler&,const G4String& name);
virtual ~G4GAGTreeViewer();
};
#endif
+1 -1
View File
@@ -25,7 +25,7 @@
//
//
// $Id: G4VTree.hh,v 1.5 2006/06/29 21:24:45 gunter Exp $
// GEANT4 tag $Name: geant4-08-02 $
// GEANT4 tag $Name: geant4-09-00 $
//
//
// John Allison 5th April 2001
@@ -25,7 +25,7 @@
//
//
// $Id: G4VTreeSceneHandler.hh,v 1.18 2006/06/29 21:24:47 gunter Exp $
// GEANT4 tag $Name: geant4-08-02 $
// GEANT4 tag $Name: geant4-09-00 $
//
//
// John Allison 5th April 2001
@@ -25,7 +25,7 @@
//
//
// $Id: G4VTreeSceneHandler.icc,v 1.8 2006/06/29 21:24:49 gunter Exp $
// GEANT4 tag $Name: geant4-08-02 $
// GEANT4 tag $Name: geant4-09-00 $
//
//
// John Allison 18th May 2000
@@ -25,7 +25,7 @@
//
//
// $Id: G4VTreeViewer.hh,v 1.5 2006/06/29 21:24:51 gunter Exp $
// GEANT4 tag $Name: geant4-08-02 $
// GEANT4 tag $Name: geant4-09-00 $
//
//
// John Allison 5th April 2001
+1 -1
View File
@@ -25,7 +25,7 @@
//
//
// $Id: G4ASCIITree.cc,v 1.12 2007/01/05 16:59:43 allison Exp $
// GEANT4 tag $Name: geant4-08-03 $
// GEANT4 tag $Name: geant4-09-00 $
//
//
// John Allison 5th April 2001
@@ -25,7 +25,7 @@
//
//
// $Id: G4ASCIITreeMessenger.cc,v 1.19 2007/01/05 16:59:43 allison Exp $
// GEANT4 tag $Name: geant4-08-03 $
// GEANT4 tag $Name: geant4-09-00 $
//
//
// John Allison 5th April 2001
@@ -25,7 +25,7 @@
//
//
// $Id: G4ASCIITreeSceneHandler.cc,v 1.34 2007/01/05 17:00:27 allison Exp $
// GEANT4 tag $Name: geant4-08-03 $
// GEANT4 tag $Name: geant4-09-00 $
//
//
// John Allison 5th April 2001
@@ -25,7 +25,7 @@
//
//
// $Id: G4ASCIITreeViewer.cc,v 1.8 2006/06/29 21:24:59 gunter Exp $
// GEANT4 tag $Name: geant4-08-02 $
// GEANT4 tag $Name: geant4-09-00 $
#include "G4ASCIITreeViewer.hh"
@@ -1,71 +0,0 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
// Satoshi Tanaka 31th May 2001
// A graphics system to dump geometry hierarchy to GAG.
#include "G4GAGTree.hh"
#include "G4GAGTreeSceneHandler.hh"
#include "G4GAGTreeViewer.hh"
#include "G4GAGTreeMessenger.hh"
G4GAGTree::G4GAGTree ():
G4VTree ("GAGTree",
"GAGTree",
"A graphics system to dump geometry hierarchy"
"\n to GAG.",
G4VGraphicsSystem::nonEuclidian) {
fpMessenger = new G4GAGTreeMessenger(this);
}
G4GAGTree::~G4GAGTree () {
delete fpMessenger;
}
G4VSceneHandler* G4GAGTree::CreateSceneHandler (const G4String& name) {
G4VSceneHandler* pScene = new G4GAGTreeSceneHandler (*this, name);
return pScene;
}
G4VViewer* G4GAGTree::CreateViewer (G4VSceneHandler& scene,
const G4String& name) {
G4VViewer* pView =
new G4GAGTreeViewer ((G4GAGTreeSceneHandler&) scene, name);
if (pView) {
if (pView -> GetViewId () < 0) {
G4cout << "G4GAGTree::CreateViewer: ERROR flagged by negative"
" view id in G4GAGTreeViewer creation."
"\n Destroying view and returning null pointer."
<< G4endl;
delete pView;
pView = 0;
}
}
else {
G4cout << "G4GAGTree::CreateViewer: ERROR: null pointer on"
" new G4GAGTreeViewer." << G4endl;
}
return pView;
}
@@ -1,67 +0,0 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
// Satoshi Tanaka 31th May 2001
//
// A messenger for G4GAGTree driver.
#include "G4GAGTreeMessenger.hh"
#include "G4GAGTree.hh"
#include "G4UIcommand.hh"
#include "G4UIdirectory.hh"
#include "G4UIcmdWithAnInteger.hh"
G4GAGTreeMessenger::G4GAGTreeMessenger
(G4GAGTree* GAGTree):
fpGAGTree(GAGTree) {
G4bool omitable, currentAsDefault;
fpDirectory = new G4UIdirectory ("/vis/GAGTree/");
fpDirectory -> SetGuidance ("Commands for GAGTree control.");
fpCommandVerbose = new G4UIcmdWithAnInteger ("/vis/GAGTree/verbose", this);
fpCommandVerbose -> SetGuidance ("/vis/GAGTree/verbose [<verbosity>]");
fpCommandVerbose -> SetGuidance
("0 (default) mimimum - 10 maximum printing.");
fpCommandVerbose -> SetParameterName ("verbosity",
omitable = true,
currentAsDefault = true);
}
G4GAGTreeMessenger::~G4GAGTreeMessenger() {
delete fpCommandVerbose;
delete fpDirectory;
}
G4String G4GAGTreeMessenger::GetCurrentValue(G4UIcommand*) {
return "0";
}
void G4GAGTreeMessenger::SetNewValue(G4UIcommand*, G4String newValue) {
fpGAGTree->SetVerbosity
(fpCommandVerbose->GetNewIntValue(newValue));
G4cout << "G4GAGTree verbosity now "
<< fpGAGTree->GetVerbosity()
<< G4endl;
}
@@ -1,298 +0,0 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
// Satoshi Tanaka 31th May 2001
// A scene handler to dump geometry hierarchy to GAG.
#include "G4Types.hh"
#include <sstream>
#include "G4GAGTreeSceneHandler.hh"
#include "G4GAGTree.hh"
#include "G4VSolid.hh"
#include "G4PhysicalVolumeModel.hh"
#include "G4VPhysicalVolume.hh"
#include "G4LogicalVolume.hh"
#include "G4VPVParameterisation.hh"
// #define DEBUG_GAG_TREE
const G4String GAG_TREE_WORLD_VOLUME_NAME ( "WORLD" );
const G4String GAG_TREE_BEGIN_DTREE ( "@@DTREEBegin" );
const G4String GAG_TREE_END_DTREE ( "@@DTREEEnd" );
//-----
G4GAGTreeSceneHandler::G4GAGTreeSceneHandler(G4VGraphicsSystem& system,
const G4String& name):
G4VTreeSceneHandler(system, name)
{
ClearPVList();
}
//-----
G4GAGTreeSceneHandler::~G4GAGTreeSceneHandler ()
{
ClearPVList();
}
//-----
void G4GAGTreeSceneHandler::ClearPVList(void)
{
fPVNameList.Clear() ;
fPrevDepth = 0 ;
fPrevAbsPVName = "";
fPVCounter = 0 ;
}
//-----
void G4GAGTreeSceneHandler::InitializePVList(void)
{
fPVNameList.Clear();
fPVNameList.Push( GAG_TREE_WORLD_VOLUME_NAME );
fPrevDepth = 0 ;
fPrevAbsPVName = "";
fPVCounter = 0 ;
}
//-----
void G4GAGTreeSceneHandler::BeginModeling ()
{
G4VTreeSceneHandler::BeginModeling ();
// Initialize the stack the the tree generation
InitializePVList();
// Get the current verbosity level
const G4GAGTree* pSystem = (G4GAGTree*)GetGraphicsSystem();
const G4int verbosity = pSystem->GetVerbosity();
// Beginning of the tree output
G4cout << "\nG4GAGTreeSceneHandler::BeginModeling:"
"\n set verbosity with \"/vis/GAGTree/verbose <verbosity>\":"
"\n < 10: - does not print daughters of repeated placements."
"\n - does not repeat replicas."
"\n >= 10: prints all physical volumes."
"\n FORMAT: PV_name.copy_no.index"
"\n For level of detail add:"
"\n >= 0: prints physical volume name and copy number."
"\n FORMAT: PV_name.copy_no.index"
"\n >= 1: prints logical volume name."
"\n FORMAT: PV_name.copy_no.LV_name.index"
"\n >= 2: prints solid name and type."
"\n FORMAT: PV_name.copy_no.LV_name.solid_name.solid_type.index"
"\n Note: all culling, if any, is switched off so all volumes are seen."
"\n Now printing with verbosity " << verbosity << G4endl;
// Declare to start GAG tree
G4cout << GAG_TREE_BEGIN_DTREE << G4endl;
}
void G4GAGTreeSceneHandler::EndModeling ()
{
// Dump the last PV node
if( fPrevAbsPVName != "" ) { G4cout << fPrevAbsPVName << G4endl; }
// Declare to end GAG tree
G4cout << GAG_TREE_END_DTREE << G4endl;
G4cout << "G4GAGTreeSceneHandler::EndModeling" << G4endl;
// Clear the sets
fLVSet.clear();
fReplicaSet.clear();
// Clear the stack for the tree generation
ClearPVList();
G4VTreeSceneHandler::EndModeling ();
}
void G4GAGTreeSceneHandler::RequestPrimitives (const G4VSolid&)
{
// Protection if solid drawn not from physical volume tree...(JA)
G4PhysicalVolumeModel* pPVModel =
dynamic_cast<G4PhysicalVolumeModel*>(fpModel);
if (!pPVModel) return;
G4VPhysicalVolume* pCurrentPV = pPVModel->GetCurrentPV();
G4LogicalVolume* pCurrentLV = pPVModel->GetCurrentLV();
G4int currentDepth = pPVModel->GetCurrentDepth();
//////////////////////////////
G4String cur_abs_pv_name ;
G4String pv_name_tmp ;
G4String cur_pv_name ( pCurrentPV->GetName() ) ;
//////////////////////////////
const G4GAGTree* pSystem = (G4GAGTree*)GetGraphicsSystem();
const G4int verbosity = pSystem->GetVerbosity();
const G4int detail = verbosity % 10;
if (verbosity < 10 && fReplicaSet.find(pCurrentPV) != fReplicaSet.end()) {
// Ignore if an already treated replica.
pPVModel->CurtailDescent();
return;
}
///////////////////////////////////////////////////////////
// Add the extension ".details.index" to the current PV node
// Step 1: Initialize the extension
std::ostringstream ost;
// Step 2: Generate the extension
// copy number
ost << "." << pCurrentPV->GetCopyNo() ;
if (detail >= 1) {
// LV name
ost << "." << pCurrentLV->GetName() ;
}
if (detail >= 2) {
// Solid info
ost << "." << pCurrentLV->GetSolid()->GetName();
ost << "." << pCurrentLV->GetSolid()->GetEntityType() ;
}
// Tree index (0 for the world)
ost << "." << fPVCounter;
// Step 3: Add the extention to the current PV name
cur_pv_name += ost.str() ;
// End of adding extension
// Search a mother PV node for the current PV
// in the direction to the root node.
// depth_mother = depth_current - 1
if( currentDepth > fPrevDepth )
{
// Do nothing (The mother is the previous PV node)
} else {
while (1)
{
// Delete the head item of the list
fPVNameList.Pop();
// Is the right mother at the head of the list?
// Note: The mother of the world has depth -1.
// It happens when the current node is the world volume,
// and so the list becomes empty with the popping above.
G4int trial_mother_depth = fPVNameList.GetHeadIndex() ;
if ( currentDepth > trial_mother_depth ) break ;
}
} // if-else
// Add the curent PV to the tree as a new node/leaf
fPVNameList.Push( cur_pv_name );
// Make the absolute path name
fPVNameList.ToTail() ;
while ( fPVNameList.GetItem ( pv_name_tmp ) ) {
cur_abs_pv_name += "/" ;
cur_abs_pv_name += pv_name_tmp ;
fPVNameList.Upward();
}
// Add "/" to the PREVIOUS PV node name if it is not a leaf.
if( fPrevAbsPVName != "" )
{
// Add "/"
if( currentDepth > fPrevDepth ) {fPrevAbsPVName += "/" ;}
}
// Print the PREVIOUS node after node/leaf distiction
// is made clear by reading the current node.
if( fPrevAbsPVName != "" ) { G4cout << fPrevAbsPVName ; }
///////////////////////////////////////////////////////////
if (pCurrentPV->IsReplicated()) {
fReplicaSet.insert(pCurrentPV); // Record new replica volume.
if (verbosity < 10) {
// Add printing for replicas (when replicas are ignored)...
EAxis axis;
G4int nReplicas;
G4double width;
G4double offset;
G4bool consuming;
pCurrentPV->GetReplicationData(axis,nReplicas,width,offset,consuming);
G4VPVParameterisation* pP = pCurrentPV->GetParameterisation();
#if defined DEBUG_GAG_TREE
G4cout << "_(" << nReplicas;
#endif
if (pP) {
#if defined DEBUG_GAG_TREE
G4cout << " parametrised volumes)";
#endif
}
else {
#if defined DEBUG_GAG_TREE
G4cout << " replicas)";
#endif
}
}
}
else {
if (fLVSet.find(pCurrentLV) != fLVSet.end()) {
if (verbosity < 10) {
// Add printing for repeated placement...
#if defined DEBUG_GAG_TREE
G4cout << " (repeated placement)";
#endif
// Ignore if an already treated logical volume.
pPVModel->CurtailDescent();
G4cout << G4endl;
return;
}
}
}
if (fLVSet.find(pCurrentLV) == fLVSet.end()) {
fLVSet.insert(pCurrentLV); // Record new logical volume.
}
////////////////////////
// End of printing
if( fPrevAbsPVName != "" ) { G4cout << G4endl;}
// Prepare for the next call, i.e. the next PV.
fPrevDepth = currentDepth ;
fPrevAbsPVName = cur_abs_pv_name ;
fPVCounter++ ;
////////////////////////
return;
}
@@ -1,39 +0,0 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
// Satoshi Tanaka 31th May 2001
// A dummy viewer for GAGTreeSceneHandler.
#include "G4GAGTreeViewer.hh"
G4GAGTreeViewer::G4GAGTreeViewer
(G4VSceneHandler& sceneHandler, const G4String& name):
G4VTreeViewer(sceneHandler, name) {
// Make changes to view parameters for GAGTree...
fVP.SetCulling(false);
fDefaultVP.SetCulling(false);
}
G4GAGTreeViewer::~G4GAGTreeViewer() {}
+1 -1
View File
@@ -25,7 +25,7 @@
//
//
// $Id: G4VTree.cc,v 1.5 2006/06/29 21:25:09 gunter Exp $
// GEANT4 tag $Name: geant4-08-02 $
// GEANT4 tag $Name: geant4-09-00 $
//
//
// John Allison 5th April 2001
@@ -25,7 +25,7 @@
//
//
// $Id: G4VTreeSceneHandler.cc,v 1.14 2006/06/29 21:25:11 gunter Exp $
// GEANT4 tag $Name: geant4-08-02 $
// GEANT4 tag $Name: geant4-09-00 $
//
//
// John Allison 5th April 2001
@@ -25,7 +25,7 @@
//
//
// $Id: G4VTreeViewer.cc,v 1.7 2006/06/29 21:25:13 gunter Exp $
// GEANT4 tag $Name: geant4-08-02 $
// GEANT4 tag $Name: geant4-09-00 $
#include "G4VTreeViewer.hh"