コード例 #1
0
ファイル: wince-twoms.cpp プロジェクト: mikelsv/opensource
MStringS::MStringS(const VString string){
	int size=string.size();
	if (!size) {data=0; return ;}
	data=(short*)new char[size*2+2];
	//MString ret; ret.Reserv(size);
	for(int i=0; i<size; i++) data[i]=ctos(string[i]);
	sz=size; data[sz]=0;
	return ;
}
コード例 #2
0
ファイル: Log4cplus.cpp プロジェクト: wang1986one/duipcmgr
void Utils::CLogger::SetInstanceFilter( VString& filterList )
{
	// 删除Root的Appender,等于不输出任何信息
	log4cplus::Logger rootLogger = log4cplus::Logger::getRoot();
	rootLogger.removeAllAppenders();

	// 设置要求输出的Instance
	size_t iCount=filterList.size();
	for ( size_t i=0; i<iCount; i++)
	{
		log4cplus::Logger logger = log4cplus::Logger::getInstance(filterList[i].GetString());
		logger.addAppender(GetAppender());
#ifdef _DEBUG
		logger.addAppender(GetDebugAppender());
#endif // _DEBUG
	}
}
コード例 #3
0
VString VStringList::join(const VString &separator) const
{
    int l = size()-1;
    VString ret;
    // немного ускоряем работу
    ret.reserve(l * separator.size());

    for(int i=0; i<l; ++i)
    {
	ret.append(at(i));
	ret.append(separator);
    }

    if(!isEmpty())
	ret.append(at(size()-1));
    return ret;
}
コード例 #4
0
int main() {
  ch::CombineHarvester cb;

  typedef vector<pair<int, string>> Categories;
  typedef vector<string> VString;

  string auxiliaries  = string(getenv("CMSSW_BASE")) + "/src/auxiliaries/";
  string aux_shapes   = auxiliaries +"shapes/";
  string aux_pruning  = auxiliaries +"pruning/";
  string input_dir =
      string(getenv("CMSSW_BASE")) + "/src/CombineHarvester/CombineTools/input";

  VString chns =
      {"et", "mt", "em", "ee", "mm", "tt"};

  map<string, string> input_folders = {
      {"et", "Imperial"},
      {"mt", "Imperial"},
      {"em", "MIT"},
      {"ee", "DESY-KIT"},
      {"mm", "DESY-KIT"},
      {"tt", "CERN"}
  };

  map<string, VString> bkg_procs;
  bkg_procs["et"] = {"ZTT", "W", "QCD", "ZL", "ZJ", "TT", "VV"};
  bkg_procs["mt"] = {"ZTT", "W", "QCD", "ZL", "ZJ", "TT", "VV"};
  bkg_procs["em"] = {"Ztt", "EWK", "Fakes", "ttbar", "ggH_hww125", "qqH_hww125"};
  bkg_procs["ee"] = {"ZTT", "WJets", "QCD", "ZEE", "TTJ", "Dibosons", "ggH_hww125", "qqH_hww125"};
  bkg_procs["mm"] = {"ZTT", "WJets", "QCD", "ZMM", "TTJ", "Dibosons", "ggH_hww125", "qqH_hww125"};
  bkg_procs["tt"] = {"ZTT", "W", "QCD", "ZL", "ZJ", "TT", "VV"};

  VString sig_procs = {"ggH", "qqH", "WH", "ZH"};

  map<string, Categories> cats;
  cats["et_7TeV"] = {
      {1, "eleTau_0jet_medium"}, {2, "eleTau_0jet_high"},
      {3, "eleTau_1jet_medium"}, {5, "eleTau_1jet_high_mediumhiggs"},
      {6, "eleTau_vbf"}};

  cats["et_8TeV"] = {
      {1, "eleTau_0jet_medium"}, {2, "eleTau_0jet_high"},
      {3, "eleTau_1jet_medium"}, {5, "eleTau_1jet_high_mediumhiggs"},
      {6, "eleTau_vbf_loose"}, {7, "eleTau_vbf_tight"}};

  cats["mt_7TeV"] = {
      {1, "muTau_0jet_medium"}, {2, "muTau_0jet_high"},
      {3, "muTau_1jet_medium"}, {4, "muTau_1jet_high_lowhiggs"}, {5, "muTau_1jet_high_mediumhiggs"},
      {6, "muTau_vbf"}};

  cats["mt_8TeV"] = {
      {1, "muTau_0jet_medium"}, {2, "muTau_0jet_high"},
      {3, "muTau_1jet_medium"}, {4, "muTau_1jet_high_lowhiggs"}, {5, "muTau_1jet_high_mediumhiggs"},
      {6, "muTau_vbf_loose"}, {7, "muTau_vbf_tight"}};

  cats["em_7TeV"] = {
      {0, "emu_0jet_low"}, {1, "emu_0jet_high"},
      {2, "emu_1jet_low"}, {3, "emu_1jet_high"},
      {4, "emu_vbf_loose"}};

  cats["em_8TeV"] = {
      {0, "emu_0jet_low"}, {1, "emu_0jet_high"},
      {2, "emu_1jet_low"}, {3, "emu_1jet_high"},
      {4, "emu_vbf_loose"}, {5, "emu_vbf_tight"}};

  cats["ee_7TeV"] = {
      {0, "ee_0jet_low"}, {1, "ee_0jet_high"},
      {2, "ee_1jet_low"}, {3, "ee_1jet_high"},
      {4, "ee_vbf"}};
  cats["ee_8TeV"] = cats["ee_7TeV"];

  cats["mm_7TeV"] = {
      {0, "mumu_0jet_low"}, {1, "mumu_0jet_high"},
      {2, "mumu_1jet_low"}, {3, "mumu_1jet_high"},
      {4, "mumu_vbf"}};
  cats["mm_8TeV"] = cats["mm_7TeV"];

  cats["tt_8TeV"] = {
      {0, "tauTau_1jet_high_mediumhiggs"}, {1, "tauTau_1jet_high_highhiggs"},
      {2, "tauTau_vbf"}};

  vector<string> masses = ch::ValsFromRange("110:145|5");

  cout << ">> Creating processes and observations...\n";
  for (string era : {"7TeV", "8TeV"}) {
    for (auto chn : chns) {
      cb.AddObservations(
        {"*"}, {"htt"}, {era}, {chn}, cats[chn+"_"+era]);
      cb.AddProcesses(
        {"*"}, {"htt"}, {era}, {chn}, bkg_procs[chn], cats[chn+"_"+era], false);
      cb.AddProcesses(
        masses, {"htt"}, {era}, {chn}, sig_procs, cats[chn+"_"+era], true);
    }
  }
  // Have to drop ZL from tautau_vbf category
  cb.FilterProcs([](ch::Process const* p) {
    return p->bin() == "tauTau_vbf" && p->process() == "ZL";
  });

  cout << ">> Adding systematic uncertainties...\n";
  ch::AddSystematics_et_mt(cb);
  ch::AddSystematics_em(cb);
  ch::AddSystematics_ee_mm(cb);
  ch::AddSystematics_tt(cb);

  cout << ">> Extracting histograms from input root files...\n";
  for (string era : {"7TeV", "8TeV"}) {
    for (string chn : chns) {
      // Skip 7TeV tt:
      if (chn == "tt" && era == "7TeV") continue;
      string file = aux_shapes + input_folders[chn] + "/htt_" + chn +
                    ".inputs-sm-" + era + "-hcg.root";
      cb.cp().channel({chn}).era({era}).backgrounds().ExtractShapes(
          file, "$BIN/$PROCESS", "$BIN/$PROCESS_$SYSTEMATIC");
      cb.cp().channel({chn}).era({era}).signals().ExtractShapes(
          file, "$BIN/$PROCESS$MASS", "$BIN/$PROCESS$MASS_$SYSTEMATIC");
    }
  }

  //! [part1]
  cout << ">> Scaling signal process rates...\n";
  map<string, TGraph> xs;
  // Get the table of H->tau tau BRs vs mass
  xs["htt"] = ch::TGraphFromTable(input_dir+"/xsecs_brs/htt_YR3.txt", "mH", "br");
  for (string const& e : {"7TeV", "8TeV"}) {
    for (string const& p : sig_procs) {
      // Get the table of xsecs vs mass for process "p" and era "e":
      xs[p+"_"+e] = ch::TGraphFromTable(input_dir+"/xsecs_brs/"+p+"_"+e+"_YR3.txt", "mH", "xsec");
      cout << ">>>> Scaling for process " << p << " and era " << e << "\n";
      cb.cp().process({p}).era({e}).ForEachProc([&](ch::Process *proc) {
        double m = boost::lexical_cast<double>(proc->mass());
        proc->set_rate(proc->rate() * xs[p+"_"+e].Eval(m) * xs["htt"].Eval(m));
      });
    }
  }
  //! [part1]
  xs["hww_over_htt"] = ch::TGraphFromTable(input_dir+"/xsecs_brs/hww_over_htt.txt", "mH", "ratio");
  for (string const& e : {"7TeV", "8TeV"}) {
    for (string const& p : {"ggH", "qqH"}) {
     cb.cp().channel({"em"}).process({p+"_hww125"}).era({e})
       .ForEachProc([&](ch::Process *proc) {
         proc->set_rate(proc->rate() * xs[p+"_"+e].Eval(125.) * xs["htt"].Eval(125.));
         proc->set_rate(proc->rate() * xs["hww_over_htt"].Eval(125.));
      });
    }
  }

  cout << ">> Merging bin errors and generating bbb uncertainties...\n";

  //! [part2]
  auto bbb = ch::BinByBinFactory()
      .SetAddThreshold(0.1)
      .SetMergeThreshold(0.5)
      .SetFixNorm(true);
  //! [part2]

  ch::CombineHarvester cb_et = cb.cp().channel({"et"});
  bbb.MergeAndAdd(cb_et.cp().era({"7TeV"}).bin_id({1, 2}).process({"ZL", "ZJ", "QCD", "W"}), cb);
  bbb.MergeAndAdd(cb_et.cp().era({"7TeV"}).bin_id({3, 5}).process({"W"}), cb);
  bbb.MergeAndAdd(cb_et.cp().era({"8TeV"}).bin_id({1, 2}).process({"ZL", "ZJ", "QCD", "W"}), cb);
  bbb.MergeAndAdd(cb_et.cp().era({"8TeV"}).bin_id({3, 5}).process({"W"}), cb);
  bbb.MergeAndAdd(cb_et.cp().era({"7TeV"}).bin_id({6}).process({"ZL", "ZJ", "W", "ZTT"}), cb);
  //! [part3]
  bbb.MergeAndAdd(cb_et.cp().era({"8TeV"}).bin_id({6}).process({"ZL", "ZJ", "W"}), cb);
  //! [part3]
  bbb.MergeAndAdd(cb_et.cp().era({"8TeV"}).bin_id({7}).process({"ZL", "ZJ", "W", "ZTT"}), cb);

  ch::CombineHarvester cb_mt = cb.cp().channel({"mt"});
  bbb.MergeAndAdd(cb_mt.cp().era({"7TeV"}).bin_id({1, 2, 3, 4}).process({"W", "QCD"}), cb);
  bbb.MergeAndAdd(cb_mt.cp().era({"8TeV"}).bin_id({1, 2, 3, 4}).process({"W", "QCD"}), cb);
  bbb.MergeAndAdd(cb_mt.cp().era({"7TeV"}).bin_id({5}).process({"W"}), cb);
  bbb.MergeAndAdd(cb_mt.cp().era({"7TeV"}).bin_id({6}).process({"W", "ZTT"}), cb);
  bbb.MergeAndAdd(cb_mt.cp().era({"8TeV"}).bin_id({5, 6}).process({"W"}), cb);
  bbb.MergeAndAdd(cb_mt.cp().era({"8TeV"}).bin_id({7}).process({"W", "ZTT"}), cb);

  ch::CombineHarvester cb_em = cb.cp().channel({"em"});
  bbb.MergeAndAdd(cb_em.cp().era({"7TeV"}).bin_id({1, 3}).process({"Fakes"}), cb);
  bbb.MergeAndAdd(cb_em.cp().era({"8TeV"}).bin_id({1, 3}).process({"Fakes"}), cb);
  bbb.MergeAndAdd(cb_em.cp().era({"7TeV"}).bin_id({4}).process({"Fakes", "EWK", "Ztt"}), cb);
  bbb.MergeAndAdd(cb_em.cp().era({"8TeV"}).bin_id({5}).process({"Fakes", "EWK", "Ztt"}), cb);
  bbb.MergeAndAdd(cb_em.cp().era({"8TeV"}).bin_id({4}).process({"Fakes", "EWK"}), cb);

  ch::CombineHarvester cb_tt = cb.cp().channel({"tt"});
  bbb.MergeAndAdd(cb_tt.cp().era({"8TeV"}).bin_id({0, 1, 2}).process({"ZTT", "QCD"}), cb);

  bbb.SetAddThreshold(0.);  // ee and mm use a different threshold
  ch::CombineHarvester cb_ll = cb.cp().channel({"ee", "mm"});
  bbb.MergeAndAdd(cb_ll.cp().era({"7TeV"}).bin_id({1, 3, 4}).process({"ZTT", "ZEE", "ZMM", "TTJ"}), cb);
  bbb.MergeAndAdd(cb_ll.cp().era({"8TeV"}).bin_id({1, 3, 4}).process({"ZTT", "ZEE", "ZMM", "TTJ"}), cb);

  cout << ">> Setting standardised bin names...\n";
  ch::SetStandardBinNames(cb);
  //! [part4]
  VString droplist = ch::ParseFileLines(
    aux_pruning + "uncertainty-pruning-drop-131128-sm.txt");
  cout << ">> Droplist contains " << droplist.size() << " entries\n";

  set<string> to_drop;
  for (auto x : droplist) to_drop.insert(x);

  auto pre_drop = cb.syst_name_set();
  cb.syst_name(droplist, false);
  auto post_drop = cb.syst_name_set();
  cout << ">> Systematics dropped: " << pre_drop.size() - post_drop.size()
            << "\n";
  //! [part4]

  // The following is an example of duplicating existing objects and modifying
  // them in the process. Here we clone all mH=125 signals, adding "_SM125" to
  // the process name, switching it to background and giving it the generic mass
  // label. This would let us create a datacard for doing a second Higgs search

  // ch::CloneProcsAndSysts(cb.cp().signals().mass({"125"}), cb,
  //                        [](ch::Object* p) {
  //   p->set_process(p->process() + "_SM125");
  //   p->set_signal(false);
  //   p->set_mass("*");
  // });


  // Writing datacards manually - easier with CardWriter below:

  // string folder = "output/sm_cards/LIMITS";
  // boost::filesystem::create_directories(folder);
  // boost::filesystem::create_directories(folder + "/common");
  // for (auto m : masses) {
  //   boost::filesystem::create_directories(folder + "/" + m);
  // }

  // for (string chn : chns) {
  //   TFile output((folder + "/common/htt_" + chn + ".input.root").c_str(),
  //                "RECREATE");
  //   auto bins = cb.cp().channel({chn}).bin_set();
  //   for (auto b : bins) {
  //     for (auto m : masses) {
  //       cout << ">> Writing datacard for bin: " << b << " and mass: " << m
  //                 << "\r" << flush;
  //       cb.cp().channel({chn}).bin({b}).mass({m, "*"}).WriteDatacard(
  //           folder + "/" + m + "/" + b + ".txt", output);
  //     }
  //   }
  //   output.Close();
  // }



  // Here we define a CardWriter with a template for how the text datacard
  // and the root files should be named.
  ch::CardWriter writer("$TAG/$MASS/$ANALYSIS_$CHANNEL_$BINID_$ERA.txt",
                        "$TAG/common/$ANALYSIS_$CHANNEL.input_$ERA.root");
  // writer.SetVerbosity(1);
  writer.WriteCards("output/sm_cards/cmb", cb);
  for (auto chn : cb.channel_set()) {
    writer.WriteCards("output/sm_cards/" + chn, cb.cp().channel({chn}));
  }

  cout << "\n>> Done!\n";
}
コード例 #5
0
int main() {
    ch::CombineHarvester cb;
    // cb.SetVerbosity(1);

    typedef vector<pair<int, string>> Categories;
    typedef vector<string> VString;

    string auxiliaries  = string(getenv("CMSSW_BASE")) + "/src/auxiliaries/";
    string aux_shapes   = auxiliaries +"shapes/";
    string aux_pruning  = auxiliaries +"pruning/";
    string input_dir =
        string(getenv("CMSSW_BASE")) + "/src/CombineHarvester/CombineTools/input";

    VString chns =
    {"et", "mt", "em", "ee", "mm", "tt"};

    map<string, string> input_folders = {
        {"et", "Imperial"},
        {"mt", "Imperial"},
        {"em", "MIT"},
        {"ee", "DESY-KIT"},
        {"mm", "DESY-KIT"},
        {"tt", "CERN"}
    };

    map<string, string> sig_shape_map = {
        {"et", "_fine_binning"},
        {"mt", "_fine_binning"},
        {"em", ""},
        {"ee", ""},
        {"mm", ""},
        {"tt", "_fine_binning"}
    };

    map<string, VString> bkg_procs;
    bkg_procs["et"] = {"ZTT", "W", "QCD", "ZL", "ZJ", "TT", "VV"};
    bkg_procs["mt"] = {"ZTT", "W", "QCD", "ZL", "ZJ", "TT", "VV"};
    bkg_procs["em"] = {"Ztt", "EWK", "Fakes", "ttbar", "ggH_hww125", "qqH_hww125"};
    bkg_procs["ee"] = {"ZTT", "WJets", "QCD", "ZEE", "TTJ", "Dibosons", "ggH_hww125", "qqH_hww125"};
    bkg_procs["mm"] = {"ZTT", "WJets", "QCD", "ZMM", "TTJ", "Dibosons", "ggH_hww125", "qqH_hww125"};
    bkg_procs["tt"] = {"ZTT", "W", "QCD", "ZL", "ZJ", "TT", "VV"};

    VString sig_procs = {"ggH", "qqH", "WH", "ZH"};

    map<string, Categories> cats;
    cats["et_7TeV"] = {
        {1, "eleTau_0jet_medium"}, {2, "eleTau_0jet_high"},
        {3, "eleTau_1jet_medium"}, {5, "eleTau_1jet_high_mediumhiggs"},
        {6, "eleTau_vbf"}
    };

    cats["et_8TeV"] = {
        {1, "eleTau_0jet_medium"}, {2, "eleTau_0jet_high"},
        {3, "eleTau_1jet_medium"}, {5, "eleTau_1jet_high_mediumhiggs"},
        {6, "eleTau_vbf_loose"}, {7, "eleTau_vbf_tight"}
    };

    cats["mt_7TeV"] = {
        {1, "muTau_0jet_medium"}, {2, "muTau_0jet_high"},
        {3, "muTau_1jet_medium"}, {4, "muTau_1jet_high_lowhiggs"}, {5, "muTau_1jet_high_mediumhiggs"},
        {6, "muTau_vbf"}
    };

    cats["mt_8TeV"] = {
        {1, "muTau_0jet_medium"}, {2, "muTau_0jet_high"},
        {3, "muTau_1jet_medium"}, {4, "muTau_1jet_high_lowhiggs"}, {5, "muTau_1jet_high_mediumhiggs"},
        {6, "muTau_vbf_loose"}, {7, "muTau_vbf_tight"}
    };

    cats["em_7TeV"] = {
        {0, "emu_0jet_low"}, {1, "emu_0jet_high"},
        {2, "emu_1jet_low"}, {3, "emu_1jet_high"},
        {4, "emu_vbf_loose"}
    };

    cats["em_8TeV"] = {
        {0, "emu_0jet_low"}, {1, "emu_0jet_high"},
        {2, "emu_1jet_low"}, {3, "emu_1jet_high"},
        {4, "emu_vbf_loose"}, {5, "emu_vbf_tight"}
    };

    cats["ee_7TeV"] = {
        {0, "ee_0jet_low"}, {1, "ee_0jet_high"},
        {2, "ee_1jet_low"}, {3, "ee_1jet_high"},
        {4, "ee_vbf"}
    };
    cats["ee_8TeV"] = cats["ee_7TeV"];

    cats["mm_7TeV"] = {
        {0, "mumu_0jet_low"}, {1, "mumu_0jet_high"},
        {2, "mumu_1jet_low"}, {3, "mumu_1jet_high"},
        {4, "mumu_vbf"}
    };
    cats["mm_8TeV"] = cats["mm_7TeV"];

    cats["tt_8TeV"] = {
        {0, "tauTau_1jet_high_mediumhiggs"}, {1, "tauTau_1jet_high_highhiggs"},
        {2, "tauTau_vbf"}
    };

    vector<string> masses = ch::ValsFromRange("110:145|5");

    cout << ">> Creating processes and observations...\n";
    for (string era : {
                "7TeV", "8TeV"
            }) {
        for (auto chn : chns) {
            cb.AddObservations(
            {"*"}, {"htt"}, {era}, {chn}, cats[chn+"_"+era]);
            cb.AddProcesses(
            {"*"}, {"htt"}, {era}, {chn}, bkg_procs[chn], cats[chn+"_"+era], false);
            cb.AddProcesses(
                masses, {"htt"}, {era}, {chn}, sig_procs, cats[chn+"_"+era], true);
        }
    }
    // Have to drop ZL from tautau_vbf category
    cb.FilterProcs([](ch::Process const* p) {
        return p->bin() == "tauTau_vbf" && p->process() == "ZL";
    });

    cout << ">> Adding systematic uncertainties...\n";
    ch::AddSystematics_et_mt(cb);
    ch::AddSystematics_em(cb);
    ch::AddSystematics_ee_mm(cb);
    ch::AddSystematics_tt(cb);

    cout << ">> Extracting histograms from input root files...\n";
    for (string era : {
                "7TeV", "8TeV"
            }) {
        for (string chn : chns) {
            // Skip 7TeV tt:
            if (chn == "tt" && era == "7TeV") continue;
            string file = aux_shapes + input_folders[chn] + "/htt_" + chn +
                          ".inputs-sm-" + era + "-hcg.root";
            string ext = sig_shape_map[chn];
            cb.cp().channel({chn}).era({era}).backgrounds().ExtractShapes(
                file, "$BIN/$PROCESS", "$BIN/$PROCESS_$SYSTEMATIC");
            cb.cp().channel({chn}).era({era}).signals().ExtractShapes(
                file, "$BIN/$PROCESS$MASS"+ext, "$BIN/$PROCESS$MASS_$SYSTEMATIC"+ext);
        }
    }

    cout << ">> Scaling signal process rates...\n";
    map<string, TGraph> xs;
    // Get the table of H->tau tau BRs vs mass
    xs["htt"] = ch::TGraphFromTable(input_dir+"/xsecs_brs/htt_YR3.txt", "mH", "br");
    for (string const& e : {
    "7TeV", "8TeV"
}) {
        for (string const& p : sig_procs) {
            // Get the table of xsecs vs mass for process "p" and era "e":
            xs[p+"_"+e] = ch::TGraphFromTable(input_dir+"/xsecs_brs/"+p+"_"+e+"_YR3.txt", "mH", "xsec");
            cout << ">>>> Scaling for process " << p << " and era " << e << "\n";
            cb.cp().process({p}).era({e}).ForEachProc([&](ch::Process *proc) {
                double m = boost::lexical_cast<double>(proc->mass());
                proc->set_rate(proc->rate() * xs[p+"_"+e].Eval(m) * xs["htt"].Eval(m));
            });
        }
    }
    xs["hww_over_htt"] = ch::TGraphFromTable(input_dir+"/xsecs_brs/hww_over_htt.txt", "mH", "ratio");
    for (string const& e : {
    "7TeV", "8TeV"
}) {
        for (string const& p : {
        "ggH", "qqH"
    }) {
            cb.cp().channel({"em"}).process({p+"_hww125"}).era({e})
            .ForEachProc([&](ch::Process *proc) {
                proc->set_rate(proc->rate() * xs[p+"_"+e].Eval(125.) * xs["htt"].Eval(125.));
                proc->set_rate(proc->rate() * xs["hww_over_htt"].Eval(125.));
            });
        }
    }

    cout << ">> Merging bin errors and generating bbb uncertainties...\n";

    auto bbb = ch::BinByBinFactory()
               .SetAddThreshold(0.1)
               .SetMergeThreshold(0.5)
               .SetFixNorm(true);

    ch::CombineHarvester cb_et = cb.cp().channel({"et"});
    bbb.MergeAndAdd(cb_et.cp().era({"7TeV"}).bin_id({1, 2}).process({"ZL", "ZJ", "QCD", "W"}), cb);
    bbb.MergeAndAdd(cb_et.cp().era({"7TeV"}).bin_id({3, 5}).process({"W"}), cb);
    bbb.MergeAndAdd(cb_et.cp().era({"8TeV"}).bin_id({1, 2}).process({"ZL", "ZJ", "QCD", "W"}), cb);
    bbb.MergeAndAdd(cb_et.cp().era({"8TeV"}).bin_id({3, 5}).process({"W"}), cb);
    bbb.MergeAndAdd(cb_et.cp().era({"7TeV"}).bin_id({6}).process({"ZL", "ZJ", "W", "ZTT"}), cb);
    bbb.MergeAndAdd(cb_et.cp().era({"8TeV"}).bin_id({6}).process({"ZL", "ZJ", "W"}), cb);
    bbb.MergeAndAdd(cb_et.cp().era({"8TeV"}).bin_id({7}).process({"ZL", "ZJ", "W", "ZTT"}), cb);

    ch::CombineHarvester cb_mt = cb.cp().channel({"mt"});
    bbb.MergeAndAdd(cb_mt.cp().era({"7TeV"}).bin_id({1, 2, 3, 4}).process({"W", "QCD"}), cb);
    bbb.MergeAndAdd(cb_mt.cp().era({"8TeV"}).bin_id({1, 2, 3, 4}).process({"W", "QCD"}), cb);
    bbb.MergeAndAdd(cb_mt.cp().era({"7TeV"}).bin_id({5}).process({"W"}), cb);
    bbb.MergeAndAdd(cb_mt.cp().era({"7TeV"}).bin_id({6}).process({"W", "ZTT"}), cb);
    bbb.MergeAndAdd(cb_mt.cp().era({"8TeV"}).bin_id({5, 6}).process({"W"}), cb);
    bbb.MergeAndAdd(cb_mt.cp().era({"8TeV"}).bin_id({7}).process({"W", "ZTT"}), cb);

    ch::CombineHarvester cb_em = cb.cp().channel({"em"});
    bbb.MergeAndAdd(cb_em.cp().era({"7TeV"}).bin_id({1, 3}).process({"Fakes"}), cb);
    bbb.MergeAndAdd(cb_em.cp().era({"8TeV"}).bin_id({1, 3}).process({"Fakes"}), cb);
    bbb.MergeAndAdd(cb_em.cp().era({"7TeV"}).bin_id({4}).process({"Fakes", "EWK", "Ztt"}), cb);
    bbb.MergeAndAdd(cb_em.cp().era({"8TeV"}).bin_id({5}).process({"Fakes", "EWK", "Ztt"}), cb);
    bbb.MergeAndAdd(cb_em.cp().era({"8TeV"}).bin_id({4}).process({"Fakes", "EWK"}), cb);

    ch::CombineHarvester cb_tt = cb.cp().channel({"tt"});
    bbb.MergeAndAdd(cb_tt.cp().era({"8TeV"}).bin_id({0, 1, 2}).process({"ZTT", "QCD"}), cb);

    bbb.SetAddThreshold(0.);  // ee and mm use a different threshold
    ch::CombineHarvester cb_ll = cb.cp().channel({"ee", "mm"});
    bbb.MergeAndAdd(cb_ll.cp().era({"7TeV"}).bin_id({1, 3, 4}).process({"ZTT", "ZEE", "ZMM", "TTJ"}), cb);
    bbb.MergeAndAdd(cb_ll.cp().era({"8TeV"}).bin_id({1, 3, 4}).process({"ZTT", "ZEE", "ZMM", "TTJ"}), cb);

    cout << ">> Setting standardised bin names...\n";
    ch::SetStandardBinNames(cb);
    VString droplist = ch::ParseFileLines(
                           aux_pruning + "uncertainty-pruning-drop-131128-sm.txt");
    cout << ">> Droplist contains " << droplist.size() << " entries\n";

    set<string> to_drop;
    for (auto x : droplist) to_drop.insert(x);

    auto pre_drop = cb.syst_name_set();
    cb.syst_name(droplist, false);
    auto post_drop = cb.syst_name_set();
    cout << ">> Systematics dropped: " << pre_drop.size() - post_drop.size()
         << "\n";


    map<string, bool> can_morph = {
        {"et", true},
        {"mt", true},
        {"em", true},
        {"ee", false},
        {"mm", false},
        {"tt", true}
    };

    RooWorkspace ws("htt", "htt");
    RooRealVar mh("MH", "", 125, 90, 145);

    // TFile demo("htt_sm_morphing_debug.root", "RECREATE");
    //! [part1]
    bool do_morphing = true;
    if (do_morphing) {
        // RooMsgService::instance().setGlobalKillBelow(RooFit::WARNING);
        for (auto chn : chns) {
            auto bins = cb.cp().channel({chn}).bin_set();
            for (auto bin : bins) {
                for (auto p : sig_procs) {
                    ch::BuildRooMorphing(ws, cb, bin, p, mh, "norm",
                                         can_morph[chn], true, nullptr /*&demo*/);
                }
            }
        }
        // demo.Close();
        cb.AddWorkspace(ws);
        cb.cp().signals().ExtractPdfs(cb, "htt", "$BIN_$PROCESS_morph");
        //! [part1]

        string folder = "output/sm_cards_morphed";
        boost::filesystem::create_directories(folder);

        TFile output((folder + "/htt.input.root").c_str(),
                     "RECREATE");
        for (string chn : chns) {
            boost::filesystem::create_directories(folder+"/"+chn);
            //Use CH to create combined card for each channel
            cb.cp().channel({chn}).mass({"*"}).WriteDatacard(
                folder + "/" + chn + "/combinedCard.txt", output);
            auto bins = cb.cp().channel({chn}).bin_set();
            for (auto b : bins) {
                cout << ">> Writing datacard for bin: " << b << "\r" << flush;
                //Also print individual datacards for each category of each channel
                boost::filesystem::create_directories(folder+"/"+chn);
                cb.cp().channel({chn}).bin({b}).mass({"*"}).WriteDatacard(
                    folder + "/" + chn + "/" + b + ".txt", output);
                //Also print individual datacards for each category of each channel in the combined directory
                boost::filesystem::create_directories(folder+"/cmb");
                cb.cp().channel({chn}).bin({b}).mass({"*"}).WriteDatacard(
                    folder + "/cmb/"+ b + ".txt", output);
            }
        }
        //Use CH to create combined card for full combination
        cb.cp().mass({"*"}).WriteDatacard(
            folder + "/cmb/combinedCard.txt", output);
        output.Close();
        cout << "\n>> Done!\n";
    }
}
コード例 #6
0
ファイル: VLogicModel.cpp プロジェクト: asnwerear/VEngine
VBOOL VLogicModel::_setEntityMaterial(const VString &entityName, const VString &matName)
{
    if (matName.empty())
    {
        return VTRUE;
    }
    else
    {
        VEntityMap::iterator itr = mEntities.find(entityName);

        if (itr == mEntities.end())
        {
            Ogre::LogManager::getSingleton().logMessage( "Logic Model Entity with name '" + entityName + "' dosen't exists! " +
                    "LogicModel::_setEntityMaterial " + mName );
            return VFALSE;
        }

        VEntityValue &entValue = itr->second;
        Ogre::Entity *entity = entValue.mEntity;
        assert(entity);

        if (matName.find(";") != VString::npos)
        {
            Ogre::StringVector matNames = Ogre::StringUtil::split(matName, ";");
            assert(matName.size() > 1);

            for (VUINT32 i = 0; i < entity->getNumSubEntities(); ++i)
            {
                Ogre::SubEntity *subEntity = entity->getSubEntity(i);
                assert(subEntity);

                VString subMatName;

                if (i < matNames.size())
                {
                    subMatName = matNames[i];
                }
                else
                {
                    subMatName = matNames[0];
                }

                const Ogre::MaterialPtr subMat = Ogre::MaterialManager::getSingleton().getByName(subMatName);
                if (!subMat.isNull())
                {
                    subEntity->setMaterialName(subMatName);
                }
            }
        }
        else
        {
            const Ogre::MaterialPtr entityMat = Ogre::MaterialManager::getSingleton().getByName(matName);
            if (!entityMat.isNull())
            {
                entity->setMaterialName(matName);
            }
        }
    }

    return VTRUE;
}