int main(int argc, char **argv)
{
	if (argc < 4) {
		std::cerr << "Syntax: " << argv[0] << " <input> "
		          << "<output> <var1> [<var2>...]" << std::endl;
		return 1;
	}

	ROOT::Cintex::Cintex::Enable();

	std::vector<std::string> names;
	for(int i = 3; i < argc; i++)
		names.push_back(argv[i]);

	try {
		std::auto_ptr<Calibration::VarProcessor> proc(
					getCalibration(argv[1], names));

		BitSet inputVars(names.size());
		for(std::size_t i = 0; i < names.size(); i++)
			inputVars[i] = true;
		proc->inputVars = Calibration::convert(inputVars);

		Calibration::MVAComputer mva;
		std::copy(names.begin(), names.end(),
		          std::back_inserter(mva.inputSet));
		mva.addProcessor(proc.get());
		mva.output = names.size();

		MVAComputer::writeCalibration(argv[2], &mva);
	} catch(cms::Exception e) {
		std::cerr << e.what() << std::endl;
	}

	return 0;
}
int main(int argc, char **argv)
{
	using Calibration::HistogramF;
	using Calibration::VarProcessor;

	ROOT::Cintex::Cintex::Enable();

	if (argc != 3) {
		std::cerr << "Syntax: " << argv[0] << " <MVA File> "
		          << "<output ROOT file>" << std::endl;
		return 1;
	}

	Calibration::MVAComputer *calib =
		MVAComputer::readCalibration(argv[1]);
	if (!calib)
		return 1;

	std::map<std::string, HistogramF*> histos;

	std::vector<VarProcessor*> procs = calib->getProcessors();
	for(unsigned int z = 0; z < procs.size(); ++z) {
		VarProcessor *proc = procs[z];
		if (!proc)
			continue;

		std::ostringstream ss3;
		ss3 << (z + 1);

		Calibration::ProcLikelihood *lkh =
			dynamic_cast<Calibration::ProcLikelihood*>(proc);
		Calibration::ProcNormalize *norm =
			dynamic_cast<Calibration::ProcNormalize*>(proc);

		if (lkh) {
			for(unsigned int i = 0; i < lkh->pdfs.size(); i++) {
				std::ostringstream ss2;
				ss2 << (i + 1);
				histos["proc" + ss3.str() + "_sig" + ss2.str()] = &lkh->pdfs[i].signal;
				histos["proc" + ss3.str() + "_bkg" + ss2.str()] = &lkh->pdfs[i].background;
			}
		} else if (norm) {
			for(unsigned int i = 0; i < norm->distr.size(); i++) {
				std::ostringstream ss2;
				ss2 << (i + 1);
				histos["proc" + ss3.str() + "_norm" + ss2.str()] = &norm->distr[i];
			}
		}
	}

	TFile *f = TFile::Open(argv[2], "RECREATE");
	if (!f)
		return 2;

	for(std::map<std::string, HistogramF*>::const_iterator iter = histos.begin();
	    iter != histos.end(); ++iter) {
		std::string name = iter->first;
		HistogramF *histo = iter->second;

		unsigned int size = histo->values().size() - 2;
		std::vector<double> values(
				histo->values().begin() + 1,
				histo->values().end() - 1);
		Spline spline;
		spline.set(values.size(), &values.front());

		double min = histo->range().min;
		double max = histo->range().max;

		TH1F *h = new TH1F((name + "_histo").c_str(), (name + "_histo").c_str(),
		                   size, min - 0.5 * (max - min) / size,
		                   max + 0.5 * (max - min) / size);
		TH1F *s = new TH1F((name + "_spline").c_str(), (name + "_spline").c_str(),
		                   size * precision, min, max);

		for(unsigned int i = 0; i < size; i++) {
			h->SetBinContent(i + 1, histo->values()[i + 1]);
			for(int j = 0; j < precision; j++) {
				unsigned int k = i * precision + j;
				double x = (k + 0.5) / (size * precision);
				double v = spline.eval(x);
				s->SetBinContent(k, v);
			}
		}
	}

	f->Write();
	delete f;

	return 0;
}
Exemple #3
0
int main(int argc, char **argv)
{
    if (argc != 3) {
        std::cerr << "Syntax: " << argv[0] << " <input.mva> "
                  "<output.xml>\n";
        return 1;
    }


    try {
        Calibration::MVAComputer *calib =
            MVAComputer::readCalibration(argv[1]);
        if (!calib) {
            std::cerr << "MVA calibration could not be read."
                      << std::endl;
            return 1;
        }

        std::ofstream out(argv[2]);
        if (!out.good()) {
            std::cerr << "XML description file could not be "
                      "opened for writing."
                      << std::endl;
            return 1;
        }

        out << "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\" ?>" << std::endl;
        out << "<MVATrainer>" << std::endl;
        out << "\t<!-- Warning: Auto-generated file from MVA calibration extractor. -->" << std::endl;
        out << "\t<!--          This trainer configuration is incomplete! -->" << std::endl;
        out << "\t<general>" << std::endl;
        out << "\t\t<option name=\"trainfiles\">train_%1$s%2$s.%3$s</option>" << std::endl;
        out << "\t</general>" << std::endl;

        std::vector< std::pair<std::string, std::string> > vars;

        out << "\t<input id=\"input\">" << std::endl;
        for(std::vector<Calibration::Variable>::const_iterator iter =
                    calib->inputSet.begin();
                iter != calib->inputSet.end(); ++iter) {

            out << "\t\t<var name=\"" << escape(iter->name)
                << "\" multiple=\"true\" optional=\"true\"/>"
                << std::endl;
            vars.push_back(std::make_pair("input", iter->name));
        }
        out << "\t</input>" << std::endl;

        unsigned int procId = 0;
        std::string proc = "input";
        std::vector<Calibration::VarProcessor*> procs =
            calib->getProcessors();
        for(std::vector<Calibration::VarProcessor*>::const_iterator
                iter = procs.begin(); iter != procs.end(); ++iter) {
            std::string name = (*iter)->getInstanceName();

            PhysicsTools::BitSet in =
                PhysicsTools::Calibration::convert(
                    (*iter)->inputVars);

            int j = 0;
            for(unsigned int i = vars.size(); i < in.size(); i++) {
                std::string var = mkNumber("var", ++j);
                out << "\t\t\t<var name=\"" << var
                    << "\"/>" << std::endl;

                vars.push_back(std::make_pair(proc, var));
            }

            if (iter != procs.begin()) {
                out << "\t\t</output>" << std::endl;
                out << "\t</processor>" << std::endl;
            }

            proc = mkNumber("proc", ++procId);
            out << "\t<processor id=\"" << proc
                << "\" name=\"" << name << "\">" << std::endl;
            out << "\t\t<input>" << std::endl;

            for(unsigned int i = 0; i < in.size(); i++) {
                if (in[i])
                    out << "\t\t\t<var source=\""
                        << escape(vars.at(i).first)
                        << "\" name=\""
                        << escape(vars.at(i).second)
                        << "\"/>" << std::endl;
            }

            out << "\t\t</input>" << std::endl;
            out << "\t\t<config>" << std::endl;
            out << "\t\t\t<!-- FILL ME -->" << std::endl;
            out << "\t\t</config>" << std::endl;
            out << "\t\t<output>" << std::endl;
        }

        int j = 0;
        for(unsigned int i = vars.size(); i <= calib->output; i++) {
            std::string var = mkNumber("var", ++j);

            out << "\t\t\t<var name=\"" << var
                << "\"/>" << std::endl;

            vars.push_back(std::make_pair(proc, var));
        }

        if (!procs.empty()) {
            out << "\t\t</output>" << std::endl;
            out << "\t</processor>" << std::endl;
        }

        out << "\t<output>" << std::endl;
        out << "\t\t<var source=\""
            << escape(vars.at(calib->output).first)
            << "\" name=\""
            << escape(vars.at(calib->output).second)
            << "\"/>" << std::endl;
        out << "\t</output>" << std::endl;

        out << "</MVATrainer>" << std::endl;
    } catch(cms::Exception e) {
        std::cerr << e.what() << std::endl;
    }

    return 0;
}