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 5f1d4076 authored by Christof Metzger-Kraus's avatar Christof Metzger-Kraus
Browse files

fixing phases of cavities in follow-up tracks

parent a53dab6b
No related branches found
No related tags found
No related merge requests found
......@@ -50,50 +50,53 @@ double CavityAutophaser::getPhaseAtMaxEnergy(const Vector_t &R,
amplitude = element->getAmplitudem();
designEnergy = element->getDesignEnergy();
originalPhase = element->getPhasem();
bool apVeto = element->getAutophaseVeto();
if (amplitude == 0.0) {
if (designEnergy <= 0.0 || length <= 0.0) {
throw OpalException("CavityAutophaser::getPhaseAtMaxEnergy()",
"neither amplitude or design energy given to cavity " + element->getName());
}
if (!apVeto) {
if (amplitude == 0.0) {
if (designEnergy <= 0.0 || length <= 0.0) {
throw OpalException("CavityAutophaser::getPhaseAtMaxEnergy()",
"neither amplitude or design energy given to cavity " + element->getName());
}
amplitude = 2 * (designEnergy - initialEnergy) / (std::abs(itsReference_m.getQ()) * length);
amplitude = 2 * (designEnergy - initialEnergy) / (std::abs(itsReference_m.getQ()) * length);
element->setAmplitudem(amplitude);
}
element->setAmplitudem(amplitude);
}
if (designEnergy > 0.0) {
int count = 0;
while (count < 1000) {
initialPhase = guessCavityPhase(t + tErr);
auto status = optimizeCavityPhase(initialPhase, t + tErr, dt);
if (designEnergy > 0.0) {
int count = 0;
while (count < 1000) {
initialPhase = guessCavityPhase(t + tErr);
auto status = optimizeCavityPhase(initialPhase, t + tErr, dt);
optimizedPhase = status.first;
finalEnergy = status.second;
optimizedPhase = status.first;
finalEnergy = status.second;
if (std::abs(designEnergy - finalEnergy) < 1e-7) break;
if (std::abs(designEnergy - finalEnergy) < 1e-7) break;
amplitude *= std::abs(designEnergy / finalEnergy);
element->setAmplitudem(amplitude);
initialPhase = optimizedPhase;
amplitude *= std::abs(designEnergy / finalEnergy);
element->setAmplitudem(amplitude);
initialPhase = optimizedPhase;
++ count;
++ count;
}
}
}
auto status = optimizeCavityPhase(initialPhase, t + tErr, dt);
auto status = optimizeCavityPhase(initialPhase, t + tErr, dt);
optimizedPhase = status.first;
finalEnergy = status.second;
optimizedPhase = status.first;
finalEnergy = status.second;
bool apVeto = element->getAutophaseVeto();
AstraPhase = std::fmod(optimizedPhase + Physics::pi / 2, Physics::two_pi);
newPhase = std::fmod(originalPhase + optimizedPhase + Physics::two_pi, Physics::two_pi);
element->setPhasem(newPhase);
element->setAutophaseVeto();
AstraPhase = std::fmod(optimizedPhase + Physics::pi / 2, Physics::two_pi);
newPhase = std::fmod(originalPhase + optimizedPhase + Physics::two_pi, Physics::two_pi);
element->setPhasem(newPhase);
element->setAutophaseVeto();
double basePhase = std::fmod(element->getFrequencym() * (t + tErr), Physics::two_pi);
newPhase = std::fmod(newPhase + basePhase, Physics::two_pi);
double basePhase = std::fmod(element->getFrequencym() * (t + tErr), Physics::two_pi);
newPhase = std::fmod(newPhase + basePhase, Physics::two_pi);
} else {
optimizedPhase = originalPhase;
}
INFOMSG(level1 << endl);
if (apVeto)
......
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