97 lines
2.2 KiB
C++
97 lines
2.2 KiB
C++
#pragma once
|
|
|
|
#ifndef utils_h
|
|
#define utils_h
|
|
|
|
#include <TFile.h>
|
|
#include <TH1F.h>
|
|
#include <TTree.h>
|
|
|
|
#include <Eigen/Dense>
|
|
#include <iostream>
|
|
|
|
#define INF 1e9
|
|
#define CHANNEL_NUMBER 4096
|
|
|
|
using std::string;
|
|
using std::to_string;
|
|
|
|
double dataMax(std::vector<Eigen::Vector2d> data) {
|
|
double m = -INF;
|
|
for (int i = 0; i < data.size(); i++) {
|
|
Eigen::Vector2d &point = data.at(i);
|
|
m = std::max(m, point(1));
|
|
}
|
|
return m;
|
|
}
|
|
|
|
double dataAvg(std::vector<Eigen::Vector2d> data) {
|
|
int n = 0;
|
|
double m = 0;
|
|
for (int i = 0; i < data.size(); i++) {
|
|
Eigen::Vector2d &point = data.at(i);
|
|
n += point(1);
|
|
m += point(0) * point(1);
|
|
}
|
|
return m / n;
|
|
}
|
|
|
|
double dataStd(std::vector<Eigen::Vector2d> data) {
|
|
int n = 0;
|
|
double m = 0;
|
|
double mu = dataAvg(data);
|
|
for (int i = 0; i < data.size(); i++) {
|
|
Eigen::Vector2d &point = data.at(i);
|
|
n += point(1);
|
|
m += std::pow(point(0) - mu, 2) * point(1);
|
|
}
|
|
return std::sqrt(m / (n - 1));
|
|
}
|
|
|
|
void readROOTData(const char *fin, TH1F Left[6][8], TH1F Right[6][8], int n = 6, int m = 8) {
|
|
// read file
|
|
TFile *fRun = new TFile(fin);
|
|
TTree *t = (TTree *)fRun->Get("Tree1");
|
|
|
|
// data numbers
|
|
Long64_t ntot = t->GetEntriesFast();
|
|
|
|
// five X-4 block
|
|
UInt_t dataArray[6][16];
|
|
|
|
// read adc data
|
|
int na, nc;
|
|
string adc;
|
|
for (int i = 0; i < n; i++)
|
|
for (int j = 0; j < m; j++) {
|
|
na = i / 2;
|
|
nc = j + 2 * m * (i % 2);
|
|
adc = "adc" + to_string(na) + "ch" + to_string(nc);
|
|
t->SetBranchAddress(adc.c_str(), &dataArray[i][j]);
|
|
adc = "adc" + to_string(na) + "ch" + to_string(nc + m);
|
|
t->SetBranchAddress(adc.c_str(), &dataArray[i][j + m]);
|
|
}
|
|
|
|
for (int i = 0; i < ntot; i++) {
|
|
t->GetEntry(i);
|
|
for (int j = 0; j < n; j++)
|
|
for (int k = 0; k < m; k++) {
|
|
Left[j][k].Fill(dataArray[j][k]);
|
|
Right[j][k].Fill(dataArray[j][k + m]);
|
|
}
|
|
}
|
|
}
|
|
|
|
string rmString(string str, string substr) {
|
|
int pos;
|
|
int len = substr.length();
|
|
while (true) {
|
|
pos = str.find(substr);
|
|
if (pos < 0) break;
|
|
str.erase(pos, len);
|
|
}
|
|
return str;
|
|
}
|
|
|
|
#endif
|