212 const std::map<G4String, G4int>& collimatorIndicesByNameIn,
213 const std::vector<BDSOutputROOTEventCollimatorInfo>& collimatorInfoIn,
214 const std::vector<G4String>& collimatorBranchNamesIn,
215 const std::vector<G4int>& cavityIndicesIn,
216 const std::map<G4String, G4int>& cavityIndicesByNameIn,
217 const std::vector<BDSOutputROOTEventCavityInfo>& cavityInfoIn,
218 const std::vector<G4String>& cavityBranchNamesIn,
219 const std::map<G4String, G4Transform3D>* scorerMeshPlacements,
220 const std::map<short int, G4String>* materialIDToNameUnique,
221 G4bool storeTrajectory)
224 for (
const auto& nameSPos : sr->GetUniquePlaneNamesAndSPosition())
226 samplerNamesUnique.push_back(std::string(nameSPos.first) +
".");
227 samplerSPosition.push_back((
double) nameSPos.second / CLHEP::m);
229 for (
const auto& name : sr->GetUniqueNamesCylinder())
230 {samplerCNamesUnique.push_back(std::string(name) +
".");}
231 for (
const auto& name : sr->GetUniqueNamesSphere())
232 {samplerSNamesUnique.push_back(std::string(name) +
".");}
233 samplerCRadius = sr->GetUniqueNameToRadiusCylinder();
234 samplerSRadius = sr->GetUniqueNameToRadiusSphere();
236 for (
const auto& name : collimatorBranchNamesIn)
238 for (
const auto& name : cavityBranchNamesIn)
241 if (scorerMeshPlacements)
243 for (
const auto& kv : *scorerMeshPlacements)
245 const G4String& name = kv.first;
246 scoringMeshTranslation[name] =
ConvertToROOT(kv.second.getTranslation());
247 scoringMeshRotation[name] =
ConvertToROOT(kv.second.getRotation());
248 scoringMeshName.emplace_back(name);
258 for (
const auto value : collimatorIndicesIn)
263 for (
const auto& kv : collimatorIndicesByNameIn)
271 for (
const auto value : cavityIndicesIn)
276 for (
const auto& kv : cavityIndicesByNameIn)
282 if (materialIDToNameUnique && storeTrajectory)
284 for (
const auto& kv : *materialIDToNameUnique)
286 materialIDToName[kv.first] = (std::string)kv.second;
287 materialNameToID[(std::string)kv.second] = kv.first;
291 n = (int)beamline->
size();
293 for (
auto i = beamline->
begin(); i != beamline->
end(); ++i)
295 componentName.push_back((*i)->GetName());
296 placementName.push_back((*i)->GetPlacementName());
297 componentType.push_back((*i)->GetType());
298 length.push_back((
float)((*i)->GetAcceleratorComponent()->GetArcLength() / CLHEP::m));
299 angle.push_back((
float)((*i)->GetAcceleratorComponent()->GetAngle() / CLHEP::radian));
306 staRefPos.emplace_back(
ConvertToROOT((*i)->GetReferencePositionStart()));
307 midRefPos.emplace_back(
ConvertToROOT((*i)->GetReferencePositionMiddle()));
308 endRefPos.emplace_back(
ConvertToROOT((*i)->GetReferencePositionEnd()));
309 staRefRot.push_back(
ConvertToROOT((*i)->GetReferenceRotationStart()));
310 midRefRot.push_back(
ConvertToROOT((*i)->GetReferenceRotationMiddle()));
311 endRefRot.push_back(
ConvertToROOT((*i)->GetReferenceRotationEnd()));
317 tilt.push_back((
float)(to->
GetTilt() / CLHEP::rad));
318 offsetX.push_back((
float)(to->
GetXOffset() / CLHEP::m));
319 offsetY.push_back((
float)(to->
GetYOffset() / CLHEP::m));
324 offsetX.push_back(0);
325 offsetY.push_back(0);
329 staS.push_back((
float)((*i)->GetSPositionStart() / CLHEP::m));
330 midS.push_back((
float)((*i)->GetSPositionMiddle() / CLHEP::m));
331 endS.push_back((
float)((*i)->GetSPositionEnd() / CLHEP::m));
335 beamPipeType.push_back(beampipeinfo ? beampipeinfo->
beamPipeType.ToString() :
"");
336 beamPipeAper1.push_back(beampipeinfo ? beampipeinfo->
aper1 / CLHEP::m : 0);
337 beamPipeAper2.push_back(beampipeinfo ? beampipeinfo->
aper2 / CLHEP::m : 0);
338 beamPipeAper3.push_back(beampipeinfo ? beampipeinfo->
aper3 / CLHEP::m : 0);
339 beamPipeAper4.push_back(beampipeinfo ? beampipeinfo->
aper4 / CLHEP::m : 0);
342 const auto accComp = (*i)->GetAcceleratorComponent();
343 material.push_back(accComp->Material());
346 std::vector<std::vector<float>*> localNorm = {&k1,&k2,&k3,&k4,&k5,&k6,&k7,&k8,&k9,&k10,&k11,&k12};
347 std::vector<std::vector<float>*> localSkew = {&k1s,&k2s,&k3s,&k4s,&k5s,&k6s,&k7s,&k8s,&k9s,&k10s,&k11s,&k12s};
352 for (
int j = 0; j < (int)localNorm.size(); j++)
353 {localNorm[j]->push_back(0);}
354 for (
int j = 0; j < (int)localSkew.size(); j++)
355 {localSkew[j]->push_back(0);}
367 fintxk2.push_back(0);
372 std::vector<std::string> localPVNames;
373 std::vector<std::string> localPVNamesWPointer;
376 auto name = [](G4VPhysicalVolume* pv){
return pv->GetName();};
377 std::transform(setOfPVs->begin(), setOfPVs->end(), std::back_inserter(localPVNames), name);
378 auto fullName = [](G4VPhysicalVolume* pv)
380 std::stringstream ss;
381 ss << static_cast<const void*>(pv);
382 std::string addressName = ss.str();
383 return pv->GetName() + addressName;
385 std::transform(setOfPVs->begin(), setOfPVs->end(), std::back_inserter(localPVNamesWPointer), fullName);
388 pvName.push_back(localPVNames);
389 pvNameWPointer.push_back(localPVNamesWPointer);
391 midT.push_back((
float)(*i)->GetSynchronousTMiddle()/CLHEP::ns);
392 staP.push_back((
float)(*i)->GetStartMomentum()/CLHEP::GeV);
393 staEk.push_back((
float)(*i)->GetStartKineticEnergy()/CLHEP::GeV);
407 for (
int j = 0; j < (int)localNorm.size(); j++)
408 {localNorm[j]->push_back((
float)normComponents[j]);}
410 for (
int j = 0; j < (int)localSkew.size(); j++)
411 {localSkew[j]->push_back((
float)skewComponents[j]);}
421 fint.push_back((
float)(*ms)[
"fint"]);
422 fintx.push_back((
float)(*ms)[
"fintx"]);
423 fintk2.push_back((
float)(*ms)[
"fintk2"]);
424 fintxk2.push_back((
float)(*ms)[
"fintxk2"]);