Changeset 356 in PSPA for Interface_Web
- Timestamp:
- Mar 2, 2013, 7:54:38 PM (12 years ago)
- Location:
- Interface_Web/trunk/pspaWT/sources
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
Interface_Web/trunk/pspaWT/sources/controler/include/PhysicalConstants.h
r312 r356 8 8 #define ELECTRONANOCOULOMB 1.60217653e-10 9 9 #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 12 13 #define CLIGHT_E8 2.99792458 13 14 #define CLIGHT_m_per_ns 0.299792458 -
Interface_Web/trunk/pspaWT/sources/controler/include/particleBeam.h
r354 r356 41 41 void razDesMoments(); 42 42 void particlesPhaseSpaceComponent(vector<double>& coord, unsigned index); 43 unsigned indexFromPspaToTransport(unsigned index) const; 43 44 44 45 public: … … 67 68 void Zrange(double& zmin, double& zmax) const; 68 69 // 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); 70 71 void particlesPhaseSpaceData(vector<double>& xcor, vector<double>& ycor, unsigned indexAbs, unsigned indexOrd); 71 72 virtual string FileOutputFlow() const; -
Interface_Web/trunk/pspaWT/sources/controler/src/elementBend.cc
r288 r356 96 96 ostringstream sortie; 97 97 // il faut entrer l'energie cinetique 98 double ecin = momentum_/EREST MeV;98 double ecin = momentum_/EREST_MeV; 99 99 ecin = ecin*ecin + 1.; 100 ecin = EREST MeV*(sqrt(ecin) - 1.0);100 ecin = EREST_MeV*(sqrt(ecin) - 1.0); 101 101 sortie << "BEND /l=" << lenghtElem_ << " / aper=" << aperture_ << " / iout=1 / wr=" << ecin << " /alpha=" << angleDeg_ << " / beta1=" << beta1_; 102 102 sortie << " / beta2=" << beta1_; -
Interface_Web/trunk/pspaWT/sources/controler/src/particleBeam.cc
r355 r356 4 4 #include "PhysicalConstants.h" 5 5 #include "mathematicalTools.h" 6 #include "mixedTools.h" 6 7 7 8 #include <stdio.h> … … 70 71 double particleBeam::referenceKineticEnergyMeV() const { 71 72 if ( particleRepresentationOk_ ) { 72 return (referenceParticle_.getGamma() -1.) * EREST MeV;73 return (referenceParticle_.getGamma() -1.) * EREST_MeV; 73 74 } else { 74 double P0Norm = 1000.0 * P0Transport_ / EREST MeV;75 double P0Norm = 1000.0 * P0Transport_ / EREST_MeV; 75 76 double gamma = sqrt(1.0 + P0Norm * P0Norm); 76 return (gamma - 1.0) * EREST MeV;77 return (gamma - 1.0) * EREST_MeV; 77 78 } 78 79 } … … 302 303 ( matrice.at(1) ).at(1) *= uniteAngle; 303 304 ( matrice.at(3) ).at(3) *= uniteAngle; 304 P0Transport_ = 1.0e-3*EREST MeV*P_reference_MeV_sur_c;305 P0Transport_ = 1.0e-3*EREST_MeV*P_reference_MeV_sur_c; 305 306 306 307 // cout << " buildmomentrepresentation impression des moments " << endl; … … 365 366 if ( index == 5 ) { 366 367 double gamma0 = referenceParticle_.getGamma(); 367 cout << " gamma0 = " << gamma0 << endl;368 // cout << " gamma0 = " << gamma0 << endl; 368 369 if ( gamma0 == 0.0 ) return; 369 370 for (unsigned i = 0; i < goodPartic_.size(); ++i) { 370 371 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; 372 373 } 373 374 return; 374 375 } 375 376 } 376 377 void particleBeam::donneesDessinEllipse(vector<double>& xcor, vector<double>& ycor, unsigned indexAbs, unsigned indexOrd) { 377 unsigned 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 394 void particleBeam::donneesDessinEllipse(vector<double>& xcor, vector<double>& ycor, vector<string>& legende, unsigned indexAbs, unsigned indexOrd) { 378 395 int k; 379 396 double x,y; 397 cout << " particleBeam::donneesDessinEllipse index recus x" << indexAbs << " index y " << indexOrd << endl; 380 398 381 399 if ( !momentRepresentationOk_ ) return; … … 387 405 // les index sont dans l'ordre x,y,z,xp,yp, de/E 388 406 // 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 } 398 431 399 432 cout << " index x" << indexAbs << " index y " << indexOrd << endl; … … 481 514 // sortie pour la legende: out[0]= entries, out[1]= mean, out[2]= rms 482 515 516 // on calcule avec les gammas ; les MeV c'est pour les sorties 517 483 518 double gammin= GRAND; 484 519 double gammax= -gammin; 485 double Emoy= 0.0;520 // double Emoy= 0.0; 486 521 double ecatyp= 0.0; 487 522 double gmoy=0.0; 488 523 for (unsigned int k = 0; k < goodPartic_.size(); k++) 489 524 { 490 525 double gamma = goodPartic_.at(k).getGamma(); 491 double EMev = (gamma-1.0)*ERESTMeV;526 // double EMev = (gamma-1.0)*ERESTMeV; 492 527 if (gamma < gammin) gammin = gamma; 493 528 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; 496 534 } 497 535 498 536 double sum= (float)goodPartic_.size(); 499 537 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 502 542 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; 509 552 510 553 vector<double> Eshf; … … 512 555 { 513 556 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) ); 516 562 } 517 563 … … 542 588 543 589 // 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; 545 592 } 546 593 … … 548 595 for (unsigned i = 0; i < Eshf.size(); ++i) { 549 596 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; 552 607 int kk= (int)floor(var/hpas); 553 608 //if(i%20 == 0) cout<<"v("<<i<<")= " <<var<<" ["<<k<<"-"<<kk<<"], "<<endl; -
Interface_Web/trunk/pspaWT/sources/controler/src/softwareGenerator.cc
r342 r356 140 140 timeRef = partic.clock; 141 141 TRIDVECTOR posRef(100.*partic.xx,100.*partic.yy,100.*partic.zz); // en cm 142 betagammaZRef = partic.pz/EREST eV;142 betagammaZRef = partic.pz/EREST_eV; 143 143 // l'impulsion donnee par generator est en eV/c 144 TRIDVECTOR betagammaRef(partic.px/EREST eV , partic.py/ERESTeV, betagammaZRef);144 TRIDVECTOR betagammaRef(partic.px/EREST_eV , partic.py/EREST_eV, betagammaZRef); 145 145 refPart = bareParticle(posRef, betagammaRef); 146 146 … … 190 190 191 191 // tout ce qui suit sera a clarifier 192 double betaGammax = pxPart/EREST eV;193 double betaGammay = pyPart/EREST eV;194 double betaGammaz = betagammaZRef + pzPartRel/EREST eV;192 double betaGammax = pxPart/EREST_eV; 193 double betaGammay = pyPart/EREST_eV; 194 double betaGammaz = betagammaZRef + pzPartRel/EREST_eV; 195 195 betagamma.setComponents(betaGammax, betaGammay, betaGammaz); 196 196 double gamma = sqrt(1.0 + betagamma.norm2()); … … 203 203 204 204 // ici on neglige la difference entre gamma de la part. et gamma de la ref. 205 deltaz = (pzPartRel/EREST eV) * CLIGHT_m_per_ns * deltat; // en metres205 deltaz = (pzPartRel/EREST_eV) * CLIGHT_m_per_ns * deltat; // en metres 206 206 207 207 pos.setComponents(100.*x,100.*y,100.*deltaz); // en cm -
Interface_Web/trunk/pspaWT/sources/controler/src/softwareParmela.cc
r355 r356 243 243 // dephasage par rapport a la reference 244 244 dephas = faisceau.at(k).phi - phaseRef; // degrés 245 g = faisceau.at(k).wz/EREST MeV;245 g = faisceau.at(k).wz/EREST_MeV; 246 246 betagammaz = faisceau.at(k).begamz; 247 247 betaz = betagammaz/(g+1.0); -
Interface_Web/trunk/pspaWT/sources/userInterface/src/GWt_pspaApplication.cc
r355 r356 502 502 { 503 503 if ( !beam->momentRepresentationOk() ) beam->buildMomentRepresentation(); 504 cout << " PspaApplication::dessinerPhaseSpace cood cliquees " << xabs << " " << yord << endl; 504 505 faireDessinTransport(toto_, beam, xabs, yord, nameAbs, nameOrd ); 505 506 } … … 582 583 ellipseDialog->setClosable(true); 583 584 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()); 592 593 593 594 vector<double> xcor; 594 595 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 } 596 603 // beam->donneesDessinEllipseXxp(xcor,ycor); 597 604 // scatterPlot1D(ellipseDialog->contents(),xcor,ycor); … … 863 870 new WText(" mean : "+ mixedTools::doubleToString(out[1])+" MeV",w); 864 871 new WBreak(w); 865 new WText(" rms : "+ mixedTools::doubleToString(out[2])+" KeV",w);872 new WText(" sigma rms : "+ mixedTools::doubleToString(out[2])+" KeV",w); 866 873 867 874 WCartesianChart *chart = new WCartesianChart(w); 868 chart->setTitle("Histogram of particle energies");875 chart->setTitle("Histogram of kinetic energy"); 869 876 chart->setModel(model); // set the model 870 877 chart->setXSeriesColumn(0); // set the column that holds the categories … … 881 888 axis.setLabelFormat("%.3f"); 882 889 axis.setGridLinesEnabled(true); 883 axis.setTitle(WString(" legende x"));890 axis.setTitle(WString(" dEcin/Ecin (%)")); 884 891 885 892 chart->axis(Y1Axis).setGridLinesEnabled(true);
Note: See TracChangeset
for help on using the changeset viewer.