ATLAS Offline Software
Loading...
Searching...
No Matches
setupBeamline.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3*/
4
10#include "FPTracker/Magnet.h"
14#include "FPTracker/collSet.h"
15#include "FPTracker/Plane.h"
16#include "FPTracker/Beamline.h"
19#include "FPTracker/Particle.h"
20#include <fstream>
21#include <iostream>
22
23namespace FPTracker{
24
26 const ConfigData& configData,
27 const Side& side,
28 int magver,
29 std::shared_ptr< std::ifstream> magfile
30 )
31 {
32
33 Magnet::Container_t magnets = magnetSet(configData, side, magver, std::move(magfile));
34 Plane::Ptr_t endPlane( new Plane(configData.endMarker, side) );
35 CollimatorData collimatorData(configData);
36 Collimator::Container_t collimators = collSet(collimatorData, side);
37
38 IBeamElement::List_t elements;
39 //elements.reserve( 2*(magnets.size()+collimators.size()+planes.size()) );
40 elements.assign(magnets.begin(), magnets.end());
41 elements.push_back(std::move(endPlane));
42 elements.insert(elements.end(), collimators.begin(), collimators.end());
44
45
46 IBeamElement::ListIter_t current = elements.begin();
47 IBeamElement::ListIter_t last = elements.end();
48
49 elements.push_front
50 (
53 0.,
54 (*current)->frontFace(),
56 (*current)->side()
57 )
58 )
59 );
60 ++current;
61
62 for(; current != last; ++current){
63 IBeamElement::ListIter_t previous = current;
64 --previous;
65 elements.insert(current,
68 *previous,
69 *current
70 )
71 )
72 );
73 }
74
75 Beamline beamline(elements.begin(), elements.end());
76
77 double pbeam = configData.pbeam0;
78 std::shared_ptr<IParticle> ip = (side == beam1) ?
79 std::shared_ptr<IParticle>(new Particle(0., 0., 0., 0., 0., pbeam) ):
80 std::shared_ptr<IParticle>(new Particle(0., 0., 0., 0., 0., -1.*pbeam) );
81 beamline.calibrate( *ip );
82
83
84 return beamline;
85 }
86}
std::shared_ptr< IBeamElement > Ptr_t
std::vector< Ptr_t > Container_t
Collimator::Container_t collSet(const CollimatorData &, Side)
Definition collSet.cxx:12
bool absZGreater(const PtrType rhs, const PtrType lhs)
Magnet::Container_t magnetSet(const ConfigData &, const Side &side, int magversion, std::shared_ptr< std::ifstream > magfile)
Definition magnetSet.cxx:56
TransversePoint beamlineXPosition(double z)
Beamline setupBeamline(const ConfigData &, const Side &, int magver, std::shared_ptr< std::ifstream >)