From 86165938aba81d2d6c2a1f6678bfc7cf416cd714 Mon Sep 17 00:00:00 2001 From: pospelov <pospelov@fz-juelich.de> Date: Mon, 1 Oct 2012 14:17:52 +0200 Subject: [PATCH] FresnelCoeff now takes roughness in the account --- App/src/TestFresnelCoeff.cpp | 8 ++-- Core/Algorithms/inc/OpticalFresnel.h | 4 +- Core/Algorithms/src/OpticalFresnel.cpp | 14 +++++-- Core/Tools/src/FitMultiParameter.cpp | 5 ++- Core/Tools/src/FitParameter.cpp | 3 +- .../ex02_fitspheres/edf_reader.py | 40 ++++--------------- 6 files changed, 31 insertions(+), 43 deletions(-) diff --git a/App/src/TestFresnelCoeff.cpp b/App/src/TestFresnelCoeff.cpp index c1f4591b888..033228cd38b 100644 --- a/App/src/TestFresnelCoeff.cpp +++ b/App/src/TestFresnelCoeff.cpp @@ -240,8 +240,8 @@ void TestFresnelCoeff::draw_standard_samples() /* ************************************************************************* */ void TestFresnelCoeff::test_roughness_set() { -// m_sample = dynamic_cast<MultiLayer *>(SampleFactory::createSample("MultilayerOffspecTestcase1a")); - m_sample = dynamic_cast<MultiLayer *>(SampleFactory::createSample("SubstrateOnSubstrate")); + m_sample = dynamic_cast<MultiLayer *>(SampleFactory::createSample("MultilayerOffspecTestcase1a")); +// m_sample = dynamic_cast<MultiLayer *>(SampleFactory::createSample("SubstrateOnSubstrate")); std::cout << *m_sample << std::endl; std::cout << "-----" << std::endl; @@ -257,7 +257,7 @@ void TestFresnelCoeff::test_roughness_set() // multipar.addMatchedParametersFromPool("/multilayer/interface0/roughness/sigma",newpool); multipar.addMatchedParametersFromPool("/*/*/*/sigma",newpool); - std::cout << multipar << std::endl; + std::cout << "multipar: " << multipar << std::endl; // multipar.setValue(0.0); std::cout << *m_sample << std::endl; @@ -275,7 +275,7 @@ void TestFresnelCoeff::test_roughness_set() kvec.setLambdaAlphaPhi(1.54*Units::angstrom, -alpha_i, 0.0); OpticalFresnel::MultiLayerCoeff_t coeffs; OpticalFresnel fresnelCalculator; - fresnelCalculator.execute(*m_sample, kvec, coeffs, true); + fresnelCalculator.execute(*m_sample, kvec, coeffs); m_coeffs->next() = coeffs; //std::cout << alpha_i << " " << roughness << " " << coeffs[0].R << std::endl; } diff --git a/Core/Algorithms/inc/OpticalFresnel.h b/Core/Algorithms/inc/OpticalFresnel.h index c92ddbbaf9e..9f2bbd1dd01 100644 --- a/Core/Algorithms/inc/OpticalFresnel.h +++ b/Core/Algorithms/inc/OpticalFresnel.h @@ -52,10 +52,10 @@ public: MultiLayerCoeff_t m_data; }; - int execute(const MultiLayer &sample, const kvector_t &k, MultiLayerCoeff_t &coeff, bool useRoughness=false); - int execute(const MultiLayer &sample, const kvector_t &k, MultiLayerCoeff &coeff, bool useRoughness=false) { return execute(sample,k,coeff.m_data, useRoughness); } + int execute(const MultiLayer &sample, const kvector_t &k, MultiLayerCoeff_t &coeff); private: + bool m_use_roughness; void calculateKZ(const MultiLayer &sample, const kvector_t &k, MultiLayerCoeff_t &coeff); void calculateFresnelCoefficients(MultiLayerCoeff_t &coeff); diff --git a/Core/Algorithms/src/OpticalFresnel.cpp b/Core/Algorithms/src/OpticalFresnel.cpp index aa677f905ce..6849fc8ce35 100644 --- a/Core/Algorithms/src/OpticalFresnel.cpp +++ b/Core/Algorithms/src/OpticalFresnel.cpp @@ -5,19 +5,27 @@ -OpticalFresnel::OpticalFresnel() +OpticalFresnel::OpticalFresnel() : m_use_roughness(false) { } -int OpticalFresnel::execute(const MultiLayer &sample, const kvector_t &kvec, MultiLayerCoeff_t &coeff, bool useRoughness) +int OpticalFresnel::execute(const MultiLayer &sample, const kvector_t &kvec, MultiLayerCoeff_t &coeff) { coeff.clear(); coeff.resize(sample.getNumberOfLayers()); calculateKZ(sample, kvec, coeff); - if(useRoughness) { + // check if there is a roughness + for (size_t i=0; i<sample.getNumberOfInterfaces(); ++i) { + if(sample.getLayerInterface(i)->getRoughness() ) { + m_use_roughness = true; + break; + } + } + + if(m_use_roughness) { calculateFresnelCoefficientsWithRoughness(sample, coeff); } else{ calculateFresnelCoefficients(coeff); diff --git a/Core/Tools/src/FitMultiParameter.cpp b/Core/Tools/src/FitMultiParameter.cpp index 93267732b22..709ca7f07ec 100644 --- a/Core/Tools/src/FitMultiParameter.cpp +++ b/Core/Tools/src/FitMultiParameter.cpp @@ -3,7 +3,7 @@ FitMultiParameter::FitMultiParameter() { - + setName("FitMultiParameter"); } /* ************************************************************************* */ @@ -34,13 +34,16 @@ void FitMultiParameter::addParameterFromPool(std::string parkey, const Parameter void FitMultiParameter::addMatchedParametersFromPool(std::string wildcards, const ParameterPool *pool) { // loop over all parameters in the pool + int n_added_pars(0); for(ParameterPool::const_iterator_t it=pool->begin(); it!= pool->end(); it++) { // (*it).first - parameter key, (*it).second - parameter itself // parameters whose key match pattern is added to the FitMultiParameter container if( Utils::StringMatchText::WildcardPattern( (*it).first, wildcards ) ) { addParameter((*it).second); + n_added_pars++; } } + if(n_added_pars==0) std::cout << "FitMultiParameter::addMatchedParametersFromPool() -> Warning! No parameters satisfying criteria'" << wildcards << "' have been found" << std::endl; } diff --git a/Core/Tools/src/FitParameter.cpp b/Core/Tools/src/FitParameter.cpp index ab122f0b1ed..c2aa5581af8 100644 --- a/Core/Tools/src/FitParameter.cpp +++ b/Core/Tools/src/FitParameter.cpp @@ -4,12 +4,13 @@ FitParameter::FitParameter() : m_value(0), m_error(0), m_lower_limit(0), m_upper_limit(0) { - + setName("FitParameter"); } FitParameter::FitParameter(const FitParameter &other) : INamed(other) { + setName("FitParameter"); m_value = other.m_value; m_error = other.m_error; m_lower_limit = other.m_lower_limit; diff --git a/Examples/MesoCrystals/ex02_fitspheres/edf_reader.py b/Examples/MesoCrystals/ex02_fitspheres/edf_reader.py index a87922917e8..48317f83665 100644 --- a/Examples/MesoCrystals/ex02_fitspheres/edf_reader.py +++ b/Examples/MesoCrystals/ex02_fitspheres/edf_reader.py @@ -1,9 +1,8 @@ #-*- coding: utf8 -*- -import os -import sys from numpy import * -h_c=1.23984193*1e-6/1e-10 +h_c=1.239842E4 #eV⋅Å + def read_edf_header(file_handler): ''' @@ -19,7 +18,7 @@ def read_edf_header(file_handler): key=key.strip() value=value.strip().rstrip(';').strip() settings[key]=value - #header_lines.append(line) + header_lines.append(line) line=file_handler.readline() header_lines.append(line) # Read some settings @@ -33,14 +32,13 @@ def read_edf_header(file_handler): settings['SampleDistance']=float(settings['SampleDistance'].rstrip('m'))*1000. if 'Monochromator_energy' in settings: energy=float(settings['Monochromator_energy'].rstrip('keV'))*1000. - print "XXX",energy settings['lambda']=h_c/energy if 'WaveLength' in settings: settings['lambda']=float(settings['WaveLength'].rstrip('m'))*1e10 - if 'Exposure_time' in settings: - settings['Exposure_time']=float(settings['Exposure_time'].rstrip('ms'))/1000. if 'ExposureTime' in settings: settings['ExposureTime']=float(settings['ExposureTime'].rstrip('s (Seconds)')) + if 'Exposure_time' in settings: + settings['ExposureTime']=float(settings['Exposure_time'].rstrip('ms'))/1000. if 'NormalizationFactor' in settings: settings['NormalizationFactor']=float(settings['NormalizationFactor']) if 'Center_1' in settings: @@ -71,11 +69,11 @@ def import_edf_file(file_name): input_array=array_module.array('H') input_array=fromstring(file_handler.read(header_settings['xdim']*header_settings['ydim']*2), uint16).astype(float) - input_array-=-200 + input_array-=200 elif header_settings['DataType']=='SignedInteger': # load data as binary integer values - input_array=fromstring(file_handler.read(header_settings['xdim']*header_settings['ydim']*2), - int16).astype(float) + input_array=fromstring(file_handler.read(header_settings['xdim']*header_settings['ydim']*4), + int32).astype(float) elif header_settings['DataType']=='FloatValue': # load data as binary integer values input_array=fromstring(file_handler.read(header_settings['xdim']*header_settings['ydim']*4), @@ -85,25 +83,3 @@ def import_edf_file(file_name): raise IOError, 'Unknown data format in header: %s'%header_settings['DataType'] file_handler.close() return input_array.reshape(header_settings['ydim'], header_settings['xdim']), header_settings - - -def main(): - if len(sys.argv)!=2: - print "Usage: 'python edf_reader.py FileName' " - print " " - - else: - data=import_edf_file( sys.argv[1] ) - print data[1] - print data[0].shape - #savetxt("foo.csv.gz", data[0], fmt='%1.10e', delimiter=" ") - - - - -#------------------------------------------------------------- -# main() -#------------------------------------------------------------- -if __name__ == '__main__': - main() - -- GitLab