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 "FWCore/Framework/interface/IOVSyncValue.h" 00016 #include "FWCore/ServiceRegistry/interface/Service.h" 00017 #include "CondCore/DBOutputService/interface/PoolDBOutputService.h" 00018 00019 #include "CondFormats/PhysicsToolsObjects/interface/MVAComputer.h" 00020 00021 #include "PhysicsTools/MVATrainer/interface/MVATrainerLooper.h" 00022 #include "PhysicsTools/MVATrainer/interface/MVATrainerSave.h" 00023 00024 namespace PhysicsTools { 00025 00026 MVATrainerSave::MVATrainerSave(const edm::ParameterSet ¶ms) : 00027 saved(false) 00028 { 00029 } 00030 00031 void MVATrainerSave::analyze(const edm::Event& event, 00032 const edm::EventSetup& es) 00033 { 00034 if (calib.get() || saved) 00035 return; 00036 00037 const Calibration::MVAComputer *toPutCalib = getToPut(es); 00038 if (MVATrainerLooper::isUntrained(toPutCalib)) 00039 return; 00040 00041 edm::LogInfo("MVATrainerSave") << "Got the trained calibration data"; 00042 00043 std::auto_ptr<Calibration::MVAComputer> calib( 00044 new Calibration::MVAComputer); 00045 *calib = *toPutCalib; 00046 00047 this->calib = calib; 00048 } 00049 00050 void MVATrainerSave::endJob() 00051 { 00052 if (!calib.get() || saved) 00053 return; 00054 00055 edm::LogInfo("MVATrainerSave") << "Saving calibration data in CondDB."; 00056 00057 edm::Service<cond::service::PoolDBOutputService> dbService; 00058 if (!dbService.isAvailable()) 00059 throw cms::Exception("MVATrainerSave") 00060 << "DBService unavailable" << std::endl; 00061 00062 dbService->createNewIOV<Calibration::MVAComputer>( 00063 calib.release(), dbService->beginOfTime(), 00064 dbService->endOfTime(), getRecordName().c_str()); 00065 00066 saved = true; 00067 } 00068 00069 } // namespace PhysicsTools