Changeset 353 in PSPA for Interface_Web/trunk


Ignore:
Timestamp:
Mar 1, 2013, 2:42:36 PM (11 years ago)
Author:
touze
Message:

gestion de l'icone snapshot

Location:
Interface_Web/trunk/pspaWT/sources/controler/src
Files:
2 edited

Legend:

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

    r342 r353  
    1313{;}
    1414
    15 bool softwareParmela::createInputFile( particleBeam* beamBefore, unsigned int numeroDeb, unsigned int numeroFin, string workingDir)
     15bool softwareParmela::createInputFile(particleBeam* beamBefore,unsigned int numeroDeb,unsigned int numeroFin,string workingDir)
    1616{
    1717  unsigned int k;
     
    2323  }
    2424
     25  string name = workingDir + inputFileName_;
    2526  ofstream outfile;
    26   string name = workingDir + inputFileName_;
    2727  outfile.open(name.c_str(), ios::out);
    2828  if (!outfile) {
     
    3636  elPtr = dataManager_->getElementPointerFromNumero(numeroDeb);
    3737  bool there_is_rfgun = ( elPtr->getNomdElement().getElementType() == RFgun );
     38 
    3839  if ( !there_is_rfgun ) {
    39     if ( !beamToParmela(workingDir, beamBefore ) ) return false;
     40    string nameOfInput = workingDir + "parin.input0";
     41    if ( !beamToParmela(nameOfInput,beamBefore) ) return false;
    4042    initalKineticEnergy = beamBefore->referenceKineticEnergyMeV();
    41         // les elements de parmela sont indexes de 1 à max, s'in n'y a pas de rfgun
     43    // les elements de parmela sont indexes de 1 à max, s'il n'y a pas de rfgun
    4244    offsetNumElem_ = numeroDeb -1;
    43   }
    44   else {
     45  } else {
    4546    elPtr->setPhaseStep( globParamPtr_->getIntegrationStep() );
    4647    initalKineticEnergy = elPtr->getInitialKineticEnergy();
    47         // les elements de parmela sont indexes de 0 à max, s'il y a un rfgun
     48    // les elements de parmela sont indexes de 0 à max, s'il y a un rfgun
    4849    offsetNumElem_ = numeroDeb;
    4950  }
    5051
    51  
    5252  outfile << "TITLE" << endl;
    5353  outfile << " titre provisoire " << endl;
     
    5656  unsigned int premier = numeroDeb ;
    5757  if ( there_is_rfgun ) {
    58       outfile << dataManager_->getElementPointerFromNumero(numeroDeb)->parmelaOutputFlow() << endl;
    59       premier++;
     58    outfile << dataManager_->getElementPointerFromNumero(numeroDeb)->parmelaOutputFlow() << endl;
     59    premier++;
    6060  } else {
    6161    outfile << "INPUT 0 /NP=" << beamBefore->getNbParticles() << endl;
    6262  }
    63 
    64  
     63 
     64  // commentaire :  si l'element est un snapshot ne rien ecrire dans inputFileName_ (= parmin) un saut de ligne perturbe l'execution de parmela
    6565  for ( k = premier; k <= numeroFin; k++)
    6666    {
     
    7777  return true;
    7878}
    79 
    8079
    8180bool softwareParmela::execute(unsigned int numeroDeb,unsigned int numeroFin,string workingDir)
     
    126125      if(elem->getNomdElement().getElementType() == snapshot) {
    127126        int avantDernier = beams.size() - 1;
    128         cout<<"["<<k<<"] : ecrit sur fichier le contenu de beam["<<avantDernier<<"]"<<endl;
     127        string* param = elem->getParametersString();
     128        string cliche = workingDir + param[2].c_str();
     129        if( beamToParmela(cliche,&beams.at(avantDernier)) ) {
     130          cout<<"["<<k<<"] : ecrit sur fichier " << cliche << " le contenu de beam["<<avantDernier<<"]"<<endl;
     131        }
    129132        continue;
    130133      }
     
    250253}
    251254
    252 
    253255// sauvegarde d'un 'particleBeam' sur un fichier parmela, en guise d'INPUT
    254256// pour l'instant de nom standard 'parin.input0'
    255 bool softwareParmela::beamToParmela(string workingDir, particleBeam* beam ) {
     257bool softwareParmela::beamToParmela(string nameOfFile,particleBeam* beam)
     258{
    256259  if ( !beam->particleRepresentationOk() ) {
    257260    dataManager_->consoleMessage("softwareParmela::beamToParmela : beam not in particles form : not yet programmed");
     
    259262    return false;
    260263  }
     264
    261265  ofstream outfile;
    262   string name = workingDir + "parin.input0";
    263   outfile.open(name.c_str(), ios::out);
     266  outfile.open(nameOfFile.c_str(),ios::out);
    264267  if (!outfile) {
    265268    dataManager_->consoleMessage(" softwareParmela::beamToParmela : error opening output stream ");
    266     cerr << " softwareParmela::beamToParmela : error opening output stream " << name << endl;
    267     return false;
    268   }
    269 
     269    cerr << " softwareParmela::beamToParmela : error opening output stream " << nameOfFile << endl;
     270    return false;
     271  }
     272 
    270273  const vector<bareParticle>& partic = beam->getParticleVector();
    271   unsigned k;
    272274  double weight = 1.0;
    273275  double xx,yy,zz;
    274276  double begamx, begamy, begamz;
    275   for ( k=0; k < partic.size(); k++) {
     277  for (unsigned k = 0; k < partic.size(); k++) {
    276278    partic.at(k).getPosition().getComponents(xx,yy,zz);
    277     partic.at(k).getBetaGamma().getComponents(begamx, begamy, begamz);
     279    partic.at(k).getBetaGamma().getComponents(begamx,begamy,begamz);
    278280    outfile << xx << " " << begamx << " " <<  yy << " " << begamy << " " << zz << " " << begamz  << " " << weight << endl;
    279281  }
     
    281283  return true;
    282284}
    283 
    284 
  • Interface_Web/trunk/pspaWT/sources/controler/src/softwareTransport.cc

    r316 r353  
    77
    88softwareTransport::softwareTransport() : abstractSoftware()
    9 {
    10   ;
    11 }
     9{;}
    1210
    1311softwareTransport::softwareTransport(string inputFileName,globalParameters* globals, dataManager* dt) : abstractSoftware(inputFileName, globals, dt)
    14 {
    15   ;
    16 }
    17 
     12{;}
    1813
    1914bool softwareTransport::createInputFile(particleBeam* beamBefore, unsigned int numeroDeb, unsigned int numeroFin, string workingDir)
    20 {
    21   unsigned int k;
     15{
    2216  if ( numeroDeb < 1 || numeroFin > dataManager_->getBeamLineSize() ) {
    2317    dataManager_->consoleMessage(" softwareTransport::createInputFile : numero of element out of limits " );
     
    2519    return false;
    2620  }
     21
    2722  abstractElement* premierEl = NULL;
    2823  premierEl = dataManager_->getElementPointerFromNumero(numeroDeb);
     
    3429  }
    3530
    36 
     31  string name = workingDir + inputFileName_;
    3732  ofstream outfile;
    38   string name = workingDir + inputFileName_;
    3933  outfile.open(name.c_str(), ios::out);
    40   if (!outfile)
    41     {
     34  if (!outfile) {
    4235    dataManager_->consoleMessage(" softwareTransport::createInputFile : error opening output stream " );
    43       cerr << " error opening output stream " << name << endl;
    44       return false;
    45     }
     36    cerr << " error opening output stream " << name << endl;
     37    return false;
     38  }
    4639
    4740  outfile << string("'titre provisoire'") << endl;
     
    4942  outfile << " UTRANS " << endl;
    5043
     44
     45  cout << "debug:: c'est quoi le premier element? " << premierEl->getNomdElement().getElementName() << endl;
    5146
    5247  // si le premier element a traiter est un 'beam', on ne fait rien pour l'instant
     
    5752    // s'il n'y a pas faisceau courant, erreur
    5853    if ( beamBefore == NULL ) {
    59     dataManager_->consoleMessage(" softwareTransport::createInputFile : no input beam " );
     54      dataManager_->consoleMessage(" softwareTransport::createInputFile : no input beam");
    6055      cout << " pas de faisceau " << endl;
    6156      return false;
    62     }
    63     else {
     57    } else {
    6458      // s'il y a un faisceau courant
    6559      if ( !beamBefore->momentRepresentationOk() ) {
     
    6761        // on le met au format transport, s'il est deja au format 'particules' (par ex/ parmela)
    6862        if ( !beamBefore->particleRepresentationOk() ) {
    69     dataManager_->consoleMessage(" softwareParmela::createInputFile : ca cafouille dans les representations de faisceau : ni particules, ni moments ? " );
     63          dataManager_->consoleMessage(" softwareParmela::createInputFile : ca cafouille dans les representations de faisceau : ni particules, ni moments ? " );
    7064          cout << " ca cafouille dans les representations de faisceau : ni particules, ni moments ? " << endl;
    7165          return false;
    72         }
    73         else {
     66        } else {
    7467          beamBefore->buildMomentRepresentation();
    7568        }
     
    8376  }
    8477
    85 
    86 
    8778  outfile << " PRINT, BEAM, ON; " << endl;
    8879
    89 
    9080  abstractElement* elPtr;
    91   for ( k=numeroDeb; k <= numeroFin; k++)
     81  for (unsigned k = numeroDeb; k <= numeroFin; k++)
    9282    {
    9383      elPtr = dataManager_->getElementPointerFromNumero(k);
     84      cout << "debug:: element [" << k << "] " << elPtr->getNomdElement().getElementName() << endl;
     85      if(elPtr->getNomdElement().getElementType() == snapshot) continue;
    9486      outfile << elPtr->transportOutputFlow() << endl;
    9587    }
     
    10395}
    10496
    105 
    106 
    10797bool softwareTransport::execute( unsigned int numeroDeb, unsigned int numeroFin, string workingDir)
    10898{
     99  bool ExecuteStatus = true;
     100
    109101  ostringstream sortie;
    110   //  resul.clear();
    111102  sortie << " EXECUTION DE TRANSPORT DE " << numeroDeb << " a " << numeroFin << endl;
    112 
    113   bool ExecuteStatus = true;
    114   string bufString;
    115   char buf[132];
     103 
    116104  string transportJob = workingDir + "transport";
    117105  transportJob += string(" <  ");
    118106  transportJob += workingDir + inputFileName_;
    119107  cout << " job transport= " << transportJob << endl;
    120 
    121   ofstream outfile;
    122   string nameOut = workingDir + "transport.output";
     108 
    123109  string resultOfRun;
    124   bool success = launchJob(transportJob, resultOfRun);
     110  bool success = launchJob(transportJob,resultOfRun);
    125111  sortie << resultOfRun << endl;
    126   if ( !success) {
     112  if ( !success ) {
    127113    sortie << " launching of transport failed " << endl;
    128114    ExecuteStatus = false;
    129   }
    130   else {
     115  } else {
    131116    cout << " execution transport MARCHE " << endl;
     117    string nameOut = workingDir + "transport.output";
     118    ofstream outfile;
    132119    outfile.open(nameOut.c_str(), ios::out);
    133     if (!outfile)
    134       {
    135         sortie << " error first opening transport output stream " << nameOut << endl;
    136         ExecuteStatus = false;
    137       }
    138     else {
     120    if (!outfile) {
     121      sortie << " error first opening transport output stream " << nameOut << endl;
     122      ExecuteStatus = false;
     123    } else {
    139124      // on copie la sortie dans un fichier 'transport.out'
    140125      outfile << resultOfRun << endl;
    141126      outfile.close();
    142       // ExecuteStatus = buildBeamAfterElements(numeroDeb,numeroFin, beamAfterElement, workingDir);
    143       // if ( !ExecuteStatus ) {
    144       //        sortie << " reading transport results  failed " << endl;
    145       //      }
    146     }
    147   }
    148   //  resul =  sortie.str();
    149     dataManager_->consoleMessage(sortie.str());
     127    }
     128  }
     129
     130  dataManager_->consoleMessage(sortie.str());
    150131  return ExecuteStatus;
    151132}
    152133
    153 
    154 bool softwareTransport::buildBeamAfterElements(unsigned int numeroDeb,unsigned int numeroFin, vector<particleBeam>& beams, string workingDir) {
     134bool softwareTransport::buildBeamAfterElements(unsigned int numeroDeb,unsigned int numeroFin, vector<particleBeam>& beams,string workingDir)
     135{
    155136
    156137  bool result = true;
    157 unsigned k;
    158         for ( k= numeroDeb; k <= numeroFin; k++)
    159           {
    160             beams.push_back(particleBeam());
    161 
    162             abstractElement* ptr = dataManager_->getElementPointerFromNumero(k);
    163 
    164             if ( ptr == NULL ) {
    165               dataManager_->consoleMessage(" softwareTransport::buildBeamAfterElements : null pointer on element " );
    166               cout << " softwareTransport::buildBeamAfterElements : null pointer on element " << endl;
    167               result = false;
    168               break;         
    169             }
    170 
    171             string elemLabel = ptr->getLabel();
    172 
    173             beam2Moments transpMoments;
    174 
    175             if (!moments2FromTransport(workingDir, elemLabel, ptr->getNomdElement(),transpMoments )  )
    176               {
    177               dataManager_->consoleMessage(" softwareTransport::buildBeamAfterElements : failure in reading moments " );
    178               cout << " softwareTransport::buildBeamAfterElements plantage dans lecture moments " << endl;
    179                 result = false;
    180                 break;
    181               }
    182             beams.back().set2Moments(transpMoments);
    183           }
    184         return result;
    185 }
    186 
    187 
    188 bool  softwareTransport::moments2FromTransport(string workingDir, string elLab, const nomdElements elem, beam2Moments& moments) const {
    189 
     138 
     139  for (unsigned k = numeroDeb; k <= numeroFin; k++)
     140    {
     141      abstractElement* ptr = dataManager_->getElementPointerFromNumero(k);
     142      if ( ptr == NULL ) {
     143        dataManager_->consoleMessage(" softwareTransport::buildBeamAfterElements : null pointer on element " );
     144        cout << " softwareTransport::buildBeamAfterElements : null pointer on element " << endl;
     145        result = false;
     146        break;       
     147      }
     148
     149      // si l'element est un snapshot, recuperer la sortie precedente
     150      if(ptr->getNomdElement().getElementType() == snapshot) {
     151        int avantDernier = beams.size() - 1;
     152        string* param = ptr->getParametersString();
     153        string cliche = workingDir + param[2].c_str();
     154         cout<<"["<<k<<"] : ecrit sur fichier " << cliche << " le contenu de beam["<<avantDernier<<"]"<<endl;
     155         continue;
     156      }
     157
     158      beams.push_back(particleBeam());
     159      string elemLabel = ptr->getLabel();
     160      beam2Moments transpMoments;
     161     
     162      if (!moments2FromTransport(workingDir,elemLabel,ptr->getNomdElement(),transpMoments) )
     163        {
     164          dataManager_->consoleMessage(" softwareTransport::buildBeamAfterElements : failure in reading moments " );
     165          cout << " softwareTransport::buildBeamAfterElements plantage dans lecture moments " << endl;
     166          result = false;
     167          break;
     168        }
     169      beams.back().set2Moments(transpMoments);
     170    }
     171  return result;
     172}
     173
     174bool softwareTransport::moments2FromTransport(string workingDir,string elLab,const nomdElements elem,beam2Moments& moments) const
     175{
    190176  string elementLabel = elLab;
    191177  // transformer le label en majuscules ; je ne suis pas sur que ca
    192178  // marchera a tous les coups (glm)
    193   std::transform(elementLabel.begin(), elementLabel.end(), elementLabel.begin(), (int (*)(int))std::toupper);
    194 
    195   cout << " dataManager::moments2FromTransport on cherche element " << elementLabel << endl;
     179  std::transform(elementLabel.begin(),elementLabel.end(),elementLabel.begin(),(int (*)(int))std::toupper);
     180
     181  cout << "softwareTransport::moments2FromTransport on cherche element " << elementLabel << endl;
     182 
     183  string nameIn = workingDir + "transport.output";
    196184  ifstream infile;
    197   string nameIn = workingDir + "transport.output";
    198185  infile.open(nameIn.c_str(), ios::in);
    199186  if (!infile) {
     
    202189    return false;
    203190  }
    204   //  else cout << " particleBeam::setFromTransport() : ouverture du fichier " << nameIn << endl;
    205191
    206192  string::size_type nn = string::npos;
     
    209195  unsigned compteur = 0;
    210196  while ( getline(infile, buf) ) {
    211       fichier += buf+"\n";
     197    fichier += buf+"\n";
    212198    nn = buf.find(elementLabel);
    213199    if ( nn != string::npos ) {
    214200      compteur++;
    215       //      break;
    216201    }
    217202  }
    218203  infile.close();
     204
    219205  cout << " compteur= " << compteur << endl;
    220206  if ( compteur == 0 ) {
     
    223209    return false;
    224210  }
    225 
    226211
    227212  stringstream fichierStream(fichier);
     
    239224    }
    240225  }
     226
    241227  moments.readFromTransportOutput(fichierStream);
    242   //  impressionDesMoments();
    243228  return true;
    244 
    245 }
    246 
     229}
Note: See TracChangeset for help on using the changeset viewer.