143 if(
Point[2] < 0) beam = 1;
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;
163 if(
m_Config.bUseFLUKAMapsForInnerTriplet)
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);
197 HepGeom::Transform3D rotateField = HepGeom::Rotate3D(
angle, vecRotAxis);
199 field = rotateField*HepGeom::RotateZ3D(rotZ)*(HepGeom::Vector3D<double>)field;
260 bool quadrupole =
false;
274 for(
int i=0; i < 150; i++)
277 dipole = (
m_magnet ==
s_D1 && (loadedTwissFile[i][textIndex] ==
"\"MBXW.A4R1\"" || loadedTwissFile[i][textIndex] ==
"\"MBXW.A4L1\""))
278 || (
m_magnet ==
s_D2 && (loadedTwissFile[i][textIndex] ==
"\"MBRC.4R1.B1\"" || loadedTwissFile[i][textIndex] ==
"\"MBRC.4L1.B2\""));
280 m_magData[beam-1] =
kLToB(atof(loadedTwissFile[i][k0LIndex].c_str()), atof(loadedTwissFile[i][lengthIndex].c_str()), momentum);
285 quadrupole = (
m_magnet ==
s_Q1 && (loadedTwissFile[i][textIndex] ==
"\"MQXA.1R1\"" || loadedTwissFile[i][textIndex] ==
"\"MQXA.1L1\""))
286 || (
m_magnet ==
s_Q2 && (loadedTwissFile[i][textIndex] ==
"\"MQXB.A2R1\"" || loadedTwissFile[i][textIndex] ==
"\"MQXB.A2L1\""))
287 || (
m_magnet ==
s_Q3 && (loadedTwissFile[i][textIndex] ==
"\"MQXA.3R1\"" || loadedTwissFile[i][textIndex] ==
"\"MQXA.3L1\""))
288 || (
m_magnet ==
s_Q4 && (loadedTwissFile[i][textIndex] ==
"\"MQY.4R1.B1\"" || loadedTwissFile[i][textIndex] ==
"\"MQY.4L1.B2\""))
289 || (
m_magnet ==
s_Q5 && (loadedTwissFile[i][textIndex] ==
"\"MQML.5R1.B1\"" || loadedTwissFile[i][textIndex] ==
"\"MQML.5L1.B2\""))
290 || (
m_magnet ==
s_Q6 && (loadedTwissFile[i][textIndex] ==
"\"MQML.6R1.B1\"" || loadedTwissFile[i][textIndex] ==
"\"MQML.6L1.B2\""))
291 || (
m_magnet ==
s_Q7 && (loadedTwissFile[i][textIndex] ==
"\"MQM.A7R1.B1\"" || loadedTwissFile[i][textIndex] ==
"\"MQM.A7L1.B2\""));
293 m_magData[beam-1] =
kLToB(atof(loadedTwissFile[i][k1LIndex].c_str()), atof(loadedTwissFile[i][lengthIndex].c_str()), momentum);
298 kicker = (
m_magnet ==
s_Q1HKick && (loadedTwissFile[i][textIndex] ==
"\"MCBXH.1R1\"" || loadedTwissFile[i][textIndex] ==
"\"MCBXH.1L1\""))
299 || (
m_magnet ==
s_Q1VKick && (loadedTwissFile[i][textIndex] ==
"\"MCBXV.1R1\"" || loadedTwissFile[i][textIndex] ==
"\"MCBXV.1L1\""))
300 || (
m_magnet ==
s_Q2HKick && (loadedTwissFile[i][textIndex] ==
"\"MCBXH.2R1\"" || loadedTwissFile[i][textIndex] ==
"\"MCBXH.2L1\""))
301 || (
m_magnet ==
s_Q2VKick && (loadedTwissFile[i][textIndex] ==
"\"MCBXV.2R1\"" || loadedTwissFile[i][textIndex] ==
"\"MCBXV.2L1\""))
302 || (
m_magnet ==
s_Q3HKick && (loadedTwissFile[i][textIndex] ==
"\"MCBXH.3R1\"" || loadedTwissFile[i][textIndex] ==
"\"MCBXH.3L1\""))
303 || (
m_magnet ==
s_Q3VKick && (loadedTwissFile[i][textIndex] ==
"\"MCBXV.3R1\"" || loadedTwissFile[i][textIndex] ==
"\"MCBXV.3L1\""))
304 || (
m_magnet ==
s_Q4VKickA && (loadedTwissFile[i][textIndex] ==
"\"MCBYV.A4R1.B1\"" || loadedTwissFile[i][textIndex] ==
"\"MCBYV.A4L1.B2\""))
305 || (
m_magnet ==
s_Q4HKick && (loadedTwissFile[i][textIndex] ==
"\"MCBYH.4R1.B1\"" || loadedTwissFile[i][textIndex] ==
"\"MCBYH.4L1.B2\""))
306 || (
m_magnet ==
s_Q4VKickB && (loadedTwissFile[i][textIndex] ==
"\"MCBYV.B4R1.B1\"" || loadedTwissFile[i][textIndex] ==
"\"MCBYV.B4L1.B2\""))
307 || (
m_magnet ==
s_Q5HKick && (loadedTwissFile[i][textIndex] ==
"\"MCBCH.5R1.B1\"" || loadedTwissFile[i][textIndex] ==
"\"MCBCH.5L1.B2\""))
308 || (
m_magnet ==
s_Q6VKick && (loadedTwissFile[i][textIndex] ==
"\"MCBCV.6R1.B1\"" || loadedTwissFile[i][textIndex] ==
"\"MCBCV.6L1.B2\""));
312 length = atof(loadedTwissFile[i][lengthIndex].c_str()) ? atof(loadedTwissFile[i][lengthIndex].c_str()) : 0.001;
622 pointMagStart = HepGeom::Point3D<double>(
m_Config.pointQ1Start[(beam-1)*3],
m_Config.pointQ1Start[(beam-1)*3+1],
m_Config.pointQ1Start[(beam-1)*3+2]);
623 pointMagEnd = HepGeom::Point3D<double>(
m_Config.pointQ1End[(beam-1)*3],
m_Config.pointQ1End[(beam-1)*3+1],
m_Config.pointQ1End[(beam-1)*3+2]);
627 if(std::abs(
Point[2]) < 38*CLHEP::m){
628 pointMagStart = HepGeom::Point3D<double>(
m_Config.pointQ2aStart[(beam-1)*3],
m_Config.pointQ2aStart[(beam-1)*3+1],
m_Config.pointQ2aStart[(beam-1)*3+2]);
629 pointMagEnd = HepGeom::Point3D<double>(
m_Config.pointQ2aEnd[(beam-1)*3],
m_Config.pointQ2aEnd[(beam-1)*3+1],
m_Config.pointQ2aEnd[(beam-1)*3+2]);
634 pointMagStart = HepGeom::Point3D<double>(
m_Config.pointQ2bStart[(beam-1)*3],
m_Config.pointQ2bStart[(beam-1)*3+1],
m_Config.pointQ2bStart[(beam-1)*3+2]);
635 pointMagEnd = HepGeom::Point3D<double>(
m_Config.pointQ2bEnd[(beam-1)*3],
m_Config.pointQ2bEnd[(beam-1)*3+1],
m_Config.pointQ2bEnd[(beam-1)*3+2]);
640 pointMagStart = HepGeom::Point3D<double>(
m_Config.pointQ3Start[(beam-1)*3],
m_Config.pointQ3Start[(beam-1)*3+1],
m_Config.pointQ3Start[(beam-1)*3+2]);
641 pointMagEnd = HepGeom::Point3D<double>(
m_Config.pointQ3End[(beam-1)*3],
m_Config.pointQ3End[(beam-1)*3+1],
m_Config.pointQ3End[(beam-1)*3+2]);
645 pointMagStart = HepGeom::Point3D<double>(
m_Config.pointQ4Start[(beam-1)*3],
m_Config.pointQ4Start[(beam-1)*3+1],
m_Config.pointQ4Start[(beam-1)*3+2]);
646 pointMagEnd = HepGeom::Point3D<double>(
m_Config.pointQ4End[(beam-1)*3],
m_Config.pointQ4End[(beam-1)*3+1],
m_Config.pointQ4End[(beam-1)*3+2]);
650 pointMagStart = HepGeom::Point3D<double>(
m_Config.pointQ5Start[(beam-1)*3],
m_Config.pointQ5Start[(beam-1)*3+1],
m_Config.pointQ5Start[(beam-1)*3+2]);
651 pointMagEnd = HepGeom::Point3D<double>(
m_Config.pointQ5End[(beam-1)*3],
m_Config.pointQ5End[(beam-1)*3+1],
m_Config.pointQ5End[(beam-1)*3+2]);
655 pointMagStart = HepGeom::Point3D<double>(
m_Config.pointQ6Start[(beam-1)*3],
m_Config.pointQ6Start[(beam-1)*3+1],
m_Config.pointQ6Start[(beam-1)*3+2]);
656 pointMagEnd = HepGeom::Point3D<double>(
m_Config.pointQ6End[(beam-1)*3],
m_Config.pointQ6End[(beam-1)*3+1],
m_Config.pointQ6End[(beam-1)*3+2]);
660 if(std::abs(
Point[2]) < 263.5*CLHEP::m){
661 pointMagStart = HepGeom::Point3D<double>(
m_Config.pointQ7aStart[(beam-1)*3],
m_Config.pointQ7aStart[(beam-1)*3+1],
m_Config.pointQ7aStart[(beam-1)*3+2]);
662 pointMagEnd = HepGeom::Point3D<double>(
m_Config.pointQ7aEnd[(beam-1)*3],
m_Config.pointQ7aEnd[(beam-1)*3+1],
m_Config.pointQ7aEnd[(beam-1)*3+2]);
667 pointMagStart = HepGeom::Point3D<double>(
m_Config.pointQ7bStart[(beam-1)*3],
m_Config.pointQ7bStart[(beam-1)*3+1],
m_Config.pointQ7bStart[(beam-1)*3+2]);
668 pointMagEnd = HepGeom::Point3D<double>(
m_Config.pointQ7bEnd[(beam-1)*3],
m_Config.pointQ7bEnd[(beam-1)*3+1],
m_Config.pointQ7bEnd[(beam-1)*3+2]);
673 if(std::abs(
Point[2]) < 63.5*CLHEP::m){
674 pointMagStart = HepGeom::Point3D<double>(
m_Config.pointD1aStart[(beam-1)*3],
m_Config.pointD1aStart[(beam-1)*3+1],
m_Config.pointD1aStart[(beam-1)*3+2]);
675 pointMagEnd = HepGeom::Point3D<double>(
m_Config.pointD1aEnd[(beam-1)*3],
m_Config.pointD1aEnd[(beam-1)*3+1],
m_Config.pointD1aEnd[(beam-1)*3+2]);
678 else if(std::abs(
Point[2]) < 67.5*CLHEP::m){
679 pointMagStart = HepGeom::Point3D<double>(
m_Config.pointD1bStart[(beam-1)*3],
m_Config.pointD1bStart[(beam-1)*3+1],
m_Config.pointD1bStart[(beam-1)*3+2]);
680 pointMagEnd = HepGeom::Point3D<double>(
m_Config.pointD1bEnd[(beam-1)*3],
m_Config.pointD1bEnd[(beam-1)*3+1],
m_Config.pointD1bEnd[(beam-1)*3+2]);
684 else if(std::abs(
Point[2]) < 72*CLHEP::m){
685 pointMagStart = HepGeom::Point3D<double>(
m_Config.pointD1cStart[(beam-1)*3],
m_Config.pointD1cStart[(beam-1)*3+1],
m_Config.pointD1cStart[(beam-1)*3+2]);
686 pointMagEnd = HepGeom::Point3D<double>(
m_Config.pointD1cEnd[(beam-1)*3],
m_Config.pointD1cEnd[(beam-1)*3+1],
m_Config.pointD1cEnd[(beam-1)*3+2]);
690 else if(std::abs(
Point[2]) < 76*CLHEP::m){
691 pointMagStart = HepGeom::Point3D<double>(
m_Config.pointD1dStart[(beam-1)*3],
m_Config.pointD1dStart[(beam-1)*3+1],
m_Config.pointD1dStart[(beam-1)*3+2]);
692 pointMagEnd = HepGeom::Point3D<double>(
m_Config.pointD1dEnd[(beam-1)*3],
m_Config.pointD1dEnd[(beam-1)*3+1],
m_Config.pointD1dEnd[(beam-1)*3+2]);
696 else if(std::abs(
Point[2]) < 80.5*CLHEP::m){
697 pointMagStart = HepGeom::Point3D<double>(
m_Config.pointD1eStart[(beam-1)*3],
m_Config.pointD1eStart[(beam-1)*3+1],
m_Config.pointD1eStart[(beam-1)*3+2]);
698 pointMagEnd = HepGeom::Point3D<double>(
m_Config.pointD1eEnd[(beam-1)*3],
m_Config.pointD1eEnd[(beam-1)*3+1],
m_Config.pointD1eEnd[(beam-1)*3+2]);
703 pointMagStart = HepGeom::Point3D<double>(
m_Config.pointD1fStart[(beam-1)*3],
m_Config.pointD1fStart[(beam-1)*3+1],
m_Config.pointD1fStart[(beam-1)*3+2]);
704 pointMagEnd = HepGeom::Point3D<double>(
m_Config.pointD1fEnd[(beam-1)*3],
m_Config.pointD1fEnd[(beam-1)*3+1],
m_Config.pointD1fEnd[(beam-1)*3+2]);
709 pointMagStart = HepGeom::Point3D<double>(
m_Config.pointD2Start[(beam-1)*3],
m_Config.pointD2Start[(beam-1)*3+1],
m_Config.pointD2Start[(beam-1)*3+2]);
710 pointMagEnd = HepGeom::Point3D<double>(
m_Config.pointD2End[(beam-1)*3],
m_Config.pointD2End[(beam-1)*3+1],
m_Config.pointD2End[(beam-1)*3+2]);