ATLAS Offline Software
Loading...
Searching...
No Matches
ALFA_BeamTrack.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3*/
4
5#include "ALFA_BeamTrack.h"
6
7//Athena Stuff
8#include "GaudiKernel/MsgStream.h"
10
11//FPTracker stuff
13#include "FPTracker/Beamline.h"
14#include "FPTracker/Particle.h"
20#include "FPTracker/Point.h"
21
22
23#include <memory>
24#include <iostream>
25#include <utility>
26
27
28int ALFA_BeamTrack::initialize(const FPConfig &ConfigValues){
29
30 m_ConfDir= ConfigValues.ConfDir;
31 m_AlfaTwiss = ConfigValues.UseALFA;
32
33
34 //initialisation of beampipes
35 if (m_AlfaTwiss) {std::cout<<"Will use alfa twiss files"<<std::endl;}
36
37
38 /*
39
40 boost::shared_ptr< std::ifstream > p_confFile;
41 p_confFile = FPTracker::getConfigFile(m_ConfDir, "FPData.txt") ;
42 m_ConfigData = FPTracker::readConfigData(p_confFile);
43
44 //SetPosition of RP in meter
45
46 //m_ConfigData.setPlane(ConfigValues.RPDistance);
47
48
49 ConfigData configData;
50 if( !readConfigData(p_confFile, configData) )
51 {
52 std::cout<<"fatal error reading config data\n";
53 return 1;
54 }
55
56
57 */
58
59 //Set Configuration parameters of FPTracker library
60 FPTracker::ConfigData ConfigData;
61
62
63 ConfigData.IP=ConfigValues.IP;
64 ConfigData.useaper=ConfigValues.useaper;
65 ConfigData.apermb=ConfigValues.apermb;
66 ConfigData.xcol1=ConfigValues.xcol1;
67 ConfigData.xcol2=ConfigValues.xcol2;
68 ConfigData.absZMagMax=ConfigValues.absZMagMax;
69 ConfigData.endMarker=ConfigValues.RPDistance;
70 ConfigData.setpbeam(ConfigValues.pbeam0);
71
72 /*
73 std::cout<<ConfigData.IP<<std::endl;
74 std::cout<<ConfigData.useaper<<std::endl;
75 std::cout<<ConfigData.apermb<<std::endl;
76 std::cout<<ConfigData.xcol1<<std::endl;
77 std::cout<<ConfigData.xcol2<<std::endl;
78 std::cout<<ConfigData.absZMagMax<<std::endl;
79 std::cout<<ConfigData.endMarker<<std::endl;
80 std::cout<<ConfigData.pbeam0<<std::endl;
81 std::cout<<ConfigData.brho<<std::endl;*/
82
83
84
85
86
87
88
89
90
91 m_ip = ConfigData.IP;
92 m_Magver = 3;
93
99 std::cout<<" beamline_1 start "<<'\n';
100 std::cout<<m_Beamline_1;
101 std::cout<<" beamline_1 end "<<"\n\n";
102
107 m_Beamline_2 = setupBeamline(ConfigData, m_Side, m_Magver, m_Magfile);
108
109 std::cout<<" beamline_2 start "<<'\n';
110 std::cout<<m_Beamline_2;
111 std::cout<<" beamline_2 end "<<"\n\n";
112
113 return true;
114}
115
116//calculates Position and Momentum at RP
118
119 FPTracker::Particle Particle=std::move(particle);
120 FPTracker::Point lost_markerMom(-99,-99,-99);
121
122
123 std::cout<<"fpTracker: "<<Particle<<std::endl;
124 Particle.direction().z()>0. ? m_Beamline_1.track(Particle):m_Beamline_2.track(Particle);
125 std::cout<<"fpTracker: "<<Particle<<std::endl;
126
127 //m_PosParticleRP=Particle.position(); //old version vith 97mm shift
128 m_PosParticleRP=Particle.positionRelBeam();//version without shift
129
130 FPTracker::Point momentum( Particle.direction().x()*Particle.momentum(),
131 Particle.direction().y()*Particle.momentum(),
132 Particle.direction().z()*Particle.momentum());
133
134 m_MomParticleRP=momentum;
135
136
137 if(Particle.isOutOfAperture())
138 {
139 //FPTracker::Point lost_markerPos(-99,-99,Particle.position().z());// old version with shift
140 FPTracker::Point lost_markerPos(-99,-99,Particle.positionRelBeam().z());
141 std::cout<<"Particle got lost"<<std::endl;
142 //m_PosParticleRP=lost_marker;
143 //write lost particle with -99 as maker in x and yposition z position ist the place where particle got lost
144 m_PosParticleRP=lost_markerPos;
145
146 m_MomParticleRP=lost_markerMom;
147 }
148
149
150 return true;
151}
152
153//returns particle position
157
158// returns momentum of particle
162
163
const FPTracker::Point & PosRP()
Gives Back Position.
FPTracker::Side m_Side
std::shared_ptr< std::ifstream > m_Magfile
FPTracker::Beamline m_Beamline_2
const FPTracker::Point & MomRP()
gives back Momentum
FPTracker::Point m_PosParticleRP
FPTracker::Beamline m_Beamline_1
int initialize(const FPConfig &ConfigValues)
int CalculatePosRP(FPTracker::Particle particle)
calculates the particle position and momentum at RP run first CalculatePosRP() then posRP() and momRP...
std::string m_ConfDir
FPTracker::Point m_MomParticleRP
std::shared_ptr< std::ifstream > getAlfaMagnetConfigFiles(const std::string &dir, const Side &side)
std::shared_ptr< std::ifstream > getMagnetConfigFiles(const std::string &dir, int IP, int magVer, const Side &side)
Beamline setupBeamline(const ConfigData &, const Side &, int magver, std::shared_ptr< std::ifstream >)
double apermb
double xcol2
float RPDistance
std::string ConfDir
float absZMagMax
double pbeam0
double xcol1