/* * AculCalParsScint.cpp * * Created on: Oct 21, 2016 * Author: vratik */ #include "AculCalParsScint.h" #include "TFile.h" AculCalParsScint::AculCalParsScint() { // TODO Auto-generated constructor stub Reset(); } AculCalParsScint::AculCalParsScint(const char* parFile) { // TODO Auto-generated constructor stub SetParFile(parFile); Init(); } AculCalParsScint::~AculCalParsScint() { // TODO Auto-generated destructor stub } void AculCalParsScint::Init() { SetPars(); // LoadCuts(); } void AculCalParsScint::SetPars() { std::ifstream infile(fParFileName.Data()); if ( !infile.is_open() ) { printf("AculCalParsScint::ReadParFile: File %s was not open and parameters were not set.\n", fParFileName.Data()); Reset(); return; } fEnergyPoints = 0; TString line; TString word; Int_t i, min, max; Int_t lineLength = 400; Char_t det[lineLength]; Char_t part[lineLength]; Char_t fname[lineLength]; Char_t cname[lineLength]; double en; //energy while (!infile.eof()) { line.ReadLine(infile); if ( line.BeginsWith("#") || line.BeginsWith("//") ) continue; if ( line.BeginsWith("energies") ) { sscanf(line.Data(), "%*s %d", &i); continue; } if ( line.BeginsWith("crystals") ) { sscanf(line.Data(), "%*s %d", &i); fNoCrystals = i; continue; } if ( line.BeginsWith("files") ) { sscanf(line.Data(), "%*s %d", &i); fNoFiles = i; fFilePars.resize(fNoFiles); for (Int_t j = 0; j < fNoFiles; j++) { line.ReadLine(infile); if ( line.BeginsWith("#") || line.BeginsWith("//") ) { j--; continue; } sscanf(line, "%s", fname); word = fname; fFilePars[j].SetRawFileName(fname); fFilePars[j].SetNoCrystals(fNoCrystals); fFilePars[j].Init(); } continue; } /*if ( line.BeginsWith("cutFile") ) { sscanf(line.Data(), "%*s %s %d", fname, &fNoCuts); fCutsFileName = fname; for (Int_t j = 0; j < fNoCuts; j++) { line.ReadLine(infile); if ( line.BeginsWith("#") || line.BeginsWith("//") ) { j--; continue; } sscanf(line, "%s", cname); fCutName.push_back(cname); } continue; }*/ if ( line.BeginsWith("detector") ) { sscanf(line.Data(), "%*s %s %s", det, part); fDetName = det; fPartName = part; continue; } if ( line.BeginsWith("energy") ) { sscanf(line.Data(), "%*s %lf", &en); fFilePars[fEnergyPoints].SetEnergy(en); do {line.ReadLine(infile);} while (line.BeginsWith("#") || line.BeginsWith("//")); if ( line.BeginsWith("cutFile") ) { Int_t noCuts; // sscanf(line.Data(), "%*s %s %d", fname, &fNoCuts); sscanf(line.Data(), "%*s %s %d", fname, &noCuts); fFilePars[fEnergyPoints].SetNoCuts(noCuts); fFilePars[fEnergyPoints].SetCutFileName(fname); cout << line << endl; cout << noCuts << endl; // fCutsFileName = fname; for (Int_t j = 0; j < noCuts; j++) { line.ReadLine(infile); cout << line << endl; if ( line.BeginsWith("#") || line.BeginsWith("//") ) { j--; continue; } sscanf(line, "%s", cname); fFilePars[fEnergyPoints].SetCutName(j, cname); // fCutName.push_back(cname); } fFilePars[fEnergyPoints].LoadCuts(); line.ReadLine(infile); cout << line << endl; // continue; } // cout << fNoCrystals << endl; for (Int_t j = 0; j < fNoCrystals; j++) { // line.ReadLine(infile); cout << j << endl; if ( line.BeginsWith("#") || line.BeginsWith("//") ) { j--; line.ReadLine(infile); continue; } sscanf(line.Data(), "%d %d %d", &j, &min, &max); // cout << j << endl; fFilePars.at(fEnergyPoints).SetPeakMin(j, min); fFilePars.at(fEnergyPoints).SetPeakMax(j, max); line.ReadLine(infile); } fEnergyPoints++; continue; } // cout << "aklsjdlaksjd" << endl; // sscanf(line.Data(), "%d %d %d", &i, &min, &max); // fFilePars.at(fEnergyPoints-1).SetPeakMin(i, min); // fFilePars.at(fEnergyPoints-1).SetPeakMax(i, max); }//while infile.close(); return; } void AculCalParsScint::PrintParameters(const char* option) { TString opt = option; cout << "Parameters read from file \"" << fParFileName.Data() << "\"." << endl; cout << "\tCalibration of detector \"" << fDetName << "\" with " << fNoCrystals << " crystals." << endl; cout << "\tParticle: " << fPartName << endl; cout << "\tInput files with raw data (" << fNoFiles << "):" << endl; for (Int_t i = 0; i < (Int_t)fFilePars.size(); i++) { cout << "\t " << GetFileName(i) << endl; } cout << "\tInput energies (" << fNoFiles << "):" << endl; for (Int_t i = 0; i < (Int_t)fFilePars.size(); i++) { cout << "\t " << fFilePars[i].GetEnergy() << " MeV" << endl; } // cout << "\tInput file with " << fNoCuts << " cuts: \"" << fCutsFileName << "\"" << endl; // if (opt.Contains("all")) { // for (Int_t i = 0; i < (Int_t)fCutName.size(); i++) { // cout << "\t cut: \"" << fCutName[i] << "\"" << endl; // } // } for (Int_t k = 0; k < (Int_t)fFilePars.size(); k++) { cout << "\t" << fFilePars[k].GetNoCuts() << " cuts from file \"" << fFilePars[k].GetCutFileName() << "\":" << endl; for (Int_t i = 0; i < fFilePars[k].GetNoCuts(); i++) { cout << "\t " << fFilePars[k].GetCut(i)->GetName() << endl; } if (!opt.Contains("all")) continue; cout << "\tPeak limits for particular channels and energies:" << endl; cout << "\t Set number: " << k << "; energy: " << fFilePars[k].GetEnergy() << " MeV" << endl; for (Int_t i = 0; i < (Int_t)fFilePars[k].GetNoCrystals(); i++) { cout << "\t\t " << fFilePars[k].GetPeakMin(i) << "\t" << fFilePars[k].GetPeakMax(i) << endl; } } return; } void AculCalParsScint::Reset() { fNoCrystals = 0; fParFileName = ""; fDetName = ""; fPartName = ""; fNoFiles = 0; fFilePars.clear(); fEnergyPoints = 0; // fCutsFileName = ""; // fNoCuts = 0; //number of cuts // fCutName.clear(); return; } const char* AculCalParsScint::GetFileName(Int_t i) { if ( i >= (Int_t)fFilePars.size() ) { cerr << "\"AculCalParsScint::GetFileName\" index i cannot be higher than " << fFilePars.size() - 1 << endl; return 0; } return fFilePars[i].GetRawFileName(); } /*const char* AculCalParsScint::GetCutName(Int_t i) { if ( i > (Int_t)fCutName.size()-1 ) { cerr << "\"AculCalParsScint::GetCutName\" index i cannot be higher than " << fCutName.size() - 1 << endl; return 0; } return fCutName[i].Data(); }*/ /*TCutG* AculCalParsScint::GetCut(Int_t i) { if ( i >= (Int_t)fCuts.size() ) { cerr << "\"AculCalParsScint::GetCut\" index i cannot be higher than " << fCuts.size() - 1 << endl; return 0; } return &fCuts[i]; }*/ TCutG* AculCalParsScint::GetCut(const char* cutName, Int_t treeID) { const TString cName = cutName; if (treeID >= (Int_t)fFilePars.size()) { cerr << "\"AculCalParsScint::GetCut\" treeID does not exist. It cannot be higher than " << fFilePars.size() << "." << endl; return 0; } // TCutG *curCut = 0; for (Int_t i = 0; i < fFilePars[treeID].GetNoCuts(); i++) { // if (cName.EqualTo(fFilePars[treeID])) { return &fCuts[i]; } if ( cName.EqualTo( fFilePars[treeID].GetCutName(i) ) ) { return fFilePars[treeID].GetCut(i); // return curCut; } } cerr << "\"AculCalParsScint::GetCut\" cut \"" << cutName << "\" was not found." << endl; return 0; } Double_t AculCalParsScint::GetCalEnergy(Int_t i) { if ( i >= (Int_t)fFilePars.size() ) { cerr << "\"AculCalParsScint::GetCalEnergy\" index i cannot be higher than " << fFilePars.size() - 1 << endl; return 0; } return fFilePars[i].GetEnergy(); } Int_t AculCalParsScint::GetMinChannel(Int_t energy, Int_t crystal) { if ( energy >= (Int_t)fFilePars.size() ) { cerr << "\"AculCalParsScint::GetMinChannel\" index \"energy\" cannot be higher than " << fFilePars.size() - 1 << endl; return 0; } if ( crystal >= fFilePars[energy].GetNoCrystals() ) { cerr << "\"AculCalParsScint::GetMinChannel\" index \"crystal\" cannot be higher than " << fFilePars[energy].GetNoCrystals() - 1 << endl; return 0; } return fFilePars[energy].GetPeakMin(crystal); } Int_t AculCalParsScint::GetMaxChannel(Int_t energy, Int_t crystal) { if ( energy >= (Int_t)fFilePars.size() ) { cerr << "\"AculCalParsScint::GetMinChannel\" index \"energy\" cannot be higher than " << fFilePars.size() - 1 << endl; return 0; } if ( crystal >= fFilePars[energy].GetNoCrystals() ) { cerr << "\"AculCalParsScint::GetMinChannel\" index \"crystal\" cannot be higher than " << fFilePars[energy].GetNoCrystals() - 1 << endl; return 0; } return fFilePars[energy].GetPeakMax(crystal); } /*void AculCalParsScint::LoadCuts() { if (fCutsFileName.Length() == 0) { printf("AculCalParsScint::LoadCuts: Name of file (*.root) with cuts was not provided.\n"); printf("AculCalParsScint::LoadCuts: No cuts has been loaded.\n"); return; } TFile cutFile(fCutsFileName.Data(), "READ"); if(!cutFile.IsOpen()) { cerr << "\"AculCalParsScint::LoadCuts\" File " << fCutsFileName.Data() << " was not open and no cuts were loaded." << endl; return; } for (Int_t i = 0; i < (Int_t)fCutName.size(); i++) { TCutG *currentCut = (TCutG*)cutFile.Get(fCutName[i]); if (!currentCut) { cout << "\"AculCalParsScint::LoadCuts\" Cut \"" << fCutName[i] << "\" was not found in file " << fCutsFileName << "." << endl; continue; } fCuts.push_back(*currentCut); } }*/