ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitProd/TreeFiller/interface/BaseFiller.h
Revision: 1.19
Committed: Thu Mar 18 20:20:59 2010 UTC (15 years, 1 month ago) by bendavid
Content type: text/plain
Branch: MAIN
CVS Tags: Mit_032, Mit_031, Mit_025c_branch2, Mit_025c_branch1, Mit_030, Mit_029c, Mit_029b, Mit_030_pre1, Mit_029a, Mit_029, Mit_029_pre1, Mit_028a, Mit_025c_branch0, Mit_028, Mit_027a, Mit_027, Mit_026, Mit_025e, Mit_025d, Mit_025c, Mit_025b, Mit_025a, Mit_025, Mit_025pre2, Mit_024b, Mit_025pre1, Mit_024a, Mit_024, Mit_023, Mit_022a, Mit_022, Mit_020d, TMit_020d, Mit_020c, Mit_021, Mit_021pre2, Mit_021pre1, Mit_020b, Mit_020a, Mit_020, Mit_020pre1, Mit_018, Mit_017, Mit_017pre3, Mit_017pre2, Mit_017pre1, Mit_016, Mit_015b, Mit_015a, Mit_015, Mit_014e, Mit_014d, Mit_014c, Mit_014b, Mit_014a, Mit_014, Mit_014pre3, Mit_014pre2, Mit_014pre1, Mit_013d, Mit_013c, Mit_013b, Mit_013a, Mit_013, HEAD
Branch point for: Mit_025c_branch
Changes since 1.18: +2 -2 lines
Error occurred while calculating annotation data.
Log Message:
Fix beginrun,beginjob mess

File Contents

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