bool GNC::GCS::IStudyContext::GetSpacing(const int indice, double& x, double& y, double& z) { bool hasSpacing = false; std::string spacing; x=0.0f; y=0.0f; z=0.0f; GNC::GCS::Ptr<GIL::DICOM::DicomDataset> tagsImage = GetTagsImage(indice); if (tagsImage.IsValid()) { if(tagsImage->getTag("0028|0030",spacing)) { char c; std::istringstream issl(spacing); issl >> x; if(!issl.eof()) { issl>>c;//la barra issl>>y; } if(!issl.eof()) { issl>>c;//la barra issl>>z; }
int main() { /* */ /* strcasecmp() is not supported in Windows-- use strcmpi() instead */ //std::cout<<"Content-type: image/png\n\n"; //std::cout<<"<html><head></head><body>\n"; std::string s0; /* if ( !(content_length = atoi(getenv("CONTENT_LENGTH"))) ) { printf("Content-Type: text/plain\n\n") ; printf("getcgivars(): No Content-Length was sent with the POST request.\n") ; exit(1) ; } if (content_length > 406) content_length=406; */ getline(std::cin,s0); std::vector<struct cgiinput> cgi0; struct cgiinput cgiinput0; //process stdin for name&field values for (unsigned int i=0,j=0;j<s0.size();j++) { if (s0.at(j) == '=' || s0.at(j) == '&' || j==s0.size() -1) { switch (s0.at(j)) { case '=': cgiinput0.name=s0.substr(i,j-i); i=j+1; break; default: cgiinput0.field=s0.substr(i,j-i); i=j+1; cgi0.push_back(cgiinput0); } } } double en=-1,lambda=-1,sigma=-1,qmin=0.01,qmax=1.,dq=0.0025; std::string f0,r0; vector<std::string> buffer0; int by_rF=0,born=0,outputdata=0; //read energy wavelength for (unsigned int i=0;i<cgi0.size();i++) { //std::cout<<"<br>"<<cgi0.at(i).name<<" "<<cgi0.at(i).field<<endl; if (cgi0.at(i).name == std::string("xenergy") ||cgi0.at(i).name == std::string("xlambda")||cgi0.at(i).name == std::string("sigma")||cgi0.at(i).name == std::string("qmin") ||cgi0.at(i).name == std::string("qmax") ||cgi0.at(i).name == std::string("dq") || cgi0.at(i).name == std::string("outputdata") ) { std::istringstream iss(cgi0.at(i).field); std::vector<double> va; std::copy(istream_iterator<double>(iss),istream_iterator<double>(), back_inserter (va)); //std::cout<<va.size()<<" "<<cgi0.at(i).name<<" en="<<en<<" lambda="<<lambda<<endl; if (va.size()>0) { if (cgi0.at(i).name == std::string("xenergy")) { en=va.at(0); } if (cgi0.at(i).name == std::string("xlambda")) { lambda=va.at(0); } if (cgi0.at(i).name == std::string("sigma")) { sigma=va.at(0); } if (cgi0.at(i).name == std::string("qmin")) { qmin=va.at(0); } if (cgi0.at(i).name == std::string("qmax")) { qmax=va.at(0); } if (cgi0.at(i).name == std::string("dq")) { dq=va.at(0); } } else { if (cgi0.at(i).name == std::string("xenergy")) { en=-1; } else { lambda=-1; } } } if (cgi0.at(i).name == std::string("outputdata") ) outputdata=1; //enable by_rF if (cgi0.at(i).name == std::string("fresnel") ) by_rF=1; //enable by_rF if (cgi0.at(i).name == std::string("born") ) born=1; //use Born Approximation if (cgi0.at(i).name == std::string("formulae") ) {//processing formulae for (unsigned int j=0;j<cgi0.at(i).field.size();j++) { if (cgi0.at(i).field.at(j) !='+') f0.push_back(cgi0.at(i).field.at(j)); else f0.push_back(' '); } } if (cgi0.at(i).name == std::string("rho") ) {//processing density profile for (unsigned int j=0;j<cgi0.at(i).field.size();j++) { if (cgi0.at(i).field.at(j) =='+') { r0.push_back(' '); continue; } if (cgi0.at(i).field.at(j) =='%'){ if (cgi0.at(i).field.substr(j,3)==std::string("%0D") ||cgi0.at(i).field.substr(j,3)==std::string("%0d") ) { buffer0.push_back(r0); r0.clear(); } if (cgi0.at(i).field.substr(j,3)==std::string("%2D") ||cgi0.at(i).field.substr(j,3)==std::string("%2d") ) r0.push_back('-'); if (cgi0.at(i).field.substr(j,3)==std::string("%2B") ||cgi0.at(i).field.substr(j,3)==std::string("%2b") ) r0.push_back('+'); j+=2; continue; } r0.push_back(cgi0.at(i).field.at(j)); } if(r0.size()) buffer0.push_back(r0); // std::cout<<"<br>"<<r0; } //std::cout<<"<br>"<<r0<<" en="<<en<<" lambda="<<lambda<<endl; } //std::cout<<"<br>en="<<en<<" lambda="<<lambda; //std::cout<<"<br>"<<r0; char *pc= getenv("CONTENT_TYPE"); if ( pc == NULL) { std::cout<<"Content-Type: text/plain\n\n"; std::cout<<"getcgivars(): Unsupported Content-Type."<<s0<<std::endl; exit(1) ; } s0=string(pc); if ( s0 != std::string("application/x-www-form-urlencoded")) { std::cout<<"Content-Type: text/plain\n\n"; std::cout<<"getcgivars(): Unsupported Content-Type."<<s0<<std::endl; exit(1) ; } else { if(outputdata){ //output text for xr std::cout<<"Content-Type: text/plain\n\n"; } else { //plot image std::cout<<"Content-type: image/png\n\n"; } } if ( en>=0.02 &&en<=123.9) { lambda = E_to_l(en); }else en= E_to_l(lambda); if (! ( lambda>=0.02 &&lambda<=12.39)) { std::cout<<"lambda = "<<lambda<<" Å ? Invalid input</body></html>"; return 0; } istringstream iss(f0); vector <string > vs; std::copy (istream_iterator < string >(iss), istream_iterator < string >(), back_inserter (vs)); if (vs.size()<1) { return 0; } vector<complex<double> > nbulki; //std::cout<<vs.size()<<" "; //std::cout<<"<table border=\"2\"><tbody>\n"; // std::cout<<"<tr><td>X-ray energy = "<<en<<" KeV</td><td> λ = "<<lambda<<" Å </td></tr>\n"; vector<compound> vcpmd0; for (vector<string>::iterator pvs=vs.begin(); pvs != vs.end();pvs++) { //std::cout<<*pvs<<endl; compound cpmd0(*pvs,lambda,1.0); if (!cpmd0.els.size()) continue; if (!( pvs + 1 ==vs.end() )) { double rho0=1e-24; // in g angstrom^-3 if (isdigit( (pvs+1)->at(0))) { pvs++; rho0=strtod(& ( pvs->at(0)),NULL)*1e-24; cpmd0.rho_scale(rho0); }else rho0=cpmd0.rho; //std::cout<<"rho= "<<rho0<<endl; } nbulki.push_back(cpmd0.nk); vcpmd0.push_back(cpmd0); } vector<vector<double> > rhoprofile; for(unsigned int i=0;i<buffer0.size();i++){ istringstream issl(buffer0.at(i)); vector <double > va; std::copy (istream_iterator < double >(issl), istream_iterator < double >(), back_inserter (va)); //std::cout<<"<br>rho= "<<va.size()<<endl; if(va.size()<nbulki.size()+1) continue; rhoprofile.push_back(va); } //std::cout<<"size="<<rhoprofile.size(); multilayer ml0(lambda); ml0.tozprofile(nbulki,rhoprofile,vcpmd0); if(sigma>=0.05) ml0.convolution(sigma);//gaussian roughness ml0.by_rF=by_rF; ml0.outputdata=outputdata; ml0.born=born; ml0.rfvector(qmin,qmax,dq); ml0.plot(); return 0; }