Changeset 359 in PSPA


Ignore:
Timestamp:
Mar 4, 2013, 6:08:02 PM (11 years ago)
Author:
garnier
Message:

Changement de la couleur des sections selectionnes + plein dautres choses

Location:
Interface_Web/trunk/pspaWT
Files:
3 added
35 edited

Legend:

Unmodified
Added
Removed
  • Interface_Web/trunk/pspaWT/History

    r352 r359  
    66     =========================================================
    77
     84 Mars : Laurent Garnier
     9- pspa.css
     10  o Changement de styles sur les icones de la beamLine
     11  o Ajout de style qui servirons plus tard
     12- elementCell, elementDrift, elementBend, elementBeam, elementSnapshot, elementSoleno,
     13  elementRfGun, elementFit, elementSnapshot :
     14  o Ajout de registerAcceptableSoftware() et suppression de is_accepted_by_software()
     15    déplacé dans abstractElement
     16- abstractElement : ajout de
     17  o setSoftware(nomDeLogiciel prog)
     18  o getAbstractSoftware()
     19  o registerAcceptableSoftware(nomDeLogiciel abs)
     20- dataManager.cc :
     21  o  Suppression de checkExecute() et checkElementsForExec(). Dans la méthode
     22     GWt_softwarePanel::areDataCoherent(), elles sont remplacées par l'appel à
     23     pspa_->getBeamLine()->getAbstractElement(i)->setSoftware(prog.getString() qui renvoie
     24     false si on ne peux pas ajouter ce software avec cet élément.
     25- GWt_softwarePanel.cc : Suppression de l'appel à checkExecute() (voir ci dessus)
     26- GWt_ligneFaisceau :
     27  o Ajout de update()
     28  o manageLineFaisceauLayout(), ajout d'un if (sur NULL pointer possible)
     29- GWt_elementLigneFaisceau:
     30  o  Ajout d'une variable privée : elementContainer_
     31  o Suppression de la seconde ligne du tableau contenu dans cet élément
     32  o setElementLabel : Mise à jour du tooltip
     33  o mise a jour de la couleur de fond des sections
     34- GWt_abstractElement
     35  o Protection dans : updateLabelAndToolTipWidget()
     36- softwareParmela  : ajout d'une protection sur NULL pointer dans createInputFile()
     37- trivaluedBool.h : Changement des noms (confusions possibles) en TBoolError, TBoolIgnore, TBoolOk
    8381er Mars : Laurent Garnier
    939- Fix le bug sur le serveur : Mauvaise variable utilisée. Introduit le 26 février
     40- Ajout d'un nouvel icone qui servira plus tard : advanced.png
    1041
    114227 février 2013 Laurent Garnier
  • Interface_Web/trunk/pspaWT/htdocs/pspa.css

    r347 r359  
    5757  background-color: #FFFFFF;
    5858  box-shadow: 0 1px 3px rgba(34, 25, 25, 0.4);
    59   font-size: 11px;
    60   padding: 15px 15px 0;
     59  padding: 8px 8px;
    6160  position: absolute;
    6261  border-radius: 5px;
     
    8079        text-shadow: 0px 0px 1px #333;
    8180}
     81
     82
     83
     84
     85.Button.WhiteButton.ContrastButton {
     86    border: 0 none;
     87    box-shadow: 0 1px rgba(255, 255, 255, 0.35) inset, 0 0 0 1px rgba(140, 126, 126, 0.5);
     88}
     89.pin .WhiteButton.Button11 {
     90    border-radius: 6px 6px 6px 6px;
     91    padding: 7px 9px;
     92}
     93
     94
     95element.style.div {
     96    left: -8px;
     97    position: static;
     98    top: -8px;
     99    z-index: 3;
     100    top: auto;
     101}
     102
     103.beamLineElementActions element.style.div{
     104    left: -8px;
     105    position: static;
     106    top: -8px;
     107    z-index: 3;
     108    top: auto;
     109}
     110
     111.beamLineElementActions {
     112    left: -8px;
     113    position: static;
     114    top: -8px;
     115    z-index: 3;
     116    top: auto;
     117}
     118
     119.Button.WhiteButton, .repin_memo_on .pin:hover .beamLineElementActions .repin_link {
     120    background-color: #F0EDED;
     121    background-image: -moz-linear-gradient(center top , #FDFAFB, #F9F7F7 50%, #F6F3F4 50%, #F0EDED);
     122    border-color: #BBBBBB;
     123    color: #524D4D;
     124    text-shadow: 0 1px rgba(255, 255, 255, 0.9);
     125}
     126.Button.Button11 {
     127    border-radius: 3px 3px 3px 3px;
     128}
     129.beamLineElementActions .likebutton, .beamLineElementActions .comment, .beamLineElementActions .repin_link, .beamLineElementActions .editbutton, .beamLineElementActions .software {
     130    display: none;
     131}
     132
     133.beamLineElementActions .parameters {
     134    background-image: url("advanced.png");
     135    background-repeat: no;
     136}
     137
     138.Button {
     139    border: 1px solid transparent;
     140    border-radius: 0.3em 0.3em 0.3em 0.3em;
     141    box-shadow: 0 1px rgba(255, 255, 255, 0.8), 0 1px rgba(255, 255, 255, 0.35) inset;
     142    cursor: pointer;
     143    display: inline-block;
     144    font-family: "helvetica neue",arial,sans-serif;
     145    font-weight: bold;
     146    line-height: 1em;
     147    margin: 0;
     148    padding: 0.45em 0.825em;
     149    text-align: center;
     150    transition: all 0.05s ease-in-out 0s;
     151}
     152*|*:-moz-any-link:not(svg|a) {
     153    text-decoration: underline;
     154}
     155*|*:link {
     156    color: #FF6666;
     157}
     158:-moz-any-link {
     159    cursor: pointer;
     160}
  • Interface_Web/trunk/pspaWT/sources/controler/include/abstractElement.h

    r304 r359  
    99#include "nomDeLogiciel.h"
    1010#include "trivaluedBool.h"
     11#include "abstractSoftware.h"
     12#include "softwareGenerator.h"
     13#include "softwareParmela.h"
     14#include "softwareTest.h"
     15#include "softwareTransport.h"
    1116
    1217using namespace std;
     
    5459    double getLenghtOfElement() const;
    5560    int getNbParams() const;
    56     virtual trivaluedBool is_accepted_by_software(nomDeLogiciel soft) const;
     61
     62    trivaluedBool is_accepted_by_software(nomDeLogiciel soft);
     63   
    5764    virtual void setPhaseStep(double);
    5865    virtual double getInitialKineticEnergy() const;
     
    6673    virtual void FileInput(ifstream& ifs) = 0;
    6774    virtual string print() = 0;
     75
     76    /** Return the abstractSofware associated with this element
     77     */
     78    inline abstractSoftware* getAbstractSoftware() {
     79        return abstractSoftware_;
     80    }
     81   
     82   
     83    void registerAcceptableSoftware(nomDeLogiciel abs,trivaluedBool b);
     84    /**
     85     Set the software to this element
     86     @param abstractName the name of the abstract software
     87     @return trivaluedBool if this software is/not allowed/ignore on this component
     88     */
     89    trivaluedBool setSoftware(nomDeLogiciel abstractName);
     90   
     91    private :
     92    abstractSoftware *abstractSoftware_;
     93
     94    /**
     95     Acceptable software list for this element
     96     */
     97    std::vector <nomDeLogiciel> acceptableSoftware_;
     98
     99    /**
     100     Ignore software list for this element
     101     */
     102    std::vector <nomDeLogiciel> ignoreSoftware_;
    68103};
    69104#endif
  • Interface_Web/trunk/pspaWT/sources/controler/include/dataManager.h

    r355 r359  
    1212#include "beam2Moments.h"
    1313#include "parmelaParticle.h"
     14#include "nomDeLogiciel.h"
    1415
    1516class PspaApplication;
     
    3132   
    3233  void addSectionToExecute(int debut, int fin, nomDeLogiciel prog);
    33    
    34   abstractElement* addElement(typedElement elemType);
     34
     35    abstractElement* addElement(typedElement elemType);
    3536  void removeElement(string);
    3637 
     
    4647  */
    4748  int getNumeroFromElementLabel(string);
    48   abstractElement* getElementPointerFromNumero(int);
     49    abstractElement* getElementPointerFromNumero(int);
    4950 
    5051  void initializeExecution();
    51   trivaluedBool checkExecute(string& diagnostic);
    52   trivaluedBool checkElementsForExec(nomDeLogiciel logiciel, unsigned indexDeb, unsigned indexFin, string& diagnostic);
     52//  trivaluedBool checkExecute(string& diagnostic);
     53//  trivaluedBool checkElementsForExec(nomDeLogiciel logiciel, unsigned indexDeb, unsigned indexFin, string& diagnostic);
    5354  bool executeAll();
    5455 
  • Interface_Web/trunk/pspaWT/sources/controler/include/elementBeam.h

    r287 r359  
    3030    ~elementBeam();
    3131   
    32     virtual  trivaluedBool is_accepted_by_software(nomDeLogiciel soft) const;
    33    
    3432   
    3533    virtual void setParametersString(string* param);
  • Interface_Web/trunk/pspaWT/sources/controler/include/elementBend.h

    r287 r359  
    4242   
    4343    double getLenghtOfElement() const;
    44    
    45     virtual trivaluedBool is_accepted_by_software(nomDeLogiciel soft) const;
    46    
    47    
     44       
    4845    virtual void setParametersString(string* param);
    4946   
  • Interface_Web/trunk/pspaWT/sources/controler/include/elementCell.h

    r287 r359  
    4646    ~elementCell() { ;}
    4747   
    48     virtual trivaluedBool is_accepted_by_software(nomDeLogiciel soft) const;
    49    
    5048    virtual string* getParametersString() const;
    5149   
  • Interface_Web/trunk/pspaWT/sources/controler/include/elementDrift.h

    r287 r359  
    2020   
    2121    ~elementDrift() {;}
    22    
    23     virtual trivaluedBool is_accepted_by_software(nomDeLogiciel soft) const;
    2422   
    2523   
  • Interface_Web/trunk/pspaWT/sources/controler/include/elementFit.h

    r287 r359  
    2929    ~elementFit() {;}
    3030   
    31     virtual  trivaluedBool is_accepted_by_software(nomDeLogiciel soft) const;
    32    
    3331   
    3432    virtual void setParametersString(string* param);
  • Interface_Web/trunk/pspaWT/sources/controler/include/elementRfgun.h

    r304 r359  
    4646    ~elementRfgun() {;}
    4747   
    48     virtual  trivaluedBool is_accepted_by_software(nomDeLogiciel soft) const;
    49    
    5048    virtual void setPhaseStep(double ph) { phaseStep_ = ph;}
    5149   
  • Interface_Web/trunk/pspaWT/sources/controler/include/elementSnapshot.h

    r342 r359  
    1818  ~elementSnapshot() {;}
    1919 
    20   virtual trivaluedBool is_accepted_by_software(nomDeLogiciel soft) const;
    2120  virtual string* getParametersString() const;
    2221  virtual void setParametersString(string* param);
  • Interface_Web/trunk/pspaWT/sources/controler/include/elementSoleno.h

    r287 r359  
    3232    ~elementSoleno() {;}
    3333   
    34     virtual trivaluedBool is_accepted_by_software(nomDeLogiciel soft) const;
    35    
    3634    virtual void setParametersString(string* param);
    3735   
  • Interface_Web/trunk/pspaWT/sources/controler/include/softwareGenerator.h

    r347 r359  
    44
    55#include "abstractSoftware.h"
    6 #include "dataManager.h"
    76
    87class softwareGenerator : public abstractSoftware
     
    1312
    1413
    15 softwareGenerator();
    16  
    1714 bool beamFromGenerator(string beamFileName, string workingDir, vector<double>& centroid, bareParticle& refPart,vector<bareParticle>& particles, vector<bareParticle>& passiveParticles );
    1815
     
    2017
    2118
    22  softwareGenerator(string inputFileName, globalParameters* globals, dataManager* dt);
     19    softwareGenerator();
     20   
     21    softwareGenerator(string inputFileName, globalParameters* globals, dataManager* dt);
    2322
    2423  virtual ~softwareGenerator() {;}
  • Interface_Web/trunk/pspaWT/sources/controler/include/softwareParmela.h

    r347 r359  
    1414
    1515
    16   softwareParmela();
    17 
    1816  bool beamFromParmela(string workingDir,unsigned numeroElement, double referencefrequency, vector<double>& centroid, bareParticle& refPart,vector<bareParticle>& particles );
    1917
     
    2119
    2220 public :
    23   softwareParmela(string inputFileName, globalParameters* globals, dataManager* beamLine);
     21    softwareParmela();
     22   
     23    softwareParmela(string inputFileName, globalParameters* globals, dataManager* beamLine);
    2424
    2525  virtual ~softwareParmela() {;}
  • Interface_Web/trunk/pspaWT/sources/controler/include/softwareTest.h

    r347 r359  
    1111 protected :
    1212
    13   softwareTest();
    14 
    1513  bool beamToParin(string workingDir, particleBeam* beam );
    1614  bool beamFromParin(string workingDir, vector<bareParticle>& particles );
     
    1816 public :
    1917
    20 softwareTest(string inputFileName, globalParameters* globals, dataManager* );
     18    softwareTest();
     19   
     20    softwareTest(string inputFileName, globalParameters* globals, dataManager* );
    2121
    2222  virtual ~softwareTest() {;}
  • Interface_Web/trunk/pspaWT/sources/controler/include/softwareTransport.h

    r347 r359  
    77{
    88
    9  protected :
    10 
    11   softwareTransport();
     9    protected :
    1210
    1311  bool  moments2FromTransport(string workingDir, string elLab, const nomdElements elem, beam2Moments& moments) const;
    1412
    1513 public :
    16   softwareTransport(string inputFileName, globalParameters* globals, dataManager* beamLine);
     14    softwareTransport();
     15    softwareTransport(string inputFileName, globalParameters* globals, dataManager* beamLine);
    1716
    1817  virtual ~softwareTransport() {;}
  • Interface_Web/trunk/pspaWT/sources/controler/include/trivaluedBool.h

    r257 r359  
    22#define TRIVALUEDBOOL_SEEN
    33
    4 enum trivaluedBool {error, warning, ok};
     4enum trivaluedBool {TBoolError, TBoolIgnore, TBoolOk};
    55
    66#endif
  • Interface_Web/trunk/pspaWT/sources/controler/src/abstractElement.cc

    r342 r359  
    44
    55abstractElement::abstractElement()
     6: abstractSoftware_(NULL)
    67{
    78  setDefaultValues();
     
    7677}
    7778
    78 trivaluedBool abstractElement::is_accepted_by_software(nomDeLogiciel soft) const {
    79   cout << " abstractElement : generic method is_accepted_by_software()  " << endl;
    80   return error;
     79
     80trivaluedBool abstractElement::is_accepted_by_software(nomDeLogiciel prog) {
     81    if (acceptableSoftware_.size() == 0) {
     82        return TBoolError;
     83    }
     84
     85    if ( std::find(acceptableSoftware_.begin(), acceptableSoftware_.end(), prog) != acceptableSoftware_.end()) {
     86        return TBoolOk;
     87    } else if ( std::find(ignoreSoftware_.begin(), ignoreSoftware_.end(), prog) != ignoreSoftware_.end()) {
     88        return TBoolIgnore;
     89    } else {
     90        return TBoolError;
     91    }
     92
     93    return TBoolOk;
    8194}
     95
    8296
    8397double abstractElement::getInitialKineticEnergy() const {
     
    89103  return "";
    90104}
     105
     106trivaluedBool abstractElement::setSoftware(nomDeLogiciel prog) {
     107    if (acceptableSoftware_.size() == 0) {
     108        return TBoolError;
     109    }
     110   
     111    if ( std::find(acceptableSoftware_.begin(), acceptableSoftware_.end(), prog) != acceptableSoftware_.end()) {
     112        if (prog == nomDeLogiciel::parmela){
     113            abstractSoftware_ = new softwareParmela();
     114        } else if (prog == nomDeLogiciel::transport) {
     115            abstractSoftware_ = new softwareTransport();
     116        } else if (prog == nomDeLogiciel::generator) {
     117            abstractSoftware_ = new softwareGenerator();
     118        } else if (prog == nomDeLogiciel::test) {
     119            abstractSoftware_ = new softwareTest();
     120        } else if (prog == nomDeLogiciel::unknownSoftware) {
     121            abstractSoftware_ = NULL;
     122        }
     123    } else if ( std::find(ignoreSoftware_.begin(), ignoreSoftware_.end(), prog) != ignoreSoftware_.end()) {
     124        return TBoolIgnore;
     125    } else {
     126        return TBoolError;
     127    }
     128    return TBoolOk;
     129}
     130
     131
     132void abstractElement::registerAcceptableSoftware(nomDeLogiciel abs,trivaluedBool b) {
     133    if (b == TBoolIgnore) {
     134        ignoreSoftware_.push_back(abs);
     135    } else if (b == TBoolOk){
     136        acceptableSoftware_.push_back(abs);
     137    }
     138}
  • Interface_Web/trunk/pspaWT/sources/controler/src/dataManager.cc

    r357 r359  
    1414
    1515dataManager::dataManager(PspaApplication* pspa) :
    16   currentBeam_(NULL),
    17   pspa_ (pspa)
     16currentBeam_(NULL),
     17pspa_ (pspa)
    1818{}
    1919
    20 dataManager::~dataManager() 
    21 {
    22   unsigned k;
    23   for (k=0; k < jobList_.size();k++) {
    24     if ( jobList_[k] != NULL ) delete jobList_[k];
    25   }
    26   if ( currentBeam_ == NULL ) delete currentBeam_;
     20dataManager::~dataManager()
     21{
     22    unsigned k;
     23    for (k=0; k < jobList_.size();k++) {
     24        if ( jobList_[k] != NULL ) delete jobList_[k];
     25    }
     26    if ( currentBeam_ == NULL ) delete currentBeam_;
    2727}
    2828
    2929void dataManager::consoleMessage(string message) {
    30   GWt_console* console = static_cast<GWt_console*> (wApp->findWidget ("console"));
    31   if (console) console->addConsoleMessage(message);
    32   pspa_->processEvents();
     30    GWt_console* console = static_cast<GWt_console*> (wApp->findWidget ("console"));
     31    if (console) console->addConsoleMessage(message);
     32    pspa_->processEvents();
    3333}
    3434
     
    4343int dataManager::getNumeroFromElementLabel(string label)
    4444{
    45   int index = -1;
    46  
    47   for (int k = 0; k < getBeamLineSize() ; k++)
     45    int index = -1;
     46   
     47    for (int k = 0; k < getBeamLineSize() ; k++)
    4848    {
    49       if (pspa_->getBeamLine()->getAbstractElement(k) != NULL){
    50         if ( pspa_->getBeamLine()->getAbstractElement(k)->getLabel() == label )
    51           {
    52             index = (int)k + 1;
    53             return index;
    54           }
    55       }
    56     }
    57   return index;
     49        if (pspa_->getBeamLine()->getAbstractElement(k) != NULL){
     50            if ( pspa_->getBeamLine()->getAbstractElement(k)->getLabel() == label )
     51            {
     52                index = (int)k + 1;
     53                return index;
     54            }
     55        }
     56    }
     57    return index;
    5858}
    5959
     
    6161abstractElement* dataManager::getElementPointerFromNumero(int k)
    6262{
    63   return pspa_->getBeamLine()->getAbstractElement(k-1);
     63    return pspa_->getBeamLine()->getAbstractElement(k-1);
    6464}
    6565
     
    6767void dataManager::addSectionToExecute(int debut, int fin, nomDeLogiciel prog)
    6868{
    69   jobList_.push_back(new sectionToExecute);
    70   jobList_.back()->firstElement = debut;
    71   jobList_.back()->lastElement = fin;
    72   jobList_.back()->software  = prog;
     69    jobList_.push_back(new sectionToExecute);
     70    jobList_.back()->firstElement = debut;
     71    jobList_.back()->lastElement = fin;
     72    jobList_.back()->software  = prog;
    7373}
    7474
    7575void dataManager::clearSectionToExecute()
    7676{
    77   unsigned k;
    78   for(k = 0; k < jobList_.size(); k++)
     77    unsigned k;
     78    for(k = 0; k < jobList_.size(); k++)
    7979    {
    80       if ( jobList_[k] != NULL ) delete jobList_[k];
    81     }
    82   jobList_.clear();
    83 }
    84 
    85 trivaluedBool dataManager::checkExecute(string& diagnostic)
    86 {
    87   cout << "dataManager::checkExecute()" << endl;
    88   consoleMessage(" VERIFICATION AVANT EXECUTION ");
    89  
    90   trivaluedBool resul = ok;
    91   diagnostic.clear();
    92  
    93   for(unsigned k = 0; k < jobList_.size(); k++) {
    94    
    95     unsigned numeroDeb = jobList_[k]->firstElement;
    96     unsigned numeroFin = jobList_[k]->lastElement;
    97    
    98     if ( numeroFin  < numeroDeb ) {
    99       diagnostic += " last element before first for job " + (jobList_[k]->software).getString() + " \n";
    100       resul = error;
    101       break;
    102     }
    103 
    104     string checkCompatibility;
    105     resul = checkElementsForExec(jobList_[k]->software,numeroDeb,numeroFin,checkCompatibility);
    106     diagnostic += checkCompatibility;
    107   } //k
    108 
    109   return resul;
    110 }
    111 
    112 trivaluedBool dataManager::checkElementsForExec(nomDeLogiciel logiciel,unsigned numeroDeb,unsigned numeroFin,string& diagnostic)
    113 {
    114   trivaluedBool resul = ok;
    115   trivaluedBool accepted;
    116 
    117   diagnostic.clear(); 
    118   abstractElement* elPtr;
    119 
    120   for(unsigned j = numeroDeb; j <= numeroFin; j++) {
    121     elPtr = pspa_->getBeamLine()->getAbstractElement(j-1);
    122     accepted = elPtr->is_accepted_by_software(logiciel);
    123 
    124     if(accepted == error) {
    125       diagnostic += " the element " + elPtr->getNomdElement().getElementName() + " is not allowed with " + logiciel.getString() + " \n";
    126       resul = error;
    127     } else if (accepted  == warning) {
    128       diagnostic += " the element " + elPtr->getNomdElement().getElementName() + " will be ignored by " + logiciel.getString() + " \n";
    129       if ( resul != error ) resul = warning;
    130     }
    131   }
    132 
    133   return resul;
    134 }
     80        if ( jobList_[k] != NULL ) delete jobList_[k];
     81    }
     82    jobList_.clear();
     83}
     84
     85
     86
    13587
    13688void dataManager::initializeExecution()
    13789{
    138   string workingDir = pspa_->getWorkingDir();
     90    string workingDir = pspa_->getWorkingDir();
    13991    if (workingDir == "") {
    14092        return;
     
    165117bool dataManager::executeAll()
    166118{
    167   bool success = true;
    168   abstractSoftware* softw = NULL;
    169   string workingDir = pspa_->getWorkingDir();
    170 
    171   for(unsigned k = 0; k < jobList_.size(); k++)
    172     { 
    173       cout << " dataManager::executeAll je m'apprete a executer : " << (jobList_[k]->software).getString() << endl;
    174      
    175       int debut = jobList_[k]->firstElement;
    176       int fin = jobList_[k]->lastElement;
    177       softw = createSoftwareConnexion(jobList_[k]->software);
    178      
    179       if (softw == NULL) {
    180         success = false;
    181         consoleMessage("dataManager::executeAll : unknown software");
    182         break;
    183       }
    184 
    185       success = softw->createInputFile(currentBeam_,debut,fin,workingDir);
    186       if ( success ) {
    187         success = softw->execute(debut,fin,workingDir);
    188         if ( success ) {
    189           success = softw->buildBeamAfterElements(debut,fin,diagnosticBeam_,workingDir);
    190         }
    191       }
    192      
    193       delete softw;
    194       if ( success ) {
    195         currentBeam_ = &diagnosticBeam_.back();
    196         cout << " execute termine avec succes " << endl;
    197       } else {
    198         currentBeam_ = NULL;
    199         cout << " execute termine en ECHEC " << endl;
    200       }
    201       if ( !success ) break;
    202  
    203       //debug
    204       cout << "dataManager::executeAll #diagnosticBeam= " << diagnosticBeam_.size() << endl;
    205       cout << "dataManager::executeAll #getBeamLineSize()= " << getBeamLineSize() << endl;
    206       for (int j = debut; j <= fin; j++) {
    207         abstractElement* elPtr= getElementPointerFromNumero(j);
    208         cout << "[" << j << "] " << elPtr->getNomdElement().getElementName() << endl;
    209       }
    210 
     119    bool success = true;
     120    abstractSoftware* softw = NULL;
     121    string workingDir = pspa_->getWorkingDir();
     122   
     123    for(unsigned k = 0; k < jobList_.size(); k++)
     124    {
     125        cout << " dataManager::executeAll je m'apprete a executer : " << (jobList_[k]->software).getString() << endl;
     126       
     127        int debut = jobList_[k]->firstElement;
     128        int fin = jobList_[k]->lastElement;
     129        softw = createSoftwareConnexion(jobList_[k]->software);
     130       
     131        if (softw == NULL) {
     132            success = false;
     133            consoleMessage("dataManager::executeAll : unknown software");
     134            break;
     135        }
     136       
     137        success = softw->createInputFile(currentBeam_,debut,fin,workingDir);
     138        if ( success ) {
     139            success = softw->execute(debut,fin,workingDir);
     140            if ( success ) {
     141                success = softw->buildBeamAfterElements(debut,fin,diagnosticBeam_,workingDir);
     142            }
     143        }
     144       
     145        delete softw;
     146        if ( success ) {
     147            currentBeam_ = &diagnosticBeam_.back();
     148            cout << " execute termine avec succes " << endl;
     149        } else {
     150            currentBeam_ = NULL;
     151            cout << " execute termine en ECHEC " << endl;
     152        }
     153        if ( !success ) break;
     154       
     155        //debug
     156        cout << "dataManager::executeAll #diagnosticBeam= " << diagnosticBeam_.size() << endl;
     157        cout << "dataManager::executeAll #getBeamLineSize()= " << getBeamLineSize() << endl;
     158        for (int j = debut; j <= fin; j++) {
     159            abstractElement* elPtr= getElementPointerFromNumero(j);
     160            cout << "[" << j << "] " << elPtr->getNomdElement().getElementName() << endl;
     161        }
     162       
    211163    } //k
    212  
    213   return success;
     164   
     165    return success;
    214166}
    215167
     
    222174    cout << " et qu'on puisse restaurer normalement" << endl;
    223175    string name = pspa_->getWorkingDir() + "/" + nameOfFile + ".save";
    224 
     176   
    225177    // make dir if not exist
    226178    boost::filesystem::create_directories(pspa_->getWorkingDir() + folder + "/");
     
    230182        cerr << " error opening output file for persistency " << name << endl;
    231183    }
    232  
    233   outfile << globParam_.FileOutputFlow();
    234   abstractElement* elPtr;
    235   for(unsigned k = 0; k < getBeamLineSize() ; k++)
     184   
     185    outfile << globParam_.FileOutputFlow();
     186    abstractElement* elPtr;
     187    for(unsigned k = 0; k < getBeamLineSize() ; k++)
    236188    {
    237       elPtr = pspa_->getBeamLine()->getAbstractElement(k);
    238       outfile << elPtr->FileOutputFlow();
    239     }
    240   outfile.close();
     189        elPtr = pspa_->getBeamLine()->getAbstractElement(k);
     190        outfile << elPtr->FileOutputFlow();
     191    }
     192    outfile.close();
    241193}
    242194
     
    283235    }
    284236    infile.close();
    285 
     237   
    286238    // debug
    287239    // unsigned k;
    288240    // for(k = 0; k < getBeamLineSize(); k++) {
    289     //     abstractElement* ptr = pspa_->getBeamLine()->getAbstractElement(k);       
     241    //     abstractElement* ptr = pspa_->getBeamLine()->getAbstractElement(k);
    290242    //     cout << "reupere " << ptr->getLabel() << endl;
    291243    // }
     
    295247particleBeam* dataManager::getDiagnosticBeam(unsigned index)
    296248{
    297   if (index >= diagnosticBeam_.size()) {
    298     return NULL;
    299   } else {
    300     return &diagnosticBeam_.at(index);
    301   }
     249    if (index >= diagnosticBeam_.size()) {
     250        return NULL;
     251    } else {
     252        return &diagnosticBeam_.at(index);
     253    }
    302254}
    303255
     
    331283// }
    332284
     285
    333286// on ne tient pas compte des elements "snapshot" presents dans la beamLine
    334287void dataManager::donneesRmsEnveloppe(string type,vector<double>& xcor,vector<double>& ycor)
     
    358311      i++;
    359312    }
    360   } else {
    361     cerr << " dataManager::donneesRmsEnveloppe type " << type << " not programmed " << endl;
    362     return;
    363313  }
    364314}
    365315
    366316int dataManager::getBeamLineSize() {
    367   return pspa_->getBeamLine()->getBeamLineSize();
    368 }
    369 
    370 abstractSoftware* dataManager::createSoftwareConnexion(nomDeLogiciel logi) 
    371 {
    372   string inputFileName;
    373   if(logi == nomDeLogiciel::parmela) {
    374     inputFileName = "parmin";
    375     return new softwareParmela(inputFileName, &globParam_, this);
    376   } else if (logi == nomDeLogiciel::transport) {
    377     inputFileName = "transport.input";
    378     return new softwareTransport(inputFileName, &globParam_, this);
    379   } else if (logi == nomDeLogiciel::generator) {
    380     inputFileName = "generator.in";
    381     return new softwareGenerator(inputFileName, &globParam_, this);
    382   } else if (logi == nomDeLogiciel::test) {
    383     return new softwareTest(inputFileName, &globParam_, this);
    384   } else {
    385     return NULL;
    386   }
    387 }
     317    return pspa_->getBeamLine()->getBeamLineSize();
     318}
     319
     320abstractSoftware* dataManager::createSoftwareConnexion(nomDeLogiciel logi)
     321{
     322    string inputFileName;
     323    if(logi == nomDeLogiciel::parmela) {
     324        inputFileName = "parmin";
     325        return new softwareParmela(inputFileName, &globParam_, this);
     326    } else if (logi == nomDeLogiciel::transport) {
     327        inputFileName = "transport.input";
     328        return new softwareTransport(inputFileName, &globParam_, this);
     329    } else if (logi == nomDeLogiciel::generator) {
     330        inputFileName = "generator.in";
     331        return new softwareGenerator(inputFileName, &globParam_, this);
     332    } else if (logi == nomDeLogiciel::test) {
     333        return new softwareTest(inputFileName, &globParam_, this);
     334    } else {
     335        return NULL;
     336    }
     337}
  • Interface_Web/trunk/pspaWT/sources/controler/src/elementBeam.cc

    r288 r359  
    1010    parametersString_ = new string[nbParam_+1];
    1111    //  transportOk_ = true;
     12    registerAcceptableSoftware(nomDeLogiciel::transport, TBoolOk);
    1213}
    1314
     
    3637}
    3738
    38 trivaluedBool elementBeam::is_accepted_by_software(nomDeLogiciel soft) const {
    39     if ( soft == nomDeLogiciel::transport ) return ok;
    40     else return error;
    41 }
    4239
    4340string* elementBeam::getParametersString() const {
  • Interface_Web/trunk/pspaWT/sources/controler/src/elementBend.cc

    r356 r359  
    1313  // transportOk_ = true;
    1414  // parmelaOk_ = true;
     15    registerAcceptableSoftware(nomDeLogiciel::transport, TBoolOk);
     16    registerAcceptableSoftware(nomDeLogiciel::parmela, TBoolOk);
    1517}
    1618
     
    5658{
    5759 return 1.0e2 * radius_ * angleDeg_ * DEG_TO_RADIANS;
    58 }
    59 
    60 trivaluedBool elementBend::is_accepted_by_software(nomDeLogiciel soft) const {
    61   if ( soft == nomDeLogiciel::transport  ) return ok;
    62   else if ( soft == nomDeLogiciel::parmela ) return ok;
    63   else return error;
    6460}
    6561
  • Interface_Web/trunk/pspaWT/sources/controler/src/elementCell.cc

    r288 r359  
    1515      parametersString_ = new string[nbParam_+1];
    1616      //      parmelaOk_ = true;
     17        registerAcceptableSoftware(nomDeLogiciel::parmela, TBoolOk);
    1718    }
    1819
    19   void elementCell::setDefaultValues()
    20   {
     20void elementCell::setDefaultValues()
     21{
    2122    defaultLabel_ = "cell";
    2223    initialPhaseDef_ = 0.0;
     
    2627    offsetMagDef_ = 0.0;
    2728    scaleFactorDef_ = 1.0;
    28   }
     29}
    2930
    30   void elementCell::setDefaults()
    31   {
     31void elementCell::setDefaults()
     32{
    3233    label_ = defaultLabel_;
    3334    initialPhase_ = initialPhaseDef_;
     
    3940  }
    4041
    41 trivaluedBool elementCell::is_accepted_by_software(nomDeLogiciel soft) const {
    42   if ( soft == nomDeLogiciel::parmela ) return ok;
    43   else return error;
    44 }
    4542
    4643  string* elementCell::getParametersString() const
  • Interface_Web/trunk/pspaWT/sources/controler/src/elementDrift.cc

    r316 r359  
    1313  nbParam_ = elementName_.getElementNbParameters();
    1414  parametersString_ = new string[nbParam_+1];
     15    registerAcceptableSoftware(nomDeLogiciel::transport, TBoolOk);
     16    registerAcceptableSoftware(nomDeLogiciel::parmela, TBoolOk);
     17    registerAcceptableSoftware(nomDeLogiciel::test, TBoolOk);
     18
    1519}
    1620
     
    2327    label_ = defaultLabel_;
    2428  }
    25 
    26 
    27 trivaluedBool elementDrift::is_accepted_by_software(nomDeLogiciel soft) const {
    28   if ( soft == nomDeLogiciel::transport  ) return ok;
    29   else if ( soft == nomDeLogiciel::parmela ) return ok;
    30   else if ( soft == nomDeLogiciel::test ) return ok;
    31   else return error;
    32 }
    3329
    3430
  • Interface_Web/trunk/pspaWT/sources/controler/src/elementFit.cc

    r288 r359  
    1111    // transportOk_ = true;
    1212    // parmelaIgnored_ = true;
     13    registerAcceptableSoftware(nomDeLogiciel::transport, TBoolOk);
     14    registerAcceptableSoftware(nomDeLogiciel::parmela, TBoolIgnore);
    1315}
    1416
     
    2931}
    3032
    31 trivaluedBool elementFit::is_accepted_by_software(nomDeLogiciel soft) const {
    32     if ( soft == nomDeLogiciel::transport ) return ok;
    33     else if ( soft == nomDeLogiciel::parmela ) return warning;
    34     else return error;
    35 }
    3633
    3734
  • Interface_Web/trunk/pspaWT/sources/controler/src/elementRfgun.cc

    r304 r359  
    88
    99elementRfgun::elementRfgun() : abstractElement()
    10     {
    11       setDefaultValues();
    12       setDefaults();
    13       elementName_ = nomdElements("rfgun");
    14       nbParam_ = elementName_.getElementNbParameters();
    15       parametersString_ = new string[nbParam_+1];
    16       //      parmelaOk_ = true;
    17     }
     10{
     11    setDefaultValues();
     12    setDefaults();
     13    elementName_ = nomdElements("rfgun");
     14    nbParam_ = elementName_.getElementNbParameters();
     15    parametersString_ = new string[nbParam_+1];
     16    //      parmelaOk_ = true;
     17    registerAcceptableSoftware(nomDeLogiciel::parmela, TBoolOk);
     18    registerAcceptableSoftware(nomDeLogiciel::generator, TBoolOk);
     19}
    1820
    19   void elementRfgun::setDefaultValues()
    20   {
     21void elementRfgun::setDefaultValues()
     22{
    2123    defaultLabel_ = "rfgun";
    2224    defaultPhaseStep_ = 1.0;
     
    4749  }
    4850
    49 trivaluedBool elementRfgun::is_accepted_by_software(nomDeLogiciel soft) const {
    50   cout << " elementRfgun : c'est le bon is_accepted_by_software " << endl;
    51   if ( soft == nomDeLogiciel::parmela ) return ok;
    52   else if ( soft == nomDeLogiciel::generator ) return ok;
    53   else return error;
    54 }
    5551
    56  string* elementRfgun::getParametersString() const
     52string* elementRfgun::getParametersString() const
    5753  {
    5854   int compteur = -1;
  • Interface_Web/trunk/pspaWT/sources/controler/src/elementSnapshot.cc

    r342 r359  
    66elementSnapshot::elementSnapshot() : abstractElement()
    77{
    8   setDefaultValues();
    9   setDefaults();
    10   elementName_ = nomdElements("snapshot");
    11   nbParam_ = elementName_.getElementNbParameters();
    12   parametersString_ = new string[nbParam_+1];
     8    setDefaultValues();
     9    setDefaults();
     10    elementName_ = nomdElements("snapshot");
     11    nbParam_ = elementName_.getElementNbParameters();
     12    parametersString_ = new string[nbParam_+1];
     13    registerAcceptableSoftware(nomDeLogiciel::transport, TBoolIgnore);
     14    registerAcceptableSoftware(nomDeLogiciel::parmela, TBoolIgnore);
     15    registerAcceptableSoftware(nomDeLogiciel::generator, TBoolIgnore);
     16    registerAcceptableSoftware(nomDeLogiciel::test, TBoolIgnore);
    1317}
    1418
     
    2327}
    2428
    25 trivaluedBool elementSnapshot::is_accepted_by_software(nomDeLogiciel soft) const
    26 {
    27   return warning;
    28 }
    2929
    3030string* elementSnapshot::getParametersString() const
  • Interface_Web/trunk/pspaWT/sources/controler/src/elementSoleno.cc

    r288 r359  
    55elementSoleno::elementSoleno() :  abstractElement()
    66{
    7   cout << " passage constructeur elementSoleno " << endl;
    8   setDefaultValues();
    9   setDefaults();
    10   elementName_ = nomdElements("soleno");
    11   nbParam_ = elementName_.getElementNbParameters();
    12   parametersString_ = new string[nbParam_+1];
     7    cout << " passage constructeur elementSoleno " << endl;
     8    setDefaultValues();
     9    setDefaults();
     10    elementName_ = nomdElements("soleno");
     11    nbParam_ = elementName_.getElementNbParameters();
     12    parametersString_ = new string[nbParam_+1];
     13    registerAcceptableSoftware(nomDeLogiciel::transport, TBoolOk);
     14    registerAcceptableSoftware(nomDeLogiciel::parmela, TBoolOk);
    1315}
    1416
     
    2729    varyB0_ = varyB0Def_;
    2830  }
    29 
    30 trivaluedBool elementSoleno::is_accepted_by_software(nomDeLogiciel soft) const {
    31   if ( soft == nomDeLogiciel::transport ) return ok;
    32   else if ( soft == nomDeLogiciel::parmela ) return ok;
    33   else return error;
    34 }
    3531
    3632
  • Interface_Web/trunk/pspaWT/sources/controler/src/softwareGenerator.cc

    r356 r359  
    55#include "mathematicalConstants.h"
    66#include "PhysicalConstants.h"
     7#include "dataManager.h"
    78
    89softwareGenerator::softwareGenerator() : abstractSoftware()
  • Interface_Web/trunk/pspaWT/sources/controler/src/softwareParmela.cc

    r356 r359  
    1515bool softwareParmela::createInputFile(particleBeam* beamBefore,unsigned int numeroDeb,unsigned int numeroFin,string workingDir)
    1616{
    17   unsigned int k;
    18 
    19   if ( numeroDeb < 1 || numeroFin > dataManager_->getBeamLineSize() ) {
    20     dataManager_->consoleMessage(" softwareParmela::createInputFile : numero of element out of limits " );
    21     cerr << " numero of element out of limits " << endl;
    22     return false;
    23   }
    24 
    25   string name = workingDir + inputFileName_;
    26   ofstream outfile;
    27   outfile.open(name.c_str(), ios::out);
    28   if (!outfile) {
    29     dataManager_->consoleMessage(" softwareParmela::createInputFile : error opening output stream " );
    30     cerr << " softwareParmela::createInputFile : error opening output stream " << name << endl;
    31     return false;
    32   }
    33 
    34   abstractElement* elPtr;
    35   double initalKineticEnergy = 0.0;
    36   elPtr = dataManager_->getElementPointerFromNumero(numeroDeb);
    37   bool there_is_rfgun = ( elPtr->getNomdElement().getElementType() == RFgun );
    38  
    39   if ( !there_is_rfgun ) {
    40     string nameOfInput = workingDir + "parin.input0";
    41     if ( !beamToParmela(nameOfInput,beamBefore) ) return false;
    42     initalKineticEnergy = beamBefore->referenceKineticEnergyMeV();
    43     // les elements de parmela sont indexes de 1 à max, s'il n'y a pas de rfgun
    44     offsetNumElem_ = numeroDeb -1;
    45   } else {
    46     elPtr->setPhaseStep( globParamPtr_->getIntegrationStep() );
    47     initalKineticEnergy = elPtr->getInitialKineticEnergy();
    48     // les elements de parmela sont indexes de 0 à max, s'il y a un rfgun
    49     offsetNumElem_ = numeroDeb;
    50   }
    51 
    52   outfile << "TITLE" << endl;
    53   outfile << " titre provisoire " << endl;
    54   outfile << "RUN /n0=1 /ip=999 /freq=" << globParamPtr_->getFrequency() << "  /z0=0.0 /W0=" << initalKineticEnergy << "  /itype=1" << endl;
    55   outfile << "OUTPUT 0" << endl;
    56   unsigned int premier = numeroDeb ;
    57   if ( there_is_rfgun ) {
    58     outfile << dataManager_->getElementPointerFromNumero(numeroDeb)->parmelaOutputFlow() << endl;
    59     premier++;
    60   } else {
    61     outfile << "INPUT 0 /NP=" << beamBefore->getNbParticles() << endl;
    62   }
    63  
    64   // commentaire :  si l'element est un snapshot ne rien ecrire dans inputFileName_ (= parmin) un saut de ligne perturbe l'execution de parmela
    65   for ( k = premier; k <= numeroFin; k++)
    66     {
    67       elPtr = dataManager_->getElementPointerFromNumero(k);
    68       if(elPtr->getNomdElement().getElementType() == snapshot) continue;
    69       outfile << elPtr->parmelaOutputFlow() << endl;
    70     }
    71  
    72   outfile << "ZOUT" << endl;
    73   outfile << "START /wt=0.0 /dwt=" << globParamPtr_->getIntegrationStep() << "  /nsteps=" << globParamPtr_->getNbSteps() << "  nsc=" << globParamPtr_->getScPeriod() << "  /nout=10" << endl;
    74   outfile << "END" << endl;
    75   outfile.close();
    76   dataManager_->consoleMessage("fichier input termine pour PARMELA");
    77   return true;
     17    unsigned int k;
     18   
     19    if ( numeroDeb < 1 || numeroFin > dataManager_->getBeamLineSize() ) {
     20        dataManager_->consoleMessage(" softwareParmela::createInputFile : numero of element out of limits " );
     21        cerr << " numero of element out of limits " << endl;
     22        return false;
     23    }
     24   
     25    string name = workingDir + inputFileName_;
     26    ofstream outfile;
     27    outfile.open(name.c_str(), ios::out);
     28    if (!outfile) {
     29        dataManager_->consoleMessage(" softwareParmela::createInputFile : error opening output stream " );
     30        cerr << " softwareParmela::createInputFile : error opening output stream " << name << endl;
     31        return false;
     32    }
     33   
     34    abstractElement* elPtr;
     35    double initalKineticEnergy = 0.0;
     36    elPtr = dataManager_->getElementPointerFromNumero(numeroDeb);
     37    bool there_is_rfgun = ( elPtr->getNomdElement().getElementType() == RFgun );
     38   
     39    if ( !there_is_rfgun ) {
     40        string nameOfInput = workingDir + "parin.input0";
     41        if ( !beamToParmela(nameOfInput,beamBefore) ) return false;
     42        initalKineticEnergy = beamBefore->referenceKineticEnergyMeV();
     43        // les elements de parmela sont indexes de 1 à max, s'il n'y a pas de rfgun
     44        offsetNumElem_ = numeroDeb -1;
     45    } else {
     46        elPtr->setPhaseStep( globParamPtr_->getIntegrationStep() );
     47        initalKineticEnergy = elPtr->getInitialKineticEnergy();
     48        // les elements de parmela sont indexes de 0 à max, s'il y a un rfgun
     49        offsetNumElem_ = numeroDeb;
     50    }
     51   
     52    outfile << "TITLE" << endl;
     53    outfile << " titre provisoire " << endl;
     54    outfile << "RUN /n0=1 /ip=999 /freq=" << globParamPtr_->getFrequency() << "  /z0=0.0 /W0=" << initalKineticEnergy << "  /itype=1" << endl;
     55    outfile << "OUTPUT 0" << endl;
     56    unsigned int premier = numeroDeb ;
     57    if ( there_is_rfgun ) {
     58        outfile << dataManager_->getElementPointerFromNumero(numeroDeb)->parmelaOutputFlow() << endl;
     59        premier++;
     60    } else {
     61        outfile << "INPUT 0 /NP=" << beamBefore->getNbParticles() << endl;
     62    }
     63   
     64    // commentaire :  si l'element est un snapshot ne rien ecrire dans inputFileName_ (= parmin) un saut de ligne perturbe l'execution de parmela
     65    for ( k = premier; k <= numeroFin; k++)
     66    {
     67        elPtr = dataManager_->getElementPointerFromNumero(k);
     68        if (elPtr) {
     69            if(elPtr->getNomdElement().getElementType() == snapshot) continue;
     70            outfile << elPtr->parmelaOutputFlow() << endl;
     71        }
     72    }
     73   
     74    outfile << "ZOUT" << endl;
     75    outfile << "START /wt=0.0 /dwt=" << globParamPtr_->getIntegrationStep() << "  /nsteps=" << globParamPtr_->getNbSteps() << "  nsc=" << globParamPtr_->getScPeriod() << "  /nout=10" << endl;
     76    outfile << "END" << endl;
     77    outfile.close();
     78    dataManager_->consoleMessage("fichier input termine pour PARMELA");
     79    return true;
    7880}
    7981
    8082bool softwareParmela::execute(unsigned int numeroDeb,unsigned int numeroFin,string workingDir)
    8183{
    82   bool ExecuteStatus = true;
    83  
    84   ostringstream sortie;
    85   sortie << " EXECUTION DE PARMELA DE l'ELEMENT " << numeroDeb << " A L'ELEMENT " << numeroFin << endl;
    86 
    87   string parmelaJob = workingDir + "parmela";
    88   parmelaJob += string("   ");
    89   parmelaJob += workingDir;
    90  
    91   string resultOfRun;
    92   bool success = launchJob(parmelaJob,resultOfRun);
    93   sortie << resultOfRun << endl;
    94   if ( !success ) {
    95     sortie << " launching of parmela failed " << endl;
    96     ExecuteStatus = false;
    97   } else {
    98     sortie << " successful launching of parmela " << endl;
    99     cout << " execution parmela MARCHE " << endl;
    100     string::size_type nn = (resultOfRun).find("normal");
    101     if ( nn == string::npos )
    102       {
    103         sortie << " abnormal exit of parmela " << endl;
    104         ExecuteStatus = false;
    105       }
    106   }
    107 
    108   dataManager_->consoleMessage(sortie.str());
    109   return ExecuteStatus;
    110 }
    111 
    112 bool softwareParmela::buildBeamAfterElements(unsigned int numeroDeb,unsigned int numeroFin, vector<particleBeam>& beams, string workingDir)
    113 {
    114   bool result = true;
    115   cout << "debug:: debut " << numeroDeb << ", fin " << numeroFin << endl;
    116 
    117   // index du premier element de parmela
    118   int id= numeroDeb-offsetNumElem_;
    119 
    120   for(unsigned k = numeroDeb; k <= numeroFin; k++)
    121     {
    122       abstractElement* elem = dataManager_->getElementPointerFromNumero(k);
    123 
    124       // si l'element est un snapshot, recuperer la sortie precedente
    125       if(elem->getNomdElement().getElementType() == snapshot) {
    126         int avantDernier = beams.size() - 1;
    127         string* param = elem->getParametersString();
    128         string cliche = workingDir + param[2].c_str();
    129         if( beamToParmela(cliche,&beams.at(avantDernier)) ) {
    130           cout<<"["<<k<<"] : ecrit sur fichier " << cliche << " le contenu de beam["<<avantDernier<<"]"<<endl;
    131         }
    132         continue;
    133       }
    134 
    135       // sinon c'est un element de parmela d'index id
    136       beams.push_back(particleBeam());
    137       cout << " creation diagn. no " << beams.size() << " par PARMELA " << endl;
    138       vector<double> centroid;
    139       bareParticle refPart;
    140       vector<bareParticle> particles;
    141       double freq= globParamPtr_->getFrequency();
    142 
    143       if(!beamFromParmela(workingDir,id,freq,centroid,refPart,particles))
    144         {
    145           if(elem->is_accepted_by_software(nomDeLogiciel::parmela) == warning) {
    146             int avantDernier = beams.size() -2;
    147             beams.back() = beams.at(avantDernier);
    148           } else {
    149             dataManager_->consoleMessage("softwareParmela::buildBeamAfterElements : reading parmdesz failed");
    150             result = false;
    151             break;
    152           }
    153         } else {
    154         beams.back().setWithParticles(centroid,refPart,particles);
    155       }
    156 
    157       // l'element de parmela suivant
    158       id++;
    159     }
    160 
    161   return result;
    162 }
    163 
    164 bool softwareParmela::beamFromParmela(string workingDir,unsigned numeroParmel, double referencefrequency, vector<double>& centroid, bareParticle& refPart,vector<bareParticle>& particles )
    165 {
    166 
    167   string nomfilefais = workingDir + "parmdesz";
    168   cout << " nom fichier desz : " << nomfilefais << endl;
    169   FILE *filefais = fopen(nomfilefais.c_str(), "r");
    170 
    171   if ( filefais == (FILE*)0 ) {
    172     dataManager_->consoleMessage(" beamFromParmela() erreur a l'ouverture du fichier 'parmdesz'");
    173     cerr << " beamFromParmela() erreur a l'ouverture du fichier" << nomfilefais  << endl;
    174     return false;
    175   } else
    176     cout << " beamFromParmela() : ouverture du fichier " << nomfilefais << endl;
    177  
    178   parmelaParticle partic;
    179   std::vector<parmelaParticle> faisceau;
    180   int testNombrePartRef =0;
    181   double phaseRef = 0.0;
    182 
    183   while( partic.readFromParmelaFile(filefais) > 0 )
    184     {
    185 
    186       if ( partic.ne == (int)numeroParmel ) {
    187         if ( partic.np == 1 ) {
    188           // en principe on est sur la particule de reference
    189           if ( fabs(partic.xx) > EPSILON || fabs(partic.yy) > EPSILON || fabs(partic.xxp) > EPSILON  || fabs(partic.yyp) > EPSILON) {
    190             printf(" ATTENTION part. reference douteuse  \n");
    191             partic.imprim();
    192           }
    193           phaseRef = partic.phi;
    194 
    195           // le 'z' est 'absolu' (le long de la trajectoire)
    196           TRIDVECTOR  posRef(partic.xx,partic.yy,partic.z);
    197           TRIDVECTOR betagammaRef(partic.xxp*partic.begamz, partic.yyp*partic.begamz, partic.begamz);
    198           refPart = bareParticle(posRef, betagammaRef);
    199           testNombrePartRef++;
    200           if ( testNombrePartRef != 1 ) {
    201             dataManager_->consoleMessage(" beamFromParmela : nombre de part. de ref different de 1 :");
    202             cerr << " nombre de part. de ref different de 1 : " << testNombrePartRef << " !! " << endl;
    203             return false;
    204           }
    205         }
    206         faisceau.push_back(partic);
    207       }
     84    bool ExecuteStatus = true;
     85   
     86    ostringstream sortie;
     87    sortie << " EXECUTION DE PARMELA DE l'ELEMENT " << numeroDeb << " A L'ELEMENT " << numeroFin << endl;
     88   
     89    string parmelaJob = workingDir + "parmela";
     90    parmelaJob += string("   ");
     91    parmelaJob += workingDir;
     92   
     93    string resultOfRun;
     94    bool success = launchJob(parmelaJob,resultOfRun);
     95    sortie << resultOfRun << endl;
     96    if ( !success ) {
     97        sortie << " launching of parmela failed " << endl;
     98        ExecuteStatus = false;
     99    } else {
     100        sortie << " successful launching of parmela " << endl;
     101        cout << " execution parmela MARCHE " << endl;
     102        string::size_type nn = (resultOfRun).find("normal");
     103        if ( nn == string::npos )
     104        {
     105            sortie << " abnormal exit of parmela " << endl;
     106            ExecuteStatus = false;
     107        }
     108    }
     109   
     110    dataManager_->consoleMessage(sortie.str());
     111    return ExecuteStatus;
     112}
     113
     114bool softwareParmela::buildBeamAfterElements(unsigned int numeroDeb,unsigned int numeroFin, vector<particleBeam>& beams, string workingDir)
     115{
     116    bool result = true;
     117    cout << "debug:: debut " << numeroDeb << ", fin " << numeroFin << endl;
     118   
     119    // index du premier element de parmela
     120    int id= numeroDeb-offsetNumElem_;
     121   
     122    for(unsigned k = numeroDeb; k <= numeroFin; k++)
     123    {
     124        abstractElement* elem = dataManager_->getElementPointerFromNumero(k);
     125       
     126        // si l'element est un snapshot, recuperer la sortie precedente
     127        if(elem->getNomdElement().getElementType() == snapshot) {
     128            int avantDernier = beams.size() - 1;
     129            string* param = elem->getParametersString();
     130            string cliche = workingDir + param[2].c_str();
     131            if( beamToParmela(cliche,&beams.at(avantDernier)) ) {
     132                cout<<"["<<k<<"] : ecrit sur fichier " << cliche << " le contenu de beam["<<avantDernier<<"]"<<endl;
     133            }
     134            continue;
     135        }
     136       
     137        // sinon c'est un element de parmela d'index id
     138        beams.push_back(particleBeam());
     139        cout << " creation diagn. no " << beams.size() << " par PARMELA " << endl;
     140        vector<double> centroid;
     141        bareParticle refPart;
     142        vector<bareParticle> particles;
     143        double freq= globParamPtr_->getFrequency();
     144       
     145        if(!beamFromParmela(workingDir,id,freq,centroid,refPart,particles))
     146        {
     147            if(elem->is_accepted_by_software(nomDeLogiciel::parmela) == TBoolIgnore) {
     148                int avantDernier = beams.size() -2;
     149                beams.back() = beams.at(avantDernier);
     150            } else {
     151                dataManager_->consoleMessage("softwareParmela::buildBeamAfterElements : reading parmdesz failed");
     152                result = false;
     153                break;
     154            }
     155           
     156        } else {
     157            beams.back().setWithParticles(centroid,refPart,particles);
     158        }
     159       
     160        // l'element de parmela suivant
     161        id++;
     162    }
     163   
     164    return result;
     165}
     166
     167bool softwareParmela::beamFromParmela(string workingDir,unsigned numeroParmel, double referencefrequency, vector<double>& centroid, bareParticle& refPart,vector<bareParticle>& particles )
     168{
     169   
     170    string nomfilefais = workingDir + "parmdesz";
     171    cout << " nom fichier desz : " << nomfilefais << endl;
     172    FILE *filefais = fopen(nomfilefais.c_str(), "r");
     173   
     174    if ( filefais == (FILE*)0 ) {
     175        dataManager_->consoleMessage(" beamFromParmela() erreur a l'ouverture du fichier 'parmdesz'");
     176        cerr << " beamFromParmela() erreur a l'ouverture du fichier" << nomfilefais  << endl;
     177        return false;
     178    } else
     179        cout << " beamFromParmela() : ouverture du fichier " << nomfilefais << endl;
     180   
     181    parmelaParticle partic;
     182    std::vector<parmelaParticle> faisceau;
     183    int testNombrePartRef =0;
     184    double phaseRef = 0.0;
     185   
     186    while( partic.readFromParmelaFile(filefais) > 0 )
     187    {
     188       
     189        if ( partic.ne == (int)numeroParmel ) {
     190            if ( partic.np == 1 ) {
     191                // en principe on est sur la particule de reference
     192                if ( fabs(partic.xx) > EPSILON || fabs(partic.yy) > EPSILON || fabs(partic.xxp) > EPSILON  || fabs(partic.yyp) > EPSILON) {
     193                    printf(" ATTENTION part. reference douteuse  \n");
     194                    partic.imprim();
     195                }
     196                phaseRef = partic.phi;
     197               
     198                // le 'z' est 'absolu' (le long de la trajectoire)
     199                TRIDVECTOR  posRef(partic.xx,partic.yy,partic.z);
     200                TRIDVECTOR betagammaRef(partic.xxp*partic.begamz, partic.yyp*partic.begamz, partic.begamz);
     201                refPart = bareParticle(posRef, betagammaRef);
     202                testNombrePartRef++;
     203                if ( testNombrePartRef != 1 ) {
     204                    dataManager_->consoleMessage(" beamFromParmela : nombre de part. de ref different de 1 :");
     205                    cerr << " nombre de part. de ref different de 1 : " << testNombrePartRef << " !! " << endl;
     206                    return false;
     207                }
     208            }
     209            faisceau.push_back(partic);
     210        }
    208211    } //while
    209 
    210   if ( faisceau.size() == 0)
    211     {
    212       string stringNum = mixedTools::intToString( (int)numeroParmel );
    213       dataManager_->consoleMessage("beamFromParmela echec lecture  element numero relatif  parmela : " + stringNum);
    214       cerr << " beamFromParmela echec lecture  element numero relatif  parmela " << numeroParmel << endl;
    215       return false;
    216     }
    217  
    218   // facteur  c/ 360. pour calculer (c dphi) / (360.freq)
    219   // avec freq en Mhz et dphi en degres et résultat en cm:
    220   double FACTEUR =  83.3333;  // ameliorer la precision
    221 
    222   // pour l'instant on choisit un centroid nul;
    223   centroid.clear();
    224   centroid = vector<double>(6,0.0);
    225 
    226   particles.clear();
    227   particles.resize(faisceau.size(), bareParticle());
    228   double x,xp,y,yp;
    229   double betagammaz;
    230   double betaz;
    231   double deltaz;
    232   double dephas;
    233   double g;
    234   TRIDVECTOR  pos;
    235   TRIDVECTOR betagamma;
    236   // contrairement a ce qu'indique la notice PARMELA, dans parmdesz, les xp et yp
    237   // sont donnes en radians
    238   for (unsigned k = 0; k < faisceau.size(); k++) {
    239     x= faisceau.at(k).xx;
    240     xp=faisceau.at(k).xxp;
    241     y= faisceau.at(k).yy;
    242     yp=faisceau.at(k).yyp;
    243     // dephasage par rapport a la reference 
    244     dephas = faisceau.at(k).phi - phaseRef; // degrés
    245     g = faisceau.at(k).wz/EREST_MeV;
    246     betagammaz = faisceau.at(k).begamz;
    247     betaz = betagammaz/(g+1.0);
    248     deltaz = FACTEUR * betaz * dephas / referencefrequency;
    249     x += xp * deltaz;
    250     y += yp * deltaz;
    251     pos.setComponents(x,y,deltaz);
    252     betagamma.setComponents(xp*betagammaz, yp*betagammaz, betagammaz);
    253     particles.at(k) = bareParticle(pos,betagamma);
    254   }
    255  
    256   return true;
     212   
     213    if ( faisceau.size() == 0)
     214    {
     215        string stringNum = mixedTools::intToString( (int)numeroParmel );
     216        dataManager_->consoleMessage("beamFromParmela echec lecture  element numero relatif  parmela : " + stringNum);
     217        cerr << " beamFromParmela echec lecture  element numero relatif  parmela " << numeroParmel << endl;
     218        return false;
     219    }
     220   
     221    // facteur  c/ 360. pour calculer (c dphi) / (360.freq)
     222    // avec freq en Mhz et dphi en degres et résultat en cm:
     223    double FACTEUR =  83.3333;  // ameliorer la precision
     224   
     225    // pour l'instant on choisit un centroid nul;
     226    centroid.clear();
     227    centroid = vector<double>(6,0.0);
     228   
     229    particles.clear();
     230    particles.resize(faisceau.size(), bareParticle());
     231    double x,xp,y,yp;
     232    double betagammaz;
     233    double betaz;
     234    double deltaz;
     235    double dephas;
     236    double g;
     237    TRIDVECTOR  pos;
     238    TRIDVECTOR betagamma;
     239    // contrairement a ce qu'indique la notice PARMELA, dans parmdesz, les xp et yp
     240    // sont donnes en radians
     241    for (unsigned k = 0; k < faisceau.size(); k++) {
     242        x= faisceau.at(k).xx;
     243        xp=faisceau.at(k).xxp;
     244        y= faisceau.at(k).yy;
     245        yp=faisceau.at(k).yyp;
     246        // dephasage par rapport a la reference
     247        dephas = faisceau.at(k).phi - phaseRef; // degrés
     248        g = faisceau.at(k).wz/EREST_MeV;
     249        betagammaz = faisceau.at(k).begamz;
     250        betaz = betagammaz/(g+1.0);
     251        deltaz = FACTEUR * betaz * dephas / referencefrequency;
     252        x += xp * deltaz;
     253        y += yp * deltaz;
     254        pos.setComponents(x,y,deltaz);
     255        betagamma.setComponents(xp*betagammaz, yp*betagammaz, betagammaz);
     256        particles.at(k) = bareParticle(pos,betagamma);
     257    }
     258   
     259    return true;
    257260}
    258261
     
    261264bool softwareParmela::beamToParmela(string nameOfFile,particleBeam* beam)
    262265{
    263   if ( !beam->particleRepresentationOk() ) {
    264     dataManager_->consoleMessage("softwareParmela::beamToParmela : beam not in particles form : not yet programmed");
    265     cout << " softwareParmela::beamToParmela : beam not in particles form : not yet programmed " << endl;
    266     return false;
    267   }
    268 
    269   ofstream outfile;
    270   outfile.open(nameOfFile.c_str(),ios::out);
    271   if (!outfile) {
    272     dataManager_->consoleMessage(" softwareParmela::beamToParmela : error opening output stream ");
    273     cerr << " softwareParmela::beamToParmela : error opening output stream " << nameOfFile << endl;
    274     return false;
    275   }
    276  
    277   const vector<bareParticle>& partic = beam->getParticleVector();
    278   double weight = 1.0;
    279   double xx,yy,zz;
    280   double begamx, begamy, begamz;
    281   for (unsigned k = 0; k < partic.size(); k++) {
    282     partic.at(k).getPosition().getComponents(xx,yy,zz);
    283     partic.at(k).getBetaGamma().getComponents(begamx,begamy,begamz);
    284     outfile << xx << " " << begamx << " " <<  yy << " " << begamy << " " << zz << " " << begamz  << " " << weight << endl;
    285   }
    286   outfile.close();
    287   return true;
    288 }
     266    if ( !beam->particleRepresentationOk() ) {
     267        dataManager_->consoleMessage("softwareParmela::beamToParmela : beam not in particles form : not yet programmed");
     268        cout << " softwareParmela::beamToParmela : beam not in particles form : not yet programmed " << endl;
     269        return false;
     270    }
     271   
     272    ofstream outfile;
     273    outfile.open(nameOfFile.c_str(),ios::out);
     274    if (!outfile) {
     275        dataManager_->consoleMessage(" softwareParmela::beamToParmela : error opening output stream ");
     276        cerr << " softwareParmela::beamToParmela : error opening output stream " << nameOfFile << endl;
     277        return false;
     278    }
     279   
     280    const vector<bareParticle>& partic = beam->getParticleVector();
     281    double weight = 1.0;
     282    double xx,yy,zz;
     283    double begamx, begamy, begamz;
     284    for (unsigned k = 0; k < partic.size(); k++) {
     285        partic.at(k).getPosition().getComponents(xx,yy,zz);
     286        partic.at(k).getBetaGamma().getComponents(begamx,begamy,begamz);
     287        outfile << xx << " " << begamx << " " <<  yy << " " << begamy << " " << zz << " " << begamz  << " " << weight << endl;
     288    }
     289    outfile.close();
     290    return true;
     291}
  • Interface_Web/trunk/pspaWT/sources/userInterface/include/GWt_elementLigneFaisceau.h

    r347 r359  
    6060        return GWt_abstractElement_;
    6161    }
    62    
     62
    6363private:
    6464   
     
    7474    PspaApplication* pspa_;
    7575    GWt_abstractElement* GWt_abstractElement_;
     76    WContainerWidget* elementContainer_;
    7677};
    7778#endif
  • Interface_Web/trunk/pspaWT/sources/userInterface/include/GWt_ligneFaisceau.h

    r308 r359  
    7474    void update();
    7575   
     76    /** update the status of the given index element
     77     */
     78    void update(int);
     79
    7680    private :
    7781    void manageLineFaisceauLayout();
  • Interface_Web/trunk/pspaWT/sources/userInterface/src/GWt_abstractElement.cc

    r343 r359  
    3232{
    3333    abstractElement_ = elem;
    34     setStyleClass("beamLineIcon");
    3534}
    3635
     
    8382void GWt_abstractElement::updateLabelAndToolTipWidget()
    8483{
     84    if (abstractElement_ != NULL) {
    8585    elementLigneFaiseauContainer_->setElementLabel(abstractElement_->getLabel());
    8686    setToolTip(print());
     87    }
    8788}
    8889
     
    111112    ligneFaisceau->removeElement(this);
    112113}
    113 
    114114
    115115WContainerWidget* GWt_abstractElement::getWidget() {
  • Interface_Web/trunk/pspaWT/sources/userInterface/src/GWt_elementLigneFaisceau.cc

    r347 r359  
    2828
    2929GWt_elementLigneFaisceau::GWt_elementLigneFaisceau(PspaApplication* pspa)
    30   : WContainerWidget(),
    31     firstTimeInsertMessage_(NULL),
    32     dropZoneLeft_(NULL),
    33     dropZoneRight_(NULL),
    34     GWt_abstractElement_(NULL),
    35     elementLabel_(NULL),
    36     pspa_(pspa)
    37 {
    38   initialize_ligneFaisceau(inconnu);
     30: WContainerWidget(),
     31firstTimeInsertMessage_(NULL),
     32dropZoneLeft_(NULL),
     33dropZoneRight_(NULL),
     34GWt_abstractElement_(NULL),
     35elementLabel_(NULL),
     36pspa_(pspa)
     37{
     38    initialize_ligneFaisceau(inconnu);
    3939}
    4040
    4141
    4242GWt_elementLigneFaisceau::GWt_elementLigneFaisceau(typedElement type, PspaApplication* pspa)
    43   : WContainerWidget(),
    44     firstTimeInsertMessage_(NULL),
    45     dropZoneLeft_(NULL),
    46     dropZoneRight_(NULL),
    47     GWt_abstractElement_(NULL),
    48     elementLabel_(NULL),
    49     pspa_(pspa)
    50 {
    51   // set the css name
    52   setObjectName("elementLigneFaisceau");
    53   initialize_ligneFaisceau(type);
     43: WContainerWidget(),
     44firstTimeInsertMessage_(NULL),
     45dropZoneLeft_(NULL),
     46dropZoneRight_(NULL),
     47GWt_abstractElement_(NULL),
     48elementLabel_(NULL),
     49pspa_(pspa)
     50{
     51    // set the css name
     52    setObjectName("elementLigneFaisceau");
     53    initialize_ligneFaisceau(type);
    5454}
    5555
     
    5757{
    5858   
    59   cout<<"new GWt_elementLigneFaisceau : "<< this << endl;
    60    
    61   // set layout
    62   //     +----------+--------+---------+
    63   //     |   (--->) |  ELEM  | (-----) |
    64   //     +----------+--------+---------+
    65   //     |             NAME            |
    66   //     +----------+--------+---------+
    67  
    68    
    69   WGridLayout *gridLayout = new WGridLayout();
    70    
    71   gridLayout->setContentsMargins(0,0,0,0);
    72   gridLayout->setHorizontalSpacing(0);
    73   gridLayout->setVerticalSpacing(0);
    74  
    75   // add first line :  initialize arrow and link images
    76   dropZoneLeft_ = new GWt_dropZoneLigneFaisceau(pspa_);
    77   dropZoneRight_ = new GWt_dropZoneLigneFaisceau(pspa_);
    78    
    79   // change object name in order to manage css :
    80   dropZoneLeft_->resize(10,30);
    81   dropZoneRight_->resize(10,30);
    82  
    83   gridLayout->addWidget (dropZoneLeft_,0,0);
    84   gridLayout->addWidget (dropZoneRight_,0,2);
     59    cout<<"new GWt_elementLigneFaisceau : "<< this << endl;
     60   
     61    // set layout
     62    //     +----------+--------+---------+
     63    //     |   (--->) |  ELEM  | (-----) |
     64    //     +----------+--------+---------+
     65   
     66   
     67    WGridLayout *gridLayout = new WGridLayout();
     68   
     69    gridLayout->setContentsMargins(0,0,0,0);
     70    gridLayout->setHorizontalSpacing(0);
     71    gridLayout->setVerticalSpacing(0);
    8572   
    8673    // add first line :  initialize arrow and link images
     
    9582    gridLayout->addWidget       (dropZoneRight_,0,2);
    9683   
     84    // add first line :  initialize arrow and link images
     85    dropZoneLeft_ = new GWt_dropZoneLigneFaisceau(pspa_);
     86    dropZoneRight_ = new GWt_dropZoneLigneFaisceau(pspa_);
     87   
     88    // change object name in order to manage css :
     89    dropZoneLeft_->resize(10,30);
     90    dropZoneRight_->resize(10,30);
     91   
     92    gridLayout->addWidget       (dropZoneLeft_,0,0);
     93    gridLayout->addWidget       (dropZoneRight_,0,2);
     94   
    9795    // add the image if present
    9896   
     
    122120            GWt_abstractElement_ = NULL;
    123121    }
     122   
     123    elementContainer_ = new WContainerWidget();
     124    WVBoxLayout* vLayoutElementContainer = new WVBoxLayout();
     125   
     126    elementContainer_->setStyleClass("beamLineIcon");
     127    elementContainer_->setLayout(vLayoutElementContainer);
     128   
     129   
     130   
    124131    if (GWt_abstractElement_ != NULL) {
    125         gridLayout->addWidget   (GWt_abstractElement_,0,1);
     132        vLayoutElementContainer->addWidget(GWt_abstractElement_);
    126133        GWt_abstractElement_->setMaximumSize(80,80);
    127134        GWt_abstractElement_->setMinimumSize(80,80);
    128135    }
    129136   
    130     // add second line
    131 
    132137    if (GWt_abstractElement_ == NULL) {
    133       elementLabel_ = new WText();
     138        elementLabel_ = new WText();
    134139    } else {
    135       elementLabel_ = new WText(GWt_abstractElement_->getAbstractElement()->getLabel());
    136     }
    137    
    138     gridLayout->addWidget(elementLabel_,1,0,1,3,Wt::AlignCenter |Wt::AlignMiddle);
     140        elementLabel_ = new WText(GWt_abstractElement_->getAbstractElement()->getLabel());
     141    }
     142   
     143    vLayoutElementContainer->addWidget(elementLabel_,Wt::AlignCenter |Wt::AlignMiddle);
     144    //    gridLayout->addWidget(elementLabel_,1,0,1,3,Wt::AlignCenter |Wt::AlignMiddle);
     145   
     146    // Add Actions
     147    WContainerWidget* actions = new WContainerWidget();
     148    WVBoxLayout* vLayoutActions = new WVBoxLayout();
     149    actions->setLayout(vLayoutActions);
     150   
     151    WText* actionParameters = new WText("&nbsp;");
     152    WText* actionSoftware = new WText("Software");
     153   
     154    // Set class for actions elements
     155    actionParameters->setStyleClass("Button WhiteButton ContrastButton parameters");
     156    actionParameters->setMaximumSize(32,32);
     157    actionParameters->setMinimumSize(32,32);
     158   
     159    actionSoftware->setStyleClass("Button WhiteButton ContrastButton software");
     160    actionParameters->setPositionScheme(Wt::Static);
     161   
     162    // Set the global action class
     163    actions->setStyleClass("beamLineElementActions");
     164    actions->setPositionScheme(Wt::Static);
     165    actions->setOffsets(0);
     166   
     167    vLayoutActions->addWidget(actionParameters);
     168    vLayoutActions->addWidget(actionSoftware);
     169    vLayoutElementContainer->addWidget(actions);
     170   
     171    gridLayout->addWidget       (elementContainer_,0,1);
    139172   
    140173    gridLayout->setColumnStretch (0,1);
     
    143176    // set layout
    144177    setLayout(gridLayout);
     178   
    145179}
    146180
     
    151185
    152186void GWt_elementLigneFaisceau::setBGColor(const WColor c) {
    153     decorationStyle().setBackgroundColor (c);
     187    elementContainer_->decorationStyle().setBackgroundColor (c);
    154188}
    155189
     
    157191void GWt_elementLigneFaisceau::removeDone(GWt_abstractElement* gw)
    158192{
    159   if (messageDropZone_->result() == WDialog::Accepted) {
    160     // FIXME
    161     //    removeDropZone();
    162   }
     193    if (messageDropZone_->result() == WDialog::Accepted) {
     194        // FIXME
     195        //    removeDropZone();
     196    }
    163197}
    164198
    165199
    166200void GWt_elementLigneFaisceau::addElement(GWt_abstractElement* elem)
    167 {   
    168   clear();
    169   GWt_abstractElement_ = elem;
    170   addWidget(GWt_abstractElement_);
    171   if (static_cast <WContainerWidget*> (parent())) {
    172     WContainerWidget* wc = static_cast <WContainerWidget*> (parent());
    173     WBoxLayout* layout = ((WBoxLayout*)(wc->layout()));
    174     layout->setStretchFactor(this,0);
    175   }
    176  
    177  
    178   firstTimeInsertMessage_ = NULL;
     201{
     202    clear();
     203    GWt_abstractElement_ = elem;
     204    addWidget(GWt_abstractElement_);
     205    if (static_cast <WContainerWidget*> (parent())) {
     206        WContainerWidget* wc = static_cast <WContainerWidget*> (parent());
     207        WBoxLayout* layout = ((WBoxLayout*)(wc->layout()));
     208        layout->setStretchFactor(this,0);
     209    }
     210   
     211   
     212    firstTimeInsertMessage_ = NULL;
    179213    dropZoneLeft_ = NULL;
    180214}
     
    182216
    183217std::string GWt_elementLigneFaisceau::getElementNumberInBeamLine(nomdElements elem){
    184   string str = "";
     218    string str = "";
    185219   
    186220    if (static_cast <WContainerWidget*> (parent())) {
     
    223257
    224258void GWt_elementLigneFaisceau::setElementLabel(std::string label) {
    225   if (elementLabel_) {
    226     elementLabel_->setText(label);
    227   }
    228 }
     259    if (elementLabel_) {
     260        elementLabel_->setText(label.substr(0,10));
     261        elementLabel_->setToolTip(label);
     262    }
     263}
  • Interface_Web/trunk/pspaWT/sources/userInterface/src/GWt_ligneFaisceau.cc

    r343 r359  
    138138     
    139139      // update labels
    140       elem->getGWt_AbstractElement()->updateLabelAndToolTipWidget();
    141      
     140      if (elem->getGWt_AbstractElement()) { 
     141          elem->getGWt_AbstractElement()->updateLabelAndToolTipWidget();
     142        }
    142143      //  one element
    143144      if ((a == 0) && (a == (ligneFaisceauLayout_->count()-1))) {
     
    210211
    211212abstractElement* GWt_LigneFaisceau::getAbstractElement(int i){
    212   int index = 0;
    213  
    214   // first if 1
    215   //    i--;
    216  
    217   for (int a=0; a< ligneFaisceauLayout_->count(); a++) {
    218     if (GWt_elementLigneFaisceau* elem = dynamic_cast <GWt_elementLigneFaisceau*> (ligneFaisceauLayout_->itemAt(a)->widget ())) {
    219       if (index == i) {
    220         printf("GWt_LigneFaisceau::getAbstractElement %d %s\n",i,elem->getGWt_AbstractElement()->getAbstractElement()->getLabel().c_str());
    221         return elem->getGWt_AbstractElement()->getAbstractElement();
    222       }
    223       index ++;
    224     }
    225   }
    226   return NULL;
     213    int index = 0;
     214    if (i < 0) {
     215        return NULL;
     216    }
     217   
     218    // first if 1
     219    //    i--;
     220    for (int a=0; a< ligneFaisceauLayout_->count(); a++) {
     221        if (ligneFaisceauLayout_->itemAt(a)) {
     222           
     223            if (GWt_elementLigneFaisceau* elem = dynamic_cast <GWt_elementLigneFaisceau*> (ligneFaisceauLayout_->itemAt(a)->widget ())) {
     224                if (index == i) {
     225                    if (elem->getGWt_AbstractElement()) {
     226                        return elem->getGWt_AbstractElement()->getAbstractElement();
     227                    }
     228                }
     229                index ++;
     230            }
     231        }
     232    }
     233    return NULL;
    227234}
    228235
     
    238245}
    239246
     247
    240248vector <abstractElement*> GWt_LigneFaisceau::getAllAbstractElements()
    241249{
     
    249257}
    250258
     259void GWt_LigneFaisceau::update(int i){
     260    int index = 0;
     261   
     262    // first if 1
     263    //    i--;
     264   
     265    for (int a=0; a< ligneFaisceauLayout_->count(); a++) {
     266        if (GWt_elementLigneFaisceau* elem = dynamic_cast <GWt_elementLigneFaisceau*> (ligneFaisceauLayout_->itemAt(a)->widget ())) {
     267            if (index == i) {
     268                elem->setBGColor(WColor(elem->getGWt_AbstractElement()->getAbstractElement()->getAbstractSoftware()->getColor()));
     269            }
     270            index ++;
     271        }
     272    }
     273}
     274
  • Interface_Web/trunk/pspaWT/sources/userInterface/src/GWt_softwarePanel.cc

    r358 r359  
    1 //
    21//  GWt_softwarePanel.cpp
    32//  PSPA
     
    260259  exec_go_->setDisabled(false);
    261260
     261}
     262
     263
     264bool GWt_softwarePanel::areDataCoherent()
     265{
     266    bool caMarche = true;
     267    dtmanage_->initializeExecution();
     268    string diagnostic;
     269   
     270    list<GWt_sectionToExecute*>::iterator itr;
     271    for(itr = selectedSections_.begin(); itr != selectedSections_.end(); itr++)
     272    {
     273        string debString = (*itr)->debut->text().toUTF8();
     274        string finString = (*itr)->fin->text().toUTF8();
    262275       
    263         // All ok, then put colors on beamLine
    264         list<GWt_sectionToExecute*>::iterator itr2;
    265         for(itr2 = selectedSections_.begin();itr2 != selectedSections_.end(); itr2++)
    266         {
    267             string debString = (*itr2)->debut->text().toUTF8();
    268             string finString = (*itr2)->fin->text().toUTF8();
    269            
    270            
    271             int debut = dtmanage_->getNumeroFromElementLabel(debString);
    272             int fin = dtmanage_->getNumeroFromElementLabel(finString);
    273 /**
    274  for (int i=debut; i=<fin; i++) {
    275                 getBeamLine()->getAbstractElement(i)->setBGColor(
    276                
     276        int debut = dtmanage_->getNumeroFromElementLabel(debString);
     277        int fin = dtmanage_->getNumeroFromElementLabel(finString);
     278        nomDeLogiciel prog = nomDeLogiciel ( (*itr)->selection->currentIndex() );
     279        dtmanage_->addSectionToExecute(debut,fin,prog);
     280       
     281        // check sections
     282        for (int i=debut-1; i<fin; i++) {
     283            if (pspa_->getBeamLine()) {
     284                if (pspa_->getBeamLine()->getAbstractElement(i)) {
     285                    if (!pspa_->getBeamLine()->getAbstractElement(i)->setSoftware(prog.getString())) {
     286                        diagnostic += pspa_->getBeamLine()->getAbstractElement(i)->getLabel()+ "could not be associate with "+ prog.getString()+" ";
     287                        caMarche = false;
     288                    } else {
     289                        pspa_->getBeamLine()->update(i);
     290                    }
     291                }
    277292            }
    278             nomDeLogiciel prog = nomDeLogiciel ( (*itr)->selection->currentIndex() );
    279             dtmanage_->addSectionToExecute(debut,fin,prog);
     293        }
     294    }
     295   
     296//    trivaluedBool essai = dtmanage_->checkExecute(diagnostic);
     297
     298    if ( caMarche == false ) {
     299        GWt_dialog calculDialog("PSPA check execute : ERROR", diagnostic , GWt_dialog::Error,true,true);
     300        calculDialog.exec();
     301/*
     302 } else if ( essai == warning )  {
     303        GWt_dialog calculDialog("PSPA check execute : warning ", diagnostic , GWt_dialog::Warning, false,true);
     304        calculDialog.exec();
    280305*/
    281         }
    282 }
    283 
    284 
    285 bool GWt_softwarePanel::areDataCoherent()
    286 {
    287   bool caMarche = true;
    288   dtmanage_->initializeExecution();
    289  
    290   list<GWt_sectionToExecute*>::iterator itr;
    291   for(itr = selectedSections_.begin(); itr != selectedSections_.end(); itr++)
    292     {
    293       string debString = (*itr)->debut->text().toUTF8();
    294       string finString = (*itr)->fin->text().toUTF8();
    295        
    296       int debut = dtmanage_->getNumeroFromElementLabel(debString);
    297       int fin = dtmanage_->getNumeroFromElementLabel(finString);
    298       nomDeLogiciel prog = nomDeLogiciel ( (*itr)->selection->currentIndex() );
    299       dtmanage_->addSectionToExecute(debut,fin,prog);
    300     }
    301  
    302   string diagnostic;
    303   trivaluedBool essai = dtmanage_->checkExecute(diagnostic);
    304   if ( essai == error ) {
    305     caMarche = false;
    306     GWt_dialog calculDialog("PSPA check execute : ERROR", diagnostic , GWt_dialog::Error,true,true);
    307     calculDialog.exec();
    308   } else if ( essai == warning )  {
    309     caMarche = true;
    310     GWt_dialog calculDialog("PSPA check execute : warning ", diagnostic , GWt_dialog::Warning, false,true);
    311     calculDialog.exec();
    312   }
    313  
    314   return caMarche;
     306    }
     307   
     308    return caMarche;
    315309}
    316310
Note: See TracChangeset for help on using the changeset viewer.