00001 #include <memory> 00002 00003 #include "PhysicsTools/MVAComputer/interface/Calibration.h" 00004 #include "PhysicsTools/MVAComputer/interface/MVAComputer.h" 00005 #include "PhysicsTools/MVAComputer/interface/MVAComputerCache.h" 00006 00007 namespace PhysicsTools { 00008 00009 MVAComputerCache::MVAComputerCache() : 00010 containerCacheId(Calibration::MVAComputerContainer::CacheId()), 00011 computerCacheId(Calibration::MVAComputer::CacheId()) 00012 { 00013 } 00014 00015 MVAComputerCache::~MVAComputerCache() 00016 { 00017 } 00018 00019 bool MVAComputerCache::update(const Calibration::MVAComputer *computer) 00020 { 00021 if (!computer && !*this) 00022 return false; 00023 if (computer && !computer->changed(computerCacheId)) 00024 return false; 00025 00026 if (computer) { 00027 this->computer.reset(new MVAComputer(computer)); 00028 computerCacheId = computer->getCacheId(); 00029 } else { 00030 this->computer.reset(); 00031 computerCacheId = Calibration::MVAComputer::CacheId(); 00032 } 00033 00034 containerCacheId = Calibration::MVAComputerContainer::CacheId(); 00035 return true; 00036 } 00037 00038 bool MVAComputerCache::update( 00039 const Calibration::MVAComputerContainer *container, 00040 const char *calib) 00041 { 00042 if (!container && !*this) 00043 return false; 00044 if (container && !container->changed(containerCacheId)) 00045 return false; 00046 00047 if (container) { 00048 const Calibration::MVAComputer *computer = 00049 &container->find(calib); 00050 bool result = update(computer); 00051 containerCacheId = container->getCacheId(); 00052 return result; 00053 } 00054 00055 this->computer.reset(); 00056 00057 computerCacheId = Calibration::MVAComputer::CacheId(); 00058 containerCacheId = Calibration::MVAComputerContainer::CacheId(); 00059 return true; 00060 } 00061 00062 std::auto_ptr<MVAComputer> MVAComputerCache::release() 00063 { 00064 computerCacheId = Calibration::MVAComputer::CacheId(); 00065 containerCacheId = Calibration::MVAComputerContainer::CacheId(); 00066 return computer; 00067 } 00068 00069 } // namespace PhysicsTools