#pragma once #ifndef file_handler_h #define file_handler_h #include "GaussFit.h" #include using std::string; using std::to_string; class FileHandler { public: FileHandler(); FileHandler(string, int n_ = 6, int thMin_ = 800, int thMax_ = 4000); ~FileHandler(); public: int n = 6, m = 8; int thMin, thMax, 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_, int thMin_, int thMax_) { file = file_; n = n_; thMin = thMin_; thMax = thMax_; } 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 = GaussFit(); for (int k = 10; k < CHANNEL_NUMBER; k++) { n = hist.GetBinContent(k); if (n == 0) continue; GF.addData(hist.GetBinCenter(k), n); } parma = GF.fit(); if (DEBUG) GF.draw(); return parma[1]; } void FileHandler::solve() { init(); readROOTData(file.c_str(), Left, Right, n, m, thMin, thMax); if (DEBUG) std::cout << getADC(Left[3][2]) << std::endl; else 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