Changeset 356 in PSPA


Ignore:
Timestamp:
Mar 2, 2013, 7:54:38 PM (12 years ago)
Author:
lemeur
Message:

bugs dans les dessins

Location:
Interface_Web/trunk/pspaWT/sources
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • Interface_Web/trunk/pspaWT/sources/controler/include/PhysicalConstants.h

    r312 r356  
    88#define ELECTRONANOCOULOMB 1.60217653e-10
    99#define ELECTRONRADIUS 2.817940325e-13  // cm!
    10 #define ERESTMeV 0.510998918
    11 #define ERESTeV 0.510998918e+06
     10#define EREST_MeV 0.510998918
     11#define EREST_keV 0.510998918e+03
     12#define EREST_eV 0.510998918e+06
    1213#define CLIGHT_E8 2.99792458
    1314#define CLIGHT_m_per_ns 0.299792458
  • Interface_Web/trunk/pspaWT/sources/controler/include/particleBeam.h

    r354 r356  
    4141  void razDesMoments();
    4242  void particlesPhaseSpaceComponent(vector<double>& coord, unsigned index);
     43  unsigned indexFromPspaToTransport(unsigned index) const;
    4344
    4445 public:
     
    6768  void Zrange(double& zmin, double& zmax) const;
    6869  //  void donneesDessinEllipseXxp(vector<double>& xcor, vector<double>& ycor);
    69   void donneesDessinEllipse(vector<double>& xcor, vector<double>& ycor, unsigned indexAbs, unsigned indexOrd);
     70  void donneesDessinEllipse(vector<double>& xcor, vector<double>& ycor, vector<string>& legende, unsigned indexAbs, unsigned indexOrd);
    7071  void particlesPhaseSpaceData(vector<double>& xcor, vector<double>& ycor, unsigned indexAbs, unsigned indexOrd);
    7172  virtual string FileOutputFlow() const;
  • Interface_Web/trunk/pspaWT/sources/controler/src/elementBend.cc

    r288 r356  
    9696    ostringstream sortie;
    9797    // il faut entrer l'energie cinetique
    98     double ecin = momentum_/ERESTMeV;
     98    double ecin = momentum_/EREST_MeV;
    9999    ecin = ecin*ecin + 1.;
    100     ecin = ERESTMeV*(sqrt(ecin) - 1.0);
     100    ecin = EREST_MeV*(sqrt(ecin) - 1.0);
    101101    sortie << "BEND /l=" << lenghtElem_ << "  / aper=" << aperture_ << "  / iout=1 / wr=" << ecin << " /alpha=" << angleDeg_ << " / beta1=" << beta1_;
    102102    sortie << " / beta2=" << beta1_;
  • Interface_Web/trunk/pspaWT/sources/controler/src/particleBeam.cc

    r355 r356  
    44#include "PhysicalConstants.h"
    55#include "mathematicalTools.h"
     6#include "mixedTools.h"
    67
    78#include <stdio.h>
     
    7071double particleBeam::referenceKineticEnergyMeV() const {
    7172  if ( particleRepresentationOk_ ) {
    72     return (referenceParticle_.getGamma() -1.) * ERESTMeV;
     73    return (referenceParticle_.getGamma() -1.) * EREST_MeV;
    7374  } else {
    74     double P0Norm = 1000.0 * P0Transport_ / ERESTMeV;
     75    double P0Norm = 1000.0 * P0Transport_ / EREST_MeV;
    7576    double gamma = sqrt(1.0 +  P0Norm * P0Norm);
    76     return (gamma - 1.0) * ERESTMeV;
     77    return (gamma - 1.0) * EREST_MeV;
    7778  }
    7879}
     
    302303  ( matrice.at(1) ).at(1)  *= uniteAngle;
    303304  ( matrice.at(3) ).at(3)  *= uniteAngle;
    304   P0Transport_ = 1.0e-3*ERESTMeV*P_reference_MeV_sur_c;
     305  P0Transport_ = 1.0e-3*EREST_MeV*P_reference_MeV_sur_c;
    305306
    306307  //  cout << " buildmomentrepresentation impression des moments " << endl;
     
    365366  if ( index == 5 ) {
    366367    double gamma0 = referenceParticle_.getGamma();
    367     cout << " gamma0 = " << gamma0 << endl;
     368    //    cout << " gamma0 = " << gamma0 << endl;
    368369    if ( gamma0 == 0.0 ) return;
    369370    for (unsigned i = 0; i < goodPartic_.size(); ++i) {
    370371      coord.at(i) =  100.*(goodPartic_.at(i).getGamma() - gamma0)/gamma0;  // en %
    371       cout << " gamma0 = " << gamma0 << " gamma = " << goodPartic_.at(i).getGamma() << endl;
     372      //      cout << " gamma0 = " << gamma0 << " gamma = " << goodPartic_.at(i).getGamma() << endl;
    372373    }
    373374    return;
    374375  }
    375376}
    376 
    377 void particleBeam::donneesDessinEllipse(vector<double>& xcor, vector<double>& ycor, unsigned indexAbs, unsigned indexOrd) {
     377unsigned particleBeam::indexFromPspaToTransport(unsigned index) const {
     378  cout << " indexFromPspaToTransport entree : " << index << endl;
     379  unsigned indexRetour;
     380  switch ( index ) {
     381  case 0 : return  0; break; // x
     382  case 1 : return  2; break; // y
     383  case 2 : return  4; break; // z -> l
     384  case 3 : return  1; break; // xp
     385  case 4 : return  3; break; // yp
     386  case 5 : return  5; break; // de/E
     387  default : {
     388    cout << " particleBeam::indexFromPspaToTransport : coordinate index ERROR inital index :  "<< index << endl;
     389    return 99;
     390  }
     391  }
     392}
     393
     394void particleBeam::donneesDessinEllipse(vector<double>& xcor, vector<double>& ycor, vector<string>& legende, unsigned indexAbs, unsigned indexOrd) {
    378395  int k;
    379396  double x,y;
     397  cout << " particleBeam::donneesDessinEllipse index recus x" << indexAbs << " index y " << indexOrd << endl;
    380398
    381399  if ( !momentRepresentationOk_ ) return;
     
    387405  // les index sont dans l'ordre x,y,z,xp,yp, de/E
    388406  // on traduit en TRANSPORT
    389   if ( indexAbs == 1 ) indexAbs = 2;  // y
    390   if ( indexAbs == 2 ) indexAbs = 4;  // z -> l
    391   if ( indexAbs == 3 ) indexAbs = 1;  // xp
    392   if ( indexAbs == 4 ) indexAbs = 3;  // yp
    393 
    394   if ( indexOrd == 1 ) indexOrd = 2;  // y
    395   if ( indexOrd == 2 ) indexOrd = 4;  // z -> l
    396   if ( indexOrd == 3 ) indexOrd = 1;  // xp
    397   if ( indexOrd == 4 ) indexOrd = 3;  // yp
     407
     408  indexAbs = indexFromPspaToTransport(indexAbs);
     409  indexOrd = indexFromPspaToTransport(indexOrd);
     410
     411  // a completer
     412  legende.clear();
     413  if ( indexAbs == 0 && indexOrd == 1 ) {
     414    string namx = " x ";
     415    string namy = " xp ";
     416    string  emitt = mixedTools::doubleToString(getUnnormalizedEmittanceX());
     417    string xmax = "x max= ";
     418    string valXmax = mixedTools::doubleToString(10.0*getSigmaTransportij(1,1)); // mm
     419    string ymax = "x' max= ";
     420    string valYmax = mixedTools::doubleToString(getSigmaTransportij(2,2)); // mm
     421    string correl = " correlation ";
     422    string valCorrel = mixedTools::doubleToString(getSigmaTransportij(2,1));
     423    string xunit = " mm";
     424    string yunit = " mrad";
     425    legende.push_back( "emittance" + namx + "," + namy + ": " + emitt + " pi." + xunit + "." + yunit);
     426    legende.push_back( xmax + valXmax + xunit);
     427    legende.push_back( ymax + valYmax + yunit);
     428  } else {
     429    legende.push_back(" text of legend not yet programmed ");
     430  }
    398431
    399432  cout << " index x" << indexAbs << " index y " << indexOrd << endl;
     
    481514  // sortie pour la legende: out[0]= entries, out[1]= mean, out[2]= rms
    482515
     516  // on calcule avec les gammas ; les MeV c'est pour les sorties
     517
    483518  double gammin= GRAND;
    484519  double gammax= -gammin;
    485   double Emoy= 0.0;
     520  //  double Emoy= 0.0;
    486521  double ecatyp= 0.0;
    487 
     522  double gmoy=0.0;
    488523  for (unsigned int k = 0; k < goodPartic_.size(); k++)
    489524    {
    490525      double gamma = goodPartic_.at(k).getGamma();
    491       double EMev = (gamma-1.0)*ERESTMeV;
     526      //      double EMev = (gamma-1.0)*ERESTMeV;
    492527      if (gamma < gammin) gammin = gamma;
    493528      else if (gamma > gammax) gammax = gamma;
    494       Emoy += EMev;
    495       ecatyp += EMev*EMev;
     529      //      Emoy += EMev;
     530      double g = gamma-1.0;
     531      gmoy += g;
     532      //      ecatyp += EMev*EMev;
     533      ecatyp += g*g;
    496534    }
    497535
    498536  double sum= (float)goodPartic_.size();
    499537  out[0]= sum;
    500   Emoy /= sum;
    501   out[1]= Emoy; //MeV
     538  //  Emoy /= sum;
     539  gmoy /= sum;
     540  //  out[1]= Emoy; //MeV
     541  out[1]= gmoy*EREST_MeV ; //MeV
    502542  ecatyp /= sum;
    503   out[2]= 1000.0*sqrt(ecatyp); //KeV
    504   ecatyp = sqrt(abs(ecatyp-Emoy*Emoy));
    505 
    506   double Emin = (gammin-1.0)*ERESTMeV;
    507   double Emax = (gammax-1.0)*ERESTMeV;
    508   cout << "energie cinetique -moyenne " << Emoy << " Mev " << "-mini " << Emin << " Mev " << "-maxi " << Emax << " Mev " << "ecart type " << ecatyp*1000.0 << " Kev" << endl;
     543  //  out[2]= 1000.0*sqrt(ecatyp); //KeV
     544  //  ecatyp = sqrt(abs(ecatyp-Emoy*Emoy));
     545
     546  ecatyp = sqrt(abs(ecatyp-gmoy*gmoy));
     547  out[2]= ecatyp*EREST_keV; //KeV
     548
     549  double gmin = gammin-1.0;
     550  double gmax = gammax-1.0;
     551  cout << "energie cinetique -moyenne " << gmoy*EREST_MeV << " Mev " << "-mini " << gmin*EREST_MeV << " Mev " << "-maxi " << gmax*EREST_MeV << " Mev " << "ecart type " << ecatyp*EREST_keV << " Kev" << endl;
    509552
    510553  vector<double> Eshf;
     
    512555    {
    513556      double gamma = goodPartic_.at(k).getGamma();
    514       double EMev = (gamma-1.0)*ERESTMeV;
    515       Eshf.push_back(EMev-Emoy);
     557      // double EMev = (gamma-1.0)*ERESTMeV;
     558      // Eshf.push_back(EMev-Emoy);
     559      // modif glm 2/03/2013
     560      double g = (gamma-1.0);
     561      Eshf.push_back( (g-gmoy) );
    516562    }
    517563
     
    542588
    543589    // on gradue l'abscisse en pourcents
    544     xcor[i]= 100.*( vmin+i*hpas );
     590    //   xcor[i]= 100.*( vmin+i*hpas );
     591    xcor[i]= 100.*( vmin+i*hpas )/gmoy;
    545592  }
    546593
     
    548595  for (unsigned i = 0; i < Eshf.size(); ++i) {
    549596    double var= Eshf[i]-vmin;
    550     if(var < 0 || var >= phist) cout<<"out of range "<<var<<", ("<< i<<")"<< endl;
    551     int k= var/hpas;
     597    //    if(var < 0 || var >= phist) cout<<"out of range "<<var<<", ("<< i<<")"<< endl;
     598    if(var < 0 ) {
     599      cout<<"lesser that the minimum "<<var<<", ("<< i<<")"<< endl;
     600      hist[0]++;
     601    }
     602    if(var >= phist) {
     603      cout<<"greater that the maximum "<<var<<", ("<< i<<")"<< endl;
     604      hist[ihist-1]++;
     605    }
     606    //    int k= var/hpas;
    552607    int kk= (int)floor(var/hpas);
    553608    //if(i%20 == 0) cout<<"v("<<i<<")= " <<var<<" ["<<k<<"-"<<kk<<"], "<<endl;
  • Interface_Web/trunk/pspaWT/sources/controler/src/softwareGenerator.cc

    r342 r356  
    140140      timeRef = partic.clock;
    141141      TRIDVECTOR  posRef(100.*partic.xx,100.*partic.yy,100.*partic.zz); // en cm
    142       betagammaZRef = partic.pz/ERESTeV;
     142      betagammaZRef = partic.pz/EREST_eV;
    143143      // l'impulsion donnee par generator est en eV/c
    144       TRIDVECTOR betagammaRef(partic.px/ERESTeV , partic.py/ERESTeV, betagammaZRef);
     144      TRIDVECTOR betagammaRef(partic.px/EREST_eV , partic.py/EREST_eV, betagammaZRef);
    145145      refPart = bareParticle(posRef, betagammaRef);
    146146
     
    190190
    191191    // tout ce qui suit sera a clarifier
    192     double betaGammax = pxPart/ERESTeV;
    193     double betaGammay = pyPart/ERESTeV;
    194     double betaGammaz = betagammaZRef + pzPartRel/ERESTeV;
     192    double betaGammax = pxPart/EREST_eV;
     193    double betaGammay = pyPart/EREST_eV;
     194    double betaGammaz = betagammaZRef + pzPartRel/EREST_eV;
    195195    betagamma.setComponents(betaGammax, betaGammay, betaGammaz);
    196196    double gamma = sqrt(1.0 + betagamma.norm2());
     
    203203
    204204    // ici on neglige la difference entre gamma de la part. et gamma de la ref.
    205     deltaz = (pzPartRel/ERESTeV) * CLIGHT_m_per_ns * deltat; // en metres
     205    deltaz = (pzPartRel/EREST_eV) * CLIGHT_m_per_ns * deltat; // en metres
    206206
    207207    pos.setComponents(100.*x,100.*y,100.*deltaz);  // en cm
  • Interface_Web/trunk/pspaWT/sources/controler/src/softwareParmela.cc

    r355 r356  
    243243    // dephasage par rapport a la reference 
    244244    dephas = faisceau.at(k).phi - phaseRef; // degrés
    245     g = faisceau.at(k).wz/ERESTMeV;
     245    g = faisceau.at(k).wz/EREST_MeV;
    246246    betagammaz = faisceau.at(k).begamz;
    247247    betaz = betagammaz/(g+1.0);
  • Interface_Web/trunk/pspaWT/sources/userInterface/src/GWt_pspaApplication.cc

    r355 r356  
    502502    {
    503503      if ( !beam->momentRepresentationOk() ) beam->buildMomentRepresentation();
     504      cout << " PspaApplication::dessinerPhaseSpace cood cliquees " << xabs << " " << yord << endl;
    504505      faireDessinTransport(toto_, beam, xabs, yord, nameAbs, nameOrd );
    505506    }
     
    582583  ellipseDialog->setClosable(true);
    583584  ellipseDialog->show();
    584    
    585   new WText(nameOfCase_ + " : emittance " + namex + " , " + namey + " : " + mixedTools::doubleToString(beam->getUnnormalizedEmittanceX()) + " pi.mm.mrad" , ellipseDialog->contents());
    586   new WBreak(ellipseDialog->contents());
    587   new WText(" xmax = " + mixedTools::doubleToString(beam->getSigmaTransportij(1,1)) + " cm ", ellipseDialog->contents());
    588   new WBreak(ellipseDialog->contents());
    589   new WText(" x' max = " + mixedTools::doubleToString(beam->getSigmaTransportij(2,2)) + " mrad ", ellipseDialog->contents());
    590   new WBreak(ellipseDialog->contents());
    591   new WText(" corr. 12 = " + mixedTools::doubleToString(beam->getSigmaTransportij(2,1))  + " sqrt(cm.rad) ", ellipseDialog->contents());
     585  new WText(nameOfCase_, ellipseDialog->contents());
     586  // new WText(nameOfCase_ + " : emittance " + namex + " , " + namey + " : " + mixedTools::doubleToString(beam->getUnnormalizedEmittanceX()) + " pi.mm.mrad" , ellipseDialog->contents());
     587  // new WBreak(ellipseDialog->contents());
     588  // new WText(" xmax = " + mixedTools::doubleToString(beam->getSigmaTransportij(1,1)) + " cm ", ellipseDialog->contents());
     589  // new WBreak(ellipseDialog->contents());
     590  // new WText(" x' max = " + mixedTools::doubleToString(beam->getSigmaTransportij(2,2)) + " mrad ", ellipseDialog->contents());
     591  // new WBreak(ellipseDialog->contents());
     592  // new WText(" corr. 12 = " + mixedTools::doubleToString(beam->getSigmaTransportij(2,1))  + " sqrt(cm.rad) ", ellipseDialog->contents());
    592593 
    593594  vector<double> xcor;
    594595  vector<double> ycor;
    595   beam->donneesDessinEllipse(xcor,ycor,indexAbs, indexOrd);
     596  vector<string> legende;
     597  beam->donneesDessinEllipse(xcor,ycor,legende, indexAbs, indexOrd);
     598  unsigned k;
     599  for (int k=0 ; k < legende.size(); k++) {
     600  new WBreak(ellipseDialog->contents());
     601    new WText(legende.at(k), ellipseDialog->contents());
     602  }
    596603  //  beam->donneesDessinEllipseXxp(xcor,ycor);
    597604  //  scatterPlot1D(ellipseDialog->contents(),xcor,ycor); 
     
    863870  new WText(" mean : "+ mixedTools::doubleToString(out[1])+" MeV",w);
    864871  new WBreak(w);
    865   new WText(" rms : "+ mixedTools::doubleToString(out[2])+" KeV",w);
     872  new WText(" sigma rms : "+ mixedTools::doubleToString(out[2])+" KeV",w);
    866873 
    867874  WCartesianChart *chart = new WCartesianChart(w);
    868   chart->setTitle("Histogram of particle energies");
     875  chart->setTitle("Histogram of kinetic energy");
    869876  chart->setModel(model);        // set the model
    870877  chart->setXSeriesColumn(0);    // set the column that holds the categories
     
    881888  axis.setLabelFormat("%.3f");
    882889  axis.setGridLinesEnabled(true);
    883   axis.setTitle(WString("legende x"));
     890  axis.setTitle(WString(" dEcin/Ecin (%)"));
    884891
    885892  chart->axis(Y1Axis).setGridLinesEnabled(true);
Note: See TracChangeset for help on using the changeset viewer.