17 #include "RooWorkspace.h" 22 mglu = stoi(prs.substr(prs.find(
"ino-")+4,prs.find(
"_mLSP")-prs.find(
"ino-")-4));
23 mlsp = stoi(prs.substr(prs.find(
"LSP-")+4,prs.find(
"_Tune")-prs.find(
"LSP-")-4));
26 bool Contains(
const string &str,
const string &pat){
27 return str.find(pat) != string::npos;
31 return str.find(pat) == 0;
34 void ReplaceAll(
string &str,
const string &orig,
const string &rep){
36 while ((loc = str.find(orig, loc)) != string::npos) {
37 str.replace(loc, orig.length(), rep);
42 void RmCutOn(
string &cut,
const string &to_rm,
const string &rep){
44 while ((loc = cut.find(to_rm, loc)) != string::npos) {
45 size_t end = cut.find_first_of(
")&| ", loc);
46 cut.replace(loc, end-loc, rep);
52 if(v.size() == 0)
return -1;
54 for(
size_t i = 1; i < v.size(); ++i){
55 if(v.at(i) > v.at(imax)){
63 const string &set_name,
65 if(var_names.size()==0){
66 w.defineSet(set_name.c_str(),
"");
68 string cat_names = var_names.at(0);
69 for(
size_t ivar = 1; ivar < var_names.size(); ++ivar){
70 cat_names += (
"," + var_names.at(ivar));
72 w.defineSet(set_name.c_str(), cat_names.c_str());
80 const string hist_name{
"temp"};
81 TH1D temp{hist_name.c_str(),
"", 1, -1.0, 1.0};
83 tree.Project(hist_name.c_str(),
"0.",
static_cast<const char *
>(cut));
84 count=temp.IntegralAndError(0,2,uncertainty);
88 FILE *pipe = popen(cmd.c_str(),
"r");
89 if(!pipe)
ERROR(
"Could not open pipe.");
90 const size_t buffer_size = 128;
91 char buffer[buffer_size];
94 if(fgets(buffer, buffer_size, pipe) != NULL) result += buffer;
102 const string& tokens){
103 char* ipt(
new char[input.size()+1]);
104 memcpy(ipt, input.data(), input.size());
105 ipt[input.size()]=
static_cast<char>(0);
106 char* ptr(strtok(ipt, tokens.c_str()));
107 vector<string> output(0);
109 output.push_back(ptr);
110 ptr=strtok(NULL, tokens.c_str());
116 auto pos = path.rfind(
".");
117 if(pos == string::npos){
120 auto count = path.size() - pos;
121 path = path.replace(pos, count, new_ext);
128 char *dir_name =
new char[prefix.size()];
129 if(dir_name ==
nullptr)
ERROR(
"Could not allocate directory name");
130 strcpy(dir_name, prefix.c_str());
string MakeDir(string prefix)
void GetCountAndUncertainty(TTree &tree, const Cut &cut, double &count, double &uncertainty)
void parseMasses(const string &prs, int &mglu, int &mlsp)
string ChangeExtension(string path, const string &new_ext)
size_t MaxIndex(const vector< double > &v)
void ReplaceAll(string &str, const string &orig, const string &rep)
vector< string > Tokenize(const string &input, const string &tokens)
void DefineSet(RooWorkspace &w, const string &set_name, const vector< string > &var_names)
bool StartsWith(const string &str, const string &pat)
void RmCutOn(string &cut, const string &to_rm, const string &rep)
bool Contains(const string &str, const string &pat)
string execute(const string &cmd)