71 :outputFileName(
"xrayfluo"), phaseSpaceFlag(false), physicFlag (false),
72 gunParticleEnergies(0), gunParticleTypes(0)
81 G4AnalysisManager::Instance();
98 delete G4AnalysisManager::Instance();
143 man->
CreateH1(
"h1",
"Energy Deposit", 500,0.,10.);
144 man->
CreateH1(
"h2",
"Gamma born in the sample", 100,0.,10.);
145 man->
CreateH1(
"h3",
"Electrons born in the sample", 100,0.,10.);
146 man->
CreateH1(
"h4",
"Gammas leaving the sample", 300,0.,10.);
147 man->
CreateH1(
"h5",
"Electrons leaving the sample ",200000 ,0.,10.0);
148 man->
CreateH1(
"h6",
"Gammas reaching the detector", 100,0.,10.);
149 man->
CreateH1(
"h7",
"Spectrum of the incident particles", 100,0.,10.);
150 man->
CreateH1(
"h8",
"Protons reaching the detector", 100,0.,10.);
151 man->
CreateH1(
"h9",
"Protons leaving the sample", 100,0.,10.);
177 G4int particleID, processID;
185 if (raileighFlag ^ (!raileighFlag && (processID == 1 ||
191 else if (particleID == 0)
206 std::pair<G4double,G4String> result;
213 result.second =
name;
255 G4int isBornInTheSample=0;
259 if(aStep->GetPreStepPoint()->GetPhysicalVolume()->GetName()==
"Sample"){
260 G4ThreeVector creationPos = aStep->GetTrack()->GetVertexPosition();
270 (aStep->GetPostStepPoint()->GetStepStatus() == fGeomBoundary)
274 particleType = aStep->GetTrack()->GetDynamicParticle()->GetDefinition();
275 momentum = aStep->GetTrack()->GetDynamicParticle()->GetMomentum();
276 particleEnergy = aStep->GetPreStepPoint()->GetKineticEnergy();
277 if (creationPosVolume->
GetName() ==
"Sample" ) {
278 isBornInTheSample = 1;
289 if(aStep->GetTrack()->GetCreatorProcess())
291 parentProcess = aStep->GetTrack()->GetCreatorProcess()->GetProcessName();
294 if (parentProcess ==
"") parent = 0;
295 if (parentProcess ==
"ioni") parent = 1;
296 if (parentProcess ==
"LowEnPhotoElec") parent = 2;
297 if (parentProcess ==
"Transportation") parent = 3;
298 if (parentProcess ==
"initStep") parent = 4;
301 parentProcess =
"Not Known -- (primary generator + Rayleigh)";
305 if(aStep->GetTrack()){
306 sampleMaterial = aStep->GetTrack()->GetMaterial()->GetName();
307 if (sampleMaterial == (
"Dolorite" ||
"Anorthosite" ||
"Mars1" ||
"IceBasalt" ||
"HPGe")) sampleMat=1;
337 if(aStep->GetPreStepPoint()->GetPhysicalVolume()->GetName()==
"Sample"){
339 if(aStep->GetTrack()->GetNextVolume()->GetName() ==
"World" ) {
341 if ((aStep->GetTrack()->GetDynamicParticle()
346 aStep->GetPreStepPoint()->GetKineticEnergy();
350 else if ((aStep->GetTrack()->GetDynamicParticle()
354 aStep->GetPreStepPoint()->GetKineticEnergy();
357 else if ((aStep->GetTrack()->GetDynamicParticle()
361 protonsLeavSam = aStep->GetPreStepPoint()->GetKineticEnergy();
367 if((aStep->GetTrack()->GetDynamicParticle()
370 if(aStep->GetTrack()->GetCurrentStepNumber() == 1)
372 if(aStep->GetTrack()->GetParentID() != 0)
374 if(aStep->GetTrack()->GetVolume()->GetName() ==
"Sample")
377 aStep->GetPreStepPoint()->GetKineticEnergy();
383 else if ((aStep->GetTrack()->GetDynamicParticle()
386 if(aStep->GetTrack()->GetCurrentStepNumber() == 1)
388 if(aStep->GetTrack()->GetParentID() != 0)
390 if(aStep->GetTrack()->GetVolume()->GetName() ==
"Sample")
393 aStep->GetPreStepPoint()->GetKineticEnergy();
401 if(aStep->GetTrack()->GetNextVolume())
405 if(aStep->GetTrack()->GetNextVolume()->GetName() ==
"HPGeDetector")
408 if ((aStep->GetTrack()->GetDynamicParticle()
413 aStep->GetPreStepPoint()->GetKineticEnergy();
416 else if ((aStep->GetTrack()->GetDynamicParticle()
420 aStep->GetPreStepPoint()->GetKineticEnergy();
421 man->
FillH1(8,protonsAtTheDetPre);
G4int CreateNtupleIColumn(const G4String &name)
G4bool SetFirstHistoId(G4int firstId)
tools::rroot::ntuple * GetNtuple() const
G4int CreateH1(const G4String &name, const G4String &title, G4int nbins, G4double xmin, G4double xmax, const G4String &unitName="none", const G4String &fcnName="none", const G4String &binSchemeName="linear")
static XrayFluoAnalysisManager * instance
CLHEP::Hep3Vector G4ThreeVector
void SetPhysicFlag(G4bool)
void analyseStepping(const G4Step *aStep)
void SetVerboseLevel(G4int verboseLevel)
static G4Electron * Definition()
G4int CreateNtuple(const G4String &name, const G4String &title)
G4bool SetNtupleDColumn(const G4String &columnName, G4double &value)
const std::pair< G4double, G4String > GetEmittedParticleEnergyAndType()
virtual ~XrayFluoAnalysisManager()
static XrayFluoDetectorConstruction * GetInstance()
G4bool OpenFile(const G4String &fileName="")
#define G4MUTEX_INITIALIZER
void LoadGunData(G4String, G4bool)
G4bool SetNtupleIColumn(const G4String &columnName, G4int &value)
void analysePrimaryGenerator(G4double energy)
static G4Proton * Definition()
G4bool FillNtupleIColumn(G4int id, G4int value)
G4GLOB_DLL std::ostream G4cout
G4bool FillNtupleDColumn(G4int id, G4double value)
static XrayFluoAnalysisManager * getInstance()
std::vector< G4double > * gunParticleEnergies
G4int fParticleEnergyAndTypeIndex
G4bool SetFirstNtupleId(G4int firstId)
const G4String & GetName() const
G4bool FillH1(G4int id, G4double value, G4double weight=1.0)
std::vector< G4String > * gunParticleTypes
XrayFluoAnalysisManager()
virtual G4VPhysicalVolume * LocateGlobalPointAndSetup(const G4ThreeVector &point, const G4ThreeVector *direction=0, const G4bool pRelativeSearch=true, const G4bool ignoreDirection=true)
void SetOutputFileName(G4String)
void SetVerboseLevel(G4int verboseLevel)
XrayFluoAnalysisMessenger * analisysMessenger
G4int CreateNtupleDColumn(const G4String &name)
void analyseEnergyDep(G4double eDep)
virtual G4double DistanceToOut(const G4ThreeVector &p, const G4ThreeVector &v, const G4bool calcNorm=false, G4bool *validNorm=0, G4ThreeVector *n=0) const =0
G4LogicalVolume * GetLogicalVolume() const
G4VSolid * GetSolid() const
static G4Gamma * Definition()
G4Navigator * GetGeometryNavigator() const