ATLAS Offline Software
Functions
DerivedG4SensitiveDetectorTestSetting.h File Reference
#include "G4HCofThisEvent.hh"
#include "G4Step.hh"
#include "G4TouchableHistory.hh"
#include "G4Track.hh"
#include "G4StepPoint.hh"
#include "G4DynamicParticle.hh"
#include "G4ThreeVector.hh"
#include "G4Box.hh"
#include "G4NistManager.hh"
#include "G4Material.hh"
#include "G4VPhysicalVolume.hh"
#include "G4SystemOfUnits.hh"
#include "DerivedG4Process.h"

Go to the source code of this file.

Functions

void DerivedG4SensitiveDetectorTestSetting (G4Step &sp, G4double &totalEnergyDeposit, std::vector< G4String > &physicalNames, G4String &logicalName1, std::vector< G4int > &copyNos, G4ThreeVector &preStepPos, G4ThreeVector &postStepPos, G4double &globalTime0, G4double &kineticEnergy0, G4double &velocity0, G4double &globalTime, G4double &kineticEnergy, G4double &globalTime1, G4double &kineticEnergy1, G4double &velocity1, G4double &steplength, G4double &charge, G4int &encoding, G4int &antiencoding, G4String &astring, G4ProcessType &atype, G4String &nop1, G4String &nop2, G4String &nop3)
 

Function Documentation

◆ DerivedG4SensitiveDetectorTestSetting()

void DerivedG4SensitiveDetectorTestSetting ( G4Step &  sp,
G4double &  totalEnergyDeposit,
std::vector< G4String > &  physicalNames,
G4String &  logicalName1,
std::vector< G4int > &  copyNos,
G4ThreeVector &  preStepPos,
G4ThreeVector &  postStepPos,
G4double &  globalTime0,
G4double &  kineticEnergy0,
G4double &  velocity0,
G4double &  globalTime,
G4double &  kineticEnergy,
G4double &  globalTime1,
G4double &  kineticEnergy1,
G4double &  velocity1,
G4double &  steplength,
G4double &  charge,
G4int &  encoding,
G4int &  antiencoding,
G4String &  astring,
G4ProcessType &  atype,
G4String &  nop1,
G4String &  nop2,
G4String &  nop3 
)

Definition at line 24 of file DerivedG4SensitiveDetectorTestSetting.h.

25 {
26 
27  if (copyNos.size()!=physicalNames.size()) { throw std::runtime_error("ERROR: physicalNames and copyNos must have the same length."); }
28 //decorate sp with the variable called TotalEnergyDeposit
29  G4double TotalEnergyDeposit = totalEnergyDeposit;//para(i.e. there is a parameter in this line)
30  sp.SetTotalEnergyDeposit( TotalEnergyDeposit );
31 //end
32 
33 //decorate sp with a G4StepPoint object
34  G4StepPoint* stepPoint = new G4StepPoint();
35  stepPoint->SetPosition(preStepPos);//para
36  G4NavigationHistory* navigationHistory = new G4NavigationHistory();
37  G4String boxName = "name";
38  G4Box* box = new G4Box(boxName, 1.0, 1.0, 1.0);
39  G4NistManager* man = G4NistManager::Instance();
40  G4Material* material = man->FindOrBuildMaterial("G4_AIR");
41  G4String name = "logicalName";
42  G4LogicalVolume* fLogical = new G4LogicalVolume(box, material, name);
43  G4String PhysicalName = physicalNames[0];//para
44  G4VPhysicalVolume* pPhysical = nullptr;
45  G4MyPhysicalVolume* physicalVolume = new G4MyPhysicalVolume(0, G4ThreeVector(0,0,0), PhysicalName, fLogical, pPhysical);
46  G4int CopyNo = copyNos[0];
47  physicalVolume->SetCopyNo(CopyNo);//para
48  G4int nReplica = 2;
49  navigationHistory->SetFirstEntry(physicalVolume);
50  if (physicalNames.size()==1) {
51  // temporary workaround
52  navigationHistory->NewLevel(physicalVolume, kNormal, nReplica);
53  navigationHistory->NewLevel(physicalVolume, kNormal, nReplica);
54  navigationHistory->NewLevel(physicalVolume, kNormal, nReplica);
55  navigationHistory->NewLevel(physicalVolume, kNormal, nReplica);
56  navigationHistory->NewLevel(physicalVolume, kNormal, nReplica);
57  }
58  else {
59  bool skip(true);
60  size_t idx(0);
61  for( const auto& name : physicalNames) {
62  if (skip) { skip=false; ++idx; continue; }//skip first entry
63  G4MyPhysicalVolume* parentPhysVol = new G4MyPhysicalVolume(0, G4ThreeVector(0,0,0), name, fLogical, pPhysical);
64  parentPhysVol->SetCopyNo(copyNos[idx]);
65  ++idx;
66  navigationHistory->NewLevel(parentPhysVol, kNormal, nReplica);
67  }
68  }
69  G4TouchableHistory* touchableHistory = new G4TouchableHistory(*navigationHistory);
70  G4TouchableHandle touchableHandle(touchableHistory);
71  stepPoint->SetTouchableHandle(touchableHandle);
72  G4double GlobalTime0 = globalTime0;
73  G4double KineticEnergy0 = kineticEnergy0;
74  G4double Velocity0 = velocity0;
75  stepPoint->SetGlobalTime(GlobalTime0);//para
76  stepPoint->SetKineticEnergy(KineticEnergy0);//para
77  stepPoint->SetVelocity(Velocity0);//para
78 
79  sp.SetPreStepPoint(stepPoint);
80 //end
81 
82 //decorate sp with another G4StepPoint object
83  G4StepPoint* stepPoint1 = new G4StepPoint();
84  stepPoint1->SetPosition(postStepPos);//para
85  G4double GlobalTime1 = globalTime1;
86  G4double KineticEnergy1 = kineticEnergy1;
87  G4double Velocity1 = velocity1;
88  stepPoint1->SetGlobalTime(GlobalTime1);//para
89  stepPoint1->SetKineticEnergy(KineticEnergy1);//para
90  stepPoint1->SetVelocity(Velocity1);//para
91 
92  sp.SetPostStepPoint(stepPoint1);
93 //end
94 
95 //set step length for the step
96  G4double StepLength = steplength;
97  sp.SetStepLength(StepLength);//para
98 //end
99 
100 //decorate sp with a G4Track object
101  G4double Charge = charge;
102  G4int Encoding = encoding;
103  G4int Antiencoding = antiencoding;
104  G4String NOP1 = nop1;
105  G4String NOP2 = nop2;
106  G4String NOP3 = nop3;
107  G4ParticleDefinition* particle = new G4ParticleDefinition(NOP1, 0.0*MeV, 0.0*MeV, Charge,//para
108  2, -1, -1,
109  0, 0, 0,
110  NOP2, 0, 0, Encoding,//para
111  true, -1.0, nullptr,
112  false, NOP3, Antiencoding//para
113  );
114  G4ThreeVector aMomentumDirection(0,0,0);
115  G4double aKineticEnergy = kineticEnergy;//para
116  G4DynamicParticle* dynamicPar = new G4DynamicParticle(particle, aMomentumDirection, aKineticEnergy);
117  G4double aValueTime = 1;
118  G4ThreeVector ValuePosition(1.0, 1.0, 1.0);
119  G4Track* track = new G4Track(dynamicPar, aValueTime, ValuePosition);
120  //G4double globalTime = globalTime;
121  track->SetGlobalTime(globalTime);//para
122  int trackID = 3;
123  track->SetTrackID(trackID);
124  G4String boxName1 = "name";
125  G4Box* box1 = new G4Box(boxName1, 1.0, 1.0, 1.0);
126  G4NistManager* man1 = G4NistManager::Instance();
127  G4Material* material1 = man1->FindOrBuildMaterial("G4_AIR");
128  G4String name2 = logicalName1;//para
129  G4LogicalVolume* fLogical1 = new G4LogicalVolume(box1, material1, name2);
130  track->SetLogicalVolumeAtVertex(fLogical1);
131  G4Step* stepForTrack = new G4Step();
132  G4StepPoint* stepPoint2 = new G4StepPoint();
133  G4Material* mat1 = man1->FindOrBuildMaterial("G4_AIR");
134  G4MaterialPropertiesTable* propertiesTable = new G4MaterialPropertiesTable();
135  G4double Energies[5] = {1,2,3,4,5};
136  G4double Values[5] = {1,2,3,4,5};
137  size_t VectorLength = 5;
138  G4MaterialPropertyVector* mpv = new G4MaterialPropertyVector(Energies, Values, VectorLength);
139  G4MaterialPropertyVector* mpv1 = new G4MaterialPropertyVector(Energies, Values, VectorLength);
140  propertiesTable->AddProperty("RINDEX", mpv);
141  propertiesTable->AddProperty("ABSLENGTH", mpv1);
142  mat1->SetMaterialPropertiesTable(propertiesTable);
143  stepPoint2->SetMaterial(mat1);
144  stepForTrack->SetPreStepPoint(stepPoint2);
145  track->SetStep(stepForTrack);
146 
147  G4ProcessType aType = atype;
148  G4String aString = astring;
149  G4MyProcess* process = new G4MyProcess( aString, aType );//para para
150  track->SetCreatorProcess( process );
151 
152  track->SetTouchableHandle(touchableHandle);
153 
154  sp.SetTrack(track);
155 //end
156 
157  return;
158 }
Trk::ParticleSwitcher::particle
constexpr ParticleHypothesis particle[PARTICLEHYPOTHESES]
the array of masses
Definition: ParticleHypothesis.h:76
makePlot.Energies
Energies
Definition: makePlot.py:24
python.SystemOfUnits.MeV
int MeV
Definition: SystemOfUnits.py:154
SUSY_SimplifiedModel_PostInclude.process
string process
Definition: SUSY_SimplifiedModel_PostInclude.py:42
G4MyProcess
Definition: DerivedG4Process.h:10
generateReferenceFile.encoding
encoding
Definition: generateReferenceFile.py:15
G4MyPhysicalVolume::SetCopyNo
void SetCopyNo(G4int CopyNo) final
Definition: DerivedG4PhysicalVolume.h:31
G4MyPhysicalVolume
Definition: DerivedG4PhysicalVolume.h:15
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
charge
double charge(const T &p)
Definition: AtlasPID.h:494
LArNewCalib_DelayDump_OFC_Cali.idx
idx
Definition: LArNewCalib_DelayDump_OFC_Cali.py:69
xAOD::track
@ track
Definition: TrackingPrimitives.h:512
skip
bool skip
Definition: TrigGlobEffCorrValidation.cxx:190
Trk::StepLength
@ StepLength
Definition: MaterialAssociationType.h:17