Code indexing in gitaly is broken and leads to code not being visible to the user. We work on the issue with highest priority.

Skip to content
Snippets Groups Projects
Commit 0c145f10 authored by kraus's avatar kraus
Browse files

don't initialize the cavity again instead just request the dimensions

parent 05397703
No related branches found
No related tags found
1 merge request!397Resolve "Autophasing broken when fieldmap starts at z < 0"
...@@ -19,8 +19,7 @@ CavityAutophaser::CavityAutophaser(const PartData &ref, ...@@ -19,8 +19,7 @@ CavityAutophaser::CavityAutophaser(const PartData &ref,
itsCavity_m(cavity) itsCavity_m(cavity)
{ {
double zbegin = 0.0, zend = 0.0; double zbegin = 0.0, zend = 0.0;
PartBunchBase<double, 3> *fakeBunch = NULL; cavity->getDimensions(zbegin, zend);
cavity->initialise(fakeBunch, zbegin, zend);
initialR_m = Vector_t(0, 0, zbegin); initialR_m = Vector_t(0, 0, zbegin);
} }
...@@ -138,10 +137,10 @@ double CavityAutophaser::getPhaseAtMaxEnergy(const Vector_t &R, ...@@ -138,10 +137,10 @@ double CavityAutophaser::getPhaseAtMaxEnergy(const Vector_t &R,
itsCavity_m->getName() + "_AP.dat" itsCavity_m->getName() + "_AP.dat"
}); });
std::ofstream out(fname); std::ofstream out(fname);
track(initialR_m, initialP_m, t + tErr, dt, newPhase, &out); track(t + tErr, dt, newPhase, &out);
out.close(); out.close();
} else { } else {
track(initialR_m, initialP_m, t + tErr, dt, newPhase, NULL); track(t + tErr, dt, newPhase, NULL);
} }
INFOMSG(level1 << std::fixed << std::setprecision(4) INFOMSG(level1 << std::fixed << std::setprecision(4)
...@@ -209,7 +208,7 @@ std::pair<double, double> CavityAutophaser::optimizeCavityPhase(double initialPh ...@@ -209,7 +208,7 @@ std::pair<double, double> CavityAutophaser::optimizeCavityPhase(double initialPh
if (element->getAutophaseVeto()) { if (element->getAutophaseVeto()) {
double basePhase = std::fmod(element->getFrequencym() * t, Physics::two_pi); double basePhase = std::fmod(element->getFrequencym() * t, Physics::two_pi);
double phase = std::fmod(originalPhase - basePhase + Physics::two_pi, Physics::two_pi); double phase = std::fmod(originalPhase - basePhase + Physics::two_pi, Physics::two_pi);
double E = track(initialR_m, initialP_m, t, dt, phase); double E = track(t, dt, phase);
std::pair<double, double> status(originalPhase, E);//-basePhase, E); std::pair<double, double> status(originalPhase, E);//-basePhase, E);
return status; return status;
} }
...@@ -220,7 +219,7 @@ std::pair<double, double> CavityAutophaser::optimizeCavityPhase(double initialPh ...@@ -220,7 +219,7 @@ std::pair<double, double> CavityAutophaser::optimizeCavityPhase(double initialPh
const int numRefinements = Options::autoPhase; const int numRefinements = Options::autoPhase;
int j = -1; int j = -1;
double E = track(initialR_m, initialP_m, t, dt, phi); double E = track(t, dt, phi);
double Emax = E; double Emax = E;
do { do {
...@@ -228,7 +227,7 @@ std::pair<double, double> CavityAutophaser::optimizeCavityPhase(double initialPh ...@@ -228,7 +227,7 @@ std::pair<double, double> CavityAutophaser::optimizeCavityPhase(double initialPh
Emax = E; Emax = E;
initialPhase = phi; initialPhase = phi;
phi -= dphi; phi -= dphi;
E = track(initialR_m, initialP_m, t, dt, phi); E = track(t, dt, phi);
} while(E > Emax); } while(E > Emax);
if(j == 0) { if(j == 0) {
...@@ -240,20 +239,20 @@ std::pair<double, double> CavityAutophaser::optimizeCavityPhase(double initialPh ...@@ -240,20 +239,20 @@ std::pair<double, double> CavityAutophaser::optimizeCavityPhase(double initialPh
Emax = E; Emax = E;
initialPhase = phi; initialPhase = phi;
phi += dphi; phi += dphi;
E = track(initialR_m, initialP_m, t, dt, phi); E = track(t, dt, phi);
} while(E > Emax); } while(E > Emax);
} }
for(int rl = 0; rl < numRefinements; ++ rl) { for(int rl = 0; rl < numRefinements; ++ rl) {
dphi /= 2.; dphi /= 2.;
phi = initialPhase - dphi; phi = initialPhase - dphi;
E = track(initialR_m, initialP_m, t, dt, phi); E = track(t, dt, phi);
if(E > Emax) { if(E > Emax) {
initialPhase = phi; initialPhase = phi;
Emax = E; Emax = E;
} else { } else {
phi = initialPhase + dphi; phi = initialPhase + dphi;
E = track(initialR_m, initialP_m, t, dt, phi); E = track(t, dt, phi);
if(E > Emax) { if(E > Emax) {
initialPhase = phi; initialPhase = phi;
Emax = E; Emax = E;
...@@ -262,15 +261,13 @@ std::pair<double, double> CavityAutophaser::optimizeCavityPhase(double initialPh ...@@ -262,15 +261,13 @@ std::pair<double, double> CavityAutophaser::optimizeCavityPhase(double initialPh
} }
Phimax = std::fmod(initialPhase + Physics::two_pi, Physics::two_pi); Phimax = std::fmod(initialPhase + Physics::two_pi, Physics::two_pi);
E = track(initialR_m, initialP_m, t, dt, Phimax + originalPhase); E = track(t, dt, Phimax + originalPhase);
std::pair<double, double> status(Phimax, E); std::pair<double, double> status(Phimax, E);
return status; return status;
} }
double CavityAutophaser::track(Vector_t /*R*/, double CavityAutophaser::track(double t,
Vector_t /*P*/,
double t,
const double dt, const double dt,
const double phase, const double phase,
std::ofstream *out) const { std::ofstream *out) const {
......
...@@ -22,9 +22,7 @@ private: ...@@ -22,9 +22,7 @@ private:
double t, double t,
double dt); double dt);
double track(Vector_t R, double track(double t,
Vector_t P,
double t,
const double dt, const double dt,
const double phase, const double phase,
std::ofstream *out = NULL) const; std::ofstream *out = NULL) const;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment