#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;
}