CMS 3D CMS Logo

List of all members | Public Member Functions | Private Attributes
OuterTrackerMCHarvester Class Reference

#include <OuterTrackerMCHarvester.h>

Inheritance diagram for OuterTrackerMCHarvester:
DQMEDHarvester edm::one::EDProducer< edm::EndLuminosityBlockProducer, edm::EndRunProducer, edm::EndProcessBlockProducer, edm::one::WatchLuminosityBlocks, edm::one::WatchRuns, edm::one::SharedResources, edm::Accumulator > edm::one::EDProducerBase edm::ProducerBase edm::EDConsumerBase edm::ProductRegistryHelper

Public Member Functions

void dqmEndJob (DQMStore::IBooker &ibooker, DQMStore::IGetter &igetter) override
 
 OuterTrackerMCHarvester (const edm::ParameterSet &)
 
 ~OuterTrackerMCHarvester () override
 
- Public Member Functions inherited from DQMEDHarvester
void accumulate (edm::Event const &ev, edm::EventSetup const &es) final
 
void beginJob () override
 
void beginLuminosityBlock (edm::LuminosityBlock const &lumi, edm::EventSetup const &) final
 
void beginRun (edm::Run const &run, edm::EventSetup const &) override
 
virtual void dqmAnalyze (DQMStore::IBooker &, DQMStore::IGetter &, edm::Event const &, edm::EventSetup const &)
 
 DQMEDHarvester ()
 
 DQMEDHarvester (edm::ParameterSet const &iConfig)
 
virtual void dqmEndLuminosityBlock (DQMStore::IBooker &, DQMStore::IGetter &, edm::LuminosityBlock const &, edm::EventSetup const &)
 
virtual void dqmEndRun (DQMStore::IBooker &, DQMStore::IGetter &, edm::Run const &, edm::EventSetup const &)
 
void endLuminosityBlock (edm::LuminosityBlock const &, edm::EventSetup const &) final
 
void endLuminosityBlockProduce (edm::LuminosityBlock &lumi, edm::EventSetup const &es) final
 
void endProcessBlockProduce (edm::ProcessBlock &) final
 
void endRun (edm::Run const &, edm::EventSetup const &) override
 
void endRunProduce (edm::Run &run, edm::EventSetup const &es) final
 
 ~DQMEDHarvester () override=default
 
- Public Member Functions inherited from edm::one::EDProducer< edm::EndLuminosityBlockProducer, edm::EndRunProducer, edm::EndProcessBlockProducer, edm::one::WatchLuminosityBlocks, edm::one::WatchRuns, edm::one::SharedResources, edm::Accumulator >
 EDProducer ()=default
 
SerialTaskQueueglobalLuminosityBlocksQueue () final
 
SerialTaskQueueglobalRunsQueue () final
 
bool hasAbilityToProduceInBeginLumis () const final
 
bool hasAbilityToProduceInBeginProcessBlocks () const final
 
bool hasAbilityToProduceInBeginRuns () const final
 
bool hasAbilityToProduceInEndLumis () const final
 
bool hasAbilityToProduceInEndProcessBlocks () const final
 
bool hasAbilityToProduceInEndRuns () const final
 
bool wantsGlobalLuminosityBlocks () const final
 
bool wantsGlobalRuns () const final
 
bool wantsInputProcessBlocks () const final
 
bool wantsProcessBlocks () const final
 
- Public Member Functions inherited from edm::one::EDProducerBase
 EDProducerBase ()
 
ModuleDescription const & moduleDescription () const
 
bool wantsStreamLuminosityBlocks () const
 
bool wantsStreamRuns () const
 
 ~EDProducerBase () override
 
- Public Member Functions inherited from edm::ProducerBase
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
std::vector< edm::ProductResolverIndex > const & indiciesForPutProducts (BranchType iBranchType) const
 
 ProducerBase ()
 
std::vector< edm::ProductResolverIndex > const & putTokenIndexToProductResolverIndex () const
 
std::vector< bool > const & recordProvenanceList () const
 
void registerProducts (ProducerBase *, ProductRegistry *, ModuleDescription const &)
 
std::function< void(BranchDescription const &)> registrationCallback () const
 used by the fwk to register list of products More...
 
void resolvePutIndicies (BranchType iBranchType, ModuleToResolverIndicies const &iIndicies, std::string const &moduleLabel)
 
TypeLabelList const & typeLabelList () const
 used by the fwk to register the list of products of this module More...
 
 ~ProducerBase () noexcept(false) override
 
- Public Member Functions inherited from edm::EDConsumerBase
std::vector< ConsumesInfoconsumesInfo () const
 
void convertCurrentProcessAlias (std::string const &processName)
 Convert "@currentProcess" in InputTag process names to the actual current process name. More...
 
 EDConsumerBase ()
 
 EDConsumerBase (EDConsumerBase &&)=default
 
 EDConsumerBase (EDConsumerBase const &)=delete
 
ESProxyIndex const * esGetTokenIndices (edm::Transition iTrans) const
 
std::vector< ESProxyIndex > const & esGetTokenIndicesVector (edm::Transition iTrans) const
 
std::vector< ESRecordIndex > const & esGetTokenRecordIndicesVector (edm::Transition iTrans) const
 
ProductResolverIndexAndSkipBit indexFrom (EDGetToken, BranchType, TypeID const &) const
 
void itemsMayGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
void itemsToGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
std::vector< ProductResolverIndexAndSkipBit > const & itemsToGetFrom (BranchType iType) const
 
void labelsForToken (EDGetToken iToken, Labels &oLabels) const
 
void modulesWhoseProductsAreConsumed (std::vector< ModuleDescription const * > &modules, ProductRegistry const &preg, std::map< std::string, ModuleDescription const * > const &labelsToDesc, std::string const &processName) const
 
EDConsumerBaseoperator= (EDConsumerBase &&)=default
 
EDConsumerBase const & operator= (EDConsumerBase const &)=delete
 
bool registeredToConsume (ProductResolverIndex, bool, BranchType) const
 
bool registeredToConsumeMany (TypeID const &, BranchType) const
 
ProductResolverIndexAndSkipBit uncheckedIndexFrom (EDGetToken) const
 
void updateLookup (BranchType iBranchType, ProductResolverIndexHelper const &, bool iPrefetchMayGet)
 
void updateLookup (eventsetup::ESRecordsToProxyIndices const &)
 
virtual ~EDConsumerBase () noexcept(false)
 

Private Attributes

DQMStoredbe
 

Additional Inherited Members

- Public Types inherited from DQMEDHarvester
typedef dqm::harvesting::DQMStore DQMStore
 
typedef dqm::harvesting::MonitorElement MonitorElement
 
- Public Types inherited from edm::one::EDProducerBase
typedef EDProducerBase ModuleType
 
- Public Types inherited from edm::ProducerBase
using ModuleToResolverIndicies = std::unordered_multimap< std::string, std::tuple< edm::TypeID const *, const char *, edm::ProductResolverIndex > >
 
typedef ProductRegistryHelper::TypeLabelList TypeLabelList
 
- Public Types inherited from edm::EDConsumerBase
typedef ProductLabels Labels
 
- Static Public Member Functions inherited from edm::one::EDProducerBase
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &descriptions)
 
- Protected Member Functions inherited from edm::ProducerBase
template<class ProductType >
BranchAliasSetterT< ProductType > produces ()
 declare what type of product will make and with which optional label More...
 
template<typename ProductType , BranchType B>
BranchAliasSetterT< ProductType > produces ()
 
template<typename ProductType , Transition B>
BranchAliasSetterT< ProductType > produces ()
 
BranchAliasSetter produces (const TypeID &id, std::string instanceName=std::string(), bool recordProvenance=true)
 
template<BranchType B>
BranchAliasSetter produces (const TypeID &id, std::string instanceName=std::string(), bool recordProvenance=true)
 
template<Transition B>
BranchAliasSetter produces (const TypeID &id, std::string instanceName=std::string(), bool recordProvenance=true)
 
template<typename ProductType , Transition B>
BranchAliasSetterT< ProductType > produces (std::string instanceName)
 
template<class ProductType >
BranchAliasSetterT< ProductType > produces (std::string instanceName)
 
template<typename ProductType , BranchType B>
BranchAliasSetterT< ProductType > produces (std::string instanceName)
 
ProducesCollector producesCollector ()
 
- Protected Member Functions inherited from edm::EDConsumerBase
EDGetToken consumes (const TypeToGet &id, edm::InputTag const &tag)
 
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > consumes (edm::InputTag const &tag)
 
template<BranchType B = InEvent>
EDConsumerBaseAdaptor< B > consumes (edm::InputTag tag) noexcept
 
template<BranchType B>
EDGetToken consumes (TypeToGet const &id, edm::InputTag const &tag)
 
ConsumesCollector consumesCollector ()
 Use a ConsumesCollector to gather consumes information from helper functions. More...
 
template<typename ProductType , BranchType B = InEvent>
void consumesMany ()
 
void consumesMany (const TypeToGet &id)
 
template<BranchType B>
void consumesMany (const TypeToGet &id)
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes ()
 
template<Transition Tr = Transition::Event>
constexpr auto esConsumes () noexcept
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes (ESInputTag const &tag)
 
template<Transition Tr = Transition::Event>
auto esConsumes (ESInputTag tag) noexcept
 
template<Transition Tr = Transition::Event>
ESGetTokenGeneric esConsumes (eventsetup::EventSetupRecordKey const &iRecord, eventsetup::DataKey const &iKey)
 Used with EventSetupRecord::doGet. More...
 
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > mayConsume (edm::InputTag const &tag)
 
- Protected Attributes inherited from DQMEDHarvester
DQMStoredqmstore_
 
edm::GetterOfProducts< DQMTokenjobmegetter_
 
edm::EDPutTokenT< DQMTokenjobToken_
 
edm::GetterOfProducts< DQMTokenlumimegetter_
 
edm::EDPutTokenT< DQMTokenlumiToken_
 
edm::GetterOfProducts< DQMTokenrunmegetter_
 
edm::EDPutTokenT< DQMTokenrunToken_
 

Detailed Description

Definition at line 13 of file OuterTrackerMCHarvester.h.

Constructor & Destructor Documentation

◆ OuterTrackerMCHarvester()

OuterTrackerMCHarvester::OuterTrackerMCHarvester ( const edm::ParameterSet iConfig)
explicit

Definition at line 3 of file OuterTrackerMCHarvester.cc.

3 {}

◆ ~OuterTrackerMCHarvester()

OuterTrackerMCHarvester::~OuterTrackerMCHarvester ( )
override

Definition at line 5 of file OuterTrackerMCHarvester.cc.

5 {}

Member Function Documentation

◆ dqmEndJob()

void OuterTrackerMCHarvester::dqmEndJob ( DQMStore::IBooker ibooker,
DQMStore::IGetter igetter 
)
overridevirtual

Implements DQMEDHarvester.

Definition at line 9 of file OuterTrackerMCHarvester.cc.

9  {
10  using namespace edm;
11 
12  // Global variables
13  TF1 *fit = new TF1("fit", "gaus", -0.01, 0.01);
14  TF1 *fit2 = new TF1("fit2", "gaus", -0.1, 0.1);
15  TF1 *fit3 = new TF1("fit3", "gaus", -1, 1);
16 
17  std::vector<double> sigma_pt1;
18  std::vector<double> error_pt1;
19  std::vector<double> sigma_pt2;
20  std::vector<double> error_pt2;
21  std::vector<double> sigma_pt3;
22  std::vector<double> error_pt3;
23  std::vector<double> sigma_eta;
24  std::vector<double> error_eta;
25  std::vector<double> sigma_phi;
26  std::vector<double> error_phi;
27  std::vector<double> sigma_VtxZ;
28  std::vector<double> error_VtxZ;
29  std::vector<double> sigma_d0;
30  std::vector<double> error_d0;
31 
32  float eta_bins[] = {0.0, 0.7, 1.0, 1.2, 1.6, 2.0, 2.4};
33  int eta_binnum = 6;
34 
35  dbe = nullptr;
36  dbe = edm::Service<DQMStore>().operator->();
37 
38  if (dbe) {
39  // Find all monitor elements for histograms
40  MonitorElement *meN_eta = dbe->get("SiOuterTrackerV/Tracks/Efficiency/match_tp_eta");
41  MonitorElement *meD_eta = dbe->get("SiOuterTrackerV/Tracks/Efficiency/tp_eta");
42  MonitorElement *meN_pt = dbe->get("SiOuterTrackerV/Tracks/Efficiency/match_tp_pt");
43  MonitorElement *meD_pt = dbe->get("SiOuterTrackerV/Tracks/Efficiency/tp_pt");
44  MonitorElement *meN_pt_zoom = dbe->get("SiOuterTrackerV/Tracks/Efficiency/match_tp_pt_zoom");
45  MonitorElement *meD_pt_zoom = dbe->get("SiOuterTrackerV/Tracks/Efficiency/tp_pt_zoom");
46  MonitorElement *meN_d0 = dbe->get("SiOuterTrackerV/Tracks/Efficiency/match_tp_d0");
47  MonitorElement *meD_d0 = dbe->get("SiOuterTrackerV/Tracks/Efficiency/tp_d0");
48  MonitorElement *meN_VtxR = dbe->get("SiOuterTrackerV/Tracks/Efficiency/match_tp_VtxR");
49  MonitorElement *meD_VtxR = dbe->get("SiOuterTrackerV/Tracks/Efficiency/tp_VtxR");
50  MonitorElement *meN_VtxZ = dbe->get("SiOuterTrackerV/Tracks/Efficiency/match_tp_VtxZ");
51  MonitorElement *meD_VtxZ = dbe->get("SiOuterTrackerV/Tracks/Efficiency/tp_VtxZ");
52 
53  MonitorElement *merespt_eta0to0p7_pt2to3 = dbe->get("SiOuterTrackerV/Tracks/Resolution/respt_eta0to0p7_pt2to3");
54  MonitorElement *merespt_eta0p7to1_pt2to3 = dbe->get("SiOuterTrackerV/Tracks/Resolution/respt_eta0p7to1_pt2to3");
55  MonitorElement *merespt_eta1to1p2_pt2to3 = dbe->get("SiOuterTrackerV/Tracks/Resolution/respt_eta1to1p2_pt2to3");
56  MonitorElement *merespt_eta1p2to1p6_pt2to3 = dbe->get("SiOuterTrackerV/Tracks/Resolution/respt_eta1p2to1p6_pt2to3");
57  MonitorElement *merespt_eta1p6to2_pt2to3 = dbe->get("SiOuterTrackerV/Tracks/Resolution/respt_eta1p6to2_pt2to3");
58  MonitorElement *merespt_eta2to2p4_pt2to3 = dbe->get("SiOuterTrackerV/Tracks/Resolution/respt_eta2to2p4_pt2to3");
59  MonitorElement *merespt_eta0to0p7_pt3to8 = dbe->get("SiOuterTrackerV/Tracks/Resolution/respt_eta0to0p7_pt3to8");
60  MonitorElement *merespt_eta0p7to1_pt3to8 = dbe->get("SiOuterTrackerV/Tracks/Resolution/respt_eta0p7to1_pt3to8");
61  MonitorElement *merespt_eta1to1p2_pt3to8 = dbe->get("SiOuterTrackerV/Tracks/Resolution/respt_eta1to1p2_pt3to8");
62  MonitorElement *merespt_eta1p2to1p6_pt3to8 = dbe->get("SiOuterTrackerV/Tracks/Resolution/respt_eta1p2to1p6_pt3to8");
63  MonitorElement *merespt_eta1p6to2_pt3to8 = dbe->get("SiOuterTrackerV/Tracks/Resolution/respt_eta1p6to2_pt3to8");
64  MonitorElement *merespt_eta2to2p4_pt3to8 = dbe->get("SiOuterTrackerV/Tracks/Resolution/respt_eta2to2p4_pt3to8");
65  MonitorElement *merespt_eta0to0p7_pt8toInf = dbe->get("SiOuterTrackerV/Tracks/Resolution/respt_eta0to0p7_pt8toInf");
66  MonitorElement *merespt_eta0p7to1_pt8toInf = dbe->get("SiOuterTrackerV/Tracks/Resolution/respt_eta0p7to1_pt8toInf");
67  MonitorElement *merespt_eta1to1p2_pt8toInf = dbe->get("SiOuterTrackerV/Tracks/Resolution/respt_eta1to1p2_pt8toInf");
68  MonitorElement *merespt_eta1p2to1p6_pt8toInf =
69  dbe->get("SiOuterTrackerV/Tracks/Resolution/respt_eta1p2to1p6_pt8toInf");
70  MonitorElement *merespt_eta1p6to2_pt8toInf = dbe->get("SiOuterTrackerV/Tracks/Resolution/respt_eta1p6to2_pt8toInf");
71  MonitorElement *merespt_eta2to2p4_pt8toInf = dbe->get("SiOuterTrackerV/Tracks/Resolution/respt_eta2to2p4_pt8toInf");
72 
73  MonitorElement *mereseta_eta0to0p7 = dbe->get("SiOuterTrackerV/Tracks/Resolution/reseta_eta0to0p7");
74  MonitorElement *mereseta_eta0p7to1 = dbe->get("SiOuterTrackerV/Tracks/Resolution/reseta_eta0p7to1");
75  MonitorElement *mereseta_eta1to1p2 = dbe->get("SiOuterTrackerV/Tracks/Resolution/reseta_eta1to1p2");
76  MonitorElement *mereseta_eta1p2to1p6 = dbe->get("SiOuterTrackerV/Tracks/Resolution/reseta_eta1p2to1p6");
77  MonitorElement *mereseta_eta1p6to2 = dbe->get("SiOuterTrackerV/Tracks/Resolution/reseta_eta1p6to2");
78  MonitorElement *mereseta_eta2to2p4 = dbe->get("SiOuterTrackerV/Tracks/Resolution/reseta_eta2to2p4");
79 
80  MonitorElement *meresphi_eta0to0p7 = dbe->get("SiOuterTrackerV/Tracks/Resolution/resphi_eta0to0p7");
81  MonitorElement *meresphi_eta0p7to1 = dbe->get("SiOuterTrackerV/Tracks/Resolution/resphi_eta0p7to1");
82  MonitorElement *meresphi_eta1to1p2 = dbe->get("SiOuterTrackerV/Tracks/Resolution/resphi_eta1to1p2");
83  MonitorElement *meresphi_eta1p2to1p6 = dbe->get("SiOuterTrackerV/Tracks/Resolution/resphi_eta1p2to1p6");
84  MonitorElement *meresphi_eta1p6to2 = dbe->get("SiOuterTrackerV/Tracks/Resolution/resphi_eta1p6to2");
85  MonitorElement *meresphi_eta2to2p4 = dbe->get("SiOuterTrackerV/Tracks/Resolution/resphi_eta2to2p4");
86 
87  MonitorElement *meresVtxZ_eta0to0p7 = dbe->get("SiOuterTrackerV/Tracks/Resolution/resVtxZ_eta0to0p7");
88  MonitorElement *meresVtxZ_eta0p7to1 = dbe->get("SiOuterTrackerV/Tracks/Resolution/resVtxZ_eta0p7to1");
89  MonitorElement *meresVtxZ_eta1to1p2 = dbe->get("SiOuterTrackerV/Tracks/Resolution/resVtxZ_eta1to1p2");
90  MonitorElement *meresVtxZ_eta1p2to1p6 = dbe->get("SiOuterTrackerV/Tracks/Resolution/resVtxZ_eta1p2to1p6");
91  MonitorElement *meresVtxZ_eta1p6to2 = dbe->get("SiOuterTrackerV/Tracks/Resolution/resVtxZ_eta1p6to2");
92  MonitorElement *meresVtxZ_eta2to2p4 = dbe->get("SiOuterTrackerV/Tracks/Resolution/resVtxZ_eta2to2p4");
93 
94  MonitorElement *meresd0_eta0to0p7 = dbe->get("SiOuterTrackerV/Tracks/Resolution/resd0_eta0to0p7");
95  MonitorElement *meresd0_eta0p7to1 = dbe->get("SiOuterTrackerV/Tracks/Resolution/resd0_eta0p7to1");
96  MonitorElement *meresd0_eta1to1p2 = dbe->get("SiOuterTrackerV/Tracks/Resolution/resd0_eta1to1p2");
97  MonitorElement *meresd0_eta1p2to1p6 = dbe->get("SiOuterTrackerV/Tracks/Resolution/resd0_eta1p2to1p6");
98  MonitorElement *meresd0_eta1p6to2 = dbe->get("SiOuterTrackerV/Tracks/Resolution/resd0_eta1p6to2");
99  MonitorElement *meresd0_eta2to2p4 = dbe->get("SiOuterTrackerV/Tracks/Resolution/resd0_eta2to2p4");
100 
101  if (meN_eta && meD_eta) {
102  // Get the numerator and denominator histograms
103  TH1F *numerator = meN_eta->getTH1F();
104  TH1F *denominator = meD_eta->getTH1F();
105  numerator->Sumw2();
106  denominator->Sumw2();
107 
108  // Set the current directory
109  dbe->setCurrentFolder("SiOuterTrackerV/Tracks/FinalEfficiency");
110 
111  // Book the new histogram to contain the results
112  MonitorElement *me_effic_eta = ibooker.book1D("EtaEfficiency",
113  "#eta efficiency",
114  numerator->GetNbinsX(),
115  numerator->GetXaxis()->GetXmin(),
116  numerator->GetXaxis()->GetXmax());
117 
118  // Calculate the efficiency
119  me_effic_eta->getTH1F()->Divide(numerator, denominator, 1., 1., "B");
120  me_effic_eta->setAxisTitle("tracking particle #eta");
121  me_effic_eta->getTH1F()->GetYaxis()->SetTitle("Efficiency");
122  me_effic_eta->getTH1F()->SetMaximum(1.0);
123  me_effic_eta->getTH1F()->SetMinimum(0.0);
124  me_effic_eta->getTH1F()->SetStats(false);
125  } // if ME found
126  else {
127  edm::LogWarning("DataNotFound") << "Monitor elements for eta efficiency cannot be found!\n";
128  }
129 
130  if (meN_pt && meD_pt) {
131  // Get the numerator and denominator histograms
132  TH1F *numerator2 = meN_pt->getTH1F();
133  numerator2->Sumw2();
134  TH1F *denominator2 = meD_pt->getTH1F();
135  denominator2->Sumw2();
136 
137  // Set the current directory
138  dbe->setCurrentFolder("SiOuterTrackerV/Tracks/FinalEfficiency");
139 
140  // Book the new histogram to contain the results
141  MonitorElement *me_effic_pt = ibooker.book1D("PtEfficiency",
142  "p_{T} efficiency",
143  numerator2->GetNbinsX(),
144  numerator2->GetXaxis()->GetXmin(),
145  numerator2->GetXaxis()->GetXmax());
146 
147  // Calculate the efficiency
148  me_effic_pt->getTH1F()->Divide(numerator2, denominator2, 1., 1., "B");
149  me_effic_pt->setAxisTitle("Tracking particle p_{T} [GeV]");
150  me_effic_pt->getTH1F()->GetYaxis()->SetTitle("Efficiency");
151  me_effic_pt->getTH1F()->SetMaximum(1.0);
152  me_effic_pt->getTH1F()->SetMinimum(0.0);
153  me_effic_pt->getTH1F()->SetStats(false);
154  } // if ME found
155  else {
156  edm::LogWarning("DataNotFound") << "Monitor elements for pT efficiency cannot be found!\n";
157  }
158 
159  if (meN_pt_zoom && meD_pt_zoom) {
160  // Get the numerator and denominator histograms
161  TH1F *numerator2_zoom = meN_pt_zoom->getTH1F();
162  numerator2_zoom->Sumw2();
163  TH1F *denominator2_zoom = meD_pt_zoom->getTH1F();
164  denominator2_zoom->Sumw2();
165 
166  // Set the current directory
167  dbe->setCurrentFolder("SiOuterTrackerV/Tracks/FinalEfficiency");
168 
169  // Book the new histogram to contain the results
170  MonitorElement *me_effic_pt_zoom = ibooker.book1D("PtEfficiency_zoom",
171  "p_{T} efficiency",
172  numerator2_zoom->GetNbinsX(),
173  numerator2_zoom->GetXaxis()->GetXmin(),
174  numerator2_zoom->GetXaxis()->GetXmax());
175 
176  // Calculate the efficiency
177  me_effic_pt_zoom->getTH1F()->Divide(numerator2_zoom, denominator2_zoom, 1., 1., "B");
178  me_effic_pt_zoom->setAxisTitle("Tracking particle p_{T} [GeV]");
179  me_effic_pt_zoom->getTH1F()->GetYaxis()->SetTitle("Efficiency");
180  me_effic_pt_zoom->getTH1F()->SetMaximum(1.0);
181  me_effic_pt_zoom->getTH1F()->SetMinimum(0.0);
182  me_effic_pt_zoom->getTH1F()->SetStats(false);
183  } // if ME found
184  else {
185  edm::LogWarning("DataNotFound") << "Monitor elements for zoom pT efficiency cannot be found!\n";
186  }
187 
188  if (meN_d0 && meD_d0) {
189  // Get the numerator and denominator histograms
190  TH1F *numerator5 = meN_d0->getTH1F();
191  numerator5->Sumw2();
192  TH1F *denominator5 = meD_d0->getTH1F();
193  denominator5->Sumw2();
194 
195  // Set the current directory
196  dbe->setCurrentFolder("SiOuterTrackerV/Tracks/FinalEfficiency");
197 
198  // Book the new histogram to contain the results
199  MonitorElement *me_effic_d0 = ibooker.book1D("d0Efficiency",
200  "d_{0} efficiency",
201  numerator5->GetNbinsX(),
202  numerator5->GetXaxis()->GetXmin(),
203  numerator5->GetXaxis()->GetXmax());
204 
205  // Calculate the efficiency
206  me_effic_d0->getTH1F()->Divide(numerator5, denominator5, 1., 1., "B");
207  me_effic_d0->setAxisTitle("Tracking particle d_{0} [cm]");
208  me_effic_d0->getTH1F()->GetYaxis()->SetTitle("Efficiency");
209  me_effic_d0->getTH1F()->SetMaximum(1.0);
210  me_effic_d0->getTH1F()->SetMinimum(0.0);
211  me_effic_d0->getTH1F()->SetStats(false);
212  } // if ME found
213  else {
214  edm::LogWarning("DataNotFound") << "Monitor elements for d0 efficiency cannot be found!\n";
215  }
216 
217  if (meN_VtxR && meD_VtxR) {
218  // Get the numerator and denominator histograms
219  TH1F *numerator6 = meN_VtxR->getTH1F();
220  numerator6->Sumw2();
221  TH1F *denominator6 = meD_VtxR->getTH1F();
222  denominator6->Sumw2();
223 
224  // Set the current directory
225  dbe->setCurrentFolder("SiOuterTrackerV/Tracks/FinalEfficiency");
226 
227  // Book the new histogram to contain the results
228  MonitorElement *me_effic_VtxR = ibooker.book1D("VtxREfficiency",
229  "Vtx R efficiency",
230  numerator6->GetNbinsX(),
231  numerator6->GetXaxis()->GetXmin(),
232  numerator6->GetXaxis()->GetXmax());
233 
234  // Calculate the efficiency
235  me_effic_VtxR->getTH1F()->Divide(numerator6, denominator6, 1., 1., "B");
236  me_effic_VtxR->setAxisTitle("Tracking particle VtxR [cm]");
237  me_effic_VtxR->getTH1F()->GetYaxis()->SetTitle("Efficiency");
238  me_effic_VtxR->getTH1F()->SetMaximum(1.0);
239  me_effic_VtxR->getTH1F()->SetMinimum(0.0);
240  me_effic_VtxR->getTH1F()->SetStats(false);
241  } // if ME found
242  else {
243  edm::LogWarning("DataNotFound") << "Monitor elements for VtxR efficiency cannot be found!\n";
244  }
245 
246  if (meN_VtxZ && meD_VtxZ) {
247  // Get the numerator and denominator histograms
248  TH1F *numerator7 = meN_VtxZ->getTH1F();
249  numerator7->Sumw2();
250  TH1F *denominator7 = meD_VtxZ->getTH1F();
251  denominator7->Sumw2();
252 
253  // Set the current directory
254  dbe->setCurrentFolder("SiOuterTrackerV/Tracks/FinalEfficiency");
255 
256  // Book the new histogram to contain the results
257  MonitorElement *me_effic_VtxZ = ibooker.book1D("VtxZEfficiency",
258  "Vtx Z efficiency",
259  numerator7->GetNbinsX(),
260  numerator7->GetXaxis()->GetXmin(),
261  numerator7->GetXaxis()->GetXmax());
262 
263  // Calculate the efficiency
264  me_effic_VtxZ->getTH1F()->Divide(numerator7, denominator7, 1., 1., "B");
265  me_effic_VtxZ->setAxisTitle("Tracking particle VtxZ [cm]");
266  me_effic_VtxZ->getTH1F()->GetYaxis()->SetTitle("Efficiency");
267  me_effic_VtxZ->getTH1F()->SetMaximum(1.0);
268  me_effic_VtxZ->getTH1F()->SetMinimum(0.0);
269  me_effic_VtxZ->getTH1F()->SetStats(false);
270  } // if ME found
271  else {
272  edm::LogWarning("DataNotFound") << "Monitor elements for VtxZ efficiency cannot be found!\n";
273  }
274 
275  if (merespt_eta0to0p7_pt2to3 && merespt_eta0p7to1_pt2to3 && merespt_eta1to1p2_pt2to3 &&
276  merespt_eta1p2to1p6_pt2to3 && merespt_eta1p6to2_pt2to3 && merespt_eta2to2p4_pt2to3) {
277  // Set the current directoy
278  dbe->setCurrentFolder("SiOuterTrackerV/Tracks/FinalResolution");
279 
280  // Grab the histograms
281  TH1F *resPt1a = merespt_eta0to0p7_pt2to3->getTH1F();
282  TH1F *resPt2a = merespt_eta0p7to1_pt2to3->getTH1F();
283  TH1F *resPt3a = merespt_eta1to1p2_pt2to3->getTH1F();
284  TH1F *resPt4a = merespt_eta1p2to1p6_pt2to3->getTH1F();
285  TH1F *resPt5a = merespt_eta1p6to2_pt2to3->getTH1F();
286  TH1F *resPt6a = merespt_eta2to2p4_pt2to3->getTH1F();
287 
288  // Book the new histogram to contain the results
289  MonitorElement *me_res_pt1 =
290  ibooker.book1D("pTResVsEta_2-3", "p_{T} resolution vs |#eta|, for p_{T}: 2-3 GeV", eta_binnum, eta_bins);
291  TH1F *resPt1 = me_res_pt1->getTH1F();
292  resPt1->GetXaxis()->SetTitle("tracking particle |#eta|");
293  resPt1->GetYaxis()->SetTitle("#sigma(#Deltap_{T}/p_{T})");
294  resPt1->SetMinimum(0.0);
295  resPt1->SetStats(false);
296 
297  //int testNumEntries1 = resPt1a->GetEntries();
298  if (resPt1a->GetEntries() > 0 && resPt2a->GetEntries() > 0 && resPt3a->GetEntries() > 0 &&
299  resPt4a->GetEntries() > 0 && resPt5a->GetEntries() > 0 && resPt6a->GetEntries() > 0) {
300  //if (testNumEntries1 > 0) {
301  // Fit the histograms with a gaussian curve - take sigma and the error
302  // from the fit
303  resPt1a->Fit(fit2, "Q", "R");
304  resPt2a->Fit(fit2, "Q", "R");
305  resPt3a->Fit(fit2, "Q", "R");
306  resPt4a->Fit(fit2, "Q", "R");
307  resPt5a->Fit(fit2, "Q", "R");
308  resPt6a->Fit(fit2, "Q", "R");
309  sigma_pt1.push_back(resPt1a->GetFunction("fit2")->GetParameter(2));
310  sigma_pt1.push_back(resPt2a->GetFunction("fit2")->GetParameter(2));
311  sigma_pt1.push_back(resPt3a->GetFunction("fit2")->GetParameter(2));
312  sigma_pt1.push_back(resPt4a->GetFunction("fit2")->GetParameter(2));
313  sigma_pt1.push_back(resPt5a->GetFunction("fit2")->GetParameter(2));
314  sigma_pt1.push_back(resPt6a->GetFunction("fit2")->GetParameter(2));
315  error_pt1.push_back(resPt1a->GetFunction("fit2")->GetParError(2));
316  error_pt1.push_back(resPt2a->GetFunction("fit2")->GetParError(2));
317  error_pt1.push_back(resPt3a->GetFunction("fit2")->GetParError(2));
318  error_pt1.push_back(resPt4a->GetFunction("fit2")->GetParError(2));
319  error_pt1.push_back(resPt5a->GetFunction("fit2")->GetParError(2));
320  error_pt1.push_back(resPt6a->GetFunction("fit2")->GetParError(2));
321 
322  // Fill the new histogram to create resolution plot
323  for (int i = 0; i < 6; i++) {
324  resPt1->SetBinContent(i + 1, sigma_pt1[i]);
325  resPt1->SetBinError(i + 1, error_pt1[i]);
326  }
327  } else {
328  edm::LogWarning("DataNotFound") << "L1 tracks not found for pT resolution (2-3)!\n";
329  for (int i = 0; i < 6; i++) {
330  resPt1->SetBinContent(i + 1, -1);
331  resPt1->SetBinError(i + 1, -1);
332  }
333  }
334  } // if ME found
335  else {
336  edm::LogWarning("DataNotFound") << "Monitor elements for pT resolution (2-3) cannot be found!\n";
337  }
338 
339  if (merespt_eta0to0p7_pt3to8 && merespt_eta0p7to1_pt3to8 && merespt_eta1to1p2_pt3to8 &&
340  merespt_eta1p2to1p6_pt3to8 && merespt_eta1p6to2_pt3to8 && merespt_eta2to2p4_pt3to8) {
341  // Set the current directoy
342  dbe->setCurrentFolder("SiOuterTrackerV/Tracks/FinalResolution");
343 
344  // Grab the histograms
345  TH1F *resPt1b = merespt_eta0to0p7_pt3to8->getTH1F();
346  TH1F *resPt2b = merespt_eta0p7to1_pt3to8->getTH1F();
347  TH1F *resPt3b = merespt_eta1to1p2_pt3to8->getTH1F();
348  TH1F *resPt4b = merespt_eta1p2to1p6_pt3to8->getTH1F();
349  TH1F *resPt5b = merespt_eta1p6to2_pt3to8->getTH1F();
350  TH1F *resPt6b = merespt_eta2to2p4_pt3to8->getTH1F();
351 
352  // Book the new histogram to contain the results
353  MonitorElement *me_res_pt2 =
354  ibooker.book1D("pTResVsEta_3-8", "p_{T} resolution vs |#eta|, for p_{T}: 3-8 GeV", eta_binnum, eta_bins);
355  TH1F *resPt2 = me_res_pt2->getTH1F();
356  resPt2->GetXaxis()->SetTitle("tracking particle |#eta|");
357  resPt2->GetYaxis()->SetTitle("#sigma(#Deltap_{T}/p_{T})");
358  resPt2->SetMinimum(0.0);
359  resPt2->SetStats(false);
360 
361  //int testNumEntries2 = resPt1b->GetEntries();
362  // if (testNumEntries2 > 0) {
363  if (resPt1b->GetEntries() > 0 && resPt2b->GetEntries() > 0 && resPt3b->GetEntries() > 0 &&
364  resPt4b->GetEntries() > 0 && resPt5b->GetEntries() > 0 && resPt6b->GetEntries() > 0) {
365  // Fit the histograms with a gaussian curve - take sigma and the error
366  // from the fit
367  resPt1b->Fit(fit2, "Q", "R");
368  resPt2b->Fit(fit2, "Q", "R");
369  resPt3b->Fit(fit2, "Q", "R");
370  resPt4b->Fit(fit2, "Q", "R");
371  resPt5b->Fit(fit2, "Q", "R");
372  resPt6b->Fit(fit2, "Q", "R");
373  sigma_pt2.push_back(resPt1b->GetFunction("fit2")->GetParameter(2));
374  sigma_pt2.push_back(resPt2b->GetFunction("fit2")->GetParameter(2));
375  sigma_pt2.push_back(resPt3b->GetFunction("fit2")->GetParameter(2));
376  sigma_pt2.push_back(resPt4b->GetFunction("fit2")->GetParameter(2));
377  sigma_pt2.push_back(resPt5b->GetFunction("fit2")->GetParameter(2));
378  sigma_pt2.push_back(resPt6b->GetFunction("fit2")->GetParameter(2));
379  error_pt2.push_back(resPt1b->GetFunction("fit2")->GetParError(2));
380  error_pt2.push_back(resPt2b->GetFunction("fit2")->GetParError(2));
381  error_pt2.push_back(resPt3b->GetFunction("fit2")->GetParError(2));
382  error_pt2.push_back(resPt4b->GetFunction("fit2")->GetParError(2));
383  error_pt2.push_back(resPt5b->GetFunction("fit2")->GetParError(2));
384  error_pt2.push_back(resPt6b->GetFunction("fit2")->GetParError(2));
385 
386  // Fill the new histogram to create resolution plot
387  for (int i = 0; i < 6; i++) {
388  resPt2->SetBinContent(i + 1, sigma_pt2[i]);
389  resPt2->SetBinError(i + 1, error_pt2[i]);
390  }
391  } else {
392  edm::LogWarning("DataNotFound") << "L1 tracks not found for pT resolution (3-8)!\n";
393  for (int i = 0; i < 6; i++) {
394  resPt2->SetBinContent(i + 1, -1);
395  resPt2->SetBinError(i + 1, -1);
396  }
397  }
398  } // if ME found
399  else {
400  edm::LogWarning("DataNotFound") << "Monitor elements for pT resolution (3-8) cannot be found!\n";
401  }
402 
403  if (merespt_eta0to0p7_pt8toInf && merespt_eta0p7to1_pt8toInf && merespt_eta1to1p2_pt8toInf &&
404  merespt_eta1p2to1p6_pt8toInf && merespt_eta1p6to2_pt8toInf && merespt_eta2to2p4_pt8toInf) {
405  // Set the current directoy
406  dbe->setCurrentFolder("SiOuterTrackerV/Tracks/FinalResolution");
407 
408  // Grab the histograms
409  TH1F *resPt1c = merespt_eta0to0p7_pt8toInf->getTH1F();
410  TH1F *resPt2c = merespt_eta0p7to1_pt8toInf->getTH1F();
411  TH1F *resPt3c = merespt_eta1to1p2_pt8toInf->getTH1F();
412  TH1F *resPt4c = merespt_eta1p2to1p6_pt8toInf->getTH1F();
413  TH1F *resPt5c = merespt_eta1p6to2_pt8toInf->getTH1F();
414  TH1F *resPt6c = merespt_eta2to2p4_pt8toInf->getTH1F();
415 
416  // Book the new histogram to contain the results
417  MonitorElement *me_res_pt3 =
418  ibooker.book1D("pTResVsEta_8-inf", "p_{T} resolution vs |#eta|, for p_{T}: >8 GeV", eta_binnum, eta_bins);
419  TH1F *resPt3 = me_res_pt3->getTH1F();
420  resPt3->GetXaxis()->SetTitle("tracking particle |#eta|");
421  resPt3->GetYaxis()->SetTitle("#sigma(#Deltap_{T}/p_{T})");
422  resPt3->SetMinimum(0.0);
423  resPt3->SetStats(false);
424 
425  //int testNumEntries3 = resPt1c->GetEntries();
426  if (resPt1c->GetEntries() > 0 && resPt2c->GetEntries() > 0 && resPt3c->GetEntries() > 0 &&
427  resPt4c->GetEntries() > 0 && resPt5c->GetEntries() > 0 && resPt6c->GetEntries() > 0) {
428  // if (testNumEntries3 > 0) {
429  // Fit the histograms with a gaussian curve - take sigma and the error
430  // from the fit
431  resPt1c->Fit(fit2, "Q", "R");
432  resPt2c->Fit(fit2, "Q", "R");
433  resPt3c->Fit(fit2, "Q", "R");
434  resPt4c->Fit(fit2, "Q", "R");
435  resPt5c->Fit(fit2, "Q", "R");
436  resPt6c->Fit(fit2, "Q", "R");
437  sigma_pt3.push_back(resPt1c->GetFunction("fit2")->GetParameter(2));
438  sigma_pt3.push_back(resPt2c->GetFunction("fit2")->GetParameter(2));
439  sigma_pt3.push_back(resPt3c->GetFunction("fit2")->GetParameter(2));
440  sigma_pt3.push_back(resPt4c->GetFunction("fit2")->GetParameter(2));
441  sigma_pt3.push_back(resPt5c->GetFunction("fit2")->GetParameter(2));
442  sigma_pt3.push_back(resPt6c->GetFunction("fit2")->GetParameter(2));
443  error_pt3.push_back(resPt1c->GetFunction("fit2")->GetParError(2));
444  error_pt3.push_back(resPt2c->GetFunction("fit2")->GetParError(2));
445  error_pt3.push_back(resPt3c->GetFunction("fit2")->GetParError(2));
446  error_pt3.push_back(resPt4c->GetFunction("fit2")->GetParError(2));
447  error_pt3.push_back(resPt5c->GetFunction("fit2")->GetParError(2));
448  error_pt3.push_back(resPt6c->GetFunction("fit2")->GetParError(2));
449 
450  // Fill the new histogram to create resolution plot
451  for (int i = 0; i < 6; i++) {
452  resPt3->SetBinContent(i + 1, sigma_pt3[i]);
453  resPt3->SetBinError(i + 1, error_pt3[i]);
454  }
455  } else {
456  edm::LogWarning("DataNotFound") << "L1 tracks not found for pT resolution (8-inf)!\n";
457  for (int i = 0; i < 6; i++) {
458  resPt3->SetBinContent(i + 1, -1);
459  resPt3->SetBinError(i + 1, -1);
460  }
461  }
462  } // if ME found
463  else {
464  edm::LogWarning("DataNotFound") << "Monitor elements for pT resolution (8-inf) cannot be found!\n";
465  }
466 
467  if (mereseta_eta0to0p7 && mereseta_eta0p7to1 && mereseta_eta1to1p2 && mereseta_eta1p2to1p6 && mereseta_eta1p6to2 &&
468  mereseta_eta2to2p4) {
469  // Set the current directoy
470  dbe->setCurrentFolder("SiOuterTrackerV/Tracks/FinalResolution");
471 
472  // Grab the histograms
473  TH1F *resEta1 = mereseta_eta0to0p7->getTH1F();
474  TH1F *resEta2 = mereseta_eta0p7to1->getTH1F();
475  TH1F *resEta3 = mereseta_eta1to1p2->getTH1F();
476  TH1F *resEta4 = mereseta_eta1p2to1p6->getTH1F();
477  TH1F *resEta5 = mereseta_eta1p6to2->getTH1F();
478  TH1F *resEta6 = mereseta_eta2to2p4->getTH1F();
479 
480  // Book the new histogram to contain the results
481  MonitorElement *me_res_eta = ibooker.book1D("EtaResolution", "#eta resolution vs |#eta|", eta_binnum, eta_bins);
482  TH1F *resEta = me_res_eta->getTH1F();
483  resEta->GetXaxis()->SetTitle("tracking particle |#eta|");
484  resEta->GetYaxis()->SetTitle("#sigma(#Delta#eta)");
485  resEta->SetMinimum(0.0);
486  resEta->SetStats(false);
487 
488  //int testNumEntries4 = resEta1->GetEntries();
489  if (resEta1->GetEntries() > 0 && resEta2->GetEntries() > 0 && resEta3->GetEntries() > 0 &&
490  resEta4->GetEntries() > 0 && resEta5->GetEntries() > 0 && resEta6->GetEntries() > 0) {
491  // Fit the histograms with a gaussian curve - take sigma and the error
492  // from the fit
493  resEta1->Fit(fit, "Q", "R");
494  resEta2->Fit(fit, "Q", "R");
495  resEta3->Fit(fit, "Q", "R");
496  resEta4->Fit(fit, "Q", "R");
497  resEta5->Fit(fit, "Q", "R");
498  resEta6->Fit(fit, "Q", "R");
499  sigma_eta.push_back(resEta1->GetFunction("fit")->GetParameter(2));
500  sigma_eta.push_back(resEta2->GetFunction("fit")->GetParameter(2));
501  sigma_eta.push_back(resEta3->GetFunction("fit")->GetParameter(2));
502  sigma_eta.push_back(resEta4->GetFunction("fit")->GetParameter(2));
503  sigma_eta.push_back(resEta5->GetFunction("fit")->GetParameter(2));
504  sigma_eta.push_back(resEta6->GetFunction("fit")->GetParameter(2));
505  error_eta.push_back(resEta1->GetFunction("fit")->GetParError(2));
506  error_eta.push_back(resEta2->GetFunction("fit")->GetParError(2));
507  error_eta.push_back(resEta3->GetFunction("fit")->GetParError(2));
508  error_eta.push_back(resEta4->GetFunction("fit")->GetParError(2));
509  error_eta.push_back(resEta5->GetFunction("fit")->GetParError(2));
510  error_eta.push_back(resEta6->GetFunction("fit")->GetParError(2));
511 
512  // Fill the new histogram to create resolution plot
513  for (int i = 0; i < 6; i++) {
514  resEta->SetBinContent(i + 1, sigma_eta[i]);
515  resEta->SetBinError(i + 1, error_eta[i]);
516  }
517  } else {
518  edm::LogWarning("DataNotFound") << "L1 tracks not found for eta resolution!\n";
519  for (int i = 0; i < 6; i++) {
520  resEta->SetBinContent(i + 1, -1);
521  resEta->SetBinError(i + 1, -1);
522  }
523  }
524  } // if ME found
525  else {
526  edm::LogWarning("DataNotFound") << "Monitor elements for eta resolution cannot be found!\n";
527  }
528 
529  if (meresphi_eta0to0p7 && meresphi_eta0p7to1 && meresphi_eta1to1p2 && meresphi_eta1p2to1p6 && meresphi_eta1p6to2 &&
530  meresphi_eta2to2p4) {
531  // Set the current directoy
532  dbe->setCurrentFolder("SiOuterTrackerV/Tracks/FinalResolution");
533 
534  // Grab the histograms
535  TH1F *resPhi1 = meresphi_eta0to0p7->getTH1F();
536  TH1F *resPhi2 = meresphi_eta0p7to1->getTH1F();
537  TH1F *resPhi3 = meresphi_eta1to1p2->getTH1F();
538  TH1F *resPhi4 = meresphi_eta1p2to1p6->getTH1F();
539  TH1F *resPhi5 = meresphi_eta1p6to2->getTH1F();
540  TH1F *resPhi6 = meresphi_eta2to2p4->getTH1F();
541 
542  // Book the new histogram to contain the results
543  MonitorElement *me_res_phi = ibooker.book1D("PhiResolution", "#phi resolution vs |#eta|", eta_binnum, eta_bins);
544  TH1F *resPhi = me_res_phi->getTH1F();
545  resPhi->GetXaxis()->SetTitle("tracking particle |#eta|");
546  resPhi->GetYaxis()->SetTitle("#sigma(#Delta#phi)");
547  resPhi->SetMinimum(0.0);
548  resPhi->SetStats(false);
549 
550  //int testNumEntries5 = resPhi1->GetEntries();
551  if (resPhi1->GetEntries() > 0 && resPhi2->GetEntries() > 0 && resPhi3->GetEntries() > 0 &&
552  resPhi4->GetEntries() > 0 && resPhi5->GetEntries() > 0 && resPhi6->GetEntries() > 0) {
553  // Fit the histograms with a gaussian curve - take sigma and the error
554  // from the fit
555  resPhi1->Fit(fit, "Q", "R");
556  resPhi2->Fit(fit, "Q", "R");
557  resPhi3->Fit(fit, "Q", "R");
558  resPhi4->Fit(fit, "Q", "R");
559  resPhi5->Fit(fit, "Q", "R");
560  resPhi6->Fit(fit, "Q", "R");
561  sigma_phi.push_back(resPhi1->GetFunction("fit")->GetParameter(2));
562  sigma_phi.push_back(resPhi2->GetFunction("fit")->GetParameter(2));
563  sigma_phi.push_back(resPhi3->GetFunction("fit")->GetParameter(2));
564  sigma_phi.push_back(resPhi4->GetFunction("fit")->GetParameter(2));
565  sigma_phi.push_back(resPhi5->GetFunction("fit")->GetParameter(2));
566  sigma_phi.push_back(resPhi6->GetFunction("fit")->GetParameter(2));
567  error_phi.push_back(resPhi1->GetFunction("fit")->GetParError(2));
568  error_phi.push_back(resPhi2->GetFunction("fit")->GetParError(2));
569  error_phi.push_back(resPhi3->GetFunction("fit")->GetParError(2));
570  error_phi.push_back(resPhi4->GetFunction("fit")->GetParError(2));
571  error_phi.push_back(resPhi5->GetFunction("fit")->GetParError(2));
572  error_phi.push_back(resPhi6->GetFunction("fit")->GetParError(2));
573 
574  // Fill the new histogram to create resolution plot
575  for (int i = 0; i < 6; i++) {
576  resPhi->SetBinContent(i + 1, sigma_phi[i]);
577  resPhi->SetBinError(i + 1, error_phi[i]);
578  }
579  } else {
580  edm::LogWarning("DataNotFound") << "L1 tracks not found for phi resolution!\n";
581  for (int i = 0; i < 6; i++) {
582  resPhi->SetBinContent(i + 1, -1);
583  resPhi->SetBinError(i + 1, -1);
584  }
585  }
586  } // if ME found
587  else {
588  edm::LogWarning("DataNotFound") << "Monitor elements for phi resolution cannot be found!\n";
589  }
590 
591  if (meresVtxZ_eta0to0p7 && meresVtxZ_eta0p7to1 && meresVtxZ_eta1to1p2 && meresVtxZ_eta1p2to1p6 &&
592  meresVtxZ_eta1p6to2 && meresVtxZ_eta2to2p4) {
593  // Set the current directoy
594  dbe->setCurrentFolder("SiOuterTrackerV/Tracks/FinalResolution");
595 
596  // Grab the histograms
597  TH1F *resVtxZ_1 = meresVtxZ_eta0to0p7->getTH1F();
598  TH1F *resVtxZ_2 = meresVtxZ_eta0p7to1->getTH1F();
599  TH1F *resVtxZ_3 = meresVtxZ_eta1to1p2->getTH1F();
600  TH1F *resVtxZ_4 = meresVtxZ_eta1p2to1p6->getTH1F();
601  TH1F *resVtxZ_5 = meresVtxZ_eta1p6to2->getTH1F();
602  TH1F *resVtxZ_6 = meresVtxZ_eta2to2p4->getTH1F();
603 
604  // Book the new histogram to contain the results
605  MonitorElement *me_res_VtxZ = ibooker.book1D("VtxZResolution", "VtxZ resolution vs |#eta|", eta_binnum, eta_bins);
606  TH1F *resVtxZ = me_res_VtxZ->getTH1F();
607  resVtxZ->GetXaxis()->SetTitle("tracking particle |#eta|");
608  resVtxZ->GetYaxis()->SetTitle("#sigma(#DeltaVtxZ) [cm]");
609  resVtxZ->SetMinimum(0.0);
610  resVtxZ->SetStats(false);
611 
612  //int testNumEntries6 = resVtxZ_1->GetEntries();
613  if (resVtxZ_1->GetEntries() > 0 && resVtxZ_2->GetEntries() > 0 && resVtxZ_3->GetEntries() > 0 &&
614  resVtxZ_4->GetEntries() > 0 && resVtxZ_5->GetEntries() > 0 && resVtxZ_6->GetEntries() > 0) {
615  // Fit the histograms with a gaussian curve - take sigma and the error
616  // from the fit
617  resVtxZ_1->Fit(fit3, "Q", "R");
618  resVtxZ_2->Fit(fit3, "Q", "R");
619  resVtxZ_3->Fit(fit3, "Q", "R");
620  resVtxZ_4->Fit(fit3, "Q", "R");
621  resVtxZ_5->Fit(fit3, "Q", "R");
622  resVtxZ_6->Fit(fit3, "Q", "R");
623  sigma_VtxZ.push_back(resVtxZ_1->GetFunction("fit3")->GetParameter(2));
624  sigma_VtxZ.push_back(resVtxZ_2->GetFunction("fit3")->GetParameter(2));
625  sigma_VtxZ.push_back(resVtxZ_3->GetFunction("fit3")->GetParameter(2));
626  sigma_VtxZ.push_back(resVtxZ_4->GetFunction("fit3")->GetParameter(2));
627  sigma_VtxZ.push_back(resVtxZ_5->GetFunction("fit3")->GetParameter(2));
628  sigma_VtxZ.push_back(resVtxZ_6->GetFunction("fit3")->GetParameter(2));
629  error_VtxZ.push_back(resVtxZ_1->GetFunction("fit3")->GetParError(2));
630  error_VtxZ.push_back(resVtxZ_2->GetFunction("fit3")->GetParError(2));
631  error_VtxZ.push_back(resVtxZ_3->GetFunction("fit3")->GetParError(2));
632  error_VtxZ.push_back(resVtxZ_4->GetFunction("fit3")->GetParError(2));
633  error_VtxZ.push_back(resVtxZ_5->GetFunction("fit3")->GetParError(2));
634  error_VtxZ.push_back(resVtxZ_6->GetFunction("fit3")->GetParError(2));
635 
636  // Fill the new histogram to create resolution plot
637  for (int i = 0; i < 6; i++) {
638  resVtxZ->SetBinContent(i + 1, sigma_VtxZ[i]);
639  resVtxZ->SetBinError(i + 1, error_VtxZ[i]);
640  }
641  } else {
642  edm::LogWarning("DataNotFound") << "L1 tracks not found for VtxZ resolution!\n";
643  for (int i = 0; i < 6; i++) {
644  resVtxZ->SetBinContent(i + 1, -1);
645  resVtxZ->SetBinError(i + 1, -1);
646  }
647  }
648  } // if ME found
649  else {
650  edm::LogWarning("DataNotFound") << "Monitor elements for VtxZ resolution cannot be found!\n";
651  }
652 
653  if (meresd0_eta0to0p7 && meresd0_eta0p7to1 && meresd0_eta1to1p2 && meresd0_eta1p2to1p6 && meresd0_eta1p6to2 &&
654  meresd0_eta2to2p4) {
655  // Set the current directoy
656  dbe->setCurrentFolder("SiOuterTrackerV/Tracks/FinalResolution");
657 
658  // Grab the histograms
659  TH1F *resd0_1 = meresd0_eta0to0p7->getTH1F();
660  TH1F *resd0_2 = meresd0_eta0p7to1->getTH1F();
661  TH1F *resd0_3 = meresd0_eta1to1p2->getTH1F();
662  TH1F *resd0_4 = meresd0_eta1p2to1p6->getTH1F();
663  TH1F *resd0_5 = meresd0_eta1p6to2->getTH1F();
664  TH1F *resd0_6 = meresd0_eta2to2p4->getTH1F();
665 
666  // Book the new histogram to contain the results
667  MonitorElement *me_res_d0 = ibooker.book1D("d0Resolution", "d_{0} resolution vs |#eta|", eta_binnum, eta_bins);
668  TH1F *resd0 = me_res_d0->getTH1F();
669  resd0->GetXaxis()->SetTitle("tracking particle |#eta|");
670  resd0->GetYaxis()->SetTitle("#sigma(#Deltad_{0}) [cm]");
671  resd0->SetMinimum(0.0);
672  resd0->SetStats(false);
673 
674  //int testNumEntries7 = resd0_1->GetEntries();
675  if (resd0_1->GetEntries() > 0 && resd0_2->GetEntries() > 0 && resd0_3->GetEntries() > 0 &&
676  resd0_4->GetEntries() > 0 && resd0_5->GetEntries() > 0 && resd0_6->GetEntries() > 0) {
677  // Fit the histograms with a gaussian curve - take sigma and the error
678  // from the fit
679  resd0_1->Fit(fit, "Q", "R");
680  resd0_2->Fit(fit, "Q", "R");
681  resd0_3->Fit(fit, "Q", "R");
682  resd0_4->Fit(fit, "Q", "R");
683  resd0_5->Fit(fit, "Q", "R");
684  resd0_6->Fit(fit, "Q", "R");
685  sigma_d0.push_back(resd0_1->GetFunction("fit")->GetParameter(2));
686  sigma_d0.push_back(resd0_2->GetFunction("fit")->GetParameter(2));
687  sigma_d0.push_back(resd0_3->GetFunction("fit")->GetParameter(2));
688  sigma_d0.push_back(resd0_4->GetFunction("fit")->GetParameter(2));
689  sigma_d0.push_back(resd0_5->GetFunction("fit")->GetParameter(2));
690  sigma_d0.push_back(resd0_6->GetFunction("fit")->GetParameter(2));
691  error_d0.push_back(resd0_1->GetFunction("fit")->GetParError(2));
692  error_d0.push_back(resd0_2->GetFunction("fit")->GetParError(2));
693  error_d0.push_back(resd0_3->GetFunction("fit")->GetParError(2));
694  error_d0.push_back(resd0_4->GetFunction("fit")->GetParError(2));
695  error_d0.push_back(resd0_5->GetFunction("fit")->GetParError(2));
696  error_d0.push_back(resd0_6->GetFunction("fit")->GetParError(2));
697 
698  // Fill the new histogram to create resolution plot
699  for (int i = 0; i < 6; i++) {
700  resd0->SetBinContent(i + 1, sigma_d0[i]);
701  resd0->SetBinError(i + 1, error_d0[i]);
702  }
703  } else {
704  edm::LogWarning("DataNotFound") << "L1 tracks not found for d0 resolution!\n";
705  for (int i = 0; i < 6; i++) {
706  resd0->SetBinContent(i + 1, -1);
707  resd0->SetBinError(i + 1, -1);
708  }
709  }
710  } // if ME found
711  else {
712  edm::LogWarning("DataNotFound") << "Monitor elements for d0 resolution cannot be found!\n";
713  }
714 
715  } // if dbe found
716  else {
717  edm::LogWarning("DataNotFound") << "Cannot find valid DQM back end \n";
718  }
719  delete fit;
720  delete fit2;
721  delete fit3;
722 } // end dqmEndJob

References dqm::implementation::IBooker::book1D(), dbe, HLTTauDQMOffline_cfi::denominator, L1TowerCalibrationProducer_cfi::fit, dqm::implementation::IGetter::get(), dqm::legacy::MonitorElement::getTH1F(), mps_fire::i, HLTTauDQMOffline_cfi::numerator, dqm::impl::MonitorElement::setAxisTitle(), dqm::implementation::DQMStore::setCurrentFolder(), and tools::TF1.

Member Data Documentation

◆ dbe

DQMStore* OuterTrackerMCHarvester::dbe
private

Definition at line 21 of file OuterTrackerMCHarvester.h.

Referenced by dqmEndJob().

mps_fire.i
i
Definition: mps_fire.py:428
OuterTrackerMCHarvester::dbe
DQMStore * dbe
Definition: OuterTrackerMCHarvester.h:21
edm
HLT enums.
Definition: AlignableModifier.h:19
dqm::legacy::MonitorElement
Definition: MonitorElement.h:461
L1TowerCalibrationProducer_cfi.fit
fit
Definition: L1TowerCalibrationProducer_cfi.py:36
tools.TF1
TF1
Definition: tools.py:23
dqm::legacy::MonitorElement::getTH1F
virtual TH1F * getTH1F() const
Definition: MonitorElement.h:478
edm::LogWarning
Log< level::Warning, false > LogWarning
Definition: MessageLogger.h:122
dqm::implementation::DQMStore::setCurrentFolder
void setCurrentFolder(std::string const &fullpath) override
Definition: DQMStore.h:569
edm::Service
Definition: Service.h:30
HLTTauDQMOffline_cfi.numerator
numerator
Definition: HLTTauDQMOffline_cfi.py:179
HLTTauDQMOffline_cfi.denominator
denominator
Definition: HLTTauDQMOffline_cfi.py:180
dqm::implementation::IGetter::get
virtual MonitorElement * get(std::string const &fullpath) const
Definition: DQMStore.cc:651
dqm::impl::MonitorElement::setAxisTitle
virtual void setAxisTitle(const std::string &title, int axis=1)
set x-, y- or z-axis title (axis=1, 2, 3 respectively)
Definition: MonitorElement.cc:800
fit
Definition: CombinedChiSquaredLikelihood.h:6
dqm::implementation::IBooker::book1D
MonitorElement * book1D(TString const &name, TString const &title, int const nchX, double const lowX, double const highX, FUNC onbooking=NOOP())
Definition: DQMStore.h:98