ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitProd/TreeFiller/interface/BaseFiller.h
Revision: 1.13
Committed: Sun Sep 14 15:37:42 2008 UTC (16 years, 7 months ago) by loizides
Content type: text/plain
Branch: MAIN
CVS Tags: Mit_008pre1, Mit_006b, Mit_006a, Mit_006, Mit_005, Mit_004
Changes since 1.12: +8 -4 lines
Log Message:
Add verbose and verify variables. This can be used by higher level filler to switch on verbosity and verification code

File Contents

# Content
1 //--------------------------------------------------------------------------------------------------
2 // $Id: BaseFiller.h,v 1.12 2008/09/10 03:30:22 loizides Exp $
3 //
4 // BaseFiller
5 //
6 // Base class to define the interface for a filler.
7 //
8 // Authors: C.Paus
9 //--------------------------------------------------------------------------------------------------
10
11 #ifndef MITPROD_TREEFILLER_BASEFILLER_H
12 #define MITPROD_TREEFILLER_BASEFILLER_H
13
14 #include "FWCore/Framework/interface/Event.h"
15 #include "FWCore/Framework/interface/Frameworkfwd.h"
16 #include "FWCore/ParameterSet/interface/ParameterSet.h"
17 #include "FWCore/MessageLogger/interface/MessageLogger.h"
18 #include "DataFormats/Common/interface/Handle.h"
19 #include "MitAna/DataUtil/interface/TreeWriter.h"
20 #include "MitProd/ObjectService/interface/ObjectService.h"
21 #include "MitProd/TreeFiller/interface/FillMitTree.h"
22 #include <TString.h>
23
24 namespace mithep
25 {
26 class BaseFiller
27 {
28 public:
29 BaseFiller(const edm::ParameterSet &cfg, const char *name, bool active=true);
30 virtual ~BaseFiller() {}
31
32 bool Active() const { return active_; }
33 virtual void BookDataBlock(TreeWriter &tws) = 0;
34 virtual void FillDataBlock(const edm::Event &e, const edm::EventSetup &es) = 0;
35 const std::string &Name() const { return name_; }
36 virtual void ResolveLinks(const edm::Event &e, const edm::EventSetup &es) {}
37 int Verbose() const { return verbose_;}
38 bool Verify() const { return verify_;}
39
40 protected:
41 const edm::ParameterSet &Conf() const { return config_; }
42 void PrintErrorAndExit(const char *msg) const;
43 template <typename TYPE>
44 void GetProduct(const std::string name, edm::Handle<TYPE> &prod,
45 const edm::Event &event) const;
46 template <typename TYPE>
47 bool GetProductSafe(const std::string name, edm::Handle<TYPE> &prod,
48 const edm::Event &event) const;
49
50 ObjectService *OS() { return FillMitTree::os(); }
51
52 const std::string name_; //name of this filler
53 const edm::ParameterSet config_; //parameter set for this filler
54 const bool active_; //=1 if active
55 const bool verify_; //=1 if verificatin code is active
56 const int verbose_; //verbosity level (do not introduce more than 0-4 levels)
57 };
58 }
59
60 //--------------------------------------------------------------------------------------------------
61 template <typename TYPE>
62 inline void mithep::BaseFiller::GetProduct(const std::string edmname, edm::Handle<TYPE> &prod,
63 const edm::Event &event) const
64 {
65 // Try to access data collection from EDM file. We check if we really get just one
66 // product with the given name. If not we print an error and exit.
67
68 try {
69 event.getByLabel(edm::InputTag(edmname),prod);
70 if (!prod.isValid())
71 throw edm::Exception(edm::errors::Configuration, "BaseFiller::GetProduct()\n")
72 << "Cannot get collection with label " << edmname << std::endl;
73 } catch (...) {
74 edm::LogError("BaseFiller") << "Cannot get collection with label "
75 << edmname << std::endl;
76 PrintErrorAndExit(Form("Cannot get collection with label %s", edmname.c_str()));
77 }
78 }
79
80 //--------------------------------------------------------------------------------------------------
81 template <typename TYPE>
82 inline bool mithep::BaseFiller::GetProductSafe(const std::string edmname, edm::Handle<TYPE> &prod,
83 const edm::Event &event) const
84 {
85 // Try to safely access data collection from EDM file. We check if we really get just one
86 // product with the given name. If not, we return false.
87
88 try {
89 event.getByLabel(edm::InputTag(edmname),prod);
90 if (!prod.isValid())
91 return false;
92 } catch (...) {
93 return false;
94 }
95 return true;
96 }
97 #endif