Angular analysis of B+->K*+(K+pi0)mumu
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
//Renata Kopecna
#ifndef MVACLASS_HPP
#define MVACLASS_HPP
#include "GlobalFunctions.hh"
////////////////////////////////////
///
/// MVA CONFIG-CLASS
///
/// Use the txt files to keep an easy overview of the MVA variables
///
////////////////////////////////////
using namespace std;
//define MVA configurations:
struct MVAconfiguration{
//If SplitYears is false, the MVA training will process the the selected Run (1: 2011+2012 2: 2015+2016+2017+2018 or 12: 2011-2018)
bool SplitYears = false; Int_t Run = 1; std::vector<Int_t> years = {2011};
Int_t KShortDecaysInVelo = 1;
bool SplitInQ2Range = SplitInQ2; bool UseLowQ2Range = true;
bool gammaTM = false; //T: only true gammas, F: include random gamma
string customTMbranch = "TMed";
//to name the output files differently
Int_t nConfiguration = 0;
} MVAconfig;
struct MVA_def{ string ReaderName; //Name of the MVA reader
string LaTeXName; //Displayed name in the plots
string Unit; //Unit for the branch
int NoBr; //Number of used branches for the reader
string Formula; //formula: Reader = f(Branches)
char DataType; //D: Double_t, F: Float_t, I: Int_t,...
};
class MVA_variables{ private: int NoVariables; int NoBranches; public: vector<MVA_def> AllVariables; vector <string> AllBranches;
MVA_variables(){ NoVariables = 0; AllVariables.clear(); } //empty constructor
MVA_variables(std::string DL); //default constructor
~MVA_variables(); //destuctor
void print(); vector <string> GetAllReaderNames(); int NumberOfVariables(){ return NoVariables; } int NumberOfBranches(){ return NoBranches; } vector <string> GetAllBranches(){ return AllBranches; } };
MVA_variables::MVA_variables(std::string DL){
std:: ifstream file; std:: string line = ""; MVA_def tmp; std::string StrTmp; std::string filename = thePath+"/TMVA_variables_" + TheDecay + DL + ".txt"; file.open(filename); //open file with the MVA variables stored; different files for different decays!
if (file.is_open()) cout << "[INFO]\t\tInput MVA variables are being read from file "<< filename << "." <<endl; else{ cout << "[ERROR]\t\tInput MVA variables file " << filename << " failed to open." << endl; return; } /*
else { //in case of using this in the CodeForTests folder
filename = "../TMVA_variables_" + TheDecay + DL + ".txt"; file.open(filename); //open file with the MVA variables stored; different files for different decays!
if (file.is_open()) cout << "[INFO]\t\tInput MVA variables are being read from file "<< filename << "." <<endl; else{ cout << "[ERROR]\t\tInput MVA variables file " << filename << " failed to open." << endl; return; } } */
//list of variables suffix which get an '_DTF' appendix
const int pp = 9; std::string P[pp] = {"_PX", "_PY", "_PZ", "_PT", "_PE", "_ETA", "_M", "_MERR", "_ID"};
getline(file, line); //skipping first line with info about the file
while(1){ //loop over lines until you find the end of the file
getline(file, line); if (line == "###") break; if(file.eof()) break; std::istringstream istr(line); //save from file to the vector
istr >> tmp.ReaderName; istr >> tmp.LaTeXName; istr >> tmp.Unit; if (tmp.Unit == "0") tmp.Unit = ""; istr >> tmp.DataType; istr >> tmp.NoBr; istr >> tmp.Formula; for (int n = 0; n < tmp.NoBr; n++){ istr >> StrTmp; AllBranches.push_back(StrTmp); } //DTF modifications:
if(UseDTF){ for(int p = 0; p < pp; p++){ //loop over suffix //ReaderNames
size_t pos = tmp.ReaderName.find(P[p].c_str()); if(pos!=std::string::npos){ coutDebug("[DTF]\t\tReplacing ReaderName '" + tmp.ReaderName); } while(pos!=std::string::npos){ tmp.ReaderName.replace(pos,P[p].length(),(P[p]+"_DTF").c_str()); pos = tmp.ReaderName.find(P[p].c_str(), pos+1); if(pos==std::string::npos)coutDebug("' with '" + tmp.ReaderName + "'."); } } } AllVariables.push_back(tmp); //Now I assume user is not an idiot!
}; file.close();
if(UseDTF){ for(int p = 0; p < pp; p++){ //loop over suffix //BranchNames
for (unsigned int n = 0; n < AllBranches.size(); n++){ size_t pos = AllBranches.at(n).find(P[p].c_str()); if(pos!=std::string::npos) coutDebug("[DTF]\t\tReplacing variable '" + AllBranches.at(n)); while(pos!=std::string::npos){ AllBranches.at(n).replace(pos,P[p].length(),(P[p]+"_DTF").c_str()); pos = AllBranches.at(n).find(P[p].c_str(), pos+1); if(pos==std::string::npos)coutDebug("' with '" + AllBranches.at(n) + "'."); } } } }
NoVariables = AllVariables.size(); NoBranches = AllBranches.size(); return; }
MVA_variables::~MVA_variables(){ AllVariables.empty(); NoVariables = 0; }
void MVA_variables::print(){ coutInfo("Using " + to_string(NoVariables) + " variables."); coutInfo("BranchName \t\t LaTeXName \t\t Unit \t\t DataType"); for (vector<MVA_def>::iterator tracksIter1 = AllVariables.begin(); tracksIter1 !=AllVariables.end();++tracksIter1){ coutInfo((*tracksIter1).ReaderName + "\t\t" + (*tracksIter1).LaTeXName + "\t\t" + (*tracksIter1).Unit + "\t\t" + (*tracksIter1).DataType); } }
vector <string> MVA_variables::GetAllReaderNames(){ vector<string> tmp; for (vector<MVA_def>::iterator tracksIter1 = AllVariables.begin(); tracksIter1 !=AllVariables.end();++tracksIter1){ tmp.push_back((*tracksIter1).ReaderName); } return tmp; }
#endif // MVACLASS_HPP
|