Q3D-Calibration/include/FileHandler.h

96 lines
2.1 KiB
C++

#pragma once
#ifndef file_handler_h
#define file_handler_h
#include "GaussFit.h"
#include <TH1F.h>
using std::string;
using std::to_string;
class FileHandler {
public:
FileHandler();
FileHandler(string, int n_ = 6);
~FileHandler();
public:
int n = 6, m = 8, pX;
string file;
double adcValue[6][8][2];
TH1F Left[6][8];
TH1F Right[6][8];
public:
double getADC(TH1F hist);
void solve();
void save();
void save(string);
private:
void init();
};
FileHandler::FileHandler() {}
FileHandler::FileHandler(string file_, int n_) {
file = file_;
n = n_;
}
FileHandler::~FileHandler() {}
void FileHandler::init() {
string L, R;
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++) {
L = "Left" + to_string(i) + to_string(j);
R = "Right" + to_string(i) + to_string(j);
Left[i][j] = TH1F(L.c_str(), L.c_str(), CHANNEL_NUMBER, 0, CHANNEL_NUMBER);
Right[i][j] = TH1F(R.c_str(), R.c_str(), CHANNEL_NUMBER, 0, CHANNEL_NUMBER);
}
}
double FileHandler::getADC(TH1F hist) {
int n, cnt = 0;
double *parma = new double[3];
GaussFit *GF = new GaussFit();
for (int k = 10; k < CHANNEL_NUMBER; k++) {
n = hist.GetBinContent(k);
if (n == 0) continue;
GF->addData(k, n);
// std::cout << k << " " << n << std::endl;
}
parma = GF->fit();
return parma[1];
}
void FileHandler::solve() {
init();
readROOTData(file.c_str(), Left, Right, n);
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++) {
adcValue[i][j][0] = getADC(Left[i][j]);
adcValue[i][j][1] = getADC(Right[i][j]);
}
}
void FileHandler::save() {
string path = rmString(file, ".root") + ".csv";
save(path);
}
void FileHandler::save(string path) {
std::ofstream ofs(path);
ofs << "pX,X4,Bind,Left,Right" << std::endl;
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
ofs << pX << "," << i << "," << j << "," << adcValue[i][j][0] << "," << adcValue[i][j][1]
<< std::endl;
}
#endif