C/C++文本统计分析

#include <iostream>
#include <fstream>


using namespace std;
int GetTxtLine(const char *filename);
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
char c[10];//使用文件流从txt文本中读入一行数据到c[10]
int main() {

    //ifstream f1("/home/geant4/CLionProjects/untitled/input.txt");//打开文件
    //char *FileName = "/home/geant4/CLionProjects/untitled3/BenDi-10min.txt";
     char *FileName="/home/geant4/CLionProjects/untitled3/Cs137-10min.txt";
    int Txtline = GetTxtLine(FileName);
    ifstream f1(FileName);
    int i = 0;

    int basline = 3000;//基线水平 wavedump里设置
    int trigger = 5;//如果数据采集仪器的trigger设置的比较大 这里的触发可以设置的比较低
    // int RecordLength=602;
    int RecordLength = 1024;//一个Event记录的数据数 wavedump里设置

    int Extra = 7;//文本中非数字的部分
    int Eline = RecordLength + Extra;//一个Event的总长
    int maxevent = Txtline / Eline;//总事件数
    int QshortGate = 20;
    //  int QlongGate=200;

    //共有统计量
    int a[maxevent][Eline];//记录所有数据
    double s[maxevent];    //统计Qshort
    double PSD[maxevent];//统计PSD

    //channel 0
    double b[maxevent];    //统计energy 也就是Qlong
    int sigma[maxevent][Eline];//basline 与脉冲的差值
    int plus[maxevent][Eline];//加trigger限制后的 脉冲数据

    //channel 1
    double b1[maxevent];    //统计energy 也就是Qlong
    int sigma1[maxevent][Eline];//basline 与脉冲的差值
    int plus1[maxevent][Eline];//加trigger限制后的 脉冲数据


    while (f1.good()) {
        int f = i % Eline;
        int n = f - Extra;
        int eventid = i / Eline;

        f1.getline(c, 40);
        //  cout<<"i"<<"   "<<i<<"   "<<"n"<<n<<"   "<<"eventid"<<eventid<<"   "<<endl;
        //cout << c << endl;

        if (n >= 0 && n <= RecordLength) {

            int C = atoi(c);
            //   int C=convert(c);
            a[eventid][n] = C;
            //cout<<C<<"  C"<<"   "<<"i"<<"   "<<i<<"   "<<"n"<<n<<"   "<<"eventid"<<eventid<<"   "<<"c"<<c<<endl;
        }


        i++;
    }

    //sigma 与基线的差值 以及plus脉冲数据的记录(设置trigger记录与脉冲的起始点与终止点)

    int K[maxevent];//记录一个每一个脉冲的数据数
    for (int A = 0; A < maxevent; A++) {
        int k = 0;
        int flag = A % 2;//flag 为0即位Channel0;为1即为channel1;
        // cout<<"flag"<<flag<<endl;
        if (flag == 0) {
            for (int b = 0; b < RecordLength; b++) {
                int Single = (A - 1) / 2;
                sigma[Single][b] = basline - a[A][b];
                // cout << "sigma" << " "<<sigma[Single][b]<<"   ";
                if (sigma[Single][b] >= trigger && sigma[Single][b] < basline - 1) {
                    plus[Single][k] = sigma[Single][b];
                    //cout<<"Plus"<<plus[A][k]<<"  ";
                    k++;
                }
                K[A] = k - 1;

            }
        }
        if (flag == 1) {
            for (int b = 0; b < RecordLength; b++) {
                int Double = A / 2;
                sigma1[Double][b] = basline - a[A][b];
                //   cout << "sigma1" << " "<<sigma1[Double][b]<<"   ";
                if (sigma1[Double][b] >= trigger && sigma1[Double][b] < basline - 1) {
                    plus1[Double][k] = sigma1[Double][b];
                    //cout<<"Plus"<<plus[A][k]<<"  ";
                    k++;

                }
                K[A] = k - 1;

            }
        }
        // cout<<endl;
    }


    //统计Qlong
    for (int A = 0; A < maxevent; A++) {
        int Energy = 0;
        int flag = A % 2;//flag 为0即位Channel0;为1即为channel1;
        if (flag == 0) {
            int Single = (A - 1) / 2;
            for (int b = 0; b < K[A]; b++) {
                // cout << a[A][b] << " ";
                //Energy+=a[A][b];
                if (plus[Single][b] > trigger && plus[Single][b])
                    Energy += plus[Single][b];
            }

            b[Single] = Energy;
            cout << "Qlong" << "  " << Energy << endl;
        }
        if (flag == 1) {
            int Double = A / 2;
            for (int b = 0; b < K[A]; b++) {
                // cout << a[A][b] << " ";
                //Energy+=a[A][b];
                if (plus1[Double][b] > trigger && plus1[Double][b])
                    Energy += plus1[Double][b];
            }

            b1[Double] = Energy;
            cout << "Qlong1" << "  " << Energy << endl;
        }
    }


    //统计Qshort 若QshortGate 大于Qlong的数据范围 会出错
    for (int A = 0; A < maxevent; A++) {
        int Qshort = 0;
        int flag = A % 2;//flag 为0即位Channel0;为1即为channel1;
        if (flag == 0) {
            int Single = (A - 1) / 2;
            for (int b = 0; b < QshortGate; b++) {
                // cout << a[A][b] << " ";
                //Energy+=a[A][b];
                if (b < K[A])
                    Qshort += plus[Single][b];
            }
            s[A] = Qshort;
            if (b[Single] == 0)PSD[A] = 0;
            else PSD[A] = (b[Single] - s[A]) / b[Single];

            //cout<<endl;
            cout << "Qshort" << "   " << s[A] << "   " << "PSD" << "  " << PSD[A] << endl;
        }
        if (flag == 1) {
            int Double = A / 2;
            for (int b = 0; b < QshortGate; b++) {
                // cout << a[A][b] << " ";
                //Energy+=a[A][b];
                if (b < K[A])
                    Qshort += plus1[A][b];
            }
            s[A] = Qshort;
            if (b1[Double] == 0)PSD[A] = 0;
            else PSD[A] = (b1[Double] - s[A]) / b1[Double];
            //cout<<endl;
            cout << "Qshort1" << "   " << s[A] << "   " << "PSD" << "  " << PSD[A] << endl;
        }
    }
}
int GetTxtLine(const char *filename)

{

    FILE *fd;

    int count = 0;

    if (fd =fopen(filename,"r"))

    {
        while (!feof(fd))

        {
            if ('\n' == fgetc(fd))

            {
                count ++;

            }

        }

    }

    printf("count: %d\n", count);


    if (fd)

    {
        fclose(fd);
        // printf("ccc: %d\n", count);
    }

    return count;

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/705063.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024牛客寒假算法基础集训营2

目录 A.Tokitsukaze and Bracelet B.Tokitsukaze and Cats C.Tokitsukaze and Min-Max XOR D.Tokitsukaze and Slash Draw E and F.Tokitsukaze and Eliminate (easy)(hard) G.Tokitsukaze and Power Battle (easy) 暂无 I.Tokitsukaze and Short Path (plus) J.Tokits…

Qt QWidget 简约美观的加载动画 第五季 - 小方块风格

给大家分享两个小方块风格的加载动画 &#x1f60a; 第五季来啦 &#x1f60a; 效果如下: 一个三个文件,可以直接编译运行 //main.cpp #include "LoadingAnimWidget.h" #include <QApplication> #include <QGridLayout> int main(int argc, char *arg…

CSS 入门手册(二)

目录 12-Overflow 13-下拉菜单 14-提示框 14.1 显示位置&#xff08;左右&#xff09; 14.2 显示位置(上下) 14.3 添加箭头 14.4 淡入效果 15-图片 16-列表 17-表格 17.1 表格宽度和高度 17.2 文字对齐 17.3 表格颜色 18-计数器 19-导航栏 19.1 导航栏UI优化 …

python第七节:条件、循环语句(2)

循环语句 while循环 for循环 组合嵌套循环 break 终止循环&#xff0c;跳出整个循环 continue 终止当前循环&#xff0c;进入下一次循环 pass 空语句&#xff0c;什么都不做&#xff0c;用于保持结构完整 语法1&#xff1a;whlie循环一定要控制好循环条件&#…

Python基础21 面向对象(4)进阶 类的一些内置方法和属性

文章目录 一、模块调用中attr类函数的运用1、执行模块以外的模块调用2、执行模块调用自己 二、\_\_getattribute__()方法的运行逻辑三、item系列方法四、\_\_str__()方法五、\_\_repr__()方法六、自定制格式化方法七、__slots__属性八、\_\_doc__属性九、__module__和__class\_…

pytorch -- torch.nn下的常用损失函数

1.基础 loss function损失函数&#xff1a;预测输出与实际输出 差距 越小越好 - 计算实际输出和目标之间的差距 - 为我们更新输出提供依据&#xff08;反向传播&#xff09; 1. L1 torch.nn.L1Loss(size_averageNone, reduceNone, reduction‘mean’) 2. 平方差&#xff08;…

axios的基本特性用法

1. axios的基本特性 axios 是一个基于Promise用于浏览器和node.js的HTTP客户端。 它具有以下特征&#xff1a; 支持浏览器和node.js支持promiseAPI自动转换JSON数据能拦截请求和响应请求转换请求数据和响应数据&#xff08;请求是可以加密&#xff0c;在返回时也可进行解密&…

如何在 VM 虚拟机中安装 Windows 7 操作系统保姆级教程(附链接)

一、VMware Workstation 虚拟机 没有安装 VM 虚拟机的参考以下文章进行安装&#xff1a; VM 虚拟机安装教程​编辑https://eclecticism.blog.csdn.net/article/details/135713915https://eclecticism.blog.csdn.net/article/details/135713915 二、Windows 7 镜像 点击链接…

大语言模型LLM参数微调:提升6B及以上级别模型性能(LLM系列009)

文章目录 大语言模型LLM参数微调&#xff1a;提升6B及以上级别模型性能&#xff08;LLM系列009&#xff09;序章LLM参数微调的核心原理预训练与微调过程技术细化 LLM参数微调实战案例详解案例一&#xff1a;文本分类任务微调案例二&#xff1a;问答系统任务微调案例三&#xff…

C++:类与对象(2)

创作不易&#xff0c;感谢三连&#xff01; 一、六大默认成员函数 C为了弥补C语言的不足&#xff0c;设置了6个默认成员函数 二、构造函数 2.1 概念 在我们学习数据结构的时候&#xff0c;我们总是要在使用一个对象前进行初始化&#xff0c;这似乎已经成为了一件无法改变的…

cypher操作图数据库

简单示例 sql语法返回值 sql语法 在Match语法中&#xff0c;无法对关系使用$引入变量&#xff08;案例中的max_path_len&#xff09;。如果一定要引入&#xff0c;就使用format的字符串占位符方法。在Match语法中&#xff0c;允许对节点的属性使用$引入变量。如果sql已经使用了…

【论文笔记之 YIN】YIN, a fundamental frequency estimator for speech and music

本文对 Alain de Cheveigne 等人于 2002 年在 The Journal of the Acoustical Society of America 上发表的论文进行简单地翻译。如有表述不当之处欢迎批评指正。欢迎任何形式的转载&#xff0c;但请务必注明出处。 论文链接&#xff1a;http://audition.ens.fr/adc/pdf/2002_…

数据结构知识点总结-特殊矩阵-矩阵的压缩存储

特殊矩阵 定义 矩阵在计算机图形学中占有很重要的地位。在数据结构中我们不研究矩阵的运算,而是侧重于如何将矩阵高效的存储在内存中,并能方便的提取矩阵中的元素。 数组的概念 数组是由n(n>=0)个相同类型的数据元素构成的有限序列,每个数据元素称为一个数组元素,每…

基于smilehappiness-framework-base,快速集成ShardingSphere JDBC

文章目录 1 前言2 分库分表2.1 什么是分库分表2.2 垂直分库2.3 水平分表 3 如何集成使用分库分表3.1 添加maven依赖3.2 添加 shardingSphere 数据源3.2 添加 sharding jdbc 配置3.2.1 分表配置示例3.2.2 分库且分表配置示例 1 前言 为什么使用分库分表&#xff1f;随着业务量的…

【Fastadmin】动态下拉(SelectPage)

目录 1.常规用法: 2.常用属性: 3.联动用法:三级分类为例 FastAdmin中的动态下拉列表使用的是优秀强大的Selectpage插件,FastAdmin对其进行了二次开发。 1.常规用法: <input id="c-name" data-rule="required" data-source="category/sele…

vue3_父组件调用子组件的某个方法

父组件&#xff1a; <template><div class"father"><el-button click"handle">触发子组件事件</el-button><child ref"children"/></div> </template><script setup lang"ts"> impo…

C# OpenCvSharp 颜色反转

目录 效果 灰度图 黑白色反转 彩色反转 项目 代码 下载 效果 灰度图 黑白色反转 彩色反转 项目 代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Te…

电机应用中的大功率电阻器?

在这篇文章中&#xff0c;我们将考虑电机应用中的电阻器。 交流、直流和专用电机用于广泛的应用。一些电机应用相对简单&#xff0c;唯一需要关注的是电机的启动和关闭。在这里&#xff0c;成本、简单性和可靠性是主要问题&#xff0c;而电机控制电阻器是常见的解决方案。 在…

【数据结构】B树,B+树,B*树

文章目录 一、B树1.B树的定义2.B树的插入3.B树的中序遍历 二、B树和B*树1.B树的定义2.B树的插入3.B*树的定义4.B树系列总结 三、B树与B树的应用 一、B树 1.B树的定义 1. 在内存中搜索效率高的数据结构有AVL树&#xff0c;红黑树&#xff0c;哈希表等&#xff0c;但这是在内存…

解决:selenium web browser 的版本适配问题

文章目录 解决方案&#xff1a;使用 webdriver manager 自动适配驱动 使用 selenium 操控浏览器的时候报错&#xff1a; The chromedriver version (114.0.5735.90) detected in PATH at /opt/homebrew/bin/chromedriver might not be compatible with the detected chrome ve…