Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bring back initializers #2158

Merged
merged 2 commits into from Jan 24, 2014
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
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