213 const std::map<G4String, G4int>& collimatorIndicesByNameIn,
214 const std::vector<BDSOutputROOTEventCollimatorInfo>& collimatorInfoIn,
215 const std::vector<G4String>& collimatorBranchNamesIn,
216 const std::vector<G4int>& cavityIndicesIn,
217 const std::map<G4String, G4int>& cavityIndicesByNameIn,
218 const std::vector<BDSOutputROOTEventCavityInfo>& cavityInfoIn,
219 const std::vector<G4String>& cavityBranchNamesIn,
220 const std::map<G4String, G4Transform3D>* scorerMeshPlacements,
221 const std::map<short int, G4String>* materialIDToNameUnique,
222 G4bool storeTrajectory)
225 for (
const auto& nameSPos : sr->GetUniquePlaneNamesAndSPosition())
227 samplerNamesUnique.push_back(std::string(nameSPos.first) +
".");
228 samplerSPosition.push_back((
double) nameSPos.second / CLHEP::m);
230 for (
const auto& name : sr->GetUniqueNamesCylinder())
231 {samplerCNamesUnique.push_back(std::string(name) +
".");}
232 for (
const auto& name : sr->GetUniqueNamesSphere())
233 {samplerSNamesUnique.push_back(std::string(name) +
".");}
234 samplerCRadius = sr->GetUniqueNameToRadiusCylinder();
235 samplerSRadius = sr->GetUniqueNameToRadiusSphere();
237 for (
const auto& name : collimatorBranchNamesIn)
239 for (
const auto& name : cavityBranchNamesIn)
242 if (scorerMeshPlacements)
244 for (
const auto& kv : *scorerMeshPlacements)
246 const G4String& name = kv.first;
247 scoringMeshTranslation[name] =
ConvertToROOT(kv.second.getTranslation());
248 scoringMeshRotation[name] =
ConvertToROOT(kv.second.getRotation());
249 scoringMeshName.emplace_back(name);
259 for (
const auto value : collimatorIndicesIn)
264 for (
const auto& kv : collimatorIndicesByNameIn)
272 for (
const auto value : cavityIndicesIn)
277 for (
const auto& kv : cavityIndicesByNameIn)
283 if (materialIDToNameUnique && storeTrajectory)
285 for (
const auto& kv : *materialIDToNameUnique)
287 materialIDToName[kv.first] = (std::string)kv.second;
288 materialNameToID[(std::string)kv.second] = kv.first;
292 n = (int)beamline->
size();
294 for (
auto i = beamline->
begin(); i != beamline->
end(); ++i)
296 componentName.push_back((*i)->GetName());
297 placementName.push_back((*i)->GetPlacementName());
298 componentType.push_back((*i)->GetType());
299 length.push_back((
float)((*i)->GetAcceleratorComponent()->GetArcLength() / CLHEP::m));
300 angle.push_back((
float)((*i)->GetAcceleratorComponent()->GetAngle() / CLHEP::radian));
307 staRefPos.emplace_back(
ConvertToROOT((*i)->GetReferencePositionStart()));
308 midRefPos.emplace_back(
ConvertToROOT((*i)->GetReferencePositionMiddle()));
309 endRefPos.emplace_back(
ConvertToROOT((*i)->GetReferencePositionEnd()));
310 staRefRot.push_back(
ConvertToROOT((*i)->GetReferenceRotationStart()));
311 midRefRot.push_back(
ConvertToROOT((*i)->GetReferenceRotationMiddle()));
312 endRefRot.push_back(
ConvertToROOT((*i)->GetReferenceRotationEnd()));
318 tilt.push_back((
float)(to->
GetTilt() / CLHEP::rad));
319 offsetX.push_back((
float)(to->
GetXOffset() / CLHEP::m));
320 offsetY.push_back((
float)(to->
GetYOffset() / CLHEP::m));
325 offsetX.push_back(0);
326 offsetY.push_back(0);
330 staS.push_back((
float)((*i)->GetSPositionStart() / CLHEP::m));
331 midS.push_back((
float)((*i)->GetSPositionMiddle() / CLHEP::m));
332 endS.push_back((
float)((*i)->GetSPositionEnd() / CLHEP::m));
336 beamPipeType.push_back(beampipeinfo ? beampipeinfo->
beamPipeType.ToString() :
"");
337 beamPipeAper1.push_back(beampipeinfo ? beampipeinfo->
aper1 / CLHEP::m : 0);
338 beamPipeAper2.push_back(beampipeinfo ? beampipeinfo->
aper2 / CLHEP::m : 0);
339 beamPipeAper3.push_back(beampipeinfo ? beampipeinfo->
aper3 / CLHEP::m : 0);
340 beamPipeAper4.push_back(beampipeinfo ? beampipeinfo->
aper4 / CLHEP::m : 0);
343 const auto accComp = (*i)->GetAcceleratorComponent();
344 material.push_back(accComp->Material());
347 std::vector<std::vector<float>*> localNorm = {&k1,&k2,&k3,&k4,&k5,&k6,&k7,&k8,&k9,&k10,&k11,&k12};
348 std::vector<std::vector<float>*> localSkew = {&k1s,&k2s,&k3s,&k4s,&k5s,&k6s,&k7s,&k8s,&k9s,&k10s,&k11s,&k12s};
353 for (
int j = 0; j < (int)localNorm.size(); j++)
354 {localNorm[j]->push_back(0);}
355 for (
int j = 0; j < (int)localSkew.size(); j++)
356 {localSkew[j]->push_back(0);}
368 fintxk2.push_back(0);
373 std::vector<std::string> localPVNames;
374 std::vector<std::string> localPVNamesWPointer;
377 auto name = [](G4VPhysicalVolume* pv){
return pv->GetName();};
378 std::transform(setOfPVs->begin(), setOfPVs->end(), std::back_inserter(localPVNames), name);
379 auto fullName = [](G4VPhysicalVolume* pv)
381 std::stringstream ss;
382 ss << static_cast<const void*>(pv);
383 std::string addressName = ss.str();
384 return pv->GetName() + addressName;
386 std::transform(setOfPVs->begin(), setOfPVs->end(), std::back_inserter(localPVNamesWPointer), fullName);
389 pvName.push_back(localPVNames);
390 pvNameWPointer.push_back(localPVNamesWPointer);
392 midT.push_back((
float)(*i)->GetSynchronousTMiddle()/CLHEP::ns);
393 staP.push_back((
float)(*i)->GetStartMomentum()/CLHEP::GeV);
394 staEk.push_back((
float)(*i)->GetStartKineticEnergy()/CLHEP::GeV);
408 for (
int j = 0; j < (int)localNorm.size(); j++)
409 {localNorm[j]->push_back((
float)normComponents[j]);}
411 for (
int j = 0; j < (int)localSkew.size(); j++)
412 {localSkew[j]->push_back((
float)skewComponents[j]);}
422 fint.push_back((
float)(*ms)[
"fint"]);
423 fintx.push_back((
float)(*ms)[
"fintx"]);
424 fintk2.push_back((
float)(*ms)[
"fintk2"]);
425 fintxk2.push_back((
float)(*ms)[
"fintxk2"]);