Ignore:
Timestamp:
Jun 21, 2013, 10:16:56 AM (11 years ago)
Author:
lemeur
Message:

definition des compatibilites des elements dans les software

File:
1 edited

Legend:

Unmodified
Added
Removed
  • Interface_Web/trunk/pspaWT/sources/controler/src/softwareTransport.cc

    r413 r418  
    1414{
    1515  nameOfSoftware_ = nomDeLogiciel("transport");
     16  registerElement(nomdElements::beam,TBoolOk);
     17  registerElement(nomdElements::drift,TBoolOk);
     18  registerElement(nomdElements::bend,TBoolOk);
     19  registerElement(nomdElements::soleno,TBoolOk);
     20  registerElement(nomdElements::fit,TBoolOk);
     21  registerElement(nomdElements::snapshot,TBoolIgnore);
    1622}
    1723
     
    5258
    5359  // Dans le cas où le premier element n'est pas beam
    54   if ( premierEl->getNomdElement().getElementType() != beam ) {
     60  if ( premierEl->getNomdElement().getElementType() != nomdElements::beam ) {
    5561    // s'il n'y a pas faisceau courant, erreur
    5662    if ( beamBefore == NULL ) {
     
    8591    {
    8692      elPtr = dataManager_->getElementPointerFromNumero(k);
    87       cout << "debug:: element [" << k << "] " << elPtr->getNomdElement().getElementName() << endl;
    88       outfile << elPtr->transportOutputFlow();
     93      cout << "debug:: element [" << k << "] " << elPtr->getNomdElement().getExpandedName() << endl;
     94      //      outfile << elPtr->transportOutputFlow();
     95      outfile << elementsData(elPtr->parametersToSoftware());
    8996    }
    9097
     
    150157
    151158
    152       if ( ptr->is_accepted_by_software(nameOfSoftware_) != TBoolOk ) {
     159      // if ( ptr->is_accepted_by_software(nameOfSoftware_) != TBoolOk ) {
     160      if ( doAcceptElement(ptr->getNomdElement().getElementType())  != TBoolOk ) {
     161
    153162        // si l'element doit etre ignore, on renvoie sur le diag precedent
    154163        dataManager_->updateCurrentDiagnostic(false);
     
    241250  return moments.readFromTransportOutput(fichierStream);
    242251}
     252
     253string softwareTransport::elementsData(const vector< pair<string, vector<string> > >& donnees) const {
     254  unsigned k;
     255  cout << " PASSAGE softwareTransport::elementsData " << endl;
     256  if ( donnees.at(0).first != "labelsGenericSpecific" ) {
     257    cout << " softwareTransport::elementsData ERROR : element badly defined " << endl;
     258    return string();
     259  }
     260  string genericName = donnees.at(0).second.at(0);
     261  if ( genericName == "beam" ) return beamData(donnees);
     262  if ( genericName == "drift" ) return driftData(donnees);
     263  if ( genericName == "solnd" ) return solenoData(donnees);
     264  if ( genericName == "bend" ) return bendData(donnees);
     265  if ( genericName == "fit" ) return fitData(donnees);
     266  return string();
     267}
     268
     269string softwareTransport::beamData(const vector< pair<string, vector<string> > >& donnees) const {
     270
     271  cout << " PASSAGE softwareTransport::beamData " << endl;
     272  double x = 0.0;
     273  double xp = 0.0;
     274  double y = 0.0;
     275  double yp = 0.0;
     276  double dl = 0.0;
     277  double del = 0.0;
     278  double p0 = 0.0;
     279  string specificName = "";
     280
     281  unsigned k;
     282  for ( k=0; k < donnees.size(); k++) {
     283    if ( donnees.at(k).first == "transverseCoordinates" ) {
     284      x = atof( donnees.at(k).second.at(0).c_str() );
     285      xp = atof( donnees.at(k).second.at(1).c_str() );
     286      y = atof( donnees.at(k).second.at(2).c_str() );
     287      yp = atof( donnees.at(k).second.at(3).c_str() );
     288    } else if ( donnees.at(k).first == "longitudinalCoordinates" ) {
     289      dl = atof( donnees.at(k).second.at(0).c_str() );
     290      del = atof( donnees.at(k).second.at(1).c_str() );
     291    } else if ( donnees.at(k).first == "momentum" ) {
     292      p0 = atof( donnees.at(k).second.at(0).c_str() );
     293    } else if ( donnees.at(k).first == "labelsGenericSpecific" ) {
     294      specificName = donnees.at(k).second.at(1);
     295    }
     296  }
     297  ostringstream sortie;
     298    beam2Moments moments(x, xp, y, yp, dl, del);
     299    sortie << specificName << ":" << moments.writeToTransportInput(p0) << endl;
     300    return sortie.str();
     301  return sortie.str();
     302}
     303
     304string softwareTransport::driftData(const vector< pair<string, vector<string> > >& donnees) const {
     305  cout << " PASSAGE softwareTransport::driftData " << endl;
     306
     307  string lenght = "0.0";
     308  string specificName = "";
     309
     310  unsigned k;
     311  for ( k=0; k < donnees.size(); k++) {
     312    if ( donnees.at(k).first == "lenghtAperture" ) {
     313      lenght = donnees.at(k).second.at(0);
     314    } else if ( donnees.at(k).first == "labelsGenericSpecific" ) {
     315      specificName = donnees.at(k).second.at(1);
     316    }
     317  }
     318  ostringstream sortie;
     319    // longueur en m
     320  sortie << specificName << ":" << "  DRIFT, L=" << 0.01*atof(lenght.c_str()) << ";" << endl;
     321  return sortie.str();
     322}
     323
     324
     325string softwareTransport::solenoData(const vector< pair<string, vector<string> > >& donnees) const {
     326  cout << " softwareTransport::solenoData " << endl;
     327  string lenght = "0.0";
     328  string B0 = "0.0";
     329  string varyB0 = "0";
     330  string specificName = "";
     331
     332
     333  unsigned k;
     334  for ( k=0; k < donnees.size(); k++) {
     335    if ( donnees.at(k).first == "lenghtAperture" ) {
     336      lenght = donnees.at(k).second.at(0);
     337    } else if ( donnees.at(k).first == "field" ) {
     338      B0 = donnees.at(k).second.at(0);
     339    } else if ( donnees.at(k).first == "isBvariable" ) {
     340      varyB0 = donnees.at(k).second.at(0);
     341    } else if ( donnees.at(k).first == "labelsGenericSpecific" ) {
     342      specificName = donnees.at(k).second.at(1);
     343    }
     344  }
     345    ostringstream sortie;
     346    // on passe la longueur en metres
     347    sortie << specificName << ":" << "  SOLENOID, L=" << 0.01*atof (lenght.c_str()) << ", B=" << B0 << ";" << endl;
     348    if ( atoi(varyB0.c_str()) ) {
     349      sortie <<  "  VARY, " << specificName+"[B]"  << ";" << endl;
     350    }
     351    return sortie.str();
     352
     353}
     354
     355
     356string softwareTransport::bendData(const vector< pair<string, vector<string> > >& donnees) const {
     357
     358  cout << " softwareTransport::bendData " << endl;
     359
     360  string lenght = "0.0";
     361  string radius = "0.0";
     362  string angleDeg = "0.0";
     363  string beta1 = "0.0";
     364  string beta2 = "0.0";
     365
     366
     367
     368  string specificName = "";
     369
     370  unsigned k;
     371  for ( k=0; k < donnees.size(); k++) {
     372    if ( donnees.at(k).first == "lenghtAperture" ) {
     373      lenght = donnees.at(k).second.at(0);
     374    } else if ( donnees.at(k).first == "angleDegre" ) {
     375      angleDeg = donnees.at(k).second.at(0);
     376    } else if ( donnees.at(k).first == "radius" ) {
     377      radius = donnees.at(k).second.at(0);
     378     } else if ( donnees.at(k).first == "rotatedFaces" ) {
     379      beta1 = donnees.at(k).second.at(0);
     380      beta2 = donnees.at(k).second.at(1);
     381    } else if ( donnees.at(k).first == "labelsGenericSpecific" ) {
     382      specificName = donnees.at(k).second.at(1);
     383    }   
     384  }
     385
     386    ostringstream sortie;
     387    sortie << specificName << ":" << "  SBEND, RADIUS=" << radius << ", ANGLE=" << angleDeg << ", E1=" << beta1 << ", E2=" << beta2 << ";" << endl;
     388    return sortie.str();
     389
     390}
     391
     392
     393string softwareTransport::fitData(const vector< pair<string, vector<string> > >& donnees) const {
     394  cout << " softwareTransport::fitData " << endl;
     395  string variableName = "";
     396  string variableValue = "0.0";
     397  string tolerance = "0.0";
     398  string specificName = "";
     399
     400  unsigned k;
     401  for ( k=0; k < donnees.size(); k++) {
     402    if ( donnees.at(k).first == "variable") {
     403      variableName = donnees.at(k).second.at(0);
     404      variableValue = donnees.at(k).second.at(1);
     405      tolerance = donnees.at(k).second.at(2);
     406    } else if ( donnees.at(k).first == "labelsGenericSpecific" ) {
     407      specificName = donnees.at(k).second.at(1);
     408    }   
     409  }
     410    ostringstream sortie;
     411    sortie << specificName << ":" << "  FIT," << variableName << " = " << variableValue << ", TOLER = " << tolerance << " ;" << endl;
     412    if ( variableName == "R11" || variableName == "R22" || variableName == "R12" || variableName == "R21" ) {
     413        sortie << " PRINT, TRANS;" << endl;
     414    }
     415    return sortie.str();
     416}
Note: See TracChangeset for help on using the changeset viewer.