Skip to content

Commit

Permalink
Merge pull request #2158 from ktf/bring-back-initializers
Browse files Browse the repository at this point in the history
DB -- Bring back initializers
  • Loading branch information
ktf committed Jan 24, 2014
2 parents 4ad9bc3 + d6f8b32 commit c4c8260
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 8 deletions.
5 changes: 4 additions & 1 deletion CondCore/CalibPlugins/src/plugin.cc
Expand Up @@ -29,13 +29,16 @@ namespace cond {
throwException(std::string("Type mismatch, target object is type \"")+payloadTypeName+"\"",
"createPayload" );
}
}

namespace {
struct InitEfficiency {void operator()(condex::Efficiency& e){ e.initialize();}};
}

REGISTER_PLUGIN(PedestalsRcd,Pedestals);
REGISTER_PLUGIN(anotherPedestalsRcd,Pedestals);
REGISTER_PLUGIN(mySiStripNoisesRcd,mySiStripNoises);
REGISTER_PLUGIN(ExEfficiencyRcd, condex::Efficiency);
REGISTER_PLUGIN_INIT(ExEfficiencyRcd, condex::Efficiency, InitEfficiency );
REGISTER_PLUGIN(ExDwarfRcd, cond::BaseKeyed);
// REGISTER_PLUGIN(ExDwarfListRcd, cond::KeyList);
REGISTER_KEYLIST_PLUGIN(ExDwarfListRcd, cond::persistency::KeyList, ExDwarfRcd);
19 changes: 13 additions & 6 deletions CondCore/ESSources/interface/DataProxy.h
Expand Up @@ -10,8 +10,14 @@
#include "CondCore/CondDB/interface/PayloadProxy.h"

// expose a cond::PayloadProxy as a eventsetup::DataProxy
template< class RecordT, class DataT >
class DataProxy : public edm::eventsetup::DataProxyTemplate<RecordT, DataT>{
namespace cond {
template< typename DataT> struct DefaultInitializer {
void operator()(DataT &){}
};
}

template< class RecordT, class DataT , typename Initializer=cond::DefaultInitializer<DataT> >
class DataProxy : public edm::eventsetup::DataProxyTemplate<RecordT, DataT >{
public:
typedef DataProxy<RecordT,DataT> self;
typedef boost::shared_ptr<cond::persistency::PayloadProxy<DataT> > DataP;
Expand All @@ -30,6 +36,7 @@ template< class RecordT, class DataT >
protected:
virtual const DataT* make(const RecordT&, const edm::eventsetup::DataKey&) {
m_data->make();
m_initializer(const_cast<DataT&>((*m_data)()));
return &(*m_data)();
}
virtual void invalidateCache() {
Expand All @@ -44,8 +51,8 @@ template< class RecordT, class DataT >
const DataProxy& operator=( const DataProxy& ); // stop default
// ---------- member data --------------------------------

boost::shared_ptr<cond::persistency::PayloadProxy<DataT> > m_data;

boost::shared_ptr<cond::persistency::PayloadProxy<DataT> > m_data;
Initializer m_initializer;
};

namespace cond {
Expand Down Expand Up @@ -92,10 +99,10 @@ namespace cond {
/* bridge between the cond world and eventsetup world
* keep them separated!
*/
template< class RecordT, class DataT >
template< class RecordT, class DataT, typename Initializer=cond::DefaultInitializer<DataT> >
class DataProxyWrapper : public cond::DataProxyWrapperBase {
public:
typedef ::DataProxy<RecordT,DataT> DataProxy;
typedef ::DataProxy<RecordT,DataT, Initializer> DataProxy;
typedef cond::persistency::PayloadProxy<DataT> PayProxy;
typedef boost::shared_ptr<PayProxy> DataP;

Expand Down
14 changes: 13 additions & 1 deletion CondCore/ESSources/interface/registration_macros.h
Expand Up @@ -29,15 +29,26 @@
// macros
#define INSTANTIATE_PROXY(record_, type_) template class DataProxyWrapper<record_, type_>;


#define ONLY_REGISTER_PLUGIN(record_,type_)\
typedef DataProxyWrapper<record_, type_> EDM_PLUGIN_SYM(Proxy , __LINE__ ); \
DEFINE_EDM_PLUGIN( cond::ProxyFactory, EDM_PLUGIN_SYM(Proxy , __LINE__ ), #record_ "@NewProxy")


#define REGISTER_PLUGIN(record_, type_ ) \
INSTANTIATE_PROXY(record_, type_ ) \
ONLY_REGISTER_PLUGIN(record_, type_ )

#define INSTANTIATE_PROXY_INIT(record_, type_, initializer_) template class DataProxyWrapper<record_, type_, initializer_>;

#define ONLY_REGISTER_PLUGIN_INIT(record_,type_, initializer_)\
typedef DataProxyWrapper<record_, type_, initializer_> EDM_PLUGIN_SYM(Proxy , __LINE__ ); \
DEFINE_EDM_PLUGIN( cond::ProxyFactory, EDM_PLUGIN_SYM(Proxy , __LINE__ ), #record_ "@NewProxy")

#define REGISTER_PLUGIN_INIT(record_, type_, initializer_) \
INSTANTIATE_PROXY_INIT(record_, type_, initializer_ ) \
ONLY_REGISTER_PLUGIN_INIT(record_, type_, initializer_ )



// source_ is the record name of the keyed objects
#define REGISTER_KEYLIST_PLUGIN(record_, type_, source_) \
Expand All @@ -46,4 +57,5 @@ template class DataProxyWrapper<record_, type_>; \
DEFINE_EDM_PLUGIN( cond::ProxyFactory, EDM_PLUGIN_SYM(Proxy , record_ ), #record_ "@NewProxy")



#endif /* PLUGINSYSTEM_REGISTRATION_MACROS_H */
4 changes: 4 additions & 0 deletions CondFormats/Calibration/interface/Efficiency.h
Expand Up @@ -7,16 +7,20 @@
*/

#include<cmath>
#include<iostream>

namespace condex {



/* very simple base class
* trivial inheritance, no template tricks
*/
class Efficiency {
public:
Efficiency(){}
virtual ~Efficiency(){}
virtual void initialize(){ std::cout << "initializing base class Efficiency" <<std::endl;}
float operator()(float pt, float eta) const {
return value(pt,eta);
}
Expand Down

0 comments on commit c4c8260

Please sign in to comment.