Index: /Interface_Web/trunk/pspaWT/History
===================================================================
--- /Interface_Web/trunk/pspaWT/History	(revision 417)
+++ /Interface_Web/trunk/pspaWT/History	(revision 418)
@@ -5,4 +5,13 @@
      PSPA - Plateforme de simulation en physique des accÃ©lÃ©rateurs
      =========================================================
+21 juin 2013  : Guy Le Meur
+- la désignation des éléments compatibles avec un logiciel est faite 
+  dans le fichier correspondant softwareXXXX.cc
+- dans les fichiers elementXXX les références aux software sont 
+  supprimées. La communication avec les logiciels est assurée par une méthode
+  parametersToSoftware() qui envoie tous les paramètres, parmi lesquelles
+  chaque logiciel fera le tri et construira son fichier d'entrée.
+- La définition des couleurs d'affichage des logiciels sur l'interface 
+  est effectuée dans la classe 'nomDeLogiciel' (en attendant mieux).
 
 10 juin 2013  : Guy Le Meur
Index: /Interface_Web/trunk/pspaWT/sources/controler/include/abstractElement.h
===================================================================
--- /Interface_Web/trunk/pspaWT/sources/controler/include/abstractElement.h	(revision 417)
+++ /Interface_Web/trunk/pspaWT/sources/controler/include/abstractElement.h	(revision 418)
@@ -7,11 +7,11 @@
 
 #include "nomdElements.h"
-#include "nomDeLogiciel.h"
-#include "trivaluedBool.h"
+//#include "nomDeLogiciel.h"
+//#include "trivaluedBool.h"
 #include "abstractSoftware.h"
-#include "softwareGenerator.h"
-#include "softwareParmela.h"
-#include "softwareTest.h"
-#include "softwareTransport.h"
+/* #include "softwareGenerator.h" */
+/* #include "softwareParmela.h" */
+/* #include "softwareTest.h" */
+/* #include "softwareTransport.h" */
 
 using namespace std;
@@ -23,12 +23,11 @@
     int nbParam_;
     string* parametersString_;
-    //  double phaseStep_; // a recuperer dans les parametres globaux (methode setPhaseStep)
     double phaseStepMax_;
     
     double defaultLength_;
     double defaultAperture_;
-    string defaultLabel_;
+    string defaultSpecificName_;
     
-    string label_;
+    string specificName_;
     nomdElements elementName_;
     
@@ -51,14 +50,10 @@
     void setLabel(string lab);
     string getLabel() const;
-    //  typedElement getName() const;
     nomdElements getNomdElement() const;
     
-    /* string getElementImage() const; */
-    /* string getElementName() const; */
     
     double getLenghtOfElement() const;
     int getNbParams() const;
 
-    trivaluedBool is_accepted_by_software(nomDeLogiciel soft);
     
     virtual void setPhaseStep(double);
@@ -67,8 +62,6 @@
     virtual void setParametersString(string* param) = 0;
     virtual string* getParametersString() const = 0;
-    virtual string parmelaOutputFlow() const = 0;
-    virtual string transportOutputFlow() const = 0;
-    virtual string generatorOutputFlow() const;
     virtual string FileOutputFlow() const = 0;
+    virtual vector< pair<string, vector<string> > > parametersToSoftware () const =0;
     virtual void FileInput(ifstream& ifs) = 0;
     virtual string print() = 0;
@@ -79,26 +72,19 @@
         return abstractSoftware_;
     }
+
+   
     
-    
-    void registerAcceptableSoftware(nomDeLogiciel abs,trivaluedBool b);
     /**
      Set the software to this element
-     @param abstractName the name of the abstract software
-     @return trivaluedBool if this software is/not allowed/ignore on this component
+     @param abstractSoftware a pointer to the abstract software
      */
-    trivaluedBool setSoftware(nomDeLogiciel abstractName);
+    inline  void setSoftware(abstractSoftware* prog) { abstractSoftware_ = prog; }
+
     
+
     private :
-    abstractSoftware *abstractSoftware_;
 
-    /**
-     Acceptable software list for this element
-     */
-    std::vector <nomDeLogiciel> acceptableSoftware_;
-
-    /**
-     Ignore software list for this element
-     */
-    std::vector <nomDeLogiciel> ignoreSoftware_;
+            abstractSoftware *abstractSoftware_;
+    
 };
 #endif
Index: /Interface_Web/trunk/pspaWT/sources/controler/include/abstractSoftware.h
===================================================================
--- /Interface_Web/trunk/pspaWT/sources/controler/include/abstractSoftware.h	(revision 417)
+++ /Interface_Web/trunk/pspaWT/sources/controler/include/abstractSoftware.h	(revision 418)
@@ -5,4 +5,7 @@
 #include "particleBeam.h"
 #include "nomDeLogiciel.h"
+#include "nomdElements.h"
+#include "trivaluedBool.h"
+
 #include <iostream>
 #include <string>
@@ -22,4 +25,15 @@
   string inputFileName_;
   nomDeLogiciel nameOfSoftware_;
+
+    /**
+     Accepted elements list for this software
+     */
+  std::vector <nomdElements::typedElement> acceptedElements_;
+
+    /**
+     Ignore software list for this element
+     */
+  std::vector <nomdElements::typedElement> ignoredElements_;
+
   abstractSoftware();
 
@@ -27,4 +41,8 @@
   bool initComputationLimits(unsigned int numeroDeb,unsigned int numeroFin);
   bool ComputationLimitsOk() const;
+
+
+  void registerElement(nomdElements::typedElement nomdel,trivaluedBool b);
+
  public :
 
@@ -32,7 +50,10 @@
   ~abstractSoftware() {;}
 
-  inline nomDeLogiciel getNomDeLogiciel() const {
-    return nameOfSoftware_;
-  }
+  inline const nomDeLogiciel* getNomDeLogiciel() const {
+    return &nameOfSoftware_;
+}
+
+  trivaluedBool doAcceptElement(nomdElements::typedElement typdel);
+
 
   virtual bool createInputFile(particleBeam* beamBefore,unsigned int numeroDeb, unsigned int numeroFin, string workingDir) = 0;
Index: /Interface_Web/trunk/pspaWT/sources/controler/include/dataManager.h
===================================================================
--- /Interface_Web/trunk/pspaWT/sources/controler/include/dataManager.h	(revision 417)
+++ /Interface_Web/trunk/pspaWT/sources/controler/include/dataManager.h	(revision 418)
@@ -33,5 +33,5 @@
   void addSectionToExecute(abstractElement* debut,int debutIndex, abstractElement* fin, int finIndex, abstractSoftware* prog);
 
-    abstractElement* addElement(typedElement elemType);
+  abstractElement* addElement(nomdElements::typedElement elemType);
   void removeElement(string);
   
Index: /Interface_Web/trunk/pspaWT/sources/controler/include/elementBeam.h
===================================================================
--- /Interface_Web/trunk/pspaWT/sources/controler/include/elementBeam.h	(revision 417)
+++ /Interface_Web/trunk/pspaWT/sources/controler/include/elementBeam.h	(revision 418)
@@ -34,13 +34,18 @@
     
     virtual string* getParametersString() const;
+
+    virtual vector< pair<string, vector<string> > > parametersToSoftware () const;
+
     
-    virtual  string parmelaOutputFlow() const;
+    //    virtual  string parmelaOutputFlow() const;
     
     
-    virtual string transportOutputFlow() const;
+    //    virtual string transportOutputFlow() const;
     
     
     virtual string FileOutputFlow() const;
     
+
+
     virtual void FileInput(ifstream& ifs);
 
Index: /Interface_Web/trunk/pspaWT/sources/controler/include/elementBend.h
===================================================================
--- /Interface_Web/trunk/pspaWT/sources/controler/include/elementBend.h	(revision 417)
+++ /Interface_Web/trunk/pspaWT/sources/controler/include/elementBend.h	(revision 418)
@@ -47,9 +47,11 @@
     virtual string* getParametersString() const;
     
-    virtual  string parmelaOutputFlow() const;
+    //    virtual  string parmelaOutputFlow() const;
     
-    virtual string transportOutputFlow() const;
+    //   virtual string transportOutputFlow() const;
     
     virtual  string FileOutputFlow() const;
+
+    virtual vector< pair<string, vector<string> > > parametersToSoftware () const;
     
     virtual void FileInput(ifstream& ifs);
Index: /Interface_Web/trunk/pspaWT/sources/controler/include/elementCell.h
===================================================================
--- /Interface_Web/trunk/pspaWT/sources/controler/include/elementCell.h	(revision 417)
+++ /Interface_Web/trunk/pspaWT/sources/controler/include/elementCell.h	(revision 418)
@@ -50,16 +50,18 @@
     virtual void setParametersString(string* param);
     
-    virtual  string parmelaOutputFlow() const;
+    //   virtual  string parmelaOutputFlow() const;
     
-    virtual string transportOutputFlow() const
-    {
-        ostringstream sortie;
-        cout << " CELL sortie transport non programmee " << endl;
-        return sortie.str();
-    }
+    /* virtual string transportOutputFlow() const */
+    /* { */
+    /*     ostringstream sortie; */
+    /*     cout << " CELL sortie transport non programmee " << endl; */
+    /*     return sortie.str(); */
+    /* } */
     
     
     virtual string FileOutputFlow() const;
-    
+
+    virtual vector< pair<string, vector<string> > > parametersToSoftware () const;
+
     virtual void FileInput(ifstream& ifs);
     
Index: /Interface_Web/trunk/pspaWT/sources/controler/include/elementDrift.h
===================================================================
--- /Interface_Web/trunk/pspaWT/sources/controler/include/elementDrift.h	(revision 417)
+++ /Interface_Web/trunk/pspaWT/sources/controler/include/elementDrift.h	(revision 418)
@@ -26,11 +26,13 @@
     virtual void setParametersString(string* param);
     
-    virtual  string parmelaOutputFlow() const;
+    //    virtual  string parmelaOutputFlow() const;
     
-    virtual string transportOutputFlow() const;
+    //    virtual string transportOutputFlow() const;
     
     
     virtual string FileOutputFlow() const;
-    
+
+    virtual vector< pair<string, vector<string> > > parametersToSoftware () const;
+
     virtual void FileInput(ifstream& ifs);
     
Index: /Interface_Web/trunk/pspaWT/sources/controler/include/elementFit.h
===================================================================
--- /Interface_Web/trunk/pspaWT/sources/controler/include/elementFit.h	(revision 417)
+++ /Interface_Web/trunk/pspaWT/sources/controler/include/elementFit.h	(revision 418)
@@ -34,10 +34,12 @@
     virtual string* getParametersString() const;
     
-    virtual  string parmelaOutputFlow() const;
+    //    virtual  string parmelaOutputFlow() const;
     
-    virtual string transportOutputFlow() const;
+    //  virtual string transportOutputFlow() const;
     
     virtual  string FileOutputFlow() const;
     
+    virtual vector< pair<string, vector<string> > > parametersToSoftware () const;
+
     virtual void FileInput(ifstream& ifs);
     
Index: /Interface_Web/trunk/pspaWT/sources/controler/include/elementRfgun.h
===================================================================
--- /Interface_Web/trunk/pspaWT/sources/controler/include/elementRfgun.h	(revision 417)
+++ /Interface_Web/trunk/pspaWT/sources/controler/include/elementRfgun.h	(revision 418)
@@ -55,17 +55,18 @@
     virtual inline double getInitialKineticEnergy() const {return E_cin_;}
     
-    virtual string parmelaOutputFlow() const;
+    //    virtual string parmelaOutputFlow() const;
     
-    virtual string transportOutputFlow() const
-    {
-        ostringstream sortie;
-        cout << " CELL sortie transport non programmee " << endl;
-        return sortie.str();
-    }
+    /* virtual string transportOutputFlow() const */
+    /* { */
+    /*     ostringstream sortie; */
+    /*     cout << " CELL sortie transport non programmee " << endl; */
+    /*     return sortie.str(); */
+    /* } */
     
-    virtual string generatorOutputFlow() const;
+    //   virtual string generatorOutputFlow() const;
 
     virtual string FileOutputFlow() const;
-    
+        virtual vector< pair<string, vector<string> > > parametersToSoftware () const;
+
     virtual void FileInput(ifstream& ifs);
     
Index: /Interface_Web/trunk/pspaWT/sources/controler/include/elementSnapshot.h
===================================================================
--- /Interface_Web/trunk/pspaWT/sources/controler/include/elementSnapshot.h	(revision 417)
+++ /Interface_Web/trunk/pspaWT/sources/controler/include/elementSnapshot.h	(revision 418)
@@ -23,8 +23,10 @@
   virtual string* getParametersString() const;
   virtual void setParametersString(string* param);
-  virtual  string parmelaOutputFlow() const;
-  virtual string transportOutputFlow() const;  
+  //  virtual  string parmelaOutputFlow() const;
+  // virtual string transportOutputFlow() const;  
    
   virtual string FileOutputFlow() const;  
+  virtual vector< pair<string, vector<string> > > parametersToSoftware () const;
+
   virtual void FileInput(ifstream& ifs);
   string print();  
Index: /Interface_Web/trunk/pspaWT/sources/controler/include/elementSoleno.h
===================================================================
--- /Interface_Web/trunk/pspaWT/sources/controler/include/elementSoleno.h	(revision 417)
+++ /Interface_Web/trunk/pspaWT/sources/controler/include/elementSoleno.h	(revision 418)
@@ -36,10 +36,12 @@
     virtual string* getParametersString() const;
     
-    virtual  string parmelaOutputFlow() const;
+    //    virtual  string parmelaOutputFlow() const;
     
-    virtual string transportOutputFlow() const;
+    //   virtual string transportOutputFlow() const;
     
     virtual  string FileOutputFlow() const;
     
+  virtual vector< pair<string, vector<string> > > parametersToSoftware () const;
+
     virtual void FileInput(ifstream& ifs);
     
Index: /Interface_Web/trunk/pspaWT/sources/controler/include/nomDeLogiciel.h
===================================================================
--- /Interface_Web/trunk/pspaWT/sources/controler/include/nomDeLogiciel.h	(revision 417)
+++ /Interface_Web/trunk/pspaWT/sources/controler/include/nomDeLogiciel.h	(revision 418)
@@ -16,5 +16,5 @@
   enum Logiciel
   {
-    parmela, transport, generator, test, unknownSoftware
+    parmela, transport, generator, useraction, test, unknownSoftware
   };
 
@@ -28,6 +28,5 @@
   static Logiciel fromString( std::string s);
   static std::string toString( Logiciel lg);  
-  //  static Logiciel fromValue( int v);  
-  //  static int toValue( Logiciel lg);
+  std::string getWtColor( nomDeLogiciel::Logiciel lg) const;
   
  public : 
@@ -40,5 +39,11 @@
   
   inline std::string getString() const {return progString_;}
-  
+
+  inline nomDeLogiciel::Logiciel getLogiciel() const { return program_; }
+
+    /** Color of the background of the sofware
+     Should be a valid Css name as FFEEDD
+     */
+  inline std::string  getColor() const {return getWtColor(program_);}
   // operators
   
Index: /Interface_Web/trunk/pspaWT/sources/controler/include/nomdElements.h
===================================================================
--- /Interface_Web/trunk/pspaWT/sources/controler/include/nomdElements.h	(revision 417)
+++ /Interface_Web/trunk/pspaWT/sources/controler/include/nomdElements.h	(revision 418)
@@ -4,5 +4,5 @@
 using namespace std;
 
-enum typedElement {beam, RFgun, drift, cell, bend, soleno, fit, snapshot, inconnu};
+// enum typedElement {beam, RFgun, drift, cell, bend, soleno, fit, snapshot, inconnu};
 
 
@@ -10,13 +10,20 @@
 class nomdElements
 {
+
+ public :
+
+enum typedElement {beam, RFgun, drift, cell, bend, soleno, fit, snapshot, inconnu};
+
+ private : 
+
   typedElement e_;  // type entier (enum)
-  std::string eName_;  // nom de l'element
-  std::string eLabel_; // label affiche sous l'icone
+  std::string expandedName_;  // nom generique de l'element
+  std::string genericLabel_; 
   unsigned nbParam_;   // nombre de parametres a saisir
 
   static   typedElement fromString(std::string s);
-  static   typedElement fromLabel(std::string s);
-  static   std::string toName(typedElement eType);
-  static   std::string toLabel(typedElement eType);
+  static   typedElement fromGenericLabel(std::string s);
+  static   std::string toExpandedName(typedElement eType);
+  static   std::string toGenericLabel(typedElement eType);
   static   unsigned toNbParam(typedElement eType);
 
@@ -35,6 +42,6 @@
 
   typedElement getElementType() const;
-  std::string getElementName() const;
-  std::string getElementLabel() const;
+  std::string getExpandedName() const;
+  std::string getGenericLabel() const;
   unsigned getElementNbParameters() const;
 
Index: /Interface_Web/trunk/pspaWT/sources/controler/include/softwareGenerator.h
===================================================================
--- /Interface_Web/trunk/pspaWT/sources/controler/include/softwareGenerator.h	(revision 417)
+++ /Interface_Web/trunk/pspaWT/sources/controler/include/softwareGenerator.h	(revision 418)
@@ -13,4 +13,9 @@
 
  bool beamFromGenerator(string beamFileName, string workingDir, vector<double>& centroid, bareParticle& refPart,vector<bareParticle>& particles, vector<bareParticle>& passiveParticles );
+
+
+ string elementsData(const vector< pair<string, vector<string> > >& donnees) const;
+ string rfgunData(const vector< pair<string, vector<string> > >& donnees) const;
+
 
  public : 
Index: /Interface_Web/trunk/pspaWT/sources/controler/include/softwareParmela.h
===================================================================
--- /Interface_Web/trunk/pspaWT/sources/controler/include/softwareParmela.h	(revision 417)
+++ /Interface_Web/trunk/pspaWT/sources/controler/include/softwareParmela.h	(revision 418)
@@ -22,4 +22,15 @@
   bool beamToParmela(string workingDir, particleBeam* partic );
   void setRelativeParmelaElementIndices();
+
+
+  string elementsData(const vector< pair<string, vector<string> > >& donnees) const ;
+
+  string rfgunData(const vector< pair<string, vector<string> > >& donnees) const;
+  string cellData(const vector< pair<string, vector<string> > >& donnees) const;
+  string driftData(const vector< pair<string, vector<string> > >& donnees) const;
+  string solenoData(const vector< pair<string, vector<string> > >& donnees) const;
+  string bendData(const vector< pair<string, vector<string> > >& donnees) const;
+
+
  public : 
     softwareParmela();
Index: /Interface_Web/trunk/pspaWT/sources/controler/include/softwareTransport.h
===================================================================
--- /Interface_Web/trunk/pspaWT/sources/controler/include/softwareTransport.h	(revision 417)
+++ /Interface_Web/trunk/pspaWT/sources/controler/include/softwareTransport.h	(revision 418)
@@ -10,4 +10,11 @@
 
   bool  moments2FromTransport(string workingDir, string elLab, const nomdElements elem, beam2Moments& moments) const;
+
+  string elementsData(const vector< pair<string, vector<string> > >& donnees) const;
+  string beamData(const vector< pair<string, vector<string> > >& donnees) const;
+  string driftData(const vector< pair<string, vector<string> > >& donnees) const;
+  string solenoData(const vector< pair<string, vector<string> > >& donnees) const;
+  string bendData(const vector< pair<string, vector<string> > >& donnees) const;
+  string fitData(const vector< pair<string, vector<string> > >& donnees) const;
 
  public : 
Index: /Interface_Web/trunk/pspaWT/sources/controler/src/abstractElement.cc
===================================================================
--- /Interface_Web/trunk/pspaWT/sources/controler/src/abstractElement.cc	(revision 417)
+++ /Interface_Web/trunk/pspaWT/sources/controler/src/abstractElement.cc	(revision 418)
@@ -6,5 +6,6 @@
 
 abstractElement::abstractElement() 
-: abstractSoftware_(NULL)
+//: nameOfSoftware_(NULL)
+  : abstractSoftware_(NULL)
 {
   setDefaultValues();
@@ -14,6 +15,8 @@
 
 abstractElement::abstractElement(string lab)
+  //: nameOfSoftware_(NULL)
+  : abstractSoftware_(NULL)
 {
-  label_ = lab;
+  specificName_ = lab;
   setDefaultValues();
   setDefaults();
@@ -24,9 +27,10 @@
 {
   if (parametersString_ != NULL) delete [] parametersString_ ;
+  //  if ( nameOfSoftware_ != NULL ) delete nameOfSoftware_;
 }
 
 void abstractElement::setDefaultValues() 
 {
-  defaultLabel_ = string("XXXXXX");
+  defaultSpecificName_ = string("XXXXXX");
   defaultLength_ = 0.0;
   defaultAperture_ = 1.e+6;
@@ -36,5 +40,5 @@
 void abstractElement::setDefaults() 
 {
-  label_ = defaultLabel_;
+  specificName_ = defaultSpecificName_;
   nbParam_ = 2;
   lenghtElem_ = defaultLength_;
@@ -55,10 +59,10 @@
 void abstractElement::setLabel(string lab)
 {
-  label_= lab;
+  specificName_= lab;
 }
 
 string abstractElement::getLabel() const
 {
-  return label_;
+  return specificName_;
 }
 
@@ -80,21 +84,4 @@
 
 
-trivaluedBool abstractElement::is_accepted_by_software(nomDeLogiciel prog) {
-    if (acceptableSoftware_.size() == 0) {
-        return TBoolError;
-    }
-
-    if ( std::find(acceptableSoftware_.begin(), acceptableSoftware_.end(), prog) != acceptableSoftware_.end()) {
-        return TBoolOk;
-    } else if ( std::find(ignoreSoftware_.begin(), ignoreSoftware_.end(), prog) != ignoreSoftware_.end()) {
-        return TBoolIgnore;
-    } else {
-        return TBoolError;
-    }
-
-    return TBoolOk;
-}
-
-
 double abstractElement::getInitialKineticEnergy() const {
   return 0.0;
@@ -102,44 +89,3 @@
 
 
-string abstractElement::generatorOutputFlow() const {
-  return "";
-}
 
-trivaluedBool abstractElement::setSoftware(nomDeLogiciel prog) 
-{
-  trivaluedBool tb = TBoolError;
-  if (std::find(acceptableSoftware_.begin(),acceptableSoftware_.end(),prog) != acceptableSoftware_.end()) {
-    tb = TBoolOk;
-  } else if (std::find(ignoreSoftware_.begin(),ignoreSoftware_.end(),prog) != ignoreSoftware_.end()) {
-    tb = TBoolIgnore;
-  } else {
-    tb = TBoolError;
-  }
-  
-  if (prog == nomDeLogiciel::unknownSoftware){
-    tb = TBoolOk;
-  }
-  
-  if ((tb == TBoolOk)/* || (tb == TBoolIgnore)*/) {
-    if (prog == nomDeLogiciel::parmela) {
-      abstractSoftware_ = new softwareParmela();
-    } else if (prog == nomDeLogiciel::transport) {
-      abstractSoftware_ = new softwareTransport();
-    } else if (prog == nomDeLogiciel::generator) {
-      abstractSoftware_ = new softwareGenerator();
-    } else if (prog == nomDeLogiciel::test) {
-      abstractSoftware_ = new softwareTest();
-    } else if (prog == nomDeLogiciel::unknownSoftware) {
-      abstractSoftware_ = NULL;
-    }
-  }
-  return tb;
-}
-
-void abstractElement::registerAcceptableSoftware(nomDeLogiciel abs,trivaluedBool b) {
-  if (b == TBoolIgnore) {
-    ignoreSoftware_.push_back(abs);
-  } else if (b == TBoolOk) {
-    acceptableSoftware_.push_back(abs);
-  }
-}
Index: /Interface_Web/trunk/pspaWT/sources/controler/src/abstractSoftware.cc
===================================================================
--- /Interface_Web/trunk/pspaWT/sources/controler/src/abstractSoftware.cc	(revision 417)
+++ /Interface_Web/trunk/pspaWT/sources/controler/src/abstractSoftware.cc	(revision 418)
@@ -33,4 +33,30 @@
 }
 
+
+void abstractSoftware::registerElement(nomdElements::typedElement nomdel,trivaluedBool b) {
+  if (b == TBoolIgnore) {
+    ignoredElements_.push_back(nomdel);
+  } else if (b == TBoolOk) {
+    acceptedElements_.push_back(nomdel);
+  }
+}
+
+trivaluedBool abstractSoftware::doAcceptElement(nomdElements::typedElement typdel) {
+  if (acceptedElements_.size() == 0) {
+    return TBoolError;
+  }
+  if ( std::find(acceptedElements_.begin(), acceptedElements_.end(), typdel) != acceptedElements_.end()) {
+    return TBoolOk;
+  }
+  if (ignoredElements_.size() == 0) {
+    return TBoolError;
+  }
+  if ( std::find(ignoredElements_.begin(), ignoredElements_.end(), typdel) != ignoredElements_.end()) {
+    return TBoolIgnore;
+  }
+  return TBoolOk;
+}
+
+
 bool abstractSoftware::launchJob(string commandLine, string& resul)
 {
Index: /Interface_Web/trunk/pspaWT/sources/controler/src/dataManager.cc
===================================================================
--- /Interface_Web/trunk/pspaWT/sources/controler/src/dataManager.cc	(revision 417)
+++ /Interface_Web/trunk/pspaWT/sources/controler/src/dataManager.cc	(revision 418)
@@ -179,5 +179,5 @@
       for (int j = debut; j <= fin; j++) {
 	abstractElement* elPtr= getElementPointerFromNumero(j);
-	cout << "[" << j << "] " << elPtr->getNomdElement().getElementName() << endl;
+	cout << "[" << j << "] " << elPtr->getNomdElement().getExpandedName() << endl;
       }
     } //k
@@ -243,5 +243,5 @@
     pspa_->getBeamLine()->clear();
     
-    typedElement elementType;
+    nomdElements::typedElement elementType;
     string elementLabel;
     while (infile >> elementLabel) {
Index: /Interface_Web/trunk/pspaWT/sources/controler/src/elementBeam.cc
===================================================================
--- /Interface_Web/trunk/pspaWT/sources/controler/src/elementBeam.cc	(revision 417)
+++ /Interface_Web/trunk/pspaWT/sources/controler/src/elementBeam.cc	(revision 418)
@@ -10,5 +10,5 @@
     parametersString_ = new string[nbParam_+1];
     //  transportOk_ = true;
-    registerAcceptableSoftware(nomDeLogiciel::transport, TBoolOk);
+    //    registerAcceptableSoftware(nomDeLogiciel::transport, TBoolOk);
 }
 
@@ -16,5 +16,5 @@
 
 void elementBeam::setDefaultValues() {
-    defaultLabel_ = "beam";
+    defaultSpecificName_ = "beam";
     xDef_ = 0.0;
     xpDef_ = 0.0;
@@ -27,5 +27,5 @@
 
 void elementBeam::setDefaults() {
-    label_ = defaultLabel_;
+    specificName_ = defaultSpecificName_;
     x_ = xDef_;
     xp_ = xpDef_;
@@ -41,5 +41,5 @@
     int compteur = -1;
     parametersString_[++compteur] = mixedTools::intToString(nbParam_);
-    parametersString_[++compteur] = label_;
+    parametersString_[++compteur] = specificName_;
     parametersString_[++compteur] = mixedTools::doubleToString(x_);
     parametersString_[++compteur] = mixedTools::doubleToString(xp_);
@@ -55,4 +55,7 @@
     return parametersString_;
 }
+
+
+
 
 void elementBeam::setParametersString(string* param) {
@@ -70,5 +73,5 @@
     }
     
-    label_ = param[++compteur];
+    specificName_ = param[++compteur];
     x_ = atof(param[++compteur].c_str());
     xp_ = atof(param[++compteur].c_str());
@@ -80,24 +83,24 @@
 }
 
-string elementBeam::parmelaOutputFlow() const
-{
-    ostringstream sortie;
-    cout << " BEAM sortie parmela non programmee " << endl;
-    return sortie.str();
-}
+// string elementBeam::parmelaOutputFlow() const
+// {
+//     ostringstream sortie;
+//     cout << " BEAM sortie parmela non programmee " << endl;
+//     return sortie.str();
+// }
 
-string elementBeam::transportOutputFlow() const {
-    ostringstream sortie;
-    beam2Moments moments(x_, xp_, y_, yp_, dl_, del_);
-    cout << " elementBeam::transportOutputFlow(), p0 = " << p0_ << endl;
-    sortie << label_ << ":" << moments.writeToTransportInput(p0_) << endl;
-    return sortie.str();
-}
+// string elementBeam::transportOutputFlow() const {
+//     ostringstream sortie;
+//     beam2Moments moments(x_, xp_, y_, yp_, dl_, del_);
+//     cout << " elementBeam::transportOutputFlow(), p0 = " << p0_ << endl;
+//     sortie << specificName_ << ":" << moments.writeToTransportInput(p0_) << endl;
+//     return sortie.str();
+// }
 
 string elementBeam::FileOutputFlow() const {
     ostringstream sortie;
     // sortie << elementName_.getElementType() << endl;
-    sortie << elementName_.getElementLabel() << endl;
-    sortie  << label_ << endl;
+    sortie << elementName_.getGenericLabel() << endl;
+    sortie  << specificName_ << endl;
     sortie << x_ << "  " << xp_ << " " <<  y_  << " " <<  yp_  << endl;
     sortie << dl_ << "  " << del_ << " " <<  p0_  << endl;
@@ -106,6 +109,25 @@
 }
 
+vector< pair<string, vector<string> > > elementBeam::parametersToSoftware () const {
+  vector< pair<string, vector<string> > >  sortie;
+  sortie.push_back( pair<string, vector<string> >("labelsGenericSpecific",  vector<string>() ) );
+  sortie.back().second.push_back(elementName_.getGenericLabel());
+  sortie.back().second.push_back(specificName_);
+  sortie.push_back( pair<string, vector<string> >("transverseCoordinates",  vector<string>() ) );
+  sortie.back().second.push_back(mixedTools::doubleToString(x_));
+  sortie.back().second.push_back(mixedTools::doubleToString(xp_));
+  sortie.back().second.push_back(mixedTools::doubleToString(y_));
+  sortie.back().second.push_back(mixedTools::doubleToString(xp_));
+  sortie.push_back( pair<string, vector<string> >("longitudinalCoordinates",  vector<string>() ) );
+  sortie.back().second.push_back(mixedTools::doubleToString(dl_));
+  sortie.back().second.push_back(mixedTools::doubleToString(del_));		    
+  sortie.push_back( pair<string, vector<string> >("momentum",  vector<string>() ) );
+  sortie.back().second.push_back(mixedTools::doubleToString(p0_));
+  return sortie;
+}
+
+
 void elementBeam::elementBeam::FileInput(ifstream& ifs) {
-    ifs >> label_;
+    ifs >> specificName_;
     ifs >> x_ >> xp_ >>  y_ >> yp_;
     ifs >> dl_ >> del_ >> p0_;
@@ -118,5 +140,5 @@
 string elementBeam::print() {
     string txt = "";
-    txt += label_;
+    txt += specificName_;
     txt += "\n 1/2 horizontal beam extend rms (cm) : ";
     txt += mixedTools::doubleToString(x_);
Index: /Interface_Web/trunk/pspaWT/sources/controler/src/elementBend.cc
===================================================================
--- /Interface_Web/trunk/pspaWT/sources/controler/src/elementBend.cc	(revision 417)
+++ /Interface_Web/trunk/pspaWT/sources/controler/src/elementBend.cc	(revision 418)
@@ -11,13 +11,11 @@
   nbParam_ = elementName_.getElementNbParameters();
   parametersString_ = new string[nbParam_+1];
-  // transportOk_ = true;
-  // parmelaOk_ = true;
-    registerAcceptableSoftware(nomDeLogiciel::transport, TBoolOk);
-    registerAcceptableSoftware(nomDeLogiciel::parmela, TBoolOk);
+    // registerAcceptableSoftware(nomDeLogiciel::transport, TBoolOk);
+    // registerAcceptableSoftware(nomDeLogiciel::parmela, TBoolOk);
 }
 
   void elementBend::setDefaultValues()
   {
-    defaultLabel_ = "bend";
+    defaultSpecificName_ = "bend";
     angleDegDef_ = 0.0;
     radiusDef_ = 1.0;
@@ -29,5 +27,5 @@
   void elementBend::setDefaults()
   {
-    label_ = defaultLabel_;
+    specificName_ = defaultSpecificName_;
     angleDeg_ = angleDegDef_;
     radius_ = radiusDef_;
@@ -41,5 +39,5 @@
    int compteur = -1;
    parametersString_[++compteur] = mixedTools::intToString(nbParam_);
-   parametersString_[++compteur] = label_;
+   parametersString_[++compteur] = specificName_;
    parametersString_[++compteur] = mixedTools::doubleToString( angleDeg_);
    parametersString_[++compteur] = mixedTools::doubleToString(radius_);
@@ -76,5 +74,5 @@
 	  return;
 	}
-    label_ = param[++compteur];
+    specificName_ = param[++compteur];
     angleDeg_ =  atof(param[++compteur].c_str());
     radius_ = atof(param[++compteur].c_str());
@@ -88,24 +86,24 @@
  }
 
-string elementBend::parmelaOutputFlow() const
-  {
-    ostringstream sortie;
-    // il faut entrer l'energie cinetique
-    double ecin = momentum_/EREST_MeV;
-    ecin = ecin*ecin + 1.;
-    ecin = EREST_MeV*(sqrt(ecin) - 1.0);
-    sortie << "BEND /l=" << lenghtElem_ << "  / aper=" << aperture_ << "  / iout=1 / wr=" << ecin << " /alpha=" << angleDeg_ << " / beta1=" << beta1_;
-    sortie << " / beta2=" << beta1_  << endl;
+// string elementBend::parmelaOutputFlow() const
+//   {
+//     ostringstream sortie;
+//     // il faut entrer l'energie cinetique
+//     double ecin = momentum_/EREST_MeV;
+//     ecin = ecin*ecin + 1.;
+//     ecin = EREST_MeV*(sqrt(ecin) - 1.0);
+//     sortie << "BEND /l=" << lenghtElem_ << "  / aper=" << aperture_ << "  / iout=1 / wr=" << ecin << " /alpha=" << angleDeg_ << " / beta1=" << beta1_;
+//     sortie << " / beta2=" << beta2_  << endl;
 
-    return sortie.str();
-  }
+//     return sortie.str();
+//   }
 
 
-string elementBend::transportOutputFlow() const
-  {
-    ostringstream sortie;
-    sortie << label_ << ":" << "  SBEND, RADIUS=" << radius_ << ", ANGLE=" << angleDeg_ << ", E1=" << beta1_ << ", E2=" << beta2_ << ";" << endl;
-    return sortie.str();
-  }
+// string elementBend::transportOutputFlow() const
+//   {
+//     ostringstream sortie;
+//     sortie << specificName_ << ":" << "  SBEND, RADIUS=" << radius_ << ", ANGLE=" << angleDeg_ << ", E1=" << beta1_ << ", E2=" << beta2_ << ";" << endl;
+//     return sortie.str();
+//   }
 
 
@@ -114,6 +112,6 @@
     ostringstream sortie;
     //    sortie << elementName_.getElementType() << endl;
-    sortie << elementName_.getElementLabel() << endl;
-    sortie  << label_ << endl;
+    sortie << elementName_.getGenericLabel() << endl;
+    sortie  << specificName_ << endl;
     sortie << angleDeg_ << "  " << radius_ << " " <<  aperture_  << endl;
     sortie << beta1_ << "  " << beta2_ << " " << momentum_ << endl;
@@ -121,7 +119,27 @@
   }
 
+vector< pair<string, vector<string> > > elementBend::parametersToSoftware () const{
+  vector< pair<string, vector<string> > >  sortie;
+  sortie.push_back( pair<string, vector<string> >("labelsGenericSpecific",  vector<string>() ) );
+  sortie.back().second.push_back(elementName_.getGenericLabel());
+  sortie.back().second.push_back(specificName_);
+  sortie.push_back( pair<string, vector<string> >("lenghtAperture",  vector<string>() ) );
+  sortie.back().second.push_back(mixedTools::doubleToString( lenghtElem_));
+  sortie.back().second.push_back(mixedTools::doubleToString( aperture_));
+  sortie.push_back( pair<string, vector<string> >("angleDegre",  vector<string>() ) );
+  sortie.back().second.push_back(mixedTools::doubleToString( angleDeg_));
+  sortie.push_back( pair<string, vector<string> >("radius",  vector<string>() ) );
+  sortie.back().second.push_back(mixedTools::doubleToString( radius_));
+  sortie.push_back( pair<string, vector<string> >("rotatedFaces",  vector<string>() ) );
+  sortie.back().second.push_back(mixedTools::doubleToString( beta1_));
+  sortie.back().second.push_back(mixedTools::doubleToString( beta2_));
+  sortie.push_back( pair<string, vector<string> >("momentum",  vector<string>() ) );
+  sortie.back().second.push_back(mixedTools::doubleToString( momentum_));
+  return sortie;
+}
+
 void elementBend::FileInput(ifstream& ifs)
 {
-  ifs >> label_;
+  ifs >> specificName_;
   ifs >> angleDeg_ >> radius_ >>  aperture_;
   ifs >> beta1_ >> beta2_ >> momentum_;
@@ -134,5 +152,5 @@
     string txt = "";
 
-    txt += label_;
+    txt += specificName_;
     txt += "\nangle (deg.) : ";
     txt += mixedTools::doubleToString(angleDeg_);
Index: /Interface_Web/trunk/pspaWT/sources/controler/src/elementCell.cc
===================================================================
--- /Interface_Web/trunk/pspaWT/sources/controler/src/elementCell.cc	(revision 417)
+++ /Interface_Web/trunk/pspaWT/sources/controler/src/elementCell.cc	(revision 418)
@@ -14,11 +14,10 @@
       nbParam_ = elementName_.getElementNbParameters();
       parametersString_ = new string[nbParam_+1];
-      //      parmelaOk_ = true;
-        registerAcceptableSoftware(nomDeLogiciel::parmela, TBoolOk);
+      //        registerAcceptableSoftware(nomDeLogiciel::parmela, TBoolOk);
     }
 
 void elementCell::setDefaultValues()
 {
-    defaultLabel_ = "cell";
+    defaultSpecificName_ = "cell";
     initialPhaseDef_ = 0.0;
     acceleratingFieldDef_ = 1.0;
@@ -31,5 +30,5 @@
 void elementCell::setDefaults()
 {
-    label_ = defaultLabel_;
+    specificName_ = defaultSpecificName_;
     initialPhase_ = initialPhaseDef_;
     acceleratingField_ = acceleratingFieldDef_;
@@ -45,5 +44,5 @@
    int compteur = -1;
     parametersString_[++compteur] = mixedTools::intToString(nbParam_);
-  parametersString_[++compteur] = label_;
+  parametersString_[++compteur] = specificName_;
     parametersString_[++compteur] = mixedTools::doubleToString(lenghtElem_);
     parametersString_[++compteur] = mixedTools::doubleToString(aperture_);
@@ -78,5 +77,5 @@
       }
 
-    label_ = param[++compteur];
+    specificName_ = param[++compteur];
     lenghtElem_ = atof(param[++compteur].c_str());
     aperture_ = atof(param[++compteur].c_str());
@@ -90,20 +89,19 @@
   }
 
-string elementCell::parmelaOutputFlow() const
-  {
-    ostringstream sortie;
-    // on prend les troncatures tmax et rmax Ã  3 sigmas 
-    sortie << "CELL /l=" << lenghtElem_ << "  /aper=" << aperture_ << endl;
-    sortie << "  /iout=1  /phi0=" << initialPhase_ << " /E0=" << acceleratingField_ << endl;
-    sortie << " /nc=1 /dwtmax=" << phaseStepMax_ << " /sym=-1" << endl;
-    sortie << "CFIELD 1" << endl;
-    sortie << acceleratingShapeFile_ << endl;
-    if ( focusingMagFile_ != "") {
-      sortie << "POISSON /zoff=" << offsetMag_ << " /rmult=" << scaleFactor_ << endl;
-      sortie << focusingMagFile_ << endl;
-    }
+// string elementCell::parmelaOutputFlow() const
+//   {
+//     ostringstream sortie;
+//     sortie << "CELL /l=" << lenghtElem_ << "  /aper=" << aperture_ << endl;
+//     sortie << "  /iout=1  /phi0=" << initialPhase_ << " /E0=" << acceleratingField_ << endl;
+//     sortie << " /nc=1 /dwtmax=" << phaseStepMax_ << " /sym=-1" << endl;
+//     sortie << "CFIELD 1" << endl;
+//     sortie << acceleratingShapeFile_ << endl;
+//     if ( focusingMagFile_ != "") {
+//       sortie << "POISSON /zoff=" << offsetMag_ << " /rmult=" << scaleFactor_ << endl;
+//       sortie << focusingMagFile_ << endl;
+//     }
 
-    return sortie.str();
-  }
+//     return sortie.str();
+//   }
 
 
@@ -112,6 +110,6 @@
     ostringstream sortie;
     //    sortie << elementName_.getElementType()  << endl;
-    sortie << elementName_.getElementLabel() << endl;
-    sortie  << label_ << endl;
+    sortie << elementName_.getGenericLabel() << endl;
+    sortie  << specificName_ << endl;
     sortie << lenghtElem_ << " " << aperture_ << endl;
     sortie << initialPhase_ << "  " << acceleratingField_ << endl;
@@ -123,7 +121,31 @@
   }
 
+
+vector< pair<string, vector<string> > > elementCell::parametersToSoftware () const {
+  vector< pair<string, vector<string> > >  sortie;
+  sortie.push_back( pair<string, vector<string> >("labelsGenericSpecific",  vector<string>() ) );
+  sortie.back().second.push_back(elementName_.getGenericLabel());
+  sortie.back().second.push_back(specificName_);
+  sortie.push_back( pair<string, vector<string> >("lenghtAperture",  vector<string>() ) );
+  sortie.back().second.push_back(mixedTools::doubleToString(lenghtElem_));
+  sortie.back().second.push_back(mixedTools::doubleToString( aperture_));
+  sortie.push_back( pair<string, vector<string> >("phaseInitialStepmax",  vector<string>() ) );
+  sortie.back().second.push_back(mixedTools::doubleToString( initialPhase_));
+  sortie.back().second.push_back(mixedTools::doubleToString( phaseStepMax_));
+  sortie.push_back( pair<string, vector<string> >("fieldValueFile",  vector<string>() ) );
+  sortie.back().second.push_back(mixedTools::doubleToString( acceleratingField_));
+  sortie.back().second.push_back(acceleratingShapeFile_);
+  sortie.push_back( pair<string, vector<string> >("MagFocusingFileOffsetScale",  vector<string>() ) );
+  sortie.back().second.push_back(focusingMagFile_);
+  sortie.back().second.push_back(mixedTools::doubleToString( offsetMag_));
+  sortie.back().second.push_back(mixedTools::doubleToString( scaleFactor_));
+
+  return sortie;
+}
+
+
 void elementCell::FileInput(ifstream& ifs)
 {
-  ifs >> label_;
+  ifs >> specificName_;
   ifs >> lenghtElem_ >>  aperture_;
   ifs >> initialPhase_ >> acceleratingField_;
@@ -139,5 +161,5 @@
 
 
-    txt += label_;
+    txt += specificName_;
     txt += "\nlength (cm) : ";
     txt += mixedTools::doubleToString(lenghtElem_);
Index: /Interface_Web/trunk/pspaWT/sources/controler/src/elementDrift.cc
===================================================================
--- /Interface_Web/trunk/pspaWT/sources/controler/src/elementDrift.cc	(revision 417)
+++ /Interface_Web/trunk/pspaWT/sources/controler/src/elementDrift.cc	(revision 418)
@@ -13,7 +13,7 @@
   nbParam_ = elementName_.getElementNbParameters();
   parametersString_ = new string[nbParam_+1];
-    registerAcceptableSoftware(nomDeLogiciel::transport, TBoolOk);
-    registerAcceptableSoftware(nomDeLogiciel::parmela, TBoolOk);
-    registerAcceptableSoftware(nomDeLogiciel::test, TBoolOk);
+    // registerAcceptableSoftware(nomDeLogiciel::transport, TBoolOk);
+    // registerAcceptableSoftware(nomDeLogiciel::parmela, TBoolOk);
+    // registerAcceptableSoftware(nomDeLogiciel::test, TBoolOk);
 
 }
@@ -21,9 +21,9 @@
   void elementDrift::setDefaultValues()
   {
-    defaultLabel_ = "drift";
+    defaultSpecificName_ = "drift";
   }
   void elementDrift::setDefaults()
   {
-    label_ = defaultLabel_;
+    specificName_ = defaultSpecificName_;
   }
 
@@ -33,5 +33,5 @@
    int compteur = -1;
    parametersString_[++compteur] = mixedTools::intToString(nbParam_);
-  parametersString_[++compteur] = label_;
+  parametersString_[++compteur] = specificName_;
    parametersString_[++compteur] = mixedTools::doubleToString(lenghtElem_);
    parametersString_[++compteur] = mixedTools::doubleToString(aperture_);
@@ -57,24 +57,24 @@
        return;
      }
-  label_ = param[++compteur];
+  specificName_ = param[++compteur];
    lenghtElem_ = atof(param[++compteur].c_str());
    aperture_  = atof(param[++compteur].c_str());
  }
 
-string elementDrift::parmelaOutputFlow() const
-{
-  ostringstream sortie;
-  sortie << "DRIFT /l=" << lenghtElem_ << "  /aper=" << aperture_ << "  /iout=1" << endl;
-  return sortie.str();
-}
+// string elementDrift::parmelaOutputFlow() const
+// {
+//   ostringstream sortie;
+//   sortie << "DRIFT /l=" << lenghtElem_ << "  /aper=" << aperture_ << "  /iout=1" << endl;
+//   return sortie.str();
+// }
 
 
-string elementDrift::transportOutputFlow() const
-  {
-    ostringstream sortie;
-    // longueur en m
-    sortie << label_ << ":" << "  DRIFT, L=" << 0.01*lenghtElem_ << ";" << endl;
-    return sortie.str();
-  }
+// string elementDrift::transportOutputFlow() const
+//   {
+//     ostringstream sortie;
+//     // longueur en m
+//     sortie << specificName_ << ":" << "  DRIFT, L=" << 0.01*lenghtElem_ << ";" << endl;
+//     return sortie.str();
+//   }
 
 
@@ -83,13 +83,26 @@
   ostringstream sortie;
   //  sortie << elementName_.getElementType()  << endl;
-  sortie << elementName_.getElementLabel() << endl;
-  sortie  << label_ << endl;
+  sortie << elementName_.getGenericLabel() << endl;
+  sortie  << specificName_ << endl;
   sortie << lenghtElem_ << "  " << aperture_ <<endl;
   return sortie.str();
 }
 
+vector< pair<string, vector<string> > > elementDrift::parametersToSoftware () const {
+  vector< pair<string, vector<string> > >  sortie;
+  sortie.push_back( pair<string, vector<string> >("labelsGenericSpecific",  vector<string>() ) );
+  sortie.back().second.push_back(elementName_.getGenericLabel());
+  sortie.back().second.push_back(specificName_);
+  sortie.push_back( pair<string, vector<string> >("lenghtAperture",  vector<string>() ) );
+  sortie.back().second.push_back(mixedTools::doubleToString(lenghtElem_));
+  sortie.back().second.push_back(mixedTools::doubleToString(aperture_));
+  return sortie;
+}
+
+
+
 void elementDrift::FileInput(ifstream& ifs)
 {
-  ifs >> label_;
+  ifs >> specificName_;
   ifs >> lenghtElem_ >>  aperture_;
 }
@@ -99,5 +112,5 @@
     string txt = "";
 
-    txt += label_;
+    txt += specificName_;
     txt += "\nlength (cm) : ";
     txt += mixedTools::doubleToString(lenghtElem_);
Index: /Interface_Web/trunk/pspaWT/sources/controler/src/elementFit.cc
===================================================================
--- /Interface_Web/trunk/pspaWT/sources/controler/src/elementFit.cc	(revision 417)
+++ /Interface_Web/trunk/pspaWT/sources/controler/src/elementFit.cc	(revision 418)
@@ -11,11 +11,11 @@
     // transportOk_ = true;
     // parmelaIgnored_ = true;
-    registerAcceptableSoftware(nomDeLogiciel::transport, TBoolOk);
-    registerAcceptableSoftware(nomDeLogiciel::parmela, TBoolIgnore);
+    // registerAcceptableSoftware(nomDeLogiciel::transport, TBoolOk);
+    // registerAcceptableSoftware(nomDeLogiciel::parmela, TBoolIgnore);
 }
 
 void elementFit::setDefaultValues()
 {
-    defaultLabel_ = "fit";
+    defaultSpecificName_ = "fit";
     variableNameDef_ = "";
     variableValueDef_ = 0.0;
@@ -25,5 +25,5 @@
 void elementFit::setDefaults()
 {
-    label_ = defaultLabel_;
+    specificName_ = defaultSpecificName_;
     variableName_ = variableNameDef_;
     variableValue_ = variableValueDef_;
@@ -37,5 +37,5 @@
     int compteur = -1;
     parametersString_[++compteur] = mixedTools::intToString(nbParam_);
-    parametersString_[++compteur] = label_;
+    parametersString_[++compteur] = specificName_;
     parametersString_[++compteur] = variableName_;
     parametersString_[++compteur] = mixedTools::doubleToString(variableValue_ );
@@ -63,5 +63,5 @@
     }
     
-    label_ = param[++compteur];
+    specificName_ = param[++compteur];
     variableName_ = param[++compteur];
     variableValue_ = atof(param[++compteur].c_str());
@@ -70,19 +70,19 @@
 
 
-string elementFit::parmelaOutputFlow() const
-{
-    ostringstream sortie;
-    return sortie.str();
-}
+// string elementFit::parmelaOutputFlow() const
+// {
+//     ostringstream sortie;
+//     return sortie.str();
+// }
 
-string elementFit::transportOutputFlow() const
-{
-    ostringstream sortie;
-    sortie << label_ << ":" << "  FIT," << variableName_ << " = " << variableValue_ << ", TOLER = " << tolerance_ << " ;" << endl;
-    if ( variableName_ == "R11" || variableName_ == "R22" || variableName_ == "R12" || variableName_ == "R21" ) {
-        sortie << " PRINT, TRANS;" << endl;
-    }
-    return sortie.str();
-}
+// string elementFit::transportOutputFlow() const
+// {
+//     ostringstream sortie;
+//     sortie << specificName_ << ":" << "  FIT," << variableName_ << " = " << variableValue_ << ", TOLER = " << tolerance_ << " ;" << endl;
+//     if ( variableName_ == "R11" || variableName_ == "R22" || variableName_ == "R12" || variableName_ == "R21" ) {
+//         sortie << " PRINT, TRANS;" << endl;
+//     }
+//     return sortie.str();
+// }
 
 string elementFit::FileOutputFlow() const
@@ -90,13 +90,26 @@
     ostringstream sortie;
     //    sortie << elementName_.getElementType() << endl;
-    sortie << elementName_.getElementLabel() << endl;
-    sortie  << label_ << endl;
+    sortie << elementName_.getGenericLabel() << endl;
+    sortie  << specificName_ << endl;
     sortie  <<    variableName_ << " " << variableValue_ << " " << tolerance_ << endl;
     return sortie.str();
 }
 
+vector< pair<string, vector<string> > > elementFit::parametersToSoftware () const {
+  vector< pair<string, vector<string> > >  sortie;
+  sortie.push_back( pair<string, vector<string> >("labelsGenericSpecific",  vector<string>() ) );
+  sortie.back().second.push_back(elementName_.getGenericLabel());
+  sortie.back().second.push_back(specificName_);
+  sortie.push_back( pair<string, vector<string> >("variable",  vector<string>() ) );
+  sortie.back().second.push_back(variableName_);
+  sortie.back().second.push_back(mixedTools::doubleToString(variableValue_));
+  sortie.back().second.push_back(mixedTools::doubleToString(tolerance_));
+  return sortie;
+}
+
+
 void elementFit::FileInput(ifstream& ifs)
 {
-    ifs >> label_;
+    ifs >> specificName_;
     ifs  >>  variableName_ >>  variableValue_   >> tolerance_;
 }
@@ -106,5 +119,5 @@
     string txt = "";
  
-    txt += label_;
+    txt += specificName_;
     return txt;
 }
Index: /Interface_Web/trunk/pspaWT/sources/controler/src/elementRfgun.cc
===================================================================
--- /Interface_Web/trunk/pspaWT/sources/controler/src/elementRfgun.cc	(revision 417)
+++ /Interface_Web/trunk/pspaWT/sources/controler/src/elementRfgun.cc	(revision 418)
@@ -15,11 +15,11 @@
     parametersString_ = new string[nbParam_+1];
     //      parmelaOk_ = true;
-    registerAcceptableSoftware(nomDeLogiciel::parmela, TBoolOk);
-    registerAcceptableSoftware(nomDeLogiciel::generator, TBoolOk);
+    // registerAcceptableSoftware(nomDeLogiciel::parmela, TBoolOk);
+    // registerAcceptableSoftware(nomDeLogiciel::generator, TBoolOk);
 }
 
 void elementRfgun::setDefaultValues()
 {
-    defaultLabel_ = "rfgun";
+    defaultSpecificName_ = "rfgun";
     defaultPhaseStep_ = 1.0;
     defaultNmacrop_ = 0;
@@ -36,5 +36,5 @@
   void elementRfgun::setDefaults()
   {
-    label_ = defaultLabel_;
+    specificName_ = defaultSpecificName_;
     phaseStep_ = defaultPhaseStep_;
     nmacrop_ = defaultNmacrop_;
@@ -54,5 +54,5 @@
    int compteur = -1;
     parametersString_[++compteur] = mixedTools::intToString(nbParam_);
-  parametersString_[++compteur] = label_;
+  parametersString_[++compteur] = specificName_;
     parametersString_[++compteur] = mixedTools::intToString(nmacrop_);
     parametersString_[++compteur] = mixedTools::doubleToString(sigma_t_);
@@ -81,5 +81,5 @@
       }
 
-    label_ = param[++compteur];
+    specificName_ = param[++compteur];
     nmacrop_ = atoi(param[++compteur].c_str());
     sigma_t_ = atof(param[++compteur].c_str());
@@ -93,41 +93,41 @@
   }
 
-string elementRfgun::parmelaOutputFlow() const
-  {
-    ostringstream sortie;
-    // on prend les troncatures tmax et rmax Ã  3 sigmas 
-    sortie << "INPUT 10 /np=" << nmacrop_ << "  /sigt=" << sigma_t_ << endl;
-    sortie << "  /tmax=" << 3.3*sigma_t_ << " /sigr=" << sigma_r_ << endl;
-    sortie << " /rmax=" << 3.0*sigma_r_ << " /W0=" << E_cin_ << " /dw0=" << sigma_E_ << endl;
-    sortie << " /dwt=" << phaseStep_ << " /ran=2" << endl;
-
-    // on doit entrer le nb vrai de part. (avec signe moins)
+// string elementRfgun::parmelaOutputFlow() const
+//   {
+//     ostringstream sortie;
+//     // on prend les troncatures tmax et rmax Ã  3 sigmas 
+//     sortie << "INPUT 10 /np=" << nmacrop_ << "  /sigt=" << sigma_t_ << endl;
+//     sortie << "  /tmax=" << 3.3*sigma_t_ << " /sigr=" << sigma_r_ << endl;
+//     sortie << " /rmax=" << 3.0*sigma_r_ << " /W0=" << E_cin_ << " /dw0=" << sigma_E_ << endl;
+//     sortie << " /dwt=" << phaseStep_ << " /ran=2" << endl;
+
+//     // on doit entrer le nb vrai de part. (avec signe moins)
     
 
-    sortie << "SCHEFF /beami=" << -fabs(totalCharge_)/ELECTRONANOCOULOMB << " /nprog=2 /point=-1.7"  << endl;
+//     sortie << "SCHEFF /beami=" << -fabs(totalCharge_)/ELECTRONANOCOULOMB << " /nprog=2 /point=-1.7"  << endl;
  
-    return sortie.str();
-  }
-
-string elementRfgun::generatorOutputFlow() const {
-    ostringstream sortie;
-    sortie << "Ipart=" << nmacrop_ << endl;
-
-    sortie << "Probe=.True." << endl;
-    sortie << "Noise_reduc=.T" << endl;
-    sortie << "Cathode=.T." << endl;
-    sortie << "Q_total=" << totalCharge_ << endl;
-    sortie << "Ref_zpos=0.0" << endl;
-    sortie << "Ref_clock=0.0" << endl;
-    sortie << "Ref_Ekin=" << E_cin_ << endl; // tjs en MeV
-    sortie << "Dist_z='g'" << endl;
-    sortie << "sig_clock=" << 1.0e-3*sigma_t_ << endl; // passage de ps en ns
-    sortie <<  "Dist_pz='g', sig_Ekin=" << 1000.*sigma_E_ << ",  emit_z=0.0 ,    cor_Ekin=0.0 " << endl;  // passage en keV
-    sortie << "Dist_x='gauss',  sig_x=" <<  10.*sigma_r_ << endl;    // passage en mm
-    sortie << "Dist_px='g', Nemit_x=" << emit_x_ << ",   cor_px=0.0" << endl;
-    sortie << "Dist_y='gauss',  sig_y=" <<  10.*sigma_r_ << endl;    // passage en mm
-    sortie << "Dist_py='g', Nemit_y=" << emit_y_ << ",   cor_py=0.0" << endl;
-    return sortie.str();
-}
+//     return sortie.str();
+//   }
+
+// string elementRfgun::generatorOutputFlow() const {
+//     ostringstream sortie;
+//     sortie << "Ipart=" << nmacrop_ << endl;
+
+//     sortie << "Probe=.True." << endl;
+//     sortie << "Noise_reduc=.T" << endl;
+//     sortie << "Cathode=.T." << endl;
+//     sortie << "Q_total=" << totalCharge_ << endl;
+//     sortie << "Ref_zpos=0.0" << endl;
+//     sortie << "Ref_clock=0.0" << endl;
+//     sortie << "Ref_Ekin=" << E_cin_ << endl; // tjs en MeV
+//     sortie << "Dist_z='g'" << endl;
+//     sortie << "sig_clock=" << 1.0e-3*sigma_t_ << endl; // passage de ps en ns
+//     sortie <<  "Dist_pz='g', sig_Ekin=" << 1000.*sigma_E_ << ",  emit_z=0.0 ,    cor_Ekin=0.0 " << endl;  // passage en keV
+//     sortie << "Dist_x='gauss',  sig_x=" <<  10.*sigma_r_ << endl;    // passage en mm
+//     sortie << "Dist_px='g', Nemit_x=" << emit_x_ << ",   cor_px=0.0" << endl;
+//     sortie << "Dist_y='gauss',  sig_y=" <<  10.*sigma_r_ << endl;    // passage en mm
+//     sortie << "Dist_py='g', Nemit_y=" << emit_y_ << ",   cor_py=0.0" << endl;
+//     return sortie.str();
+// }
 
 
@@ -138,6 +138,6 @@
     // on prend les troncatures tmax et rmax Ã  3 sigmas 
     //    sortie << elementName_.getElementType() << endl;
-    sortie << elementName_.getElementLabel() << endl;
-    sortie  << label_ << endl;
+    sortie << elementName_.getGenericLabel() << endl;
+    sortie  << specificName_ << endl;
     sortie <<  nmacrop_ << "  " << sigma_t_ << "  " << sigma_r_ << endl;
     sortie << emit_x_ << "  " << emit_y_ << endl; 
@@ -147,7 +147,30 @@
   }
 
+vector< pair<string, vector<string> > > elementRfgun::parametersToSoftware () const {
+  vector< pair<string, vector<string> > >  sortie;
+  sortie.push_back( pair<string, vector<string> >("labelsGenericSpecific",  vector<string>() ) );
+  sortie.back().second.push_back(elementName_.getGenericLabel());
+  sortie.back().second.push_back(specificName_);
+  sortie.push_back( pair<string, vector<string> >("nbMacroparticles",  vector<string>() ) );
+  sortie.back().second.push_back(mixedTools::intToString(nmacrop_));
+  sortie.push_back( pair<string, vector<string> >("sigmasTR",  vector<string>() ) );
+  sortie.back().second.push_back(mixedTools::doubleToString(sigma_t_));
+  sortie.back().second.push_back(mixedTools::doubleToString(sigma_r_));
+  sortie.push_back( pair<string, vector<string> >("emittancesXY",  vector<string>() ) );
+  sortie.back().second.push_back(mixedTools::doubleToString(emit_x_));
+  sortie.back().second.push_back(mixedTools::doubleToString(emit_y_));
+  sortie.push_back( pair<string, vector<string> >("kineticE",  vector<string>() ) );
+  sortie.back().second.push_back(mixedTools::doubleToString(E_cin_));
+  sortie.back().second.push_back(mixedTools::doubleToString(sigma_E_));
+  sortie.push_back( pair<string, vector<string> >("phaseStep",  vector<string>() ) );
+  sortie.back().second.push_back(mixedTools::doubleToString(phaseStep_));
+  sortie.push_back( pair<string, vector<string> >("totalCharge",  vector<string>() ) );
+  sortie.back().second.push_back(mixedTools::doubleToString(totalCharge_));
+  return sortie;
+}
+
 void elementRfgun::FileInput(ifstream& ifs)
 {
-  ifs >> label_;
+  ifs >> specificName_;
   ifs >> nmacrop_ >> sigma_t_ >> sigma_r_;
   ifs >> emit_x_  >>  emit_y_; 
@@ -160,5 +183,5 @@
     string txt = "";
     
-    txt += label_;
+    txt += specificName_;
     txt += "\ntotal charge : ";
     txt += mixedTools::doubleToString(totalCharge_);
Index: /Interface_Web/trunk/pspaWT/sources/controler/src/elementSnapshot.cc
===================================================================
--- /Interface_Web/trunk/pspaWT/sources/controler/src/elementSnapshot.cc	(revision 417)
+++ /Interface_Web/trunk/pspaWT/sources/controler/src/elementSnapshot.cc	(revision 418)
@@ -13,18 +13,20 @@
   nbParam_ = elementName_.getElementNbParameters();
   parametersString_ = new string[nbParam_+1];
-  registerAcceptableSoftware(nomDeLogiciel::transport, TBoolIgnore);
-  registerAcceptableSoftware(nomDeLogiciel::parmela, TBoolIgnore);
-  registerAcceptableSoftware(nomDeLogiciel::generator, TBoolIgnore);
-  registerAcceptableSoftware(nomDeLogiciel::test, TBoolIgnore);
+  // registerAcceptableSoftware(nomDeLogiciel::transport, TBoolIgnore);
+  // registerAcceptableSoftware(nomDeLogiciel::parmela, TBoolIgnore);
+  // registerAcceptableSoftware(nomDeLogiciel::generator, TBoolIgnore);
+  // registerAcceptableSoftware(nomDeLogiciel::useraction, 
+  //                                           TBoolOk);
+  // registerAcceptableSoftware(nomDeLogiciel::test, TBoolIgnore);
 }
 
 void elementSnapshot::setDefaultValues()
 {
-  defaultLabel_ = "snapshot";
+  defaultSpecificName_ = "snapshot";
 }
 
 void elementSnapshot::setDefaults()
 {
-  label_ = defaultLabel_;
+  specificName_ = defaultSpecificName_;
 
   if(incr_ < 10) {
@@ -41,5 +43,5 @@
   int compteur = -1;
   parametersString_[++compteur] = mixedTools::intToString(nbParam_);
-  parametersString_[++compteur] = label_;
+  parametersString_[++compteur] = specificName_;
   parametersString_[++compteur] = snapshotFile_;
   
@@ -66,31 +68,41 @@
   }
   
-  label_ = param[++compteur];
+  specificName_ = param[++compteur];
 }
 
-string elementSnapshot::parmelaOutputFlow() const
-{
-    // ostringstream sortie;
-    // return sortie.str();
-  return string("");
-}
+// string elementSnapshot::parmelaOutputFlow() const
+// {
+//     // ostringstream sortie;
+//     // return sortie.str();
+//   return string("");
+// }
 
-string elementSnapshot::transportOutputFlow() const
-{
-  return string("");
-}
+// string elementSnapshot::transportOutputFlow() const
+// {
+//   return string("");
+// }
 
 string elementSnapshot::FileOutputFlow() const
 {
   ostringstream sortie;
-  sortie << elementName_.getElementLabel() << endl;
-  sortie  << label_ << endl;
+  sortie << elementName_.getGenericLabel() << endl;
+  sortie  << specificName_ << endl;
   sortie << snapshotFile_ << endl;
   return sortie.str();
 }
 
+vector< pair<string, vector<string> > > elementSnapshot::parametersToSoftware () const {
+  vector< pair<string, vector<string> > >  sortie;
+  sortie.push_back( pair<string, vector<string> >("labelsGenericSpecific",  vector<string>() ) );
+  sortie.back().second.push_back(elementName_.getGenericLabel());
+  sortie.back().second.push_back(specificName_);
+  sortie.push_back( pair<string, vector<string> >("snapshotFile",  vector<string>() ) );
+  sortie.back().second.push_back(snapshotFile_);
+  return sortie;
+}
+
 void elementSnapshot::FileInput(ifstream& ifs)
 {
-  ifs >> label_;
+  ifs >> specificName_;
   ifs >> snapshotFile_;
 }
@@ -99,5 +111,5 @@
 {
   string txt = "";  
-  txt += label_;
+  txt += specificName_;
   txt += "\nname of file for snapshot : ";
   txt += snapshotFile_;
Index: /Interface_Web/trunk/pspaWT/sources/controler/src/elementSoleno.cc
===================================================================
--- /Interface_Web/trunk/pspaWT/sources/controler/src/elementSoleno.cc	(revision 417)
+++ /Interface_Web/trunk/pspaWT/sources/controler/src/elementSoleno.cc	(revision 418)
@@ -11,6 +11,6 @@
     nbParam_ = elementName_.getElementNbParameters();
     parametersString_ = new string[nbParam_+1];
-    registerAcceptableSoftware(nomDeLogiciel::transport, TBoolOk);
-    registerAcceptableSoftware(nomDeLogiciel::parmela, TBoolOk);
+    // registerAcceptableSoftware(nomDeLogiciel::transport, TBoolOk);
+    // registerAcceptableSoftware(nomDeLogiciel::parmela, TBoolOk);
 }
 
@@ -18,5 +18,5 @@
   void elementSoleno::setDefaultValues()
   {
-    defaultLabel_ = "solnd";
+    defaultSpecificName_ = "solnd";
     B0Def_ = 0.0;
     varyB0Def_ = false;
@@ -25,5 +25,5 @@
   void elementSoleno::setDefaults()
   {
-    label_ = defaultLabel_;
+    specificName_ = defaultSpecificName_;
     B0_ = B0Def_;
     varyB0_ = varyB0Def_;
@@ -36,5 +36,5 @@
    int compteur = -1;
    parametersString_[++compteur] = mixedTools::intToString(nbParam_);
-   parametersString_[++compteur] = label_;
+   parametersString_[++compteur] = specificName_;
    parametersString_[++compteur] = mixedTools::doubleToString(lenghtElem_);
    parametersString_[++compteur] = mixedTools::doubleToString(aperture_);
@@ -63,5 +63,5 @@
 	  return;
 	}
-  label_ = param[++compteur];
+  specificName_ = param[++compteur];
     lenghtElem_ = atof(param[++compteur].c_str());
     aperture_  = atof(param[++compteur].c_str());
@@ -70,22 +70,22 @@
  }
 
-string elementSoleno::parmelaOutputFlow() const
-  {
-    ostringstream sortie;
-    // on passe l'induction magnetique en Gauss 
-    sortie << "SOLENOID /l=" << lenghtElem_ << "  /aper=" << aperture_ << "  /iout=1 /h=" << 1000.*B0_  << endl;
-    return sortie.str();
-  }
+// string elementSoleno::parmelaOutputFlow() const
+//   {
+//     ostringstream sortie;
+//     // on passe l'induction magnetique en Gauss 
+//     sortie << "SOLENOID /l=" << lenghtElem_ << "  /aper=" << aperture_ << "  /iout=1 /h=" << 1000.*B0_  << endl;
+//     return sortie.str();
+//   }
 
-string elementSoleno::transportOutputFlow() const
-  {
-    ostringstream sortie;
-    // on passe la longueur en metres 
-    sortie << label_ << ":" << "  SOLENOID, L=" << 0.01*lenghtElem_ << ", B=" << B0_ << ";" << endl;
-    if ( varyB0_ ) {
-      sortie <<  "  VARY, " << label_+"[B]"  << ";" << endl;
-    }
-    return sortie.str();
-  }
+// string elementSoleno::transportOutputFlow() const
+//   {
+//     ostringstream sortie;
+//     // on passe la longueur en metres 
+//     sortie << specificName_ << ":" << "  SOLENOID, L=" << 0.01*lenghtElem_ << ", B=" << B0_ << ";" << endl;
+//     if ( varyB0_ ) {
+//       sortie <<  "  VARY, " << specificName_+"[B]"  << ";" << endl;
+//     }
+//     return sortie.str();
+//   }
 
 string elementSoleno::FileOutputFlow() const
@@ -93,13 +93,30 @@
     ostringstream sortie;
     //    sortie << elementName_.getElementType() << endl;
-    sortie << elementName_.getElementLabel() << endl;
-    sortie  << label_ << endl;
+    sortie << elementName_.getGenericLabel() << endl;
+    sortie  << specificName_ << endl;
     sortie << lenghtElem_ << "  " << aperture_<< " "  << B0_ << " " << varyB0_ << endl;
     return sortie.str();
   }
 
+
+vector< pair<string, vector<string> > > elementSoleno::parametersToSoftware () const {
+  vector< pair<string, vector<string> > >  sortie;
+  sortie.push_back( pair<string, vector<string> >("labelsGenericSpecific",  vector<string>() ) );
+  sortie.back().second.push_back(elementName_.getGenericLabel());
+  sortie.back().second.push_back(specificName_);
+  sortie.push_back( pair<string, vector<string> >("lenghtAperture",  vector<string>() ) );
+  sortie.back().second.push_back(mixedTools::doubleToString(lenghtElem_));
+  sortie.back().second.push_back(mixedTools::doubleToString(aperture_));
+  sortie.push_back( pair<string, vector<string> >("field",  vector<string>() ) );
+  sortie.back().second.push_back(mixedTools::doubleToString(B0_));
+  sortie.push_back( pair<string, vector<string> >("isBvariable",  vector<string>() ) );
+  sortie.back().second.push_back(mixedTools::intToString(varyB0_));
+  return sortie;
+}
+
+
 void elementSoleno::FileInput(ifstream& ifs)
 {
-  ifs >> label_;
+  ifs >> specificName_;
   ifs >> lenghtElem_ >>  aperture_ >> B0_ >> varyB0_ ;
 }
@@ -109,5 +126,5 @@
     string txt = "";
 
-    txt += label_;
+    txt += specificName_;
     txt += "\nlength (cm) : ";
     txt += mixedTools::doubleToString(lenghtElem_);
Index: /Interface_Web/trunk/pspaWT/sources/controler/src/nomDeLogiciel.cc
===================================================================
--- /Interface_Web/trunk/pspaWT/sources/controler/src/nomDeLogiciel.cc	(revision 417)
+++ /Interface_Web/trunk/pspaWT/sources/controler/src/nomDeLogiciel.cc	(revision 418)
@@ -7,4 +7,5 @@
     else if ( s == "transport" ) return transport;
     else if ( s == "generator" ) return generator;
+    else if ( s == "useraction" ) return useraction;
     else if ( s == "test" ) return test;
     return unknownSoftware;
@@ -18,4 +19,5 @@
       case transport : { return "transport"; }
       case generator : { return "generator"; }
+      case useraction : { return "useraction"; }
       case test : { return "test"; }
       case unknownSoftware : { return "unknownSoftware"; }
@@ -24,7 +26,25 @@
   }
 
+    /** Color of the background of the sofware
+     Should be a valid Css name as FFEEDD
+     */
+ std::string nomDeLogiciel::getWtColor( nomDeLogiciel::Logiciel lg) const
+  {
+    switch (lg)
+      {
+      case parmela : { return "#e09bdf"; }
+      case transport : { return "#c0ea8e"; }
+      case generator : { return "#a3c0ed"; }
+      case useraction : { return "#FFFFFF"; }
+      case test : { return "#ecc38e"; }
+      case unknownSoftware : { return "#FFFFFF"; }
+      }
+    return "#FFFFFF";
+  }
+
+
  nomDeLogiciel::nomDeLogiciel()  
   {
-    program_ = transport;
+    program_ = unknownSoftware;
     progString_ = toString(program_);
     //    value_ = toValue(program_);
Index: /Interface_Web/trunk/pspaWT/sources/controler/src/nomdElements.cc
===================================================================
--- /Interface_Web/trunk/pspaWT/sources/controler/src/nomdElements.cc	(revision 417)
+++ /Interface_Web/trunk/pspaWT/sources/controler/src/nomdElements.cc	(revision 418)
@@ -4,5 +4,5 @@
 #include "nomdElements.h"
 
-typedElement nomdElements::fromString(std::string s)
+nomdElements::typedElement nomdElements::fromString(std::string s)
 {
   if( strstr(s.c_str(),"beam") ) return beam;
@@ -17,5 +17,5 @@
 }
 
-typedElement nomdElements::fromLabel(std::string s)
+nomdElements::typedElement nomdElements::fromGenericLabel(std::string s)
 {
   if( s == "beam" ) return beam;
@@ -30,5 +30,5 @@
 }
 
-std::string nomdElements::toName(typedElement eType)
+std::string nomdElements::toExpandedName(nomdElements::typedElement eType)
 {
   switch(eType) {
@@ -45,5 +45,5 @@
 }
 
-std::string nomdElements::toLabel(typedElement eType)
+std::string nomdElements::toGenericLabel(nomdElements::typedElement eType)
 {
   switch(eType) {
@@ -60,5 +60,5 @@
 }
 
-unsigned nomdElements::toNbParam(typedElement eType)
+unsigned nomdElements::toNbParam(nomdElements::typedElement eType)
 {
   switch(eType) {
@@ -79,6 +79,6 @@
 {
   e_= fromString("");
-  eName_ = toName(e_);
-  eLabel_ = toLabel(e_);
+  expandedName_ = toExpandedName(e_);
+  genericLabel_ = toGenericLabel(e_);
   nbParam_ = toNbParam(e_);
 }
@@ -87,6 +87,6 @@
 {
   e_= ne.e_;
-  eName_ = ne.eName_;
-  eLabel_ = ne.eLabel_;
+  expandedName_ = ne.expandedName_;
+  genericLabel_ = ne.genericLabel_;
   nbParam_ = ne.nbParam_;
 }
@@ -95,6 +95,6 @@
 {
   e_= ne.e_;
-  eName_ = ne.eName_;
-  eLabel_ = ne.eLabel_;
+  expandedName_ = ne.expandedName_;
+  genericLabel_ = ne.genericLabel_;
   nbParam_ = ne.nbParam_;
 }
@@ -104,14 +104,14 @@
 {
   e_= fromString(s);
-  eName_ = toName(e_);
-  eLabel_ = toLabel(e_);
+  expandedName_ = toExpandedName(e_);
+  genericLabel_ = toGenericLabel(e_);
   nbParam_ = toNbParam(e_);
 }
 
-nomdElements::nomdElements(typedElement& eType) 
+nomdElements::nomdElements(nomdElements::typedElement& eType) 
 {
   e_= eType;
-  eName_ = toName(e_);
-  eLabel_ = toLabel(e_);
+  expandedName_ = toExpandedName(e_);
+  genericLabel_ = toGenericLabel(e_);
   nbParam_ = toNbParam(e_);
 }
@@ -121,25 +121,25 @@
 }
 
-std::string nomdElements::getLabelFromType(typedElement tp)
+std::string nomdElements::getLabelFromType(nomdElements::typedElement tp)
 {
-  return toLabel(tp);
+  return toGenericLabel(tp);
 }
 
-typedElement nomdElements::getTypeFromLabel(std::string lb)
+nomdElements::typedElement nomdElements::getTypeFromLabel(std::string lb)
 {
-  return fromLabel(lb);
+  return fromGenericLabel(lb);
 }
 
 
-typedElement nomdElements::getElementType() const {
+nomdElements::typedElement nomdElements::getElementType() const {
   return e_;
 }
 
-std::string nomdElements::getElementName() const {
-  return eName_;
+std::string nomdElements::getExpandedName() const {
+  return expandedName_;
 }
 
-std::string nomdElements::getElementLabel() const {
-  return eLabel_;
+std::string nomdElements::getGenericLabel() const {
+  return genericLabel_;
 }
 
@@ -156,6 +156,6 @@
 {
   e_= ne.e_;
-  eName_ = ne.eName_;
-  eLabel_ = ne.eLabel_;
+  expandedName_ = ne.expandedName_;
+  genericLabel_ = ne.genericLabel_;
   nbParam_ = ne.nbParam_;
   return *this;
Index: /Interface_Web/trunk/pspaWT/sources/controler/src/particleBeam.cc
===================================================================
--- /Interface_Web/trunk/pspaWT/sources/controler/src/particleBeam.cc	(revision 417)
+++ /Interface_Web/trunk/pspaWT/sources/controler/src/particleBeam.cc	(revision 418)
@@ -392,4 +392,5 @@
   
   if ( index >  2 && index < 5 ) {
+    cout << " particleBeam::particlesPhaseSpaceComponent traitement vitesses " << endl;
     for (unsigned i = 0; i < relativePartic_.size(); ++i) {
       double begamz = relativePartic_.at(i).getBetaGamma().getComponent(2);
@@ -400,4 +401,5 @@
       }
     }
+    cout << " particleBeam::particlesPhaseSpaceComponent traitement vitesses TERMINE " << endl;
     return;
   }
Index: /Interface_Web/trunk/pspaWT/sources/controler/src/softwareGenerator.cc
===================================================================
--- /Interface_Web/trunk/pspaWT/sources/controler/src/softwareGenerator.cc	(revision 417)
+++ /Interface_Web/trunk/pspaWT/sources/controler/src/softwareGenerator.cc	(revision 418)
@@ -15,4 +15,5 @@
 {
   nameOfSoftware_ = nomDeLogiciel("generator");
+  registerElement(nomdElements::beam,TBoolOk);
 }
 
@@ -26,5 +27,5 @@
   elPtr = dataManager_->getElementPointerFromNumero(numeroDeb_);
 
-  if ( elPtr->getNomdElement().getElementType() != RFgun ) {
+  if ( elPtr->getNomdElement().getElementType() != nomdElements::RFgun ) {
     dataManager_->consoleMessage(" softwareGenerator::createInputFile : the element must be rfgun " );
     cerr << " softwareGenerator::createInputFile : the element must be rfgun" << endl;
@@ -45,5 +46,8 @@
   outfile << " Add=FALSE, N_add=0" << endl;
   outfile << " Species='electrons'" << endl;
-  outfile << elPtr->generatorOutputFlow() << endl;
+  //  outfile << elPtr->generatorOutputFlow() << endl;
+
+  outfile << elementsData(elPtr->parametersToSoftware()) << endl;
+
   outfile << "/" << endl;
   outfile.close();
@@ -231,2 +235,70 @@
   return true;
 }
+
+
+string softwareGenerator::elementsData(const vector< pair<string, vector<string> > >& donnees) const {
+  unsigned k;
+  cout << " PASSAGE softwareGenerator::elementsData " << endl;
+  if ( donnees.at(0).first != "labelsGenericSpecific" ) {
+    cout << " softwareGenerator::elementsData ERROR : element badly defined " << endl;
+    return string();
+  }
+  string genericName = donnees.at(0).second.at(0);
+  if ( genericName == "rfgun" ) return rfgunData(donnees);
+  return string();
+}
+
+string softwareGenerator::rfgunData(const vector< pair<string, vector<string> > >& donnees) const {
+
+  cout << " PASSAGE softwareGenerator::rfgunData " << endl;
+  string nmacrop = "0";
+  string sigma_t = "0.0";
+  string sigma_r = "0.0";
+  string emit_x = "0.0";
+  string emit_y = "0.0";
+  string E_cin = "0.0";
+  string sigma_E = "0.0";
+  string phaseStep = "0.0";
+  string totalCharge = "0.0";
+
+  unsigned k;
+  for ( k=1; k < donnees.size(); k++) {
+    if ( donnees.at(k).first == "nbMacroparticles" ) { 
+      nmacrop = donnees.at(k).second.at(0);
+    } else if ( donnees.at(k).first == "sigmasTR" ) {
+      sigma_t = donnees.at(k).second.at(0);
+      sigma_r = donnees.at(k).second.at(1);
+    } else if ( donnees.at(k).first == "emittancesXY" ) {
+      emit_x = donnees.at(k).second.at(0);
+      emit_y = donnees.at(k).second.at(1);
+    } else if ( donnees.at(k).first == "kineticE" ) {
+      E_cin = donnees.at(k).second.at(0);
+      sigma_E = donnees.at(k).second.at(1);
+    } else if ( donnees.at(k).first == "phaseStep" ) {
+      phaseStep = donnees.at(k).second.at(0);
+    } else if ( donnees.at(k).first == "totalCharge" ) {
+      totalCharge = donnees.at(k).second.at(0);
+    }
+  }
+  ostringstream sortie;
+
+
+    sortie << "Ipart=" << nmacrop << endl;
+
+    sortie << "Probe=.True." << endl;
+    sortie << "Noise_reduc=.T" << endl;
+    sortie << "Cathode=.T." << endl;
+    sortie << "Q_total=" << totalCharge << endl;
+    sortie << "Ref_zpos=0.0" << endl;
+    sortie << "Ref_clock=0.0" << endl;
+    sortie << "Ref_Ekin=" << E_cin << endl; // tjs en MeV
+    sortie << "Dist_z='g'" << endl;
+    sortie << "sig_clock=" << 1.0e-3*atof(sigma_t.c_str()) << endl; // passage de ps en ns
+    sortie <<  "Dist_pz='g', sig_Ekin=" << 1000.*atof(sigma_E.c_str()) << ",  emit_z=0.0 ,    cor_Ekin=0.0 " << endl;  // passage en keV
+    sortie << "Dist_x='gauss',  sig_x=" <<  10.*atof(sigma_r.c_str()) << endl;    // passage en mm
+    sortie << "Dist_px='g', Nemit_x=" << emit_x << ",   cor_px=0.0" << endl;
+    sortie << "Dist_y='gauss',  sig_y=" <<  10.*atof(sigma_r.c_str()) << endl;    // passage en mm
+    sortie << "Dist_py='g', Nemit_y=" << emit_y << ",   cor_py=0.0" << endl;
+ 
+  return sortie.str();
+}
Index: /Interface_Web/trunk/pspaWT/sources/controler/src/softwareParmela.cc
===================================================================
--- /Interface_Web/trunk/pspaWT/sources/controler/src/softwareParmela.cc	(revision 417)
+++ /Interface_Web/trunk/pspaWT/sources/controler/src/softwareParmela.cc	(revision 418)
@@ -6,5 +6,5 @@
 #include "dataManager.h"
 #include "mixedTools.h"
-//#include "nomDeLogiciel.h"
+
 softwareParmela::softwareParmela() : abstractSoftware()
 {
@@ -15,4 +15,11 @@
 {
   nameOfSoftware_ = nomDeLogiciel("parmela");
+  registerElement(nomdElements::RFgun,TBoolOk);
+  registerElement(nomdElements::drift,TBoolOk);
+  registerElement(nomdElements::cell,TBoolOk);
+  registerElement(nomdElements::bend,TBoolOk);
+  registerElement(nomdElements::soleno,TBoolOk);
+  registerElement(nomdElements::fit,TBoolIgnore);
+  registerElement(nomdElements::snapshot,TBoolIgnore);
 }
 
@@ -23,5 +30,5 @@
   abstractElement* elPtr = dataManager_->getElementPointerFromNumero(numeroDeb_);
 
-  bool there_is_rfgun = ( elPtr->getNomdElement().getElementType() == RFgun );
+  bool there_is_rfgun = ( elPtr->getNomdElement().getElementType() == nomdElements::RFgun );
   unsigned offsetNumElem;
   // les elements de parmela sont indexes de 1 Ã  max, s'il n'y a pas de rfgun
@@ -40,5 +47,6 @@
     abstractElement* elem = dataManager_->getElementPointerFromNumero(k);
     cout << " liste PARMELA no absolu " << k << " relatif provisoire " << relativeParmelaElementIndices_.at(curseur) << endl;
-    if ( elem->is_accepted_by_software(nameOfSoftware_) == TBoolOk ) {
+    // if ( elem->is_accepted_by_software(nameOfSoftware_) == TBoolOk ) {
+    if ( doAcceptElement(elem->getNomdElement().getElementType() )  == TBoolOk ) {
       relativeParmelaElementIndices_.at(curseur) = id;
       cout << " mis a " << id << endl;
@@ -67,5 +75,5 @@
   double initalKineticEnergy = 0.0;
   elPtr = dataManager_->getElementPointerFromNumero(numeroDeb_);
-  bool there_is_rfgun = ( elPtr->getNomdElement().getElementType() == RFgun );
+  bool there_is_rfgun = ( elPtr->getNomdElement().getElementType() == nomdElements::RFgun );
   
   if ( !there_is_rfgun ) {
@@ -88,5 +96,6 @@
   unsigned int premier = numeroDeb_ ;
   if ( there_is_rfgun ) {
-    outfile << dataManager_->getElementPointerFromNumero(numeroDeb_)->parmelaOutputFlow();
+    //    outfile << dataManager_->getElementPointerFromNumero(numeroDeb_)->parmelaOutputFlow();
+    outfile << elementsData(dataManager_->getElementPointerFromNumero(numeroDeb_)->parametersToSoftware());
     premier++;
   } else {
@@ -98,5 +107,6 @@
       elPtr = dataManager_->getElementPointerFromNumero(k);
       if (elPtr) {
-	outfile << elPtr->parmelaOutputFlow();
+	//	outfile << elPtr->parmelaOutputFlow();
+	outfile << elementsData(elPtr->parametersToSoftware());
       }
     }
@@ -185,5 +195,5 @@
 	  unsigned numeroParmel;
 	  numeroParmel = (unsigned)relativeParmelaElementIndices_.at(curseur);
-	  cout << " lecture PARMELA el no absolu " << k << " numero relatif " << numeroParmel << " nom " << elem->getNomdElement().getElementName() << endl;
+	  cout << " lecture PARMELA el no absolu " << k << " numero relatif " << numeroParmel << " nom " << elem->getNomdElement().getExpandedName() << endl;
       	// lecture sortie parmela
 	if(!beamFromParmela(workingDir,numeroParmel,freq,centroid,refPart,particles))
@@ -338,2 +348,180 @@
     return true;
 }
+
+
+string softwareParmela::elementsData(const vector< pair<string, vector<string> > >& donnees) const {
+  unsigned k;
+  cout << " PASSAGE softwareParmela::elementsData " << endl;
+  if ( donnees.at(0).first != "labelsGenericSpecific" ) {
+    cout << " softwareParmela::elementsData ERROR : element badly defined " << endl;
+    return string();
+  }
+  string genericName = donnees.at(0).second.at(0);
+  if ( genericName == "rfgun" ) return rfgunData(donnees);
+  if ( genericName == "cell" ) return cellData(donnees);
+  if ( genericName == "drift" ) return driftData(donnees);
+  if ( genericName == "solnd" ) return solenoData(donnees);
+  if ( genericName == "bend" ) return bendData(donnees);
+  return string();
+}
+
+string softwareParmela::rfgunData(const vector< pair<string, vector<string> > >& donnees) const {
+
+  cout << " PASSAGE softwareParmela::rfgunData " << endl;
+  string nmacrop = "0";
+  string sigma_t = "0.0";
+  string sigma_r = "0.0";
+  string E_cin = "0.0";
+  string sigma_E = "0.0";
+  string phaseStep = "0.0";
+  string totalCharge = "0.0";
+
+  unsigned k;
+  for ( k=1; k < donnees.size(); k++) {
+    if ( donnees.at(k).first == "nbMacroparticles" ) { 
+      nmacrop = donnees.at(k).second.at(0);
+    } else if ( donnees.at(k).first == "sigmasTR" ) {
+      sigma_t = donnees.at(k).second.at(0);
+      sigma_r = donnees.at(k).second.at(1);
+    } else if ( donnees.at(k).first == "kineticE" ) {
+      E_cin = donnees.at(k).second.at(0);
+      sigma_E = donnees.at(k).second.at(1);
+    } else if ( donnees.at(k).first == "phaseStep" ) {
+      phaseStep = donnees.at(k).second.at(0);
+    } else if ( donnees.at(k).first == "totalCharge" ) {
+      totalCharge = donnees.at(k).second.at(0);
+    }
+  }
+  ostringstream sortie;
+  // on prend les troncatures tmax et rmax Ã  3 sigmas 
+  sortie << "INPUT 10 /np=" << nmacrop << "  /sigt=" << sigma_t << endl;
+  sortie << "  /tmax=" << 3.3*atof(sigma_t.c_str()) << " /sigr=" << sigma_r << endl;
+  sortie << " /rmax=" << 3.0*atof(sigma_r.c_str()) << " /W0=" << E_cin << " /dw0=" << sigma_E << endl;
+  sortie << " /dwt=" << phaseStep << " /ran=2" << endl;
+
+  // on doit entrer le nb vrai de part. (avec signe moins)
+  sortie << "SCHEFF /beami=" << -fabs( atof(totalCharge.c_str()) )/ELECTRONANOCOULOMB << " /nprog=2 /point=-1.7"  << endl;
+ 
+  return sortie.str();
+}
+
+string softwareParmela::cellData(const vector< pair<string, vector<string> > >& donnees) const {
+  cout << " PASSAGE softwareParmela::cellData " << endl;
+
+  string lenght = "0.0";
+  string aperture = "0.0";
+  string initialPhase = "0.0";
+  string acceleratingField = "0.0";
+  string phaseStepMax = "0.0";
+  string acceleratingShapeFile = "";
+  string focusingMagFile = "";
+  string offsetMag = "0.0";
+  string scaleFactor = "0.0";
+
+  unsigned k;
+  for ( k=1; k < donnees.size(); k++) {
+    if ( donnees.at(k).first == "lenghtAperture" ) { 
+      lenght = donnees.at(k).second.at(0);
+      aperture = donnees.at(k).second.at(1);
+    } else if ( donnees.at(k).first == "phaseInitialStepmax" ) {
+      initialPhase = donnees.at(k).second.at(0);
+      phaseStepMax = donnees.at(k).second.at(1);
+    } else if ( donnees.at(k).first == "fieldValueFile" ) {
+      acceleratingField = donnees.at(k).second.at(0);
+      acceleratingShapeFile = donnees.at(k).second.at(1);
+    } else if ( donnees.at(k).first == "MagFocusingFileOffsetScale") {
+      focusingMagFile = donnees.at(k).second.at(0);
+      offsetMag = donnees.at(k).second.at(1);
+      scaleFactor = donnees.at(k).second.at(2);
+    }
+  }
+  ostringstream sortie;
+    sortie << "CELL /l=" << lenght << "  /aper=" << aperture << endl;
+    sortie << "  /iout=1  /phi0=" << initialPhase << " /E0=" << acceleratingField << endl;
+    sortie << " /nc=1 /dwtmax=" << phaseStepMax << " /sym=-1" << endl;
+    sortie << "CFIELD 1" << endl;
+    sortie << acceleratingShapeFile << endl;
+    if ( focusingMagFile != "") {
+      sortie << "POISSON /zoff=" << offsetMag << " /rmult=" << scaleFactor << endl;
+      sortie << focusingMagFile << endl;
+    }
+  return sortie.str();
+
+}
+
+string softwareParmela::driftData(const vector< pair<string, vector<string> > >& donnees) const {
+  cout << " PASSAGE softwareParmela::driftData " << endl;
+
+  string lenght = "0.0";
+  string aperture = "0.0";
+
+  unsigned k;
+  for ( k=1; k < donnees.size(); k++) {
+    if ( donnees.at(k).first == "lenghtAperture" ) { 
+      lenght = donnees.at(k).second.at(0);
+      aperture = donnees.at(k).second.at(1);
+    }
+  }
+  ostringstream sortie;
+  sortie << "DRIFT /l=" << lenght << "  /aper=" << aperture << "  /iout=1" << endl;
+  return sortie.str();
+}
+
+string softwareParmela::solenoData(const vector< pair<string, vector<string> > >& donnees) const {
+  cout << " PASSAGE softwareParmela::solenoData " << endl;
+  string lenght = "0.0";
+  string aperture = "0.0";
+  string B0 = "0.0";
+
+  unsigned k;
+  for ( k=1; k < donnees.size(); k++) {
+    if ( donnees.at(k).first == "lenghtAperture" ) { 
+      lenght = donnees.at(k).second.at(0);
+      aperture = donnees.at(k).second.at(1);
+    } else if ( donnees.at(k).first == "field" ) {
+      B0 = donnees.at(k).second.at(0);
+    }
+  }
+    ostringstream sortie;
+    // on passe l'induction magnetique en Gauss 
+    sortie << "SOLENOID /l=" << lenght << "  /aper=" << aperture << "  /iout=1 /h=" << 1000.*atof(B0.c_str())  << endl;
+    return sortie.str();
+
+}
+
+string softwareParmela::bendData(const vector< pair<string, vector<string> > >& donnees) const {
+  cout << " PASSAGE softwareParmela::bendData " << endl;
+
+  string lenght = "0.0";
+  string aperture = "0.0";
+  string angleDeg = "0.0";
+  string momentum = "0.0";
+  string beta1 = "0.0";
+  string beta2 = "0.0";
+  unsigned k;
+  for ( k=1; k < donnees.size(); k++) {
+    if ( donnees.at(k).first == "lenghtAperture" ) { 
+      lenght = donnees.at(k).second.at(0);
+      aperture = donnees.at(k).second.at(1);
+    } else if ( donnees.at(k).first == "angleDegre" ) {
+      angleDeg = donnees.at(k).second.at(0);
+    } else if ( donnees.at(k).first == "momentum" ) {
+      momentum = donnees.at(k).second.at(0);
+     } else if ( donnees.at(k).first == "rotatedFaces" ) {
+      beta1 = donnees.at(k).second.at(0);
+      beta2 = donnees.at(k).second.at(1);
+    }   
+  }
+
+  double ecin = atof(momentum.c_str())/EREST_MeV;
+    ecin = ecin*ecin + 1.;
+    ecin = EREST_MeV*(sqrt(ecin) - 1.0);
+
+    ostringstream sortie;
+    // il faut entrer l'energie cinetique
+    sortie << "BEND /l=" << lenght << "  / aper=" << aperture << "  / iout=1 / wr=" << ecin << " /alpha=" << angleDeg << " / beta1=" << beta1;
+    sortie << " / beta2=" << beta2  << endl;
+
+    return sortie.str();
+
+}
Index: /Interface_Web/trunk/pspaWT/sources/controler/src/softwareTransport.cc
===================================================================
--- /Interface_Web/trunk/pspaWT/sources/controler/src/softwareTransport.cc	(revision 417)
+++ /Interface_Web/trunk/pspaWT/sources/controler/src/softwareTransport.cc	(revision 418)
@@ -14,4 +14,10 @@
 {
   nameOfSoftware_ = nomDeLogiciel("transport");
+  registerElement(nomdElements::beam,TBoolOk);
+  registerElement(nomdElements::drift,TBoolOk);
+  registerElement(nomdElements::bend,TBoolOk);
+  registerElement(nomdElements::soleno,TBoolOk);
+  registerElement(nomdElements::fit,TBoolOk);
+  registerElement(nomdElements::snapshot,TBoolIgnore);
 }
 
@@ -52,5 +58,5 @@
 
   // Dans le cas oÃ¹ le premier element n'est pas beam
-  if ( premierEl->getNomdElement().getElementType() != beam ) {
+  if ( premierEl->getNomdElement().getElementType() != nomdElements::beam ) {
     // s'il n'y a pas faisceau courant, erreur
     if ( beamBefore == NULL ) {
@@ -85,6 +91,7 @@
     {
       elPtr = dataManager_->getElementPointerFromNumero(k);
-      cout << "debug:: element [" << k << "] " << elPtr->getNomdElement().getElementName() << endl;
-      outfile << elPtr->transportOutputFlow();
+      cout << "debug:: element [" << k << "] " << elPtr->getNomdElement().getExpandedName() << endl;
+      //      outfile << elPtr->transportOutputFlow();
+      outfile << elementsData(elPtr->parametersToSoftware());
     }
 
@@ -150,5 +157,7 @@
 
 
-      if ( ptr->is_accepted_by_software(nameOfSoftware_) != TBoolOk ) {
+      // if ( ptr->is_accepted_by_software(nameOfSoftware_) != TBoolOk ) {
+      if ( doAcceptElement(ptr->getNomdElement().getElementType())  != TBoolOk ) {
+
 	// si l'element doit etre ignore, on renvoie sur le diag precedent
 	dataManager_->updateCurrentDiagnostic(false);
@@ -241,2 +250,167 @@
   return moments.readFromTransportOutput(fichierStream);
 }
+
+string softwareTransport::elementsData(const vector< pair<string, vector<string> > >& donnees) const {
+  unsigned k;
+  cout << " PASSAGE softwareTransport::elementsData " << endl;
+  if ( donnees.at(0).first != "labelsGenericSpecific" ) {
+    cout << " softwareTransport::elementsData ERROR : element badly defined " << endl;
+    return string();
+  }
+  string genericName = donnees.at(0).second.at(0);
+  if ( genericName == "beam" ) return beamData(donnees);
+  if ( genericName == "drift" ) return driftData(donnees);
+  if ( genericName == "solnd" ) return solenoData(donnees);
+  if ( genericName == "bend" ) return bendData(donnees);
+  if ( genericName == "fit" ) return fitData(donnees);
+  return string();
+}
+
+string softwareTransport::beamData(const vector< pair<string, vector<string> > >& donnees) const {
+
+  cout << " PASSAGE softwareTransport::beamData " << endl;
+  double x = 0.0;
+  double xp = 0.0;
+  double y = 0.0;
+  double yp = 0.0;
+  double dl = 0.0;
+  double del = 0.0;
+  double p0 = 0.0;
+  string specificName = "";
+
+  unsigned k;
+  for ( k=0; k < donnees.size(); k++) {
+    if ( donnees.at(k).first == "transverseCoordinates" ) { 
+      x = atof( donnees.at(k).second.at(0).c_str() );
+      xp = atof( donnees.at(k).second.at(1).c_str() );
+      y = atof( donnees.at(k).second.at(2).c_str() );
+      yp = atof( donnees.at(k).second.at(3).c_str() );
+    } else if ( donnees.at(k).first == "longitudinalCoordinates" ) {
+      dl = atof( donnees.at(k).second.at(0).c_str() );
+      del = atof( donnees.at(k).second.at(1).c_str() );
+    } else if ( donnees.at(k).first == "momentum" ) {
+      p0 = atof( donnees.at(k).second.at(0).c_str() );
+    } else if ( donnees.at(k).first == "labelsGenericSpecific" ) {
+      specificName = donnees.at(k).second.at(1);
+    }
+  }
+  ostringstream sortie;
+    beam2Moments moments(x, xp, y, yp, dl, del);
+    sortie << specificName << ":" << moments.writeToTransportInput(p0) << endl;
+    return sortie.str(); 
+  return sortie.str();
+}
+
+string softwareTransport::driftData(const vector< pair<string, vector<string> > >& donnees) const {
+  cout << " PASSAGE softwareTransport::driftData " << endl;
+
+  string lenght = "0.0";
+  string specificName = "";
+
+  unsigned k;
+  for ( k=0; k < donnees.size(); k++) {
+    if ( donnees.at(k).first == "lenghtAperture" ) { 
+      lenght = donnees.at(k).second.at(0);
+    } else if ( donnees.at(k).first == "labelsGenericSpecific" ) {
+      specificName = donnees.at(k).second.at(1);
+    }
+  }
+  ostringstream sortie;
+    // longueur en m
+  sortie << specificName << ":" << "  DRIFT, L=" << 0.01*atof(lenght.c_str()) << ";" << endl;
+  return sortie.str();
+}
+
+
+string softwareTransport::solenoData(const vector< pair<string, vector<string> > >& donnees) const {
+  cout << " softwareTransport::solenoData " << endl;
+  string lenght = "0.0";
+  string B0 = "0.0";
+  string varyB0 = "0";
+  string specificName = "";
+
+
+  unsigned k;
+  for ( k=0; k < donnees.size(); k++) {
+    if ( donnees.at(k).first == "lenghtAperture" ) { 
+      lenght = donnees.at(k).second.at(0);
+    } else if ( donnees.at(k).first == "field" ) {
+      B0 = donnees.at(k).second.at(0);
+    } else if ( donnees.at(k).first == "isBvariable" ) {
+      varyB0 = donnees.at(k).second.at(0);
+    } else if ( donnees.at(k).first == "labelsGenericSpecific" ) {
+      specificName = donnees.at(k).second.at(1);
+    }
+  }
+    ostringstream sortie;
+    // on passe la longueur en metres 
+    sortie << specificName << ":" << "  SOLENOID, L=" << 0.01*atof (lenght.c_str()) << ", B=" << B0 << ";" << endl;
+    if ( atoi(varyB0.c_str()) ) {
+      sortie <<  "  VARY, " << specificName+"[B]"  << ";" << endl;
+    }
+    return sortie.str();
+
+}
+
+
+string softwareTransport::bendData(const vector< pair<string, vector<string> > >& donnees) const {
+
+  cout << " softwareTransport::bendData " << endl;
+
+  string lenght = "0.0";
+  string radius = "0.0";
+  string angleDeg = "0.0";
+  string beta1 = "0.0";
+  string beta2 = "0.0";
+
+
+
+  string specificName = "";
+
+  unsigned k;
+  for ( k=0; k < donnees.size(); k++) {
+    if ( donnees.at(k).first == "lenghtAperture" ) { 
+      lenght = donnees.at(k).second.at(0);
+    } else if ( donnees.at(k).first == "angleDegre" ) {
+      angleDeg = donnees.at(k).second.at(0);
+    } else if ( donnees.at(k).first == "radius" ) {
+      radius = donnees.at(k).second.at(0);
+     } else if ( donnees.at(k).first == "rotatedFaces" ) {
+      beta1 = donnees.at(k).second.at(0);
+      beta2 = donnees.at(k).second.at(1);
+    } else if ( donnees.at(k).first == "labelsGenericSpecific" ) {
+      specificName = donnees.at(k).second.at(1);
+    }   
+  }
+
+    ostringstream sortie;
+    sortie << specificName << ":" << "  SBEND, RADIUS=" << radius << ", ANGLE=" << angleDeg << ", E1=" << beta1 << ", E2=" << beta2 << ";" << endl;
+    return sortie.str();
+
+}
+
+
+string softwareTransport::fitData(const vector< pair<string, vector<string> > >& donnees) const {
+  cout << " softwareTransport::fitData " << endl;
+  string variableName = "";
+  string variableValue = "0.0";
+  string tolerance = "0.0";
+  string specificName = "";
+
+  unsigned k;
+  for ( k=0; k < donnees.size(); k++) {
+    if ( donnees.at(k).first == "variable") { 
+      variableName = donnees.at(k).second.at(0);
+      variableValue = donnees.at(k).second.at(1);
+      tolerance = donnees.at(k).second.at(2);
+    } else if ( donnees.at(k).first == "labelsGenericSpecific" ) {
+      specificName = donnees.at(k).second.at(1);
+    }   
+  }
+    ostringstream sortie;
+    sortie << specificName << ":" << "  FIT," << variableName << " = " << variableValue << ", TOLER = " << tolerance << " ;" << endl;
+    if ( variableName == "R11" || variableName == "R22" || variableName == "R12" || variableName == "R21" ) {
+        sortie << " PRINT, TRANS;" << endl;
+    }
+    return sortie.str();
+}
Index: /Interface_Web/trunk/pspaWT/sources/userInterface/include/GWt_elementLigneFaisceau.h
===================================================================
--- /Interface_Web/trunk/pspaWT/sources/userInterface/include/GWt_elementLigneFaisceau.h	(revision 417)
+++ /Interface_Web/trunk/pspaWT/sources/userInterface/include/GWt_elementLigneFaisceau.h	(revision 418)
@@ -33,5 +33,5 @@
     
     GWt_elementLigneFaisceau(PspaApplication*);
-    GWt_elementLigneFaisceau(typedElement,PspaApplication*);
+    GWt_elementLigneFaisceau(nomdElements::typedElement,PspaApplication*);
     
     ~GWt_elementLigneFaisceau();
@@ -68,5 +68,5 @@
     void removeDone(GWt_abstractElement*);
     std::string getElementNumberInBeamLine(nomdElements el);
-    void initialize_ligneFaisceau(typedElement eType);
+    void initialize_ligneFaisceau(nomdElements::typedElement eType);
     void mouseWentOut();
     void mouseWentOver();
Index: /Interface_Web/trunk/pspaWT/sources/userInterface/include/GWt_ligneFaisceau.h
===================================================================
--- /Interface_Web/trunk/pspaWT/sources/userInterface/include/GWt_ligneFaisceau.h	(revision 417)
+++ /Interface_Web/trunk/pspaWT/sources/userInterface/include/GWt_ligneFaisceau.h	(revision 418)
@@ -43,6 +43,6 @@
      and we center everything
      */
-    GWt_abstractElement* addElement(typedElement eType, GWt_dropZoneLigneFaisceau* dropContainer);
-    GWt_abstractElement* addElement(typedElement eType);
+    GWt_abstractElement* addElement(nomdElements::typedElement eType, GWt_dropZoneLigneFaisceau* dropContainer);
+    GWt_abstractElement* addElement(nomdElements::typedElement eType);
     
     void removeElement(GWt_abstractElement*);
@@ -55,8 +55,8 @@
     abstractElement* getAbstractElement(int i);
 
-    /** return the index of the abstract element 
+    /** return the numero (1.. infty)  of the abstract element 
      @param : label of this abstractElement in the beam line
      */
-    int getAbstractElementIndexFromLabel(std::string str);
+    int getAbstractElementNumeroFromLabel(std::string txt);
 
     //    void restoreElementCollectionFromDataManager();
Index: /Interface_Web/trunk/pspaWT/sources/userInterface/src/GWt_abstractElement.cc
===================================================================
--- /Interface_Web/trunk/pspaWT/sources/userInterface/src/GWt_abstractElement.cc	(revision 417)
+++ /Interface_Web/trunk/pspaWT/sources/userInterface/src/GWt_abstractElement.cc	(revision 418)
@@ -53,5 +53,5 @@
       if ( static_cast<GWt_console*> (wApp->findWidget ("console"))) {
 	GWt_console* console = static_cast<GWt_console*> (wApp->findWidget ("console"));
-	console->addConsoleMessage(" GWt_abstractElement::beginDialog : empty parameter set for element " + abstractElement_->getNomdElement().getElementName());
+	console->addConsoleMessage(" GWt_abstractElement::beginDialog : empty parameter set for element " + abstractElement_->getNomdElement().getExpandedName());
         }
     }
@@ -64,9 +64,9 @@
         if ( static_cast<GWt_console*> (wApp->findWidget ("console"))) {
 	  GWt_console* console = static_cast<GWt_console*> (wApp->findWidget ("console"));
-	  console->addConsoleMessage(" element seems not to be a " + abstractElement_->getNomdElement().getElementName());
+	  console->addConsoleMessage(" element seems not to be a " + abstractElement_->getNomdElement().getExpandedName());
         }
     }
   
-  dialog_ = new WDialog("element " + abstractElement_->getNomdElement().getElementName());
+  dialog_ = new WDialog("element " + abstractElement_->getNomdElement().getExpandedName());
     new WText(" label of the element : ",dialog_->contents());
     //  labelEdit_ = new WLineEdit(param[++compteur].c_str(), dialog_->contents());
Index: /Interface_Web/trunk/pspaWT/sources/userInterface/src/GWt_dropZoneLigneFaisceau.cc
===================================================================
--- /Interface_Web/trunk/pspaWT/sources/userInterface/src/GWt_dropZoneLigneFaisceau.cc	(revision 417)
+++ /Interface_Web/trunk/pspaWT/sources/userInterface/src/GWt_dropZoneLigneFaisceau.cc	(revision 418)
@@ -71,5 +71,5 @@
   // get the type of element
   nomdElements e(evt.mimeType());
-  typedElement eType = e.getElementType();
+  nomdElements::typedElement eType = e.getElementType();
   ligneFaisceau->addElement(eType, this);
 }
Index: /Interface_Web/trunk/pspaWT/sources/userInterface/src/GWt_elementLigneFaisceau.cc
===================================================================
--- /Interface_Web/trunk/pspaWT/sources/userInterface/src/GWt_elementLigneFaisceau.cc	(revision 417)
+++ /Interface_Web/trunk/pspaWT/sources/userInterface/src/GWt_elementLigneFaisceau.cc	(revision 418)
@@ -35,9 +35,9 @@
     pspa_(pspa)
 {
-  initialize_ligneFaisceau(inconnu);
-}
-
-
-GWt_elementLigneFaisceau::GWt_elementLigneFaisceau(typedElement type,PspaApplication* pspa)
+  initialize_ligneFaisceau(nomdElements::inconnu);
+}
+
+
+GWt_elementLigneFaisceau::GWt_elementLigneFaisceau(nomdElements::typedElement type,PspaApplication* pspa)
   : WContainerWidget(),
     firstTimeInsertMessage_(NULL),
@@ -53,5 +53,5 @@
 }
 
-void GWt_elementLigneFaisceau::initialize_ligneFaisceau(typedElement eType)
+void GWt_elementLigneFaisceau::initialize_ligneFaisceau(nomdElements::typedElement eType)
 {   
   cout<<"new GWt_elementLigneFaisceau : "<< this << endl;
@@ -62,5 +62,4 @@
   //     +----------+--------+---------+
   
-    
   WGridLayout *gridLayout = new WGridLayout();
     
@@ -94,26 +93,26 @@
     
   switch (  eType ) {
-  case RFgun :
+  case nomdElements::RFgun :
     GWt_abstractElement_ = new GWt_rfgun(this);
     break;
-  case drift :
+  case nomdElements::drift :
     GWt_abstractElement_ = new GWt_drift(this);
     break;
-  case cell  :
+  case nomdElements::cell  :
     GWt_abstractElement_ = new GWt_cell(this);
     break;
-  case bend  :
+  case nomdElements::bend  :
     GWt_abstractElement_ = new GWt_bend(this);
     break;
-  case soleno  :
+  case nomdElements::soleno  :
     GWt_abstractElement_ = new GWt_soleno(this);
     break;
-  case beam  :
+  case nomdElements::beam  :
     GWt_abstractElement_ = new GWt_beam(this);
     break;
-  case fit  :
+  case nomdElements::fit  :
     GWt_abstractElement_ = new GWt_fit(this);
     break;
-  case snapshot :
+  case nomdElements::snapshot :
     {
       int incr = pspa_->getExtensionFile();
@@ -123,5 +122,5 @@
       break;
     }
-  case inconnu :
+  case nomdElements::inconnu :
     GWt_abstractElement_ = NULL;
   }
@@ -207,5 +206,6 @@
   if (getGWt_AbstractElement()->getAbstractElement()) {
     if (getGWt_AbstractElement()->getAbstractElement()->getAbstractSoftware()) {
-      setBGColor(WColor(getGWt_AbstractElement()->getAbstractElement()->getAbstractSoftware()->getColor()));
+      //      setBGColor(WColor(getGWt_AbstractElement()->getAbstractElement()->getAbstractSoftware()->getColor()));
+      setBGColor(WColor(getGWt_AbstractElement()->getAbstractElement()->getAbstractSoftware()->getNomDeLogiciel()->getColor()));
       softwareName_->setText(getGWt_AbstractElement()->getAbstractElement()->getAbstractSoftware()->getName());
 
@@ -278,7 +278,7 @@
     
     if(n < 10) {
-      str= elem.getElementLabel()+"0"+number;
+      str= elem.getGenericLabel()+"0"+number;
     } else {
-      str= elem.getElementLabel()+number;
+      str= elem.getGenericLabel()+number;
     }
   }
Index: /Interface_Web/trunk/pspaWT/sources/userInterface/src/GWt_ligneFaisceau.cc
===================================================================
--- /Interface_Web/trunk/pspaWT/sources/userInterface/src/GWt_ligneFaisceau.cc	(revision 417)
+++ /Interface_Web/trunk/pspaWT/sources/userInterface/src/GWt_ligneFaisceau.cc	(revision 418)
@@ -51,9 +51,9 @@
 
 
-GWt_abstractElement* GWt_LigneFaisceau::addElement(typedElement eType){
+GWt_abstractElement* GWt_LigneFaisceau::addElement(nomdElements::typedElement eType){
   return addElement(eType,NULL);
 }
 
-GWt_abstractElement* GWt_LigneFaisceau::addElement(typedElement eType, GWt_dropZoneLigneFaisceau* dropContainer )
+GWt_abstractElement* GWt_LigneFaisceau::addElement(nomdElements::typedElement eType, GWt_dropZoneLigneFaisceau* dropContainer )
 {
 
@@ -66,5 +66,5 @@
   // -dropContainer is NULL, insert in the last element
   
-  if(eType == inconnu) {
+  if(eType == nomdElements::inconnu) {
     cout << "GWt_LigneFaisceau::element type " << eType << " inconnu " << endl;
     return NULL;
@@ -222,6 +222,7 @@
 
 
-int GWt_LigneFaisceau::getAbstractElementIndexFromLabel(std::string txt){
-    int index = 0;
+
+int GWt_LigneFaisceau::getAbstractElementNumeroFromLabel(std::string txt){
+    int index = 1;
     if (txt == "") {
         return NULL;
@@ -246,4 +247,6 @@
 
 
+
+
 int GWt_LigneFaisceau::getBeamLineSize() {
   int count = 0;
@@ -289,7 +292,8 @@
   vector <abstractElement*> elems = getAllAbstractElements();
     for (int a=0; a< elems.size(); a++) {
-        elems[a]->setSoftware(nomDeLogiciel::unknownSoftware);
-    }
-}
-
-
+      //     elems[a]->setSoftware(nomDeLogiciel::unknownSoftware);
+      elems[a]->setSoftware( NULL );
+    }
+}
+
+
Index: /Interface_Web/trunk/pspaWT/sources/userInterface/src/GWt_pspaApplication.cc
===================================================================
--- /Interface_Web/trunk/pspaWT/sources/userInterface/src/GWt_pspaApplication.cc	(revision 417)
+++ /Interface_Web/trunk/pspaWT/sources/userInterface/src/GWt_pspaApplication.cc	(revision 418)
@@ -617,5 +617,7 @@
     seriesType = PointSeries;
     titre = " phase space ";
+    cout << " PspaApplication::faireDessinPhaseSpace APPEL " << endl;
     beam->particlesPhaseSpaceData(xcor,ycor,legende,namex,namey);
+    cout << " PspaApplication::faireDessinPhaseSpace RETOUR " << endl;
   } else {
     GWt_dialog warningBeamState(" graphical analysis", "the beam state does not allow providing a drawing with macroparticles !", GWt_dialog::Error, false,true);
@@ -882,5 +884,4 @@
   WCartesianChart *chart = new WCartesianChart(toto);
   if (!makeIcon) chart->setTitle(title);
-
   chart->initLayout();  
   chart->setModel(model);        // set the model
@@ -931,5 +932,5 @@
     chart->axis(YAxis).setLabelFont(yAxisFont);
   }
-  
+
 #ifdef HAS_IMAGEMAGIC
   // no background
@@ -950,6 +951,5 @@
 */
   
-//  Wt::WPdfImage pdfImage("1000", "600");
-  WPdfImage pdfImage("1000", "600");
+  Wt::WPdfImage pdfImage("1000", "600");
   {
    Wt::WPainter p1(&pdfImage);
@@ -963,4 +963,5 @@
 
 #endif
+
 }
 
Index: /Interface_Web/trunk/pspaWT/sources/userInterface/src/GWt_serverFileSelector.cc
===================================================================
--- /Interface_Web/trunk/pspaWT/sources/userInterface/src/GWt_serverFileSelector.cc	(revision 417)
+++ /Interface_Web/trunk/pspaWT/sources/userInterface/src/GWt_serverFileSelector.cc	(revision 418)
@@ -53,5 +53,5 @@
     Wt::WTreeNode* treeFileRoot = new Wt::WTreeNode("Workspace", folderIcon);
 
-    treeFileRoot->setStyleClass("example-tree");
+    //    treeFileRoot->setStyleClass("example-tree");
     treeRoot_->setTreeRoot(treeFileRoot);
     treeFileRoot->label()->setTextFormat(Wt::PlainText);
Index: /Interface_Web/trunk/pspaWT/sources/userInterface/src/GWt_softwarePanel.cc
===================================================================
--- /Interface_Web/trunk/pspaWT/sources/userInterface/src/GWt_softwarePanel.cc	(revision 417)
+++ /Interface_Web/trunk/pspaWT/sources/userInterface/src/GWt_softwarePanel.cc	(revision 418)
@@ -329,48 +329,55 @@
   
   for (int a = 0; a< sections_.size(); a++)
-  {
-    string debString = sections_[a]->getFirstElementCurrentText().toUTF8();
-    string finString = sections_[a]->getLastElementCurrentText().toUTF8();
-    
-    int debut = pspa_->getBeamLine()->getAbstractElementIndexFromLabel(debString)+1; // FIXME : Should NOT be +1
-    int fin = pspa_->getBeamLine()->getAbstractElementIndexFromLabel(finString)+1; // FIXME : Should NOT be +1
-    
-    nomDeLogiciel prog = nomDeLogiciel ( sections_[a]->getSoftwareCurrentText().toUTF8());
-    dtmanage_->addSectionToExecute(pspa_->getBeamLine()->getAbstractElement(debut),
-                                   debut,
-                                   pspa_->getBeamLine()->getAbstractElement(fin),
-                                   fin,
-                                   dtmanage_->createSoftwareConnexion(prog));
-    
-    diagnosticErrors = "";
-    diagnosticWarnings = "";
-
-    // check sections
-    for (int i=debut-1; i<fin; i++) {
-      if (pspa_->getBeamLine()) {
-        if (pspa_->getBeamLine()->getAbstractElement(i)) {
-          trivaluedBool tb = pspa_->getBeamLine()->getAbstractElement(i)->setSoftware(prog.getString());
-          if (tb  == TBoolError ) {
-	    // j'insiste pour remettre le nom generique de l'element refuse (glm / 30/03/2013)
-            diagnosticErrors += pspa_->getBeamLine()->getAbstractElement(i)->getNomdElement().getElementName() + " is not allowed with "+ prog.getString()+"<br /> ";
-
-            caMarche = false;
-
-            // intialize thissoftware
-            pspa_->getBeamLine()->getAbstractElement(i)->setSoftware(nomDeLogiciel::unknownSoftware);
-
-          } else if ( tb == TBoolIgnore ) {
-            diagnosticWarnings += pspa_->getBeamLine()->getAbstractElement(i)->getLabel() + " will be ignored by  "+ prog.getString()+"<br /> ";
-            
-
-          }
-          pspa_->getBeamLine()->update(i);
-        }
+    {
+      string debString = sections_[a]->getFirstElementCurrentText().toUTF8();
+      string finString = sections_[a]->getLastElementCurrentText().toUTF8();
+    
+      // int debut = pspa_->getBeamLine()->getAbstractElementIndexFromLabel(debString)+1; // FIXME : Should NOT be +1
+      // int fin = pspa_->getBeamLine()->getAbstractElementIndexFromLabel(finString)+1; // FIXME : Should NOT be +1
+
+      int debut = pspa_->getBeamLine()->getAbstractElementNumeroFromLabel(debString);
+      int fin = pspa_->getBeamLine()->getAbstractElementNumeroFromLabel(finString);
+    
+      nomDeLogiciel prog = nomDeLogiciel ( sections_[a]->getSoftwareCurrentText().toUTF8());
+      abstractSoftware* softToExec = dtmanage_->createSoftwareConnexion(prog);
+      dtmanage_->addSectionToExecute(pspa_->getBeamLine()->getAbstractElement(debut),
+				     debut,
+				     pspa_->getBeamLine()->getAbstractElement(fin),
+				     fin,
+				     softToExec);
+    
+      diagnosticErrors = "";
+      diagnosticWarnings = "";
+
+      // check sections
+      for (int i=debut-1; i<fin; i++) {
+	if (pspa_->getBeamLine()) {
+	  if (pspa_->getBeamLine()->getAbstractElement(i)) {
+	    //         trivaluedBool tb = pspa_->getBeamLine()->getAbstractElement(i)->setSoftware(prog.getString());
+
+
+	    trivaluedBool tb = softToExec->doAcceptElement(pspa_->getBeamLine()->getAbstractElement(i)->getNomdElement().getElementType() );
+
+	    if (tb  == TBoolOk ) {
+	      pspa_->getBeamLine()->getAbstractElement(i)->setSoftware(softToExec);
+	    } else {
+	      pspa_->getBeamLine()->getAbstractElement(i)->setSoftware( NULL );
+
+	      if ( tb == TBoolIgnore ) {
+		diagnosticWarnings += pspa_->getBeamLine()->getAbstractElement(i)->getLabel() + " will be ignored by  "+ prog.getString()+"<br /> ";           
+	      } else {
+		// j'insiste pour remettre le nom generique de l'element refuse (glm / 30/03/2013)
+		diagnosticErrors += pspa_->getBeamLine()->getAbstractElement(i)->getNomdElement().getExpandedName() + " is not allowed with "+ prog.getString()+"<br /> ";
+		caMarche = false;
+	      }
+	    }
+	    pspa_->getBeamLine()->update(i);
+	  }
+	}
       }
-    }
-    // set errors and warnings
-    sections_[a]->setErrors(diagnosticErrors);
-    sections_[a]->setWarnings(diagnosticWarnings);
-  }
+      // set errors and warnings
+      sections_[a]->setErrors(diagnosticErrors);
+      sections_[a]->setWarnings(diagnosticWarnings);
+    }
     
   return caMarche;
