|
ATLAS Offline Software
|
#include <ForwardRegionFieldSvc.h>
|
G4ThreeVector | FieldValue (G4ThreeVector Point) const |
|
void | InitMagData () |
|
std::vector< std::vector< std::string > > | loadDataFile (const char *fileName, int cols) |
|
std::vector< std::vector< std::string > > | loadDataFileNLines (const char *fileName, int cols, int N, std::string &header) |
|
double | kLToB (double kL, double lenght, double momentum) |
|
void | InitMagDataFromTwiss (const std::vector< std::vector< std::string > > &loadedTwissFile, int beam, double momentum) |
|
void | writeOutTwiss (const std::vector< std::vector< std::string >> &loadedTwissFile, int beam, const std::string &header) |
|
void | getMagnetTransformParams (int beam, int magnet, G4ThreeVector Point, HepGeom::Point3D< double > &pointMagStart, HepGeom::Point3D< double > &pointMagEnd, double &rotZ) const |
|
int | getMagNumFromName (const std::string &name) const |
|
Definition at line 29 of file ForwardRegionFieldSvc.h.
◆ ForwardRegionFieldSvc()
MagField::ForwardRegionFieldSvc::ForwardRegionFieldSvc |
( |
const std::string & |
name, |
|
|
ISvcLocator * |
svc |
|
) |
| |
Constructor with parameters.
Definition at line 37 of file ForwardRegionFieldSvc.cxx.
46 declareProperty(
"Magnet",
m_magnet,
"integer property");
49 declareProperty(
"ForwardRegionProperties",
m_properties);
54 const int fileMQXACols(7);
74 const int fileMQXBCols(7);
◆ FieldValue()
G4ThreeVector MagField::ForwardRegionFieldSvc::FieldValue |
( |
G4ThreeVector |
Point | ) |
const |
|
private |
Definition at line 140 of file ForwardRegionFieldSvc.cxx.
147 HepGeom::Point3D<double> pointMagStart;
148 HepGeom::Point3D<double> pointMagEnd;
156 bool pointsNotDefined = (pointMagStart.distance2() == 0 || pointMagEnd.distance2() == 0);
159 double xShift = pointsNotDefined ?
getMagXOff(
m_magnet) : (pointMagStart[0]+pointMagEnd[0])*0.5;
160 double yShift = pointsNotDefined ?
getMagYOff(
m_magnet) : (pointMagStart[1]+pointMagEnd[1])*0.5;
167 field = G4ThreeVector(gradB*(
Point[1]-yShift),gradB*(
Point[0]-xShift),0);
175 field = G4ThreeVector(gradB*(
Point[1]-yShift),gradB*(
Point[0]-xShift),0);
181 if(pointsNotDefined){
182 if(rotZ == 0)
return field;
183 return HepGeom::RotateZ3D(rotZ)*(HepGeom::Vector3D<double>)
field;
187 HepGeom::Point3D<double> pointMagEndNoShift(pointMagEnd[0]-xShift, pointMagEnd[1]-yShift, pointMagEnd[2]);
189 HepGeom::Point3D<double> pointMagRotCenter(0,0,(pointMagStart[2]+pointMagEnd[2])/2);
191 HepGeom::Vector3D<double> vecNoRot(0,0,pointMagEnd[2]-pointMagRotCenter[2]);
192 HepGeom::Vector3D<double> vecRot = pointMagEndNoShift - pointMagRotCenter;
194 HepGeom::Vector3D<double> vecRotAxis = vecNoRot.cross(vecRot);
195 double angle = vecNoRot.angle(vecRot);
199 field = rotateField*HepGeom::RotateZ3D(rotZ)*(HepGeom::Vector3D<double>)
field;
◆ getField()
void MagField::ForwardRegionFieldSvc::getField |
( |
const double * |
xyz, |
|
|
double * |
bxyz, |
|
|
double * |
deriv = nullptr |
|
) |
| const |
|
finaloverridevirtual |
IMagFieldSvc interface methods.
get B field value at given position xyz[3] is in mm, bxyz[3] is in kT if deriv[9] is given, field derivatives are returned in kT/mm
Definition at line 123 of file ForwardRegionFieldSvc.cxx.
◆ getFieldZR()
void MagField::ForwardRegionFieldSvc::getFieldZR |
( |
const double * |
xyz, |
|
|
double * |
bxyz, |
|
|
double * |
deriv = nullptr |
|
) |
| const |
|
finaloverridevirtual |
get B field value on the z-r plane at given position
works only inside the solenoid; otherwise calls getField() above xyz[3] is in mm, bxyz[3] is in kT if deriv[9] is given, field derivatives are returned in kT/mm
Definition at line 135 of file ForwardRegionFieldSvc.cxx.
137 throw std::logic_error(
"MagField::ForwardRegionFieldSvc::getFieldZR should not be called");
◆ getKick()
G4ThreeVector MagField::ForwardRegionFieldSvc::getKick |
( |
int |
beam | ) |
const |
◆ getMag()
double MagField::ForwardRegionFieldSvc::getMag |
( |
int |
magnet, |
|
|
int |
beam |
|
) |
| const |
◆ getMagInd()
G4ThreeVector MagField::ForwardRegionFieldSvc::getMagInd |
( |
G4ThreeVector |
Point, |
|
|
int |
q, |
|
|
int |
beam |
|
) |
| const |
Non-inherited public methods FIXME - add new interface?
Definition at line 325 of file ForwardRegionFieldSvc.cxx.
328 if(
q == 1) MQXAB = 1;
344 G4ThreeVector
B(0,0,0);
363 if(x < maxMQXA && x > minMQXA && y < maxMQXA && y > minMQXA)
367 B[0] =
B[0]*
pow(-1.0,
beam)*(gradMQX/224.29);
368 B[1] =
B[1]*
pow(-1.0,
beam)*(gradMQX/224.29);
388 if(x < maxMQXB && x > minMQXB && y < maxMQXB && y > minMQXB)
392 B[0] =
B[0]*
pow(-1.0,
beam)*(gradMQX/216.1787104);
393 B[1] =
B[1]*
pow(-1.0,
beam)*(gradMQX/216.1787104);
◆ getMagnetTransformParams()
void MagField::ForwardRegionFieldSvc::getMagnetTransformParams |
( |
int |
beam, |
|
|
int |
magnet, |
|
|
G4ThreeVector |
Point, |
|
|
HepGeom::Point3D< double > & |
pointMagStart, |
|
|
HepGeom::Point3D< double > & |
pointMagEnd, |
|
|
double & |
rotZ |
|
) |
| const |
|
private |
◆ getMagNumFromName()
int MagField::ForwardRegionFieldSvc::getMagNumFromName |
( |
const std::string & |
name | ) |
const |
|
private |
Definition at line 581 of file ForwardRegionFieldSvc.cxx.
584 if (
name ==
"\"MBXW.A4R1\"" ||
name ==
"\"MBXW.A4L1\"")
return s_D1;
585 if (
name ==
"\"MBXW.B4R1\"" ||
name ==
"\"MBXW.B4L1\"")
return s_D1;
586 if (
name ==
"\"MBXW.C4R1\"" ||
name ==
"\"MBXW.C4L1\"")
return s_D1;
587 if (
name ==
"\"MBXW.D4R1\"" ||
name ==
"\"MBXW.D4L1\"")
return s_D1;
588 if (
name ==
"\"MBXW.E4R1\"" ||
name ==
"\"MBXW.E4L1\"")
return s_D1;
589 if (
name ==
"\"MBXW.F4R1\"" ||
name ==
"\"MBXW.F4L1\"")
return s_D1;
590 if (
name ==
"\"MBRC.4R1.B1\"" ||
name ==
"\"MBRC.4L1.B2\"")
return s_D2;
593 if(
name ==
"\"MQXA.1R1\"" ||
name ==
"\"MQXA.1L1\"")
return s_Q1;
594 if(
name ==
"\"MQXB.A2R1\"" ||
name ==
"\"MQXB.A2L1\"")
return s_Q2;
595 if(
name ==
"\"MQXB.B2R1\"" ||
name ==
"\"MQXB.B2L1\"")
return s_Q2;
596 if(
name ==
"\"MQXA.3R1\"" ||
name ==
"\"MQXA.3L1\"")
return s_Q3;
597 if(
name ==
"\"MQY.4R1.B1\"" ||
name ==
"\"MQY.4L1.B2\"")
return s_Q4;
598 if(
name ==
"\"MQML.5R1.B1\"" ||
name ==
"\"MQML.5L1.B2\"")
return s_Q5;
599 if(
name ==
"\"MQML.6R1.B1\"" ||
name ==
"\"MQML.6L1.B2\"")
return s_Q6;
600 if(
name ==
"\"MQM.A7R1.B1\"" ||
name ==
"\"MQM.A7L1.B2\"")
return s_Q7;
601 if(
name ==
"\"MQM.B7R1.B1\"" ||
name ==
"\"MQM.B7L1.B2\"")
return s_Q7;
◆ getMagXOff()
double MagField::ForwardRegionFieldSvc::getMagXOff |
( |
int |
magnet | ) |
const |
◆ getMagYOff()
double MagField::ForwardRegionFieldSvc::getMagYOff |
( |
int |
magnet | ) |
const |
◆ handle()
void MagField::ForwardRegionFieldSvc::handle |
( |
const Incident & |
runIncident | ) |
|
|
finaloverride |
IIncidentListener interface methods.
Definition at line 108 of file ForwardRegionFieldSvc.cxx.
111 if (runIncident.type() == IncidentType::BeginRun)
◆ initialize()
StatusCode MagField::ForwardRegionFieldSvc::initialize |
( |
| ) |
|
|
finaloverride |
AthService interface methods.
Definition at line 95 of file ForwardRegionFieldSvc.cxx.
99 ATH_MSG_INFO(
"Postponing magnet strengths initialization of " << this->
name() <<
" till the begin of run");
102 incidentSvc->addListener(
this, IncidentType::BeginRun );
104 return StatusCode::SUCCESS;
◆ InitMagData()
void MagField::ForwardRegionFieldSvc::InitMagData |
( |
| ) |
|
|
private |
Definition at line 213 of file ForwardRegionFieldSvc.cxx.
222 ATH_MSG_INFO(
"Using magnets.dat as the field settings source");
224 const std::string fileMagnets(
"magnets.dat");
233 std::string headerB1;
234 std::string headerB2;
◆ InitMagDataFromTwiss()
void MagField::ForwardRegionFieldSvc::InitMagDataFromTwiss |
( |
const std::vector< std::vector< std::string > > & |
loadedTwissFile, |
|
|
int |
beam, |
|
|
double |
momentum |
|
) |
| |
|
private |
Definition at line 251 of file ForwardRegionFieldSvc.cxx.
261 bool quadrupole =
false;
275 for(
int i=0;
i < 150;
i++)
278 dipole = (
m_magnet ==
s_D1 && (loadedTwissFile[
i][textIndex] ==
"\"MBXW.A4R1\"" || loadedTwissFile[
i][textIndex] ==
"\"MBXW.A4L1\""))
279 || (
m_magnet ==
s_D2 && (loadedTwissFile[
i][textIndex] ==
"\"MBRC.4R1.B1\"" || loadedTwissFile[
i][textIndex] ==
"\"MBRC.4L1.B2\""));
286 quadrupole = (
m_magnet ==
s_Q1 && (loadedTwissFile[
i][textIndex] ==
"\"MQXA.1R1\"" || loadedTwissFile[
i][textIndex] ==
"\"MQXA.1L1\""))
287 || (
m_magnet ==
s_Q2 && (loadedTwissFile[
i][textIndex] ==
"\"MQXB.A2R1\"" || loadedTwissFile[
i][textIndex] ==
"\"MQXB.A2L1\""))
288 || (
m_magnet ==
s_Q3 && (loadedTwissFile[
i][textIndex] ==
"\"MQXA.3R1\"" || loadedTwissFile[
i][textIndex] ==
"\"MQXA.3L1\""))
289 || (
m_magnet ==
s_Q4 && (loadedTwissFile[
i][textIndex] ==
"\"MQY.4R1.B1\"" || loadedTwissFile[
i][textIndex] ==
"\"MQY.4L1.B2\""))
290 || (
m_magnet ==
s_Q5 && (loadedTwissFile[
i][textIndex] ==
"\"MQML.5R1.B1\"" || loadedTwissFile[
i][textIndex] ==
"\"MQML.5L1.B2\""))
291 || (
m_magnet ==
s_Q6 && (loadedTwissFile[
i][textIndex] ==
"\"MQML.6R1.B1\"" || loadedTwissFile[
i][textIndex] ==
"\"MQML.6L1.B2\""))
292 || (
m_magnet ==
s_Q7 && (loadedTwissFile[
i][textIndex] ==
"\"MQM.A7R1.B1\"" || loadedTwissFile[
i][textIndex] ==
"\"MQM.A7L1.B2\""));
299 kicker = (
m_magnet ==
s_Q1HKick && (loadedTwissFile[
i][textIndex] ==
"\"MCBXH.1R1\"" || loadedTwissFile[
i][textIndex] ==
"\"MCBXH.1L1\""))
300 || (
m_magnet ==
s_Q1VKick && (loadedTwissFile[
i][textIndex] ==
"\"MCBXV.1R1\"" || loadedTwissFile[
i][textIndex] ==
"\"MCBXV.1L1\""))
301 || (
m_magnet ==
s_Q2HKick && (loadedTwissFile[
i][textIndex] ==
"\"MCBXH.2R1\"" || loadedTwissFile[
i][textIndex] ==
"\"MCBXH.2L1\""))
302 || (
m_magnet ==
s_Q2VKick && (loadedTwissFile[
i][textIndex] ==
"\"MCBXV.2R1\"" || loadedTwissFile[
i][textIndex] ==
"\"MCBXV.2L1\""))
303 || (
m_magnet ==
s_Q3HKick && (loadedTwissFile[
i][textIndex] ==
"\"MCBXH.3R1\"" || loadedTwissFile[
i][textIndex] ==
"\"MCBXH.3L1\""))
304 || (
m_magnet ==
s_Q3VKick && (loadedTwissFile[
i][textIndex] ==
"\"MCBXV.3R1\"" || loadedTwissFile[
i][textIndex] ==
"\"MCBXV.3L1\""))
305 || (
m_magnet ==
s_Q4VKickA && (loadedTwissFile[
i][textIndex] ==
"\"MCBYV.A4R1.B1\"" || loadedTwissFile[
i][textIndex] ==
"\"MCBYV.A4L1.B2\""))
306 || (
m_magnet ==
s_Q4HKick && (loadedTwissFile[
i][textIndex] ==
"\"MCBYH.4R1.B1\"" || loadedTwissFile[
i][textIndex] ==
"\"MCBYH.4L1.B2\""))
307 || (
m_magnet ==
s_Q4VKickB && (loadedTwissFile[
i][textIndex] ==
"\"MCBYV.B4R1.B1\"" || loadedTwissFile[
i][textIndex] ==
"\"MCBYV.B4L1.B2\""))
308 || (
m_magnet ==
s_Q5HKick && (loadedTwissFile[
i][textIndex] ==
"\"MCBCH.5R1.B1\"" || loadedTwissFile[
i][textIndex] ==
"\"MCBCH.5L1.B2\""))
309 || (
m_magnet ==
s_Q6VKick && (loadedTwissFile[
i][textIndex] ==
"\"MCBCV.6R1.B1\"" || loadedTwissFile[
i][textIndex] ==
"\"MCBCV.6L1.B2\""));
313 length =
atof(loadedTwissFile[
i][lengthIndex].c_str()) ?
atof(loadedTwissFile[
i][lengthIndex].c_str()) : 0.001;
◆ kLToB()
double MagField::ForwardRegionFieldSvc::kLToB |
( |
double |
kL, |
|
|
double |
lenght, |
|
|
double |
momentum |
|
) |
| |
|
private |
◆ loadDataFile()
std::vector< std::vector< std::string > > MagField::ForwardRegionFieldSvc::loadDataFile |
( |
const char * |
fileName, |
|
|
int |
cols |
|
) |
| |
|
private |
◆ loadDataFileNLines()
std::vector< std::vector< std::string > > MagField::ForwardRegionFieldSvc::loadDataFileNLines |
( |
const char * |
fileName, |
|
|
int |
cols, |
|
|
int |
N, |
|
|
std::string & |
header |
|
) |
| |
|
private |
Definition at line 424 of file ForwardRegionFieldSvc.cxx.
426 std::vector<std::vector<std::string> > loadedData;
435 LogStream <<
MSG::DEBUG <<
"File " <<
fileName <<
" not found in run directory, trying to load it from DATAPATH" <<
endmsg;
444 std::vector<std::string>
row (
cols);
448 bool unlimited =
false;
449 if(
N==0) unlimited =
true;
451 while(
file.get(
c) && (
i <
N || unlimited))
453 if(
c !=
'@' &&
c !=
'#' &&
c !=
'*' &&
c !=
'$' &&
c !=
'%' &&
c!=
'\n')
460 loadedData.push_back(
row);
461 file.ignore(1024,
'\n');
466 file.getline(temp,1024);
473 file.getline(temp,1024);
475 header.append(
" PosXStart");
476 header.append(
" PosYStart");
477 header.append(
" PosZStart");
478 header.append(
" PosXEnd ");
479 header.append(
" PosYEnd ");
480 header.append(
" PosZEnd ");
487 file.getline(temp,1024);
499 file.ignore(1024,
'\n');
502 LogStream << MSG::INFO <<
"File " <<
fileName <<
" succesfully loaded." <<
endmsg;
◆ writeOutTwiss()
void MagField::ForwardRegionFieldSvc::writeOutTwiss |
( |
const std::vector< std::vector< std::string >> & |
loadedTwissFile, |
|
|
int |
beam, |
|
|
const std::string & |
header |
|
) |
| |
|
private |
Definition at line 520 of file ForwardRegionFieldSvc.cxx.
529 HepGeom::Point3D<double> pointMagStart;
530 HepGeom::Point3D<double> pointMagEnd;
536 LogStream << MSG::ERROR <<
"Unable to write to " <<
fileName.str() <<
endmsg;
541 int fileSize = loadedTwissFile.size();
543 for(
int i=0;
i < fileSize;
i++)
545 rowSize = loadedTwissFile[
i].size();
546 for(
int j=0; j<rowSize; j++)
548 if(j < 3)
file << std::left;
549 else file << std::right;
550 file << std::setw(20) << loadedTwissFile[
i][j];
555 Point.set(0,0,PointZ);
563 file << std::setw(20) << rotZ;
566 file << std::setw(20) << 0;
567 file << std::setw(20) << 0;
568 file << std::setw(20) << 0;
569 file << std::setw(20) << 0;
570 file << std::setw(20) << 0;
571 file << std::setw(20) << 0;
572 file << std::setw(20) << 0;
◆ m_Config
◆ m_magData
double MagField::ForwardRegionFieldSvc::m_magData[4] |
|
private |
◆ m_magDataType
int MagField::ForwardRegionFieldSvc::m_magDataType |
|
private |
◆ m_magIndMQXA
◆ m_magIndMQXB
◆ m_magnet
int MagField::ForwardRegionFieldSvc::m_magnet |
|
private |
◆ m_magnets
std::vector<std::vector<std::string> > MagField::ForwardRegionFieldSvc::m_magnets |
|
private |
◆ m_MQXA_DataFile
std::string MagField::ForwardRegionFieldSvc::m_MQXA_DataFile |
|
private |
◆ m_MQXB_DataFile
std::string MagField::ForwardRegionFieldSvc::m_MQXB_DataFile |
|
private |
◆ m_properties
◆ s_colsMQXA
const int MagField::ForwardRegionFieldSvc::s_colsMQXA = 97 |
|
staticprivate |
◆ s_colsMQXB
const int MagField::ForwardRegionFieldSvc::s_colsMQXB = 89 |
|
staticprivate |
◆ s_D1
const int MagField::ForwardRegionFieldSvc::s_D1 = 3 |
|
staticprivate |
◆ s_D2
const int MagField::ForwardRegionFieldSvc::s_D2 = 4 |
|
staticprivate |
◆ s_Q1
const int MagField::ForwardRegionFieldSvc::s_Q1 = 0 |
|
staticprivate |
◆ s_Q1HKick
const int MagField::ForwardRegionFieldSvc::s_Q1HKick = 9 |
|
staticprivate |
◆ s_Q1VKick
const int MagField::ForwardRegionFieldSvc::s_Q1VKick = 10 |
|
staticprivate |
◆ s_Q2
const int MagField::ForwardRegionFieldSvc::s_Q2 = 1 |
|
staticprivate |
◆ s_Q2HKick
const int MagField::ForwardRegionFieldSvc::s_Q2HKick = 11 |
|
staticprivate |
◆ s_Q2VKick
const int MagField::ForwardRegionFieldSvc::s_Q2VKick = 12 |
|
staticprivate |
◆ s_Q3
const int MagField::ForwardRegionFieldSvc::s_Q3 = 2 |
|
staticprivate |
◆ s_Q3HKick
const int MagField::ForwardRegionFieldSvc::s_Q3HKick = 13 |
|
staticprivate |
◆ s_Q3VKick
const int MagField::ForwardRegionFieldSvc::s_Q3VKick = 14 |
|
staticprivate |
◆ s_Q4
const int MagField::ForwardRegionFieldSvc::s_Q4 = 5 |
|
staticprivate |
◆ s_Q4HKick
const int MagField::ForwardRegionFieldSvc::s_Q4HKick = 16 |
|
staticprivate |
◆ s_Q4VKickA
const int MagField::ForwardRegionFieldSvc::s_Q4VKickA = 15 |
|
staticprivate |
◆ s_Q4VKickB
const int MagField::ForwardRegionFieldSvc::s_Q4VKickB = 17 |
|
staticprivate |
◆ s_Q5
const int MagField::ForwardRegionFieldSvc::s_Q5 = 6 |
|
staticprivate |
◆ s_Q5HKick
const int MagField::ForwardRegionFieldSvc::s_Q5HKick = 18 |
|
staticprivate |
◆ s_Q6
const int MagField::ForwardRegionFieldSvc::s_Q6 = 7 |
|
staticprivate |
◆ s_Q6VKick
const int MagField::ForwardRegionFieldSvc::s_Q6VKick = 19 |
|
staticprivate |
◆ s_Q7
const int MagField::ForwardRegionFieldSvc::s_Q7 = 8 |
|
staticprivate |
◆ s_rowsMQXA
const int MagField::ForwardRegionFieldSvc::s_rowsMQXA = 97 |
|
staticprivate |
◆ s_rowsMQXB
const int MagField::ForwardRegionFieldSvc::s_rowsMQXB = 89 |
|
staticprivate |
The documentation for this class was generated from the following files:
std::vector< double > pointD1aStart
static const int s_Q5HKick
static const int s_Q2HKick
void getMagnetTransformParams(int beam, int magnet, G4ThreeVector Point, HepGeom::Point3D< double > &pointMagStart, HepGeom::Point3D< double > &pointMagEnd, double &rotZ) const
std::vector< double > fQ6RotZ
std::vector< std::vector< std::string > > loadDataFile(const char *fileName, int cols)
double m_magIndMQXA[s_rowsMQXA][s_colsMQXA][2]
static const int s_rowsMQXA
std::vector< double > pointD1fEnd
static std::string find_file(const std::string &logical_file_name, const std::string &search_path, SearchType search_type=LocalSearch)
ToolHandle< IForwardRegionProperties > m_properties
std::vector< double > pointD1bEnd
static const int s_Q4VKickB
std::vector< double > pointD1aEnd
double getMag(int magnet, int beam) const
std::vector< double > fQ1RotZ
std::vector< double > pointQ2bEnd
static const int s_Q1VKick
static const int s_Q2VKick
std::vector< double > pointD1dEnd
std::vector< double > pointQ1Start
std::vector< double > pointD2Start
std::vector< double > fD2RotZ
G4ThreeVector getMagInd(G4ThreeVector Point, int q, int beam) const
Non-inherited public methods FIXME - add new interface?
double kLToB(double kL, double lenght, double momentum)
std::vector< double > fD1fRotZ
double m_magIndMQXB[s_rowsMQXB][s_colsMQXB][2]
std::vector< double > fQ7aRotZ
std::vector< double > pointQ4End
static const int s_colsMQXA
IMessageSvc * getMessageSvc(bool quiet=false)
std::vector< double > fD1bRotZ
static const int s_colsMQXB
std::vector< double > pointQ7bStart
std::vector< double > fQ4RotZ
std::vector< double > fQ2bRotZ
std::string m_MQXA_DataFile
std::vector< double > pointQ7bEnd
std::vector< double > pointD1cStart
std::vector< std::vector< std::string > > loadDataFileNLines(const char *fileName, int cols, int N, std::string &header)
int getMagNumFromName(const std::string &name) const
std::vector< double > pointD1dStart
std::string m_MQXB_DataFile
static const int s_Q6VKick
G4ThreeVector getKick(int beam) const
double angle(const GeoTrf::Vector2D &a, const GeoTrf::Vector2D &b)
std::vector< double > pointQ6End
std::vector< double > pointQ7aStart
static const int s_Q1HKick
Eigen::Affine3d Transform3D
std::vector< double > fQ2aRotZ
FWDMg_CONFIGURATION m_Config
std::vector< double > pointQ5Start
std::vector< double > pointD1eStart
static const int s_Q4VKickA
std::vector< double > fD1dRotZ
std::vector< double > fQ3RotZ
AthROOTErrorHandlerSvc * svc
std::vector< std::vector< std::string > > m_magnets
std::vector< double > pointQ1End
std::vector< double > fD1cRotZ
double atof(std::string_view str)
Converts a string into a double / float.
static const int s_Q4HKick
std::vector< double > fD1eRotZ
static const int s_Q3HKick
std::vector< double > pointQ3End
Linear spline representation of a function used to calculate weights.
std::vector< double > pointQ3Start
std::vector< double > pointQ2aStart
std::vector< double > pointD1cEnd
std::vector< double > pointQ2aEnd
double getMagXOff(int magnet) const
std::vector< double > pointQ2bStart
double getMagYOff(int magnet) const
std::vector< double > pointQ4Start
std::vector< double > pointQ6Start
bool bUseFLUKAMapsForInnerTriplet
std::vector< double > fD1aRotZ
void InitMagDataFromTwiss(const std::vector< std::vector< std::string > > &loadedTwissFile, int beam, double momentum)
constexpr int pow(int base, int exp) noexcept
std::vector< double > pointQ5End
std::vector< double > fQ7bRotZ
std::vector< double > pointD1fStart
std::vector< double > fQ5RotZ
static const int s_rowsMQXB
static const int s_Q3VKick
G4ThreeVector FieldValue(G4ThreeVector Point) const
std::vector< double > pointQ7aEnd
std::vector< double > pointD2End
std::vector< double > pointD1bStart
std::vector< double > pointD1eEnd