Commit e9bd4cd1 authored by TOUZE Francois's avatar TOUZE Francois
Browse files

liste des plots possibles en fn de l'action

parent 2ea3adf6
...@@ -29,7 +29,7 @@ void pspaplot::settings(string str) ...@@ -29,7 +29,7 @@ void pspaplot::settings(string str)
} else if (item == "ellipse$END") { } else if (item == "ellipse$END") {
obj= phaseSpace( j,"end" ); obj= phaseSpace( j,"end" );
} else { } else {
obj= beamParameters( j ); obj= plotSelection( j ); //beamParameters( j );
} }
string fname= userDir_+"simulator-plot.txt"; string fname= userDir_+"simulator-plot.txt";
...@@ -191,6 +191,175 @@ json pspaplot::phaseSpace(json j, string opt) ...@@ -191,6 +191,175 @@ json pspaplot::phaseSpace(json j, string opt)
return jx; return jx;
} }
json pspaplot::plotSelection(json j)
{
auto ids= j.find( "plotSimulation" );
string item= j.find( "plotItem" ).value();
std::cout << std::boolalpha;
//cout << "ids is_array? " << ids->is_array() << "\n";
//cout << "ids size? " << ids->size() << "\n";
vector<double> Xaxis;
map<string,vector<double> > Ymaps;
double shift= 0.0;
for (json::iterator it = ids->begin(); it != ids->end(); ++it)
{
string fname= *it;
fname= userDir_ + fname + "-plot.txt";
cout << "plotSelection:: OPEN fileName => " << fname << endl;
std::ifstream ifs( fname );
if (!ifs.good()) {
cout << "plotSelection:: ERROR opening the file " << fname << endl;
continue;
}
json obj;
ifs >> obj;
ifs.close();
vector<double> xaxis = menu1(item,obj);
if (xaxis.empty()) continue;
map<string,vector<double> > ymap = menu2(item,obj);
if (ymap.empty()) continue;
for (auto& y: ymap) {
for(int k = 0; k < y.second.size(); ++k) {
Ymaps[ y.first ].push_back( y.second.at(k) );
}
}
for (auto& x: xaxis) {
Xaxis.push_back( x+shift );
}
// pipeline: available for track and twiss
shift= xaxis.back();
string softw= obj.find( "software" ).value();
cout << "plotSelection:: software => " << softw << endl;
string action= obj.find( "action" ).value();
cout << "plotSelection:: action => " << action << endl;
if (action == "emitt") break;
if (action == "tunes") break;
if (action == "matching") break;
}
json jx;
if (Xaxis.empty() || Ymaps.empty()) {
cout << "pspaplot::bad plot item... check your choice\n";
jx= json({});
} else {
jx= lineplots(Xaxis,Ymaps);
}
return jx;
}
vector<double> pspaplot::menu1(string item,json obj)
{
string key;
if (item == "tunesVSdelta" ||
item == "betaVSdelta" ||
item == "alfaVSdelta") {
key= "deltap";
} else if (item == "tunesVSx") {
key= "Ax";
} else if (item == "tunesVSy") {
key= "Ay";
} else {
key= "zcoor";
}
vector<double> myvector;
json::iterator kt= obj.find(key);
if (kt != obj.end()) {
for (auto& el: *kt) {
myvector.push_back( el );
}
}
return myvector;
}
map<string,vector<double> > pspaplot::menu2(string item,json obj)
{
map<string,vector<double> > mymap;
if (item == "rms-emittance") { // valid only for track
mymap = {
{"xemit",vector<double>()},
{"yemit",vector<double>()} };
} else if (item == "beam-size") {
mymap = {
{"xsigma",vector<double>()},
{"ysigma",vector<double>()} };
} else if (item == "bunch-length") { // valid only for track
mymap = {
{"zsigma",vector<double>()} };
} else if (item == "energy-spread") { // valid only for track
mymap = {
{"spread",vector<double>()} };
} else if (item == "Hx-function") { // valid only for twiss
mymap = {
{"xHinv",vector<double>()} };
} else if (item == "betas") {
mymap = {
{"xbeta",vector<double>()},
{"ybeta",vector<double>()} };
} else if (item == "betas&xeta") {
mymap = {
{"xbeta",vector<double>()},
{"ybeta",vector<double>()},
{"xeta", vector<double>()} };
} else if (item == "phases") { // valid only for twiss
mymap = {
{"xmu",vector<double>()},
{"ymu",vector<double>()} };
} else if (item == "chromatics") { // valid only for twiss
mymap = {
{"wx",vector<double>()},
{"wy",vector<double>()} };
} else if (item == "tunesVSdelta") { // valid only for tunes
mymap = {
{"qx",vector<double>()},
{"qy",vector<double>()} };
} else if (item == "betaVSdelta") { // valid only for tunes
mymap = {
{"bx",vector<double>()},
{"by",vector<double>()} };
} else if (item == "alfaVSdelta") { // valid only for tunes
mymap = {
{"ax",vector<double>()},
{"ay",vector<double>()} };
} else if (item == "tunesVSx") { // valid only for tunes
mymap = {
{"q1x",vector<double>()},
{"q2x",vector<double>()} };
} else if (item == "tunesVSy") { // valid only for tunes
mymap = {
{"q1y",vector<double>()},
{"q2y",vector<double>()} };
} else {
return mymap;
}
for (auto it = mymap.begin(); it != mymap.end(); ) {
json::iterator kt= obj.find( it->first );
if (kt == obj.end()) {
it = mymap.erase( it );
} else {
for (auto& el: *kt) {
it->second.push_back( el );
}
++it;
}
}
return mymap;
}
json pspaplot::beamParameters(json j) json pspaplot::beamParameters(json j)
{ {
auto ids= j.find( "plotSimulation" ); auto ids= j.find( "plotSimulation" );
...@@ -263,6 +432,8 @@ void pspaplot::submenu1(string key,json obj,double& xshift,vector<double>& Xaxis ...@@ -263,6 +432,8 @@ void pspaplot::submenu1(string key,json obj,double& xshift,vector<double>& Xaxis
Xaxis.push_back( zcoor ); Xaxis.push_back( zcoor );
} }
xshift= xaxis->back(); xshift= xaxis->back();
} }
void pspaplot::submenu2(string key,json obj,map<string,vector<double> >& Ymaps) void pspaplot::submenu2(string key,json obj,map<string,vector<double> >& Ymaps)
...@@ -285,32 +456,32 @@ void pspaplot::submenu2(string key,json obj,map<string,vector<double> >& Ymaps) ...@@ -285,32 +456,32 @@ void pspaplot::submenu2(string key,json obj,map<string,vector<double> >& Ymaps)
menu("spread",obj,Ymaps); menu("spread",obj,Ymaps);
} }
if (key == "H-function") { // valid only for twiss if (key == "Hx-function") { // valid only for twiss
menu("xHinv",obj,Ymaps); menu("xHinv",obj,Ymaps);
} }
if (key == "beta-functions") { if (key == "betas") {
menu("xbeta",obj,Ymaps); menu("xbeta",obj,Ymaps);
menu("ybeta",obj,Ymaps); menu("ybeta",obj,Ymaps);
} }
if (key == "beta&xeta") { if (key == "betas&xeta") {
menu("xbeta",obj,Ymaps); menu("xbeta",obj,Ymaps);
menu("ybeta",obj,Ymaps); menu("ybeta",obj,Ymaps);
menu("xeta",obj,Ymaps); menu("xeta",obj,Ymaps);
} }
if (key == "alfa-functions") { if (key == "alfas") {
menu("xalfa",obj,Ymaps); menu("xalfa",obj,Ymaps);
menu("yalfa",obj,Ymaps); menu("yalfa",obj,Ymaps);
} }
if (key == "phase-functions") { // valid only for twiss if (key == "phases") { // valid only for twiss
menu("xmu",obj,Ymaps); menu("xmu",obj,Ymaps);
menu("ymu",obj,Ymaps); menu("ymu",obj,Ymaps);
} }
if (key == "chromatic-functions") { // valid only for twiss if (key == "chromatics") { // valid only for twiss
menu("wx",obj,Ymaps); menu("wx",obj,Ymaps);
menu("wy",obj,Ymaps); menu("wy",obj,Ymaps);
menu("xetap",obj,Ymaps); menu("xetap",obj,Ymaps);
......
...@@ -14,10 +14,16 @@ class pspaplot ...@@ -14,10 +14,16 @@ class pspaplot
string userDir_; string userDir_;
json phaseSpace(json,string); json phaseSpace(json,string);
json plotSelection(json);
vector<double> menu1(string,json);
map<string,vector<double> > menu2(string,json);
json beamParameters(json); json beamParameters(json);
void submenu1(string,json,double&,vector<double>&); void submenu1(string,json,double&,vector<double>&);
void submenu2(string,json,map<string,vector<double> >&); void submenu2(string,json,map<string,vector<double> >&);
void menu(string,json,map<string,vector<double> >&); void menu(string,json,map<string,vector<double> >&);
json lineplots(vector<double>,map<string,vector<double> >); json lineplots(vector<double>,map<string,vector<double> >);
......
...@@ -133,6 +133,32 @@ def plots(): ...@@ -133,6 +133,32 @@ def plots():
'chartConfig': ofi 'chartConfig': ofi
} }
return jsonify(response) return jsonify(response)
@app.route('/api/settings', methods=['GET', 'POST'])
def settings():
x= request.json
ids= x['selectedIds']
print( "/api/settings Ids=> ", ids, type(ids), len(ids) )
z= []
for id in ids:
d={"id": id}
out= id + "-plot.txt"
fname= os.path.join(upath,out)
print( "fichier trouvé => ", fname)
if os.path.exists( fname ):
data= json.load( open(fname) )
d['software']= data['software']
d['action']= data['action']
z.append(d)
response = {
'parameters': z
}
return jsonify(response)
@app.route('/', defaults={'path': ''}) @app.route('/', defaults={'path': ''})
@app.route('/<path:path>') @app.route('/<path:path>')
......
...@@ -27,52 +27,74 @@ ...@@ -27,52 +27,74 @@
</template> </template>
<script> <script>
import axios from 'axios';
export default { export default {
data () { data () {
return { return {
Ids: [],
selectedIds: [] selectedIds: []
} }
}, },
created() { created() {
console.log('OutPuts=> created');
console.log('OutPuts:: created')
this.$store.commit('setSimulationPlot', '')
this.$store.commit('setAnalyzeParameters', '');
this.Ids= Object.keys(this.$store.state.simulationResults);
}, },
computed: { computed: {
simulationIds () { simulationIds () {
console.log('OutPuts=> simulationIds');
const ids= Object.keys(this.$store.state.simulationResults);
console.log('Ids proposés : ', ids)
this.selectedIds = []
const str= this.$store.state.projectName; const str= this.$store.state.projectName;
var myArray=[]; var myArray=[];
for(var i = 0; i < ids.length; i++) { for(var i = 0; i < this.Ids.length; i++) {
if (ids[i].indexOf(str) >=0 ) myArray[i]=ids[i]; if (this.Ids[i].indexOf(str) >=0 ) myArray.push( this.Ids[i] );
} }
console.log('OutPuts::Ids retenus => ', myArray)
return myArray return myArray
} }
}, },
methods: { mounted () {
selectedId () {
console.log('OutPuts => selectedId'); console.log('OutPuts:: mounted')
}
const path = `http://localhost:5000/api/settings`
axios.post(path, {
selectedIds: this.Ids
}).then(response => {
console.log('OutPuts:: mounted => response')
const parameters= response.data.parameters
this.$store.commit('setAnalyzeParameters', parameters);
}).catch(error => {
console.log(error)
})
}, },
methods: {
},
watch: { watch: {
selectedIds: function(newVal, oldVal) { selectedIds: function(newVal, oldVal) {
console.log('ancien =>', oldVal)
console.log('nouveau =>', newVal) console.log('Outputs:: watch =>', newVal)
this.$store.commit('setSimulationPlot', newVal); this.$store.commit('setSimulationPlot', newVal);
} }
} }
}; };
</script> </Script>
<style scoped> <style scoped>
......
<template>
<div id="computing-holder">
<div id="computing-menu" class="border-bottom border-light d-flex flex-row justify-content-between">
<div id="computing-title">
<h2 @click="showConfig">Plots</h2>
</div>
</div>
<div id="computing-block" v-if="isConfig">
<div id="radiobox">
<div v-if="showOptions.length > 0">
<p>Select a plot option :</p>
<div class="row">
<div class="col">
<input type="radio"
id="beta"
value="Beta"
v-on:click="say('beta-functions')"
v-model="picked">
<label for="beta">beta functions</label>
</div>
<div class="col">
<input type="radio"
id="etax"
value="Etax"
v-on:click="say('beta&xeta')"
v-model="picked">
<label for="etax">beta & etax </label>
</div>
<div class="col">
<input type="radio"
id="alfa"
value="Alfa"
v-on:click="say('alfa-functions')"
v-model="picked">
<label for="alfa">alpha functions</label>
</div>
</div>
</div>
<div v-if="showOptions.indexOf('twiss') > -1">
<div class="row">
<div class="col">
<input type="radio"
id="phase"
value="Phase"
v-on:click="say('phase-functions')"
v-model="picked">
<label for="phase">phase functions</label>
</div>
<div class="col-8">
<input type="radio"
id="chromatic"
value="Chromatic"
v-on:click="say('chromatic-functions')"
v-model="picked">
<label for="chromatic">chromatic functions</label>
</div>
</div>
<div class="row">
<div class="col">
<input type="radio"
id="hinvx"
value="Hinvx"
v-on:click="say('H-function')"
v-model="picked">
<label for="hinvx">Hx invariant</label>
</div>
<div class="col-8">
<input type="radio"
id="sigma"
value="Sigma"
v-on:click="say('beam-size')"
v-model="picked">
<label for="sigma">beam size</label>
</div>
</div>
</div>
<div v-else-if="showOptions.indexOf('tunes') > -1">
<div class="row">
<div class="col">
<input type="radio"
id="tunesVSdelta"
value="TunesVSdelta"
v-on:click="say('tunesVSdelta')"
v-model="picked">
<label for="tunesVSdelta">tunes vs. Δp/p </label>
</div>
<div class="col">
<input type="radio"
id="tunesVSx"
value="TunesVSx"
v-on:click="say('tunesVSx')"
v-model="picked">
<label for="tunesVSx">tunes vs. x </label>
</div>
<div class="col">
<input type="radio"
id="tunesVSy"
value="TunesVSy"
v-on:click="say('tunesVSy')"
v-model="picked">
<label for="tunesVSy">tunes vs. y </label>
</div>
</div>
<div class="row">
<div class="col">
<input type="radio"
id="betaVSdelta"
value="BetaVSdelta"
v-on:click="say('betaVSdelta')"
v-model="picked">
<label for="betaVSdelta">beta vs. Δp/p </label>
</div>
<div class="col-8">
<input type="radio"
id="alfaVSdelta"
value="AlfaVSdelta"
v-on:click="say('alfaVSdelta')"
v-model="picked">
<label for="alfaVSdelta">alpha vs. Δp/p </label>
</div>
</div>
</div>
<div v-else-if="showOptions.indexOf('track') > -1">
<input type="radio"
id="rmsEmit"
value="RmsEmit"
v-on:click="say('rms-emittance')"
v-model="picked">
<label for="rmsEmit">transverse emittance</label>
<input type="radio"
id="bunch"
value="Bunch"
v-on:click="say('bunch-length')"
v-model="picked">
<label for="bunch">bunch length</label>
<input type="radio"
id="spread"
value="Spread"
v-on:click="say('energy-spread')"
v-model="picked">
<label for="spread">energy spread</label>
<input type="radio"
id="sigma"