00001 #include <iostream> 00002 #include <memory> 00003 #include <vector> 00004 #include <string> 00005 00006 #include "FWCore/Utilities/interface/Exception.h" 00007 #include "FWCore/ParameterSet/interface/ParameterSet.h" 00008 #include "FWCore/Framework/interface/Event.h" 00009 #include "FWCore/Framework/interface/EventSetup.h" 00010 #include "FWCore/Framework/interface/ESHandle.h" 00011 #include "FWCore/Framework/interface/EDAnalyzer.h" 00012 #include "FWCore/Framework/interface/MakerMacros.h" 00013 #include "FWCore/MessageLogger/interface/MessageLogger.h" 00014 00015 #include "CondFormats/PhysicsToolsObjects/interface/MVAComputer.h" 00016 00017 #include "PhysicsTools/MVAComputer/interface/MVAComputer.h" 00018 #include "PhysicsTools/MVATrainer/interface/MVATrainerLooper.h" 00019 #include "PhysicsTools/MVATrainer/interface/MVATrainerFileSave.h" 00020 00021 namespace PhysicsTools { 00022 00023 MVATrainerFileSave::MVATrainerFileSave(const edm::ParameterSet ¶ms) : 00024 trained(params.getUntrackedParameter<bool>("trained", true)), 00025 saved(false) 00026 { 00027 std::vector<std::string> names = params.getParameterNames(); 00028 for(std::vector<std::string>::const_iterator iter = names.begin(); 00029 iter != names.end(); iter++) { 00030 if (iter->c_str()[0] == '@' || *iter == "trained") 00031 continue; 00032 00033 toPut[*iter] = params.getParameter<std::string>(*iter); 00034 } 00035 00036 } 00037 00038 void MVATrainerFileSave::analyze(const edm::Event& event, 00039 const edm::EventSetup& es) 00040 { 00041 if (calib.get() || saved) 00042 return; 00043 00044 const Calibration::MVAComputerContainer *toPutCalib = getToPut(es); 00045 if (MVATrainerLooper::isUntrained(toPutCalib)) 00046 return; 00047 00048 edm::LogInfo("MVATrainerFileSave") 00049 << "Got the trained calibration data"; 00050 00051 std::auto_ptr<Calibration::MVAComputerContainer> calib( 00052 new Calibration::MVAComputerContainer); 00053 *calib = *toPutCalib; 00054 00055 this->calib = calib; 00056 } 00057 00058 void MVATrainerFileSave::endJob() 00059 { 00060 if (!calib.get() || saved) 00061 return; 00062 00063 edm::LogInfo("MVATrainerFileSave") 00064 << "Saving calibration data into plain MVA files."; 00065 00066 for(LabelFileMap::const_iterator iter = toPut.begin(); 00067 iter != toPut.end(); iter++) { 00068 const Calibration::MVAComputer *calibration = 00069 &calib->find(iter->first); 00070 00071 MVAComputer::writeCalibration(iter->second.c_str(), 00072 calibration); 00073 } 00074 00075 saved = true; 00076 } 00077 00078 } // namespace PhysicsTools