Import Geant4 5.0.0 source tree
This commit is contained in:
@@ -22,7 +22,7 @@
|
||||
//
|
||||
//
|
||||
// $Id: XrayFluoAnalysisManager.cc
|
||||
// GEANT4 tag $Name: xray_fluo-V03-02-00
|
||||
// GEANT4 tag $Name: xray_fluo-V04-01-03
|
||||
//
|
||||
// Author: Elena Guardincerri (Elena.Guardincerri@ge.infn.it)
|
||||
//
|
||||
@@ -31,9 +31,11 @@
|
||||
// 06 Dec 2001 A.Pfeiffer updated for singleton
|
||||
// 30 Nov 2001 Guy Barrand : migrate to AIDA-2.2.
|
||||
// 28 Nov 2001 Elena Guardincerri Created
|
||||
//
|
||||
// 29 Nov 2002 Muigration to AIDA 3.0 (Alfonso.mantero@ge.infn.it)
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
#include <stdlib.h>
|
||||
#include "G4VProcess.hh"
|
||||
#include "g4std/fstream"
|
||||
#include "G4ios.hh"
|
||||
#include "AIDA/IManagedObject.h"
|
||||
@@ -42,6 +44,7 @@
|
||||
#include "AIDA/ITree.h"
|
||||
#include "AIDA/IHistogramFactory.h"
|
||||
#include "AIDA/IHistogram1D.h"
|
||||
#include "AIDA/IHistogram2D.h"
|
||||
#include "AIDA/ITupleFactory.h"
|
||||
#include "AIDA/ITuple.h"
|
||||
|
||||
@@ -55,23 +58,26 @@ XrayFluoAnalysisManager* XrayFluoAnalysisManager::instance = 0;
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
XrayFluoAnalysisManager::XrayFluoAnalysisManager()
|
||||
:analysisFactory(0), tree(0),histogramFactory(0) ,tupleFactory(0)
|
||||
:outputFileName("xrayfluo.hbk"),analysisFactory(0), tree(0),histogramFactory(0)
|
||||
{
|
||||
// pEvent=new XrayFluoEventAction();
|
||||
|
||||
analisysMessenger = new XrayFluoAnalysisMessenger(this);
|
||||
|
||||
// Hooking an AIDA compliant analysis system.
|
||||
analysisFactory = AIDA_createAnalysisFactory();
|
||||
if(analysisFactory) {
|
||||
|
||||
ITreeFactory* treeFactory = analysisFactory->createTreeFactory();
|
||||
AIDA::ITreeFactory* treeFactory = analysisFactory->createTreeFactory();
|
||||
if(treeFactory) {
|
||||
// tree = treeFactory->create(); // Tree in memory.
|
||||
tree = treeFactory->create("XrayFluo.hbk",false,false,"hbook");
|
||||
//porebbe essere qua il memory leak//
|
||||
|
||||
tree = treeFactory->create(outputFileName,"hbook",false,true);
|
||||
|
||||
delete treeFactory; // Will not delete the ITree.
|
||||
histogramFactory = analysisFactory->createHistogramFactory(*tree);
|
||||
tupleFactory = analysisFactory->createTupleFactory(*tree);
|
||||
histogramFactory = analysisFactory->createHistogramFactory(*tree);
|
||||
// tupleFactory = analysisFactory->createTupleFactory(*tree);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -90,32 +96,37 @@ XrayFluoAnalysisManager::XrayFluoAnalysisManager()
|
||||
delete plotterFactory;
|
||||
}
|
||||
*/
|
||||
}
|
||||
}
|
||||
|
||||
G4cout << "XrayFluoAnalysisManager created" << G4endl;
|
||||
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
XrayFluoAnalysisManager::~XrayFluoAnalysisManager()
|
||||
{
|
||||
|
||||
|
||||
|
||||
|
||||
delete histogramFactory;
|
||||
delete histogramFactory;
|
||||
histogramFactory=0;
|
||||
|
||||
delete analysisFactory;
|
||||
analysisFactory = 0;
|
||||
|
||||
delete tupleFactory;
|
||||
tupleFactory=0;
|
||||
// delete tupleFactory;
|
||||
// tupleFactory=0;
|
||||
|
||||
delete instance;
|
||||
|
||||
G4cout << "XrayFluoAnalysisManager delete" << G4endl;
|
||||
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
XrayFluoAnalysisManager* XrayFluoAnalysisManager::getInstance()
|
||||
|
||||
{
|
||||
if (instance == 0) instance = new XrayFluoAnalysisManager;
|
||||
if (instance == 0) {instance = new XrayFluoAnalysisManager;}
|
||||
return instance;
|
||||
}
|
||||
|
||||
@@ -123,49 +134,37 @@ XrayFluoAnalysisManager* XrayFluoAnalysisManager::getInstance()
|
||||
|
||||
void XrayFluoAnalysisManager::book()
|
||||
{
|
||||
|
||||
// Book histograms
|
||||
|
||||
|
||||
// Book histograms
|
||||
IHistogram1D* histo_1 = histogramFactory->create1D
|
||||
("1","Energy Deposit", 100,0.,10.);
|
||||
IHistogram1D* histo_2 = histogramFactory->create1D
|
||||
("2","Gamma born in the sample", 100,0.,10.);
|
||||
IHistogram1D* histo_3 = histogramFactory->create1D
|
||||
("3","Electrons born in the sample", 100,0.,10.);
|
||||
IHistogram1D* histo_4 = histogramFactory->create1D
|
||||
("4","Gammas leaving the sample", 100,0.,10.);
|
||||
IHistogram1D* histo_5 = histogramFactory->create1D
|
||||
("5","Electrons leaving the sample ", 100,0.,10.);
|
||||
IHistogram1D* histo_6 = histogramFactory->create1D
|
||||
("6","Gammas reaching the detector", 100,0.,10.);
|
||||
IHistogram1D* histo_7 = histogramFactory->create1D
|
||||
("7","Spectrum of the incident particles", 100,0.,10.);
|
||||
IHistogram1D* histo_8 = histogramFactory->create1D
|
||||
("8","Protons reaching the detector", 100,0.,10.);
|
||||
IHistogram1D* histo_9 = histogramFactory->create1D
|
||||
("9","Protons leaving the sample", 100,0.,10.);
|
||||
IHistogram1D* histo_10 = histogramFactory->create1D
|
||||
("10","Gammas leaving the sample smeared", 100,0.,10.);
|
||||
|
||||
|
||||
histo_1 = histogramFactory->createHistogram1D("1","Energy Deposit", 100000,0.,10.); //1eV def.
|
||||
histo_2 = histogramFactory->createHistogram1D("2","Gamma born in the sample", 100,0.,10.);
|
||||
histo_3 = histogramFactory->createHistogram1D("3","Electrons born in the sample", 100,0.,10.);
|
||||
histo_4 = histogramFactory->createHistogram1D("4","Gammas leaving the sample", 300,0.,10.);
|
||||
histo_5 = histogramFactory->createHistogram1D("5","Electrons leaving the sample ",200000 ,0.,10.0); // .05 eV def.
|
||||
histo_6 = histogramFactory->createHistogram1D("6","Gammas reaching the detector", 100,0.,10.);
|
||||
histo_7 = histogramFactory->createHistogram1D("7","Spectrum of the incident particles", 100,0.,10.);
|
||||
histo_8 = histogramFactory->createHistogram1D("8","Protons reaching the detector", 100,0.,10.);
|
||||
histo_9 = histogramFactory->createHistogram1D("9","Protons leaving the sample", 100,0.,10.);
|
||||
histo_10 = histogramFactory->createHistogram1D("10","Photon Origin", 4,0.,3.);
|
||||
histo_11 = histogramFactory->createHistogram1D("11","Spectrum from LowEnPhotoELectric", 300,0.,10.);
|
||||
histo_12 = histogramFactory->createHistogram1D("12","Spectrum From the other processes (unknown)", 300,0.,10.);
|
||||
|
||||
|
||||
// Create a tuple :
|
||||
// tuple = tupleFactory->create("XrayFluo","XrayFluo","energy counts");
|
||||
|
||||
// IHistogram2D* histo_20 = histogramFactory->
|
||||
//create2D("20","Phi, Theta",80 ,-3.14,3.14,80,0.,3.14);
|
||||
|
||||
// Create a tuple :
|
||||
// tuple = tupleFactory->create("XrayFluo","XrayFluo","energy counts");
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
void XrayFluoAnalysisManager::finish()
|
||||
{
|
||||
|
||||
if(tree) {tree->commit(); // Write histos and tuple in file.
|
||||
tree->close();}
|
||||
if(tree) {
|
||||
tree->commit(); // Write histos and tuple in file.
|
||||
tree->close();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -173,6 +172,9 @@ void XrayFluoAnalysisManager::finish()
|
||||
|
||||
void XrayFluoAnalysisManager::analyseStepping(const G4Step* aStep)
|
||||
{
|
||||
|
||||
|
||||
/*
|
||||
IHistogram1D* histo_2 =dynamic_cast<IHistogram1D *> ( tree->find("2") );
|
||||
IHistogram1D* histo_3 =dynamic_cast<IHistogram1D *> ( tree->find("3") );
|
||||
IHistogram1D* histo_4 =dynamic_cast<IHistogram1D *> ( tree->find("4") );
|
||||
@@ -180,10 +182,17 @@ void XrayFluoAnalysisManager::analyseStepping(const G4Step* aStep)
|
||||
IHistogram1D* histo_6 =dynamic_cast<IHistogram1D *> ( tree->find("6") );
|
||||
IHistogram1D* histo_8 =dynamic_cast<IHistogram1D *> ( tree->find("8") );
|
||||
IHistogram1D* histo_10 =dynamic_cast<IHistogram1D *> ( tree->find("10") );
|
||||
IHistogram1D* histo_11 =dynamic_cast<IHistogram1D *> ( tree->find("11") );
|
||||
IHistogram1D* histo_12 =dynamic_cast<IHistogram1D *> ( tree->find("12") );
|
||||
//IHistogram2D* histo_20=dynamic_cast<IHistogram2D *> ( tree->find("20") );
|
||||
*/
|
||||
|
||||
G4double gammaAtTheDetPre=0;
|
||||
G4double protonsAtTheDetPre=0;
|
||||
G4double gammaLeavingSample=0;
|
||||
G4double gammaLeavingSampleSmeared=0;
|
||||
//G4double gammaLeavingSamplePhi=0;
|
||||
//G4double gammaLeavingSampleTheta=0;
|
||||
|
||||
G4double eleLeavingSample=0;
|
||||
G4double protonsLeavSam=0;
|
||||
G4double gammaBornInSample=0;
|
||||
@@ -194,20 +203,65 @@ void XrayFluoAnalysisManager::analyseStepping(const G4Step* aStep)
|
||||
{
|
||||
if ((aStep->GetTrack()->GetDynamicParticle()
|
||||
->GetDefinition()-> GetParticleName()) == "gamma" )
|
||||
|
||||
{
|
||||
/*gammaLeavingSampleSmeared =
|
||||
ResponseFunction(aStep->GetPreStepPoint()->GetKineticEnergy());
|
||||
if(histo_10) {
|
||||
histo_10->fill(gammaLeavingSampleSmeared/keV);*/
|
||||
|
||||
gammaLeavingSample =(aStep->GetPreStepPoint()->GetKineticEnergy());
|
||||
|
||||
if(aStep->GetTrack()->GetCreatorProcess()){
|
||||
G4String process = aStep->GetTrack()->GetCreatorProcess()->GetProcessName();
|
||||
// G4cout << "Il processo di origine e' " << process << G4endl;
|
||||
if(histo_10) {
|
||||
histo_10->fill(1.);
|
||||
gammaLeavingSample =
|
||||
(aStep->GetPreStepPoint()->GetKineticEnergy());
|
||||
if(histo_11) {
|
||||
histo_11->fill(gammaLeavingSample/keV);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
//G4cout << "Sembra che non ci sia un processo d'origine" << G4endl;
|
||||
if(histo_10) {
|
||||
histo_10->fill(2.);
|
||||
|
||||
gammaLeavingSample =
|
||||
(aStep->GetPreStepPoint()->GetKineticEnergy());
|
||||
if(histo_12) {
|
||||
histo_12->fill(gammaLeavingSample/keV);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
gammaLeavingSample =
|
||||
(aStep->GetPreStepPoint()->GetKineticEnergy());
|
||||
if(histo_4) {
|
||||
histo_4->fill(gammaLeavingSample/keV);}
|
||||
histo_4->fill(gammaLeavingSample/keV);
|
||||
|
||||
}
|
||||
|
||||
/* gammaLeavingSamplePhi =
|
||||
(aStep->GetPreStepPoint()->GetMomentumDirection().phi());
|
||||
G4cout << "questo e' Phi: " << gammaLeavingSamplePhi << G4endl;
|
||||
gammaLeavingSampleTheta =
|
||||
(aStep->GetPreStepPoint()->GetMomentumDirection().theta());
|
||||
G4cout << "questo e' Theta: " << gammaLeavingSampleTheta << G4endl;
|
||||
if(histo_20) {
|
||||
// G4cout << "histo_20 esiste" << G4endl;
|
||||
histo_20->fill(gammaLeavingSamplePhi,gammaLeavingSampleTheta,1.);
|
||||
} */
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
if(aStep->GetPreStepPoint()->GetPhysicalVolume()->GetName()=="Sample"){
|
||||
|
||||
if(aStep->GetTrack()->GetNextVolume()->GetName() == "World" )
|
||||
@@ -244,7 +298,7 @@ void XrayFluoAnalysisManager::analyseStepping(const G4Step* aStep)
|
||||
{
|
||||
gammaBornInSample = (aStep->GetPreStepPoint()->GetKineticEnergy());
|
||||
if(histo_2) {
|
||||
histo_2->fill(gammaBornInSample);
|
||||
histo_2->fill(gammaBornInSample/keV);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -261,7 +315,7 @@ void XrayFluoAnalysisManager::analyseStepping(const G4Step* aStep)
|
||||
{
|
||||
eleBornInSample = (aStep->GetPreStepPoint()->GetKineticEnergy());
|
||||
if(histo_3) {
|
||||
histo_3->fill(eleBornInSample);
|
||||
histo_3->fill(eleBornInSample/keV);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -281,7 +335,7 @@ void XrayFluoAnalysisManager::analyseStepping(const G4Step* aStep)
|
||||
gammaAtTheDetPre =
|
||||
(aStep->GetPreStepPoint()->GetKineticEnergy());
|
||||
if(histo_6) {
|
||||
histo_6->fill( gammaAtTheDetPre);
|
||||
histo_6->fill( gammaAtTheDetPre/keV);
|
||||
}
|
||||
}
|
||||
else if ((aStep->GetTrack()->GetDynamicParticle()
|
||||
@@ -290,29 +344,29 @@ void XrayFluoAnalysisManager::analyseStepping(const G4Step* aStep)
|
||||
protonsAtTheDetPre =
|
||||
(aStep->GetPreStepPoint()->GetKineticEnergy());
|
||||
if(histo_8) {
|
||||
histo_8->fill( protonsAtTheDetPre);
|
||||
histo_8->fill( protonsAtTheDetPre/keV);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
void XrayFluoAnalysisManager::analyseEnergyDep(G4double energyDep)
|
||||
{
|
||||
IHistogram1D* histo_1 =dynamic_cast<IHistogram1D *> ( tree->find("1") );
|
||||
|
||||
histo_1->fill(energyDep/keV);
|
||||
//histo_1 =dynamic_cast<IHistogram1D *> ( tree->find("1") );
|
||||
|
||||
histo_1->fill(energyDep/keV);
|
||||
|
||||
/*
|
||||
if(tuple) {
|
||||
if(tuple) {
|
||||
tuple->fill(0,energyDep);
|
||||
tuple->fill(1,1);
|
||||
tuple->addRow();
|
||||
}
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
@@ -320,10 +374,27 @@ void XrayFluoAnalysisManager::analyseEnergyDep(G4double energyDep)
|
||||
|
||||
void XrayFluoAnalysisManager::analysePrimaryGenerator(G4double energy)
|
||||
{
|
||||
IHistogram1D* histo_7 =dynamic_cast<IHistogram1D *> ( tree->find("1") );
|
||||
histo_7->fill(energy/keV);
|
||||
|
||||
// qua si fa uso spropositato di memoria -- attenzione!!//
|
||||
//histo_7 =dynamic_cast<IHistogram1D *> ( tree->find("7") );
|
||||
histo_7->fill(energy/keV);
|
||||
}
|
||||
|
||||
void XrayFluoAnalysisManager::SetOutputFileName(G4String newName)
|
||||
{
|
||||
|
||||
outputFileName = newName;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -22,13 +22,14 @@
|
||||
//
|
||||
//
|
||||
// $Id: XrayFluoAnalysisMessenger.cc
|
||||
// GEANT4 tag $Name: xray_fluo-V03-02-00
|
||||
// GEANT4 tag $Name: xray_fluo-V04-01-03
|
||||
//
|
||||
// Author: Elena Guardincerri (Elena.Guardincerri@ge.infn.it)
|
||||
//
|
||||
// History:
|
||||
// -----------
|
||||
// 28 Nov 2001 Elena Guardincerri Created
|
||||
// 29 Nov 2002 minor upgrade (Alfonso.mantero@ge.infn.it)
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
|
||||
@@ -42,11 +43,19 @@
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
XrayFluoAnalysisMessenger::XrayFluoAnalysisMessenger(XrayFluoAnalysisManager* analysisManager)
|
||||
:XrayFluoAnalysis(analysisManager)
|
||||
:xrayFluoAnalysis(analysisManager)
|
||||
|
||||
{
|
||||
XrayFluoAnalysisDir = new G4UIdirectory("/analysis/");
|
||||
XrayFluoAnalysisDir->SetGuidance("esperimento analysis control.");
|
||||
XrayFluoAnalysisDir->SetGuidance("analysis control.");
|
||||
|
||||
ouputFileCommand = new G4UIcmdWithAString("/analysis/outputFile",this);
|
||||
ouputFileCommand->SetGuidance("specify the name of the output file (lowercase for Hbook)");
|
||||
ouputFileCommand->SetGuidance("default: xrayfluo.hbk");
|
||||
ouputFileCommand->SetParameterName("choice",true);
|
||||
ouputFileCommand->SetDefaultValue("xrayfluo.hbk");
|
||||
//DrawCmd->SetCandidates("none charged neutral all");
|
||||
ouputFileCommand->AvailableForStates(G4State_Idle);
|
||||
|
||||
}
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
@@ -63,6 +72,9 @@ XrayFluoAnalysisMessenger::~XrayFluoAnalysisMessenger()
|
||||
void XrayFluoAnalysisMessenger::SetNewValue(G4UIcommand* command,G4String newValue)
|
||||
{
|
||||
|
||||
if(command == ouputFileCommand)
|
||||
{xrayFluoAnalysis->SetOutputFileName(newValue);}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
//
|
||||
//
|
||||
// $Id: XrayFluoDAtaSet.cc
|
||||
// GEANT4 tag $Name: xray_fluo-V03-02-00
|
||||
// GEANT4 tag $Name: xray_fluo-V04-01-03
|
||||
//
|
||||
// Author: Elena Guardincerri (Elena.Guardincerri@ge.infn.it)
|
||||
//
|
||||
|
||||
@@ -22,13 +22,14 @@
|
||||
//
|
||||
//
|
||||
// $Id: XrayFluoDetectorConstruction.cc
|
||||
// GEANT4 tag $Name: xray_fluo-V03-02-00
|
||||
// GEANT4 tag $Name: xray_fluo-V04-01-03
|
||||
//
|
||||
// Author: Elena Guardincerri (Elena.Guardincerri@ge.infn.it)
|
||||
//
|
||||
// History:
|
||||
// -----------
|
||||
// 28 Nov 2001 Elena Guardincerri Created
|
||||
// 29 Nov 2002 New materials added (Alfonso.mantero@ge.infn.it)
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
|
||||
@@ -71,16 +72,20 @@ XrayFluoDetectorConstruction::XrayFluoDetectorConstruction()
|
||||
NbOfPixelRows = 1;
|
||||
NbOfPixelColumns = 1;
|
||||
NbOfPixels = NbOfPixelRows*NbOfPixelColumns;
|
||||
PixelSizeXY = 0.7 * cm;
|
||||
PixelThickness = 1. * mm;
|
||||
PixelSizeXY = 5 * cm;
|
||||
PixelThickness = 3.5 * mm;
|
||||
ContactSizeXY = 0.005*mm;
|
||||
SampleThickness = 0.25 * mm;
|
||||
SampleThickness = 2.5 * mm;
|
||||
SampleSizeXY = 3. * cm;
|
||||
Dia1Thickness = 1. *mm;
|
||||
Dia3Thickness = 1. *mm;
|
||||
Dia1SizeXY = 3. *cm;
|
||||
Dia3SizeXY = 3. *cm;
|
||||
DiaInnerSize = 1.4 * mm;
|
||||
|
||||
|
||||
DiaInnerSize = 2.99 * cm;
|
||||
|
||||
|
||||
OhmicNegThickness = 0.005*mm;
|
||||
OhmicPosThickness = 0.005*mm;
|
||||
ThetaHPGe = 135. * deg;
|
||||
@@ -102,11 +107,15 @@ XrayFluoDetectorConstruction::XrayFluoDetectorConstruction()
|
||||
// create commands for interactive definition of the apparate
|
||||
|
||||
detectorMessenger = new XrayFluoDetectorMessenger(this);
|
||||
G4cout << "XrayFluoDetectorConstruction created" << G4endl;
|
||||
}
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
XrayFluoDetectorConstruction::~XrayFluoDetectorConstruction()
|
||||
{ delete detectorMessenger;}
|
||||
{
|
||||
delete detectorMessenger;
|
||||
G4cout << "XrayFluoDetectorConstruction deleted" << G4endl;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
@@ -122,14 +131,118 @@ void XrayFluoDetectorConstruction::DefineMaterials()
|
||||
//define elements
|
||||
G4String name, symbol; //a=mass of a mole;
|
||||
G4double a, z, density; //z=mean number of protons;
|
||||
G4int natoms,ncomponents;
|
||||
G4double temperature, pressure;
|
||||
G4double fractionmass;
|
||||
|
||||
// Elements Definitions
|
||||
|
||||
//define Niobium
|
||||
|
||||
a = 92.906*g/mole;
|
||||
G4Element* Nb = new G4Element(name="Niobium" ,symbol="Nb" , z= 41., a);
|
||||
|
||||
//define Zirconium
|
||||
|
||||
a = 91.22*g/mole;
|
||||
G4Element* Zr = new G4Element(name="Zirconium" ,symbol="Zr" , z= 40., a);
|
||||
|
||||
//define Yttrium
|
||||
|
||||
a = 88.905*g/mole;
|
||||
G4Element* Y = new G4Element(name="Yttrium" ,symbol="Y" , z= 39., a);
|
||||
|
||||
//define Stronzium
|
||||
|
||||
a = 87.62*g/mole;
|
||||
G4Element* Sr = new G4Element(name="Stronzium" ,symbol="Sr" , z= 38., a);
|
||||
|
||||
//define Rubidium
|
||||
|
||||
a = 85.47*g/mole;
|
||||
G4Element* Rb = new G4Element(name="Rubidium" ,symbol="Rb" , z= 37., a);
|
||||
|
||||
//define Zinc
|
||||
|
||||
a = 65.37*g/mole;
|
||||
G4Element* Zn = new G4Element(name="Zinc" ,symbol="Zn" , z= 30., a);
|
||||
|
||||
//define Nichel
|
||||
|
||||
a = 58.71*g/mole;
|
||||
G4Element* Ni = new G4Element(name="Nichel" ,symbol="Ni" , z= 28., a);
|
||||
|
||||
//define Scandio
|
||||
|
||||
a = 44.956*g/mole;
|
||||
G4Element* Sc = new G4Element(name="Scandium" ,symbol="Sc" , z= 21., a);
|
||||
|
||||
//define Vanadium
|
||||
|
||||
a = 50.942*g/mole;
|
||||
G4Element* V = new G4Element(name="Vanadium" ,symbol="V" , z= 39., a);
|
||||
|
||||
//define Cromium
|
||||
|
||||
a = 51.996*g/mole;
|
||||
G4Element* Cr = new G4Element(name="Cromium" ,symbol="Cr" , z= 24., a);
|
||||
|
||||
//define Cobalt
|
||||
|
||||
a = 58.933*g/mole;
|
||||
G4Element* Co = new G4Element(name="Cobalt" ,symbol="Co" , z= 27., a);
|
||||
|
||||
//define Copper
|
||||
|
||||
a = 63.54*g/mole;
|
||||
G4Element* elCu = new G4Element(name="Copper" ,symbol="Cu" , z= 29., a);
|
||||
|
||||
//define Barium
|
||||
|
||||
a = 137.34*g/mole;
|
||||
G4Element* Ba = new G4Element(name="Barium" ,symbol="Ba" , z= 56., a);
|
||||
|
||||
//define Cerium
|
||||
|
||||
a = 140.12*g/mole;
|
||||
G4Element* Ce = new G4Element(name="Cerium" ,symbol="Ce" , z= 58., a);
|
||||
|
||||
//define Neodimuim
|
||||
|
||||
a = 144.24*g/mole;
|
||||
G4Element* Nd = new G4Element(name="Neodimuim" ,symbol="Nd" , z= 60., a);
|
||||
|
||||
|
||||
//Define Zolfo
|
||||
|
||||
a = 32.064*g/mole;
|
||||
G4Element* elS = new G4Element(name="Zolfo" ,symbol="S" , z= 16., a);
|
||||
|
||||
|
||||
|
||||
//define carbon
|
||||
|
||||
a = 12.0107*g/mole;
|
||||
G4Element* C = new G4Element(name="Carbon" ,symbol="C" , z= 6., a);
|
||||
|
||||
//define Nitrogen
|
||||
|
||||
a = 14.01*g/mole;
|
||||
G4Element* N = new G4Element(name="Nitrogen",symbol="N" , z= 7., a);
|
||||
|
||||
// define Oxigen
|
||||
a = 15.9994*g/mole;
|
||||
G4Element* O = new G4Element(name="Oxygen" ,symbol="O" , z= 8., a);
|
||||
|
||||
//define Arsenic
|
||||
a = 74.9216 * g/mole;
|
||||
G4Element * As = new G4Element( name="arsenic",symbol="As",z= 33.,a);
|
||||
|
||||
|
||||
//Define Gallium
|
||||
a = 69.72* g/mole;
|
||||
G4Element * Ga = new G4Element(name="gallium",symbol="Ga",z= 31.,a);
|
||||
|
||||
|
||||
//define Iron
|
||||
a = 55.847*g/mole;
|
||||
G4Element* Fe = new G4Element(name="Iron" ,symbol="Fe", z=26., a);
|
||||
//define hydrogen
|
||||
@@ -144,79 +257,232 @@ void XrayFluoDetectorConstruction::DefineMaterials()
|
||||
|
||||
a = 30.97*g/mole;
|
||||
G4Element* P = new G4Element(name="Phosporus",symbol="P", z= 15., a);
|
||||
|
||||
|
||||
// define Titanium
|
||||
a = 47.88*g/mole;
|
||||
G4Element* elTi = new G4Element(name="Titanium",symbol="Ti" , z= 22., a);
|
||||
|
||||
// define Calcium
|
||||
a = 40.078*g/mole;
|
||||
G4Element* Ca = new G4Element(name="Calcium",symbol="Ca" , z= 20., a);
|
||||
|
||||
// define silicon
|
||||
a = 28.0855*g/mole;
|
||||
G4Element* elSi = new G4Element(name="Silicon",symbol="Si" , z= 14., a);
|
||||
|
||||
// define Aluminium
|
||||
a = 26.98154*g/mole;
|
||||
G4Element* elAl = new G4Element(name="Aluminium",symbol="Al" , z= 13., a);
|
||||
|
||||
// Define Magnesium
|
||||
a = 24.305*g/mole;
|
||||
G4Element* Mg = new G4Element(name="Magnesium",symbol="Mg" , z= 12., a);
|
||||
|
||||
// Define Manganese
|
||||
a = 54.938*g/mole;
|
||||
G4Element* Mn = new G4Element(name="Manganese",symbol="Mn" , z= 25., a);
|
||||
|
||||
// Define Sodium
|
||||
a = 22.989*g/mole;
|
||||
G4Element* Na = new G4Element(name="Sodium",symbol="Na" , z= 11., a);
|
||||
|
||||
// Define Potassium
|
||||
a = 39.10*g/mole;
|
||||
G4Element* K = new G4Element(name="Potassium",symbol="K" , z= 19., a);
|
||||
// Define lead
|
||||
|
||||
a=207.19*g/mole;
|
||||
G4Element* elPb = new G4Element(name="Lead",symbol="pb", z=82.,a);
|
||||
|
||||
//define Uranium
|
||||
|
||||
a = 238.02891*g/mole;
|
||||
G4Element* elU = new G4Element(name="Uranium",symbol="U", z=92.,a);
|
||||
|
||||
|
||||
G4cout << "Elementi creati" << G4endl;
|
||||
|
||||
|
||||
|
||||
// Materials Definitions
|
||||
|
||||
// Define dolorite main components
|
||||
|
||||
density = 3*g/cm3;
|
||||
G4Material* diorite = new G4Material(name="Diorite", density, ncomponents=11);
|
||||
diorite->AddElement(Fe, fractionmass=0.1750);
|
||||
diorite->AddElement(elTi, fractionmass=0.0082);
|
||||
diorite->AddElement(Ca, fractionmass=0.0753);
|
||||
diorite->AddElement(elSi, fractionmass=0.2188);
|
||||
diorite->AddElement(elAl, fractionmass=0.0676);
|
||||
diorite->AddElement(Mg, fractionmass=0.0008);
|
||||
diorite->AddElement(O , fractionmass=0.4377);
|
||||
diorite->AddElement(Mn , fractionmass=0.0015);
|
||||
diorite->AddElement(Na , fractionmass=0.0134);
|
||||
diorite->AddElement(K , fractionmass=0.0011);
|
||||
diorite->AddElement(P , fractionmass=0.0006);
|
||||
|
||||
// define traces in dolorite
|
||||
|
||||
density = 3*g/cm3;
|
||||
G4Material* tracesOfDolorite = new G4Material(name="TracesOfDolorite", density, ncomponents=16);
|
||||
tracesOfDolorite->AddElement(Nb, natoms=5);
|
||||
tracesOfDolorite->AddElement(Zr, natoms=91);
|
||||
tracesOfDolorite->AddElement(Y, natoms=29);
|
||||
tracesOfDolorite->AddElement(Sr, natoms=140);
|
||||
tracesOfDolorite->AddElement(Rb, natoms=3);
|
||||
tracesOfDolorite->AddElement(Ga, natoms=20);
|
||||
tracesOfDolorite->AddElement(Zn, natoms=99);
|
||||
tracesOfDolorite->AddElement(Ni, natoms=77);
|
||||
tracesOfDolorite->AddElement(Sc, natoms=32);
|
||||
tracesOfDolorite->AddElement(V, natoms=314);
|
||||
tracesOfDolorite->AddElement(Cr, natoms=130);
|
||||
tracesOfDolorite->AddElement(Co, natoms=56);
|
||||
tracesOfDolorite->AddElement(elCu, natoms=119);
|
||||
tracesOfDolorite->AddElement(Ba, natoms=38);
|
||||
tracesOfDolorite->AddElement(Ce, natoms=15);
|
||||
tracesOfDolorite->AddElement(Nd, natoms=9);
|
||||
|
||||
// define dolorite (full)
|
||||
|
||||
density = 3*g/cm3;
|
||||
dolorite = new G4Material(name="Dolorite", density, ncomponents=2);
|
||||
dolorite->AddMaterial(tracesOfDolorite, fractionmass=0.0027842352);
|
||||
dolorite->AddMaterial(diorite, fractionmass=0.9972157648);
|
||||
|
||||
// define mars1
|
||||
|
||||
density = 3*g/cm3;
|
||||
G4Material* mars1Main = new G4Material(name="Mars1 Main components", density, ncomponents=11);
|
||||
mars1Main->AddElement(Fe, fractionmass=0.100916);
|
||||
mars1Main->AddElement(elTi, fractionmass=0.0186804);
|
||||
mars1Main->AddElement(Ca, fractionmass=0.0404091);
|
||||
mars1Main->AddElement(elSi, fractionmass=0.196378);
|
||||
mars1Main->AddElement(elAl, fractionmass=0.103282);
|
||||
mars1Main->AddElement(Mg, fractionmass=0.0241622);
|
||||
mars1Main->AddElement(Mn , fractionmass=0.00184331);
|
||||
mars1Main->AddElement(Na , fractionmass=0.0177908);
|
||||
mars1Main->AddElement(K , fractionmass=0.00574498);
|
||||
mars1Main->AddElement(P , fractionmass=0.00280169);
|
||||
mars1Main->AddElement(O , fractionmass=0.48799152);
|
||||
|
||||
density = 3*g/cm3;
|
||||
G4Material* tracesOfMars1 = new G4Material(name="TracesOfMars1", density, ncomponents=17);
|
||||
tracesOfMars1->AddElement(Nb, natoms=55);
|
||||
tracesOfMars1->AddElement(Zr, natoms=433);
|
||||
tracesOfMars1->AddElement(Y, natoms=58);
|
||||
tracesOfMars1->AddElement(Sr, natoms=968);
|
||||
tracesOfMars1->AddElement(Rb, natoms=16);
|
||||
tracesOfMars1->AddElement(Ga, natoms=24);
|
||||
tracesOfMars1->AddElement(Zn, natoms=109);
|
||||
tracesOfMars1->AddElement(Ni, natoms=70);
|
||||
tracesOfMars1->AddElement(Sc, natoms=21);
|
||||
tracesOfMars1->AddElement(V, natoms=134);
|
||||
tracesOfMars1->AddElement(Cr, natoms=141);
|
||||
tracesOfMars1->AddElement(Co, natoms=30);
|
||||
tracesOfMars1->AddElement(elCu, natoms=19);
|
||||
tracesOfMars1->AddElement(Ba, natoms=580);
|
||||
tracesOfMars1->AddElement(elPb, natoms=4);
|
||||
tracesOfMars1->AddElement(elS, natoms=444);
|
||||
tracesOfMars1->AddElement(elU, natoms=2);
|
||||
|
||||
|
||||
density = 3*g/cm3;
|
||||
G4Material* mars1 = new G4Material(name="Mars1", density, ncomponents=2);
|
||||
mars1->AddMaterial(tracesOfMars1, fractionmass=0.0044963163);
|
||||
mars1->AddMaterial(mars1Main, fractionmass=0.9955036837);
|
||||
|
||||
//define Neodimuim
|
||||
|
||||
density = 6800*kg/m3;
|
||||
materialNd = new G4Material(name="Neodimuim" ,density , ncomponents=1);
|
||||
materialNd ->AddElement(Nd,natoms=1);
|
||||
|
||||
// Define Magnesium
|
||||
density = 1738*kg/m3;
|
||||
materialMg = new G4Material(name="Magnesium",density , ncomponents=1);
|
||||
materialMg->AddElement(Mg,natoms=1);
|
||||
|
||||
//define iron
|
||||
|
||||
density = 7.86 * g/cm3;
|
||||
|
||||
G4int natoms,ncomponents;
|
||||
G4double temperature, pressure;
|
||||
|
||||
G4Material * FeMaterial = new G4Material(name="Iron",density,ncomponents=1);
|
||||
FeMaterial = new G4Material(name="Iron",density,ncomponents=1);
|
||||
FeMaterial->AddElement(Fe,natoms=1);
|
||||
|
||||
density = 5.32 * g/cm3;
|
||||
G4Material * HPGe = new G4Material(name="HPGe",density,ncomponents=1);
|
||||
HPGe ->AddElement(Ge,natoms=1);
|
||||
|
||||
|
||||
|
||||
//define gallium arsenide
|
||||
|
||||
density = 5.32 * g/cm3;
|
||||
G4Material * GaAs = new G4Material(name ="gallium arsenide",density,ncomponents=2);
|
||||
GaAs->AddElement(Ga,natoms=1);
|
||||
GaAs->AddElement(As,natoms=1);
|
||||
|
||||
|
||||
// define germanium
|
||||
|
||||
density = 5.32 * g/cm3;
|
||||
HPGe = new G4Material(name="HPGe",density,ncomponents=1);
|
||||
HPGe ->AddElement(Ge,natoms=1);
|
||||
|
||||
//define silicon
|
||||
|
||||
density = 2.333*g/cm3;
|
||||
a = 28.0855*g/mole;
|
||||
G4Material* Si = new G4Material(name="Silicon",z=14., a,density);
|
||||
Si = new G4Material(name="Silicon",z=14., a,density);
|
||||
|
||||
//define copper
|
||||
|
||||
density = 8.960*g/cm3;
|
||||
a = 63.55*g/mole;
|
||||
G4Material* Cu = new G4Material(name="Copper" , z=29., a, density);
|
||||
Cu = new G4Material(name="Copper" , z=29., a, density);
|
||||
|
||||
|
||||
|
||||
|
||||
//define carbon
|
||||
|
||||
a = 12.0107*g/mole;
|
||||
G4Element* C = new G4Element(name="Carbon" ,symbol="C" , z= 6., a);
|
||||
|
||||
|
||||
//define scintillator
|
||||
|
||||
density = 1.032*g/cm3;
|
||||
G4Material* Sci = new G4Material(name="Scintillator", density, ncomponents=2);
|
||||
Sci->AddElement(C, natoms=9);
|
||||
Sci->AddElement(H, natoms=10);
|
||||
//define Oxigen
|
||||
density = 1*g/cm3;
|
||||
a=16*g/mole;
|
||||
G4Material* matOx = new G4Material(name="Oxigen", z=8., a, density);
|
||||
|
||||
//define aluminium
|
||||
|
||||
density = 2.700*g/cm3;
|
||||
a = 26.98*g/mole;
|
||||
G4Material* Al = new G4Material(name="Aluminium", z=13., a, density);
|
||||
|
||||
Al = new G4Material(name="Aluminium", z=13., a, density);
|
||||
|
||||
//define titanium
|
||||
density = 4.54 *g/cm3;
|
||||
a = 47.867*g/mole;
|
||||
G4Material* Ti = new G4Material(name="Titanium",z=22.,a,density);
|
||||
|
||||
Ti = new G4Material(name="Titanium",z=22.,a,density);
|
||||
|
||||
|
||||
//define Uranium
|
||||
density = 19050*kg/m3;
|
||||
a = 238.02891*g/mole;
|
||||
G4Material* U = new G4Material(name="Uranium",z=92.,a,density);
|
||||
|
||||
//define Tin
|
||||
density = 7310*kg/m3;
|
||||
a = 118.710*g/mole;
|
||||
Sn = new G4Material(name="Tin",z=50.,a,density);
|
||||
|
||||
//define lead
|
||||
|
||||
density = 11.35*g/cm3;
|
||||
a=207.19*g/mole;
|
||||
G4Material* Pb = new G4Material(name="Lead",z=82.,a,density);
|
||||
|
||||
//define scintillator
|
||||
|
||||
density = 1.032*g/cm3;
|
||||
G4Material* Sci = new G4Material(name="Scintillator", density, ncomponents=2);
|
||||
Sci->AddElement(C, natoms=9);
|
||||
Sci->AddElement(H, natoms=10);
|
||||
|
||||
|
||||
//define air
|
||||
|
||||
a = 14.01*g/mole;
|
||||
G4Element* N = new G4Element(name="Nitrogen",symbol="N" , z= 7., a);
|
||||
|
||||
a = 15.9994*g/mole;
|
||||
G4Element* O = new G4Element(name="Oxygen" ,symbol="O" , z= 8., a);
|
||||
|
||||
G4double fractionmass;
|
||||
|
||||
density = 1.290*mg/cm3;
|
||||
G4Material* Air = new G4Material(name="Air" , density, ncomponents=2);
|
||||
Air->AddElement(N, fractionmass=0.7);
|
||||
@@ -229,32 +495,21 @@ void XrayFluoDetectorConstruction::DefineMaterials()
|
||||
temperature = 2.73*kelvin;
|
||||
G4Material * Vacuum = new G4Material(name="Galactic", z=1., a=1.01*g/mole, density,
|
||||
kStateGas,temperature,pressure);
|
||||
// define Titanium
|
||||
a = 47.88*g/mole;
|
||||
G4Element* elTi = new G4Element(name="Titanium",symbol="Ti" , z= 22., a);
|
||||
// define Calcium
|
||||
a = 40.078*g/mole;
|
||||
G4Element* Ca = new G4Element(name="Calcium",symbol="Ca" , z= 20., a);
|
||||
// define silicon
|
||||
a = 28.0855*g/mole;
|
||||
G4Element* elSi = new G4Element(name="Silicon",symbol="Si" , z= 14., a);
|
||||
|
||||
a = 26.98154*g/mole;
|
||||
G4Element* elAl = new G4Element(name="Aluminium",symbol="Al" , z= 13., a);
|
||||
|
||||
a = 24.305*g/mole;
|
||||
G4Element* Mg = new G4Element(name="Magnesium",symbol="Mg" , z= 12., a);
|
||||
|
||||
|
||||
|
||||
|
||||
//define basalt
|
||||
density = 3.*g/cm3;
|
||||
G4Material* Basalt = new G4Material(name="Basalt", density, ncomponents=7);
|
||||
Basalt->AddElement(Fe, fractionmass=0.1200);
|
||||
Basalt->AddElement(elTi, fractionmass=0.0160);
|
||||
Basalt->AddElement(Ca, fractionmass=0.0750);
|
||||
Basalt->AddElement(elSi, fractionmass=0.2160);
|
||||
Basalt->AddElement(elAl, fractionmass=0.0710);
|
||||
Basalt->AddElement(Mg, fractionmass=0.0590);
|
||||
Basalt->AddElement(O , fractionmass=0.4430);
|
||||
G4Material* basalt = new G4Material(name="Basalt", density, ncomponents=7);
|
||||
basalt->AddElement(Fe, fractionmass=0.1200);
|
||||
basalt->AddElement(elTi, fractionmass=0.0160);
|
||||
basalt->AddElement(Ca, fractionmass=0.0750);
|
||||
basalt->AddElement(elSi, fractionmass=0.2160);
|
||||
basalt->AddElement(elAl, fractionmass=0.0710);
|
||||
basalt->AddElement(Mg, fractionmass=0.0590);
|
||||
basalt->AddElement(O , fractionmass=0.4430);
|
||||
|
||||
// end basalt
|
||||
|
||||
@@ -262,7 +517,7 @@ void XrayFluoDetectorConstruction::DefineMaterials()
|
||||
|
||||
//default materials of the apparate
|
||||
|
||||
sampleMaterial = Basalt;
|
||||
sampleMaterial = mars1;
|
||||
Dia1Material = Pb;
|
||||
Dia3Material = Pb;
|
||||
pixelMaterial = HPGe;
|
||||
@@ -554,6 +809,47 @@ void XrayFluoDetectorConstruction::UpdateGeometry()
|
||||
G4RunManager::GetRunManager()->DefineWorldVolume(ConstructApparate());
|
||||
}
|
||||
|
||||
void XrayFluoDetectorConstruction::SetSampleMaterial(G4String newMaterial)
|
||||
{
|
||||
|
||||
if( newMaterial == "dolorite") {
|
||||
sampleMaterial = dolorite;
|
||||
}
|
||||
|
||||
else if ( newMaterial == "iron") {
|
||||
sampleMaterial = FeMaterial;
|
||||
}
|
||||
|
||||
else if ( newMaterial == "silicon") {
|
||||
sampleMaterial = Si;
|
||||
}
|
||||
|
||||
else if ( newMaterial == "aluminium") {
|
||||
sampleMaterial = Al;
|
||||
}
|
||||
|
||||
else if ( newMaterial == "copper") {
|
||||
sampleMaterial = Cu;
|
||||
}
|
||||
else if ( newMaterial == "germanium") {
|
||||
sampleMaterial = HPGe;
|
||||
}
|
||||
else if ( newMaterial == "magnesium") {
|
||||
sampleMaterial = materialMg;
|
||||
}
|
||||
|
||||
else if ( newMaterial == "neodimium") {
|
||||
sampleMaterial = materialNd;
|
||||
}
|
||||
else if ( newMaterial == "tin") {
|
||||
sampleMaterial = Sn;
|
||||
}
|
||||
else if ( newMaterial == "titanium") {
|
||||
sampleMaterial = Ti;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
|
||||
@@ -562,3 +858,7 @@ void XrayFluoDetectorConstruction::UpdateGeometry()
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -22,13 +22,14 @@
|
||||
//
|
||||
//
|
||||
// $Id: XrayFluoDetectorMessenger.cc
|
||||
// GEANT4 tag $Name: xray_fluo-V03-02-00
|
||||
// GEANT4 tag $Name: xray_fluo-V04-01-03
|
||||
//
|
||||
// Author: Elena Guardincerri (Elena.Guardincerri@ge.infn.it)
|
||||
//
|
||||
// History:
|
||||
// -----------
|
||||
// 28 Nov 2001 Elena Guardincerri Created
|
||||
// 29 Nov 2002 change material command added(Alfonso.mantero@ge.infn.it)
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
|
||||
@@ -51,7 +52,15 @@ XrayFluoDetectorMessenger::XrayFluoDetectorMessenger(XrayFluoDetectorConstructio
|
||||
UpdateCmd->SetGuidance("Update apparate geometry.");
|
||||
UpdateCmd->SetGuidance("This command MUST be applied before \"beamOn\" ");
|
||||
UpdateCmd->SetGuidance("if you changed geometrical value(s).");
|
||||
UpdateCmd->AvailableForStates(Idle);
|
||||
UpdateCmd->AvailableForStates(G4State_Idle);
|
||||
|
||||
sampleCmd = new G4UIcmdWithAString("/apparate/sample",this);
|
||||
sampleCmd->SetGuidance("select a diferent material for the sample");
|
||||
sampleCmd->SetGuidance("The command /apparate/update command MUST be applied after this one");
|
||||
sampleCmd->SetParameterName("choice",true);
|
||||
sampleCmd->SetDefaultValue("dolorite");
|
||||
sampleCmd->SetCandidates("dolorite iron silicon aluminium titanium tin neodimium magnesium germanium copper mars1");
|
||||
sampleCmd->AvailableForStates(G4State_Idle);
|
||||
|
||||
}
|
||||
|
||||
@@ -69,8 +78,18 @@ void XrayFluoDetectorMessenger::SetNewValue(G4UIcommand* command,G4String newVal
|
||||
{
|
||||
if( command == UpdateCmd )
|
||||
{ Detector->UpdateGeometry(); }
|
||||
|
||||
else if ( command == sampleCmd )
|
||||
{ Detector->SetSampleMaterial(newValue);}
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
//
|
||||
//
|
||||
// $Id: XrayFluoEventAction.cc
|
||||
// GEANT4 tag $Name: xray_fluo-V03-02-00
|
||||
// GEANT4 tag $Name: xray_fluo-V04-01-03
|
||||
//
|
||||
// Author: Elena Guardincerri (Elena.Guardincerri@ge.infn.it)
|
||||
//
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
//
|
||||
//
|
||||
// $Id: XrayFluoEventActionMessenger.cc
|
||||
// GEANT4 tag $Name: xray_fluo-V03-02-00
|
||||
// GEANT4 tag $Name: xray_fluo-V04-01-03
|
||||
//
|
||||
// Author: Elena Guardincerri (Elena.Guardincerri@ge.infn.it)
|
||||
//
|
||||
@@ -51,13 +51,13 @@ XrayFluoEventActionMessenger::XrayFluoEventActionMessenger(XrayFluoEventAction*
|
||||
DrawCmd->SetParameterName("choice",true);
|
||||
DrawCmd->SetDefaultValue("all");
|
||||
DrawCmd->SetCandidates("none charged neutral all");
|
||||
DrawCmd->AvailableForStates(Idle);
|
||||
DrawCmd->AvailableForStates(G4State_Idle);
|
||||
|
||||
PrintCmd = new G4UIcmdWithAnInteger("/event/printModulo",this);
|
||||
PrintCmd->SetGuidance("Print events modulo n");
|
||||
PrintCmd->SetParameterName("EventNb",false);
|
||||
PrintCmd->SetRange("EventNb>0");
|
||||
PrintCmd->AvailableForStates(Idle);
|
||||
PrintCmd->AvailableForStates(G4State_Idle);
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
@@ -22,14 +22,14 @@
|
||||
//
|
||||
//
|
||||
// $Id: XrayFluoHPGeSD.cc
|
||||
// GEANT4 tag $Name: xray_fluo-V03-02-00
|
||||
// GEANT4 tag $Name: xray_fluo-V04-01-03
|
||||
//
|
||||
// Author: Elena Guardincerri (Elena.Guardincerri@ge.infn.it)
|
||||
//
|
||||
// History:
|
||||
// -----------
|
||||
// 28 Nov 2001 Elena Guardincerri Created
|
||||
//
|
||||
// 29 Nov 2002 Energy deposition bug fixed (Alfonso.mantero@ge.infn.it)
|
||||
// -------------------------------------------------------------------
|
||||
|
||||
#include "XrayFluoHPGeSD.hh"
|
||||
@@ -41,6 +41,7 @@
|
||||
#include "G4TouchableHistory.hh"
|
||||
#include "G4SDManager.hh"
|
||||
#include "G4ios.hh"
|
||||
#include "G4VProcess.hh"
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
@@ -50,13 +51,20 @@ XrayFluoHPGeSD::XrayFluoHPGeSD(G4String name,
|
||||
{
|
||||
collectionName.insert("HPGeCollection");
|
||||
HitHPGeID = new G4int[500];
|
||||
//G4cout << "XrayFluoHPGeSD created" << G4endl;
|
||||
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
XrayFluoHPGeSD::~XrayFluoHPGeSD()
|
||||
{
|
||||
|
||||
delete [] HitHPGeID;
|
||||
|
||||
// delete HPGeCollection;
|
||||
|
||||
G4cout << "XrayFluoHPGeSD deleted" << G4endl;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
@@ -77,8 +85,29 @@ void XrayFluoHPGeSD::Initialize(G4HCofThisEvent*HCE)
|
||||
G4bool XrayFluoHPGeSD::ProcessHits(G4Step* aStep,G4TouchableHistory* ROhist)
|
||||
{
|
||||
G4double edep = aStep->GetTotalEnergyDeposit();
|
||||
// G4String particleName = aStep->GetTrack()->GetDynamicParticle()->GetDefinition()->GetParticleName();
|
||||
// G4String processName = aStep->GetTrack()->GetCreatorProcess()->GetProcessName();
|
||||
|
||||
// G4double partEnergy = aStep->GetPreStepPoint()->GetKineticEnergy();
|
||||
G4double secondEnergy = aStep->GetPostStepPoint()->GetKineticEnergy();
|
||||
// G4cout << " la particella che deposita e': " << particleName << " ha una energia di keV "
|
||||
// << partEnergy << " e deposita "<< edep << G4endl;
|
||||
// G4cout << " la particella creata deposita: " << secondEnergy << G4endl;
|
||||
// if (processName){
|
||||
|
||||
|
||||
|
||||
// G4cout << " la particella viene da: " << processName << G4endl;
|
||||
// }
|
||||
|
||||
// else {G4cout << " il deposito proviene da: Rayleugh" << G4endl;}
|
||||
|
||||
if ((edep==0.)) return false;
|
||||
|
||||
// added, vediamo se funziona
|
||||
edep = edep + secondEnergy;
|
||||
// G4cout << " edep = " << edep << G4endl;
|
||||
|
||||
G4TouchableHistory* theTouchable
|
||||
= (G4TouchableHistory*)(aStep->GetPreStepPoint()->GetTouchable());
|
||||
|
||||
@@ -88,21 +117,22 @@ G4bool XrayFluoHPGeSD::ProcessHits(G4Step* aStep,G4TouchableHistory* ROhist)
|
||||
if (Detector->GetNbOfPixels()>1) PixelNumber= physVol->GetCopyNo() ;
|
||||
if ( HitHPGeID[PixelNumber]==-1)
|
||||
{
|
||||
XrayFluoSensorHit* HPGeHit = new XrayFluoSensorHit();
|
||||
HPGeHit->AddEnergy(edep);
|
||||
XrayFluoSensorHit* HPGeHit = new XrayFluoSensorHit();
|
||||
HPGeHit->AddEnergy(edep);
|
||||
HitHPGeID[PixelNumber] = HPGeCollection->insert(HPGeHit) - 1;
|
||||
if (verboseLevel>0)
|
||||
G4cout << " New Hit on pixel: " << PixelNumber << G4endl;
|
||||
}
|
||||
if (verboseLevel>0){
|
||||
G4cout << " New Hit on pixel: " << PixelNumber << G4endl;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
(*HPGeCollection)[HitHPGeID[PixelNumber]]->AddEnergy(edep);
|
||||
//G4double ED =(*HPGeCollection)[HitHPGeID[PixelNumber]]->GetEdepTot();
|
||||
if (verboseLevel>0)
|
||||
(*HPGeCollection)[HitHPGeID[PixelNumber]]->AddEnergy(edep);
|
||||
//G4double ED =(*HPGeCollection)[HitHPGeID[PixelNumber]]->GetEdepTot();
|
||||
if (verboseLevel>0)
|
||||
G4cout << " Energy added to Pixel: " << PixelNumber << G4endl;
|
||||
}
|
||||
|
||||
return true;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -136,3 +166,14 @@ void XrayFluoHPGeSD::PrintAll()
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
//
|
||||
//
|
||||
// $Id: XrayFluoAnalysisMessenger.cc
|
||||
// GEANT4 tag $Name: xray_fluo-V03-02-00
|
||||
// GEANT4 tag $Name: xray_fluo-V04-01-03
|
||||
//
|
||||
// Author: Elena Guardincerri (Elena.Guardincerri@ge.infn.it)
|
||||
//
|
||||
|
||||
@@ -22,13 +22,14 @@
|
||||
//
|
||||
//
|
||||
// $Id: XrayFluoPhysicsList.cc
|
||||
// GEANT4 tag $Name: xray_fluo-V03-02-00
|
||||
// GEANT4 tag $Name: xray_fluo-V04-01-03
|
||||
//
|
||||
// Author: Elena Guardincerri (Elena.Guardincerri@ge.infn.it)
|
||||
//
|
||||
// History:
|
||||
// -----------
|
||||
// 28 Nov 2001 Elena Guardincerri Created
|
||||
// 29 Nov 2002 Auger Effect Added (Alfonso.mantero@ge.infn.it)
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
//
|
||||
//
|
||||
// $Id: XrayFluoPhysicsListMessenger.cc
|
||||
// GEANT4 tag $Name: xray_fluo-V03-02-00
|
||||
// GEANT4 tag $Name: xray_fluo-V04-01-03
|
||||
//
|
||||
// Author: Elena Guardincerri (Elena.Guardincerri@ge.infn.it)
|
||||
//
|
||||
@@ -54,63 +54,63 @@ XrayFluoPhysicsListMessenger::XrayFluoPhysicsListMessenger(XrayFluoPhysicsList *
|
||||
cutGLowLimCmd->SetParameterName("energy",true);
|
||||
cutGLowLimCmd->SetDefaultValue(1e-3);
|
||||
cutGLowLimCmd->SetDefaultUnit("MeV");
|
||||
cutGLowLimCmd->AvailableForStates(Idle);
|
||||
cutGLowLimCmd->AvailableForStates(G4State_Idle);
|
||||
|
||||
cutELowLimCmd = new G4UIcmdWithADoubleAndUnit("/lowenergy/lowlimE",this);
|
||||
cutELowLimCmd->SetGuidance("Set ENERGY low limit for e-.");
|
||||
cutELowLimCmd->SetParameterName("energy",true);
|
||||
cutELowLimCmd->SetDefaultValue(1e-3);
|
||||
cutELowLimCmd->SetDefaultUnit("MeV");
|
||||
cutELowLimCmd->AvailableForStates(Idle);
|
||||
cutELowLimCmd->AvailableForStates(G4State_Idle);
|
||||
|
||||
cutGELowLimCmd = new G4UIcmdWithADoubleAndUnit("/lowenergy/lowlimGE",this);
|
||||
cutGELowLimCmd->SetGuidance("Set ENERGY low limit for e- and Gamma.");
|
||||
cutGELowLimCmd->SetParameterName("energy",true);
|
||||
cutGELowLimCmd->SetDefaultValue(1e-3);
|
||||
cutGELowLimCmd->SetDefaultUnit("MeV");
|
||||
cutGELowLimCmd->AvailableForStates(Idle);
|
||||
cutGELowLimCmd->AvailableForStates(G4State_Idle);
|
||||
|
||||
cutSecPhotCmd = new G4UIcmdWithADoubleAndUnit("/lowenergy/secphotcut",this);
|
||||
cutSecPhotCmd->SetGuidance("Set production threshold for secondary Gamma.");
|
||||
cutSecPhotCmd->SetParameterName("energy",true);
|
||||
cutSecPhotCmd->SetDefaultValue(5e-5);
|
||||
cutSecPhotCmd->SetDefaultUnit("MeV");
|
||||
cutSecPhotCmd->AvailableForStates(Idle);
|
||||
cutSecPhotCmd->AvailableForStates(G4State_Idle);
|
||||
|
||||
cutSecElecCmd = new G4UIcmdWithADoubleAndUnit("/lowenergy/seceleccut",this);
|
||||
cutSecElecCmd->SetGuidance("Set production threshold for secondary e-");
|
||||
cutSecElecCmd->SetParameterName("energy",true);
|
||||
cutSecElecCmd->SetDefaultValue(5e-5);
|
||||
cutSecElecCmd->SetDefaultUnit("MeV");
|
||||
cutSecElecCmd->AvailableForStates(Idle);
|
||||
cutSecElecCmd->AvailableForStates(G4State_Idle);
|
||||
|
||||
cutGCmd = new G4UIcmdWithADoubleAndUnit("/lowenergy/cutG",this);
|
||||
cutGCmd->SetGuidance("Set cut values by RANGE for Gamma.");
|
||||
cutGCmd->SetParameterName("range",true);
|
||||
cutGCmd->SetDefaultValue(1.);
|
||||
cutGCmd->SetDefaultUnit("mm");
|
||||
cutGCmd->AvailableForStates(Idle);
|
||||
cutGCmd->AvailableForStates(G4State_Idle);
|
||||
|
||||
cutECmd = new G4UIcmdWithADoubleAndUnit("/lowenergy/cutE",this);
|
||||
cutECmd->SetGuidance("Set cut values by RANGE for e-.");
|
||||
cutECmd->SetParameterName("range",true);
|
||||
cutECmd->SetDefaultValue(1.);
|
||||
cutECmd->SetDefaultUnit("mm");
|
||||
cutECmd->AvailableForStates(Idle);
|
||||
cutECmd->AvailableForStates(G4State_Idle);
|
||||
|
||||
cutPCmd = new G4UIcmdWithADoubleAndUnit("/lowenergy/cutP",this);
|
||||
cutPCmd->SetGuidance("Set cut values by RANGE for proton and others.");
|
||||
cutPCmd->SetParameterName("cutP",false);
|
||||
cutPCmd->SetRange("cutP>0.");
|
||||
cutPCmd->SetUnitCategory("Length");
|
||||
cutPCmd->AvailableForStates(Idle);
|
||||
cutPCmd->AvailableForStates(G4State_Idle);
|
||||
|
||||
eCmd = new G4UIcmdWithADoubleAndUnit("/lowenergy/cutEnergy",this);
|
||||
eCmd->SetGuidance("Set cut values by ENERGY for charged particles.");
|
||||
eCmd->SetParameterName("cutenergy",false);
|
||||
eCmd->SetRange("cutenergy>0.");
|
||||
eCmd->SetUnitCategory("Energy");
|
||||
eCmd->AvailableForStates(Idle);
|
||||
eCmd->AvailableForStates(G4State_Idle);
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
//
|
||||
//
|
||||
// $Id: XrayFluoPrimaryGeneratorAction.cc
|
||||
// GEANT4 tag $Name: xray_fluo-V03-02-00
|
||||
// GEANT4 tag $Name: xray_fluo-V04-01-03
|
||||
//
|
||||
// Author: Elena Guardincerri (Elena.Guardincerri@ge.infn.it)
|
||||
//
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
//
|
||||
//
|
||||
// $Id: XrayFluoPrimarygeneratorMessenger.cc
|
||||
// GEANT4 tag $Name: xray_fluo-V03-02-00
|
||||
// GEANT4 tag $Name: xray_fluo-V04-01-03
|
||||
//
|
||||
// Author: Elena Guardincerri (Elena.Guardincerri@ge.infn.it)
|
||||
//
|
||||
@@ -47,7 +47,7 @@ XrayFluoPrimaryGeneratorMessenger::XrayFluoPrimaryGeneratorMessenger(XrayFluoPri
|
||||
RndmCmd->SetParameterName("choice",true);
|
||||
RndmCmd->SetDefaultValue("on");
|
||||
RndmCmd->SetCandidates("on off");
|
||||
RndmCmd->AvailableForStates(PreInit,Idle);
|
||||
RndmCmd->AvailableForStates(G4State_PreInit,G4State_Idle);
|
||||
|
||||
RndmVert = new G4UIcmdWithAString("/gun/randomVert",this);
|
||||
RndmVert->SetGuidance("Shoot randomly the incident particle.");
|
||||
@@ -55,7 +55,7 @@ XrayFluoPrimaryGeneratorMessenger::XrayFluoPrimaryGeneratorMessenger(XrayFluoPri
|
||||
RndmVert->SetParameterName("choice",true);
|
||||
RndmVert->SetDefaultValue("on");
|
||||
RndmVert->SetCandidates("on off");
|
||||
RndmVert->AvailableForStates(PreInit,Idle);
|
||||
RndmVert->AvailableForStates(G4State_PreInit,G4State_Idle);
|
||||
|
||||
spectrum = new G4UIcmdWithAString("/gun/spectrum",this);
|
||||
spectrum->SetGuidance("Shoot the incident particle with a certain energy spectrum.");
|
||||
@@ -63,7 +63,7 @@ XrayFluoPrimaryGeneratorMessenger::XrayFluoPrimaryGeneratorMessenger(XrayFluoPri
|
||||
spectrum->SetParameterName("choice",true);
|
||||
spectrum->SetDefaultValue("on");
|
||||
spectrum->SetCandidates("on off");
|
||||
spectrum->AvailableForStates(PreInit,Idle);
|
||||
spectrum->AvailableForStates(G4State_PreInit,G4State_Idle);
|
||||
|
||||
isoVert = new G4UIcmdWithAString("/gun/isoVert",this);
|
||||
isoVert->SetGuidance("Shoot the incident particle from an isotrofic direction.");
|
||||
@@ -71,7 +71,7 @@ XrayFluoPrimaryGeneratorMessenger::XrayFluoPrimaryGeneratorMessenger(XrayFluoPri
|
||||
isoVert->SetParameterName("choice",true);
|
||||
isoVert->SetDefaultValue("on");
|
||||
isoVert->SetCandidates("on off");
|
||||
isoVert->AvailableForStates(PreInit,Idle);
|
||||
isoVert->AvailableForStates(G4State_PreInit,G4State_Idle);
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
//
|
||||
//
|
||||
// $Id: XrayFluoRunAction.cc
|
||||
// GEANT4 tag $Name: xray_fluo-V03-02-00
|
||||
// GEANT4 tag $Name: xray_fluo-V04-01-03
|
||||
//
|
||||
// Author: Elena Guardincerri (Elena.Guardincerri@ge.infn.it)
|
||||
//
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
//
|
||||
//
|
||||
// $Id: XrayFluoSteppingAction.cc
|
||||
// GEANT4 tag $Name: xray_fluo-V03-02-00
|
||||
// GEANT4 tag $Name: xray_fluo-V04-01-03
|
||||
//
|
||||
// Author: Elena Guardincerri (Elena.Guardincerri@ge.infn.it)
|
||||
//
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
//
|
||||
//
|
||||
// $Id: XrayFluoSteppingVerbose.cc
|
||||
// GEANT4 tag $Name: xray_fluo-V03-02-00
|
||||
// GEANT4 tag $Name: xray_fluo-V04-01-03
|
||||
//
|
||||
// Author: Elena Guardincerri (Elena.Guardincerri@ge.infn.it)
|
||||
//
|
||||
|
||||
Regular → Executable
+4
-2
@@ -22,7 +22,7 @@
|
||||
//
|
||||
//
|
||||
// $Id: XrayFluoVisManager.cc
|
||||
// GEANT4 tag $Name: xray_fluo-V03-02-00
|
||||
// GEANT4 tag $Name: xray_fluo-V04-01-03
|
||||
//
|
||||
// Author: Elena Guardincerri (Elena.Guardincerri@ge.infn.it)
|
||||
//
|
||||
@@ -43,6 +43,7 @@
|
||||
#include "G4DAWNFILE.hh"
|
||||
#include "G4GAGTree.hh"
|
||||
#include "G4HepRepFile.hh"
|
||||
#include "G4HepRep.hh"
|
||||
#include "G4RayTracer.hh"
|
||||
//#include "G4VRML1File.hh"
|
||||
//#include "G4VRML2File.hh"
|
||||
@@ -99,6 +100,7 @@ void XrayFluoVisManager::RegisterGraphicsSystems () {
|
||||
RegisterGraphicsSystem (new G4DAWNFILE);
|
||||
RegisterGraphicsSystem (new G4GAGTree);
|
||||
RegisterGraphicsSystem (new G4HepRepFile);
|
||||
RegisterGraphicsSystem (new G4HepRep);
|
||||
RegisterGraphicsSystem (new G4RayTracer);
|
||||
// RegisterGraphicsSystem (new G4VRML1File);
|
||||
//RegisterGraphicsSystem (new G4VRML2File);
|
||||
@@ -136,7 +138,7 @@ void XrayFluoVisManager::RegisterGraphicsSystems () {
|
||||
#ifdef G4VIS_USE_OIWIN32
|
||||
RegisterGraphicsSystem (new G4OpenInventorWin32);
|
||||
#endif
|
||||
|
||||
|
||||
/*
|
||||
#ifdef G4VIS_USE_VRML
|
||||
RegisterGraphicsSystem (new G4VRML1);
|
||||
|
||||
Reference in New Issue
Block a user