24小时热门版块排行榜    

查看: 2217  |  回复: 18
【奖励】 本帖被评价12次,作者jjf_sxnu增加金币 11
当前主题已经存档。
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

jjf_sxnu

铜虫 (正式写手)


[资源] 【分享】自已写的洛仑兹展宽的程序。可以从能级得到DOS,及做IR等

/*###############################################################################################################
#
# This program is written for Lorentz boarding by Jianfeng Jia( ShanXi Normail University) . It can
# be used for Freq. NMR. DOS and so on.
# Using it by:        Loz inputfile outputfile delta steplength
# Parameter:        inputfile give the isolated input data want to boarding line by line for
#                       For example:
#                             12.1
#                             13.5
#                             4.
#                             ........
#                      outputfile is the result give in X and Y sets, It can be imported to
#                         Orign to give a plot.
#                           delta is a boarding parameter for Lorentz.
#                      steplength is the step length of X in output file.  
#################################################################################################################*/
#include
#include
#include
#include
#include
#include
#include
#define PI 3.14159265
using namespace std;
main(int argc, char * argv[])
{          if(argc!=5)
        { cout<<"You must and only can provide two file. and then a delta and a steplength"<         exit (1);
        }
        ifstream inf(argv[1]);
        if(inf==NULL)
        {cout<<"Can not open file: "<         exit(1);
        }
        vector inputed_xvalues;
        string s_x;       
        double halfwidth=atof(argv[3]);
        while(!inf.eof())
        {
        inf>>s_x;
        if(!s_x.empty()) inputed_xvalues.push_back(atof(s_x.c_str()));
        }
        sort(inputed_xvalues.begin(),inputed_xvalues.end());
        double max_X=*max_element(inputed_xvalues.begin(),inputed_xvalues.end())+10*halfwidth;
        double min_X=*min_element(inputed_xvalues.begin(),inputed_xvalues.end())-10*halfwidth;
        map output_XX_YY;
        double xx=min_X;
        double step=atof(argv[4]);
        while(xx         {       
                double yy=0;
                vector::iterator iter;
                for(iter=inputed_xvalues.begin();iter!=inputed_xvalues.end();iter++)
                yy=yy+(halfwidth/PI)/((xx-*iter)*(xx-*iter)+halfwidth*halfwidth);
                output_XX_YY.insert(map::value_type(xx,yy));
                xx+=step;
        }
        ofstream of(argv[2]);
        map::iterator m_iter;
        for(m_iter=output_XX_YY.begin();m_iter!=output_XX_YY.end(); m_iter++)
        {       
                of<first<<"\t"<second<         }
}

[ Last edited by zeoliters on 2009-6-13 at 15:37 ]
回复此楼

» 收录本帖的淘帖专辑推荐

双咪唑

» 猜你喜欢

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

erylingjet

铁杆木虫 (著名写手)


★★★★★ 五星级,优秀推荐



不支持,自己都会后悔的
4楼2009-03-12 18:12:27
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 19 个回答

erylingjet

铁杆木虫 (著名写手)


不过,怎么用呢?嘿嘿
5楼2009-03-12 18:13:50
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

jjf_sxnu

铜虫 (正式写手)


引用回帖:
Originally posted by erylingjet at 2009-3-12 18:13:
不过,怎么用呢?嘿嘿

C++编译后产生可执行文件,如Loz

就用  Loz   inputfile  outputfile   delta   step

delta 是展宽系数,step 是生成数据在x轴上的变化值(一般可取0.001)

输入输出都是文本文件,输入文件中只提供一列数据, 如画DOS,就提供每个能级的数据。一个能级一行如:

-20.6
-17.8
-5.6
-0.004
0.03

等,输出文件直接导入Origin画图。
6楼2009-03-12 19:45:01
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

benjamming

木虫 (正式写手)


★★★ 三星级,支持鼓励

那做红外怎么用呢?
7楼2009-03-13 15:39:26
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
☆ 无星级 ★ 一星级 ★★★ 三星级 ★★★★★ 五星级
普通表情 高级回复 (可上传附件)
信息提示
请填处理意见