CMS 3D CMS Logo

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
MuonGeometryDBConverter.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 //
3 // Package: MuonGeometryDBConverter
4 // Class: MuonGeometryDBConverter
5 //
13 //
14 // Original Author: Jim Pivarski
15 // Created: Sat Feb 16 00:04:55 CST 2008
16 // $Id: MuonGeometryDBConverter.cc,v 1.13 2009/10/07 20:46:38 pivarski Exp $
17 //
18 //
19 
20 
21 // system include files
30 
31 // user include files
38 
39 //
40 // class decleration
41 //
42 
44  public:
47 
48 
49  private:
50  virtual void analyze(const edm::Event&, const edm::EventSetup&);
51 
52  bool m_done;
53  std::string m_input, m_output;
54 
55  std::string m_dtLabel, m_cscLabel;
57  std::string m_fileName;
58  bool m_getAPEs;
59 
62 };
63 
64 //
65 // constants, enums and typedefs
66 //
67 
68 //
69 // static data member definitions
70 //
71 
72 //
73 // constructors and destructor
74 //
76  : m_done(false)
77  , m_input(iConfig.getParameter<std::string>("input"))
78  , m_output(iConfig.getParameter<std::string>("output"))
79 {
81  // Version V02-03-02 and earlier of this module had support for //
82  // "cfg" as an input/output format. It turns out that reading //
83  // thousands of parameters from a configuration file takes a very //
84  // long time, so "cfg" wasn't very practical. When I reorganized //
85  // the code, I didn't bother to port it. //
87 
88  if (m_input == std::string("ideal")) {}
89 
90  else if (m_input == std::string("db")) {
91  m_dtLabel = iConfig.getParameter<std::string>("dtLabel");
92  m_cscLabel = iConfig.getParameter<std::string>("cscLabel");
93  m_shiftErr = iConfig.getParameter<double>("shiftErr");
94  m_angleErr = iConfig.getParameter<double>("angleErr");
95  m_getAPEs = iConfig.getParameter<bool>("getAPEs");
96  }
97 
98  else if (m_input == std::string("surveydb")) {
99  m_dtLabel = iConfig.getParameter<std::string>("dtLabel");
100  m_cscLabel = iConfig.getParameter<std::string>("cscLabel");
101  }
102 
103  else if (m_input == std::string("scenario")) {
104  m_misalignmentScenario = iConfig.getParameter<edm::ParameterSet>("MisalignmentScenario");
105  m_shiftErr = iConfig.getParameter<double>("shiftErr");
106  m_angleErr = iConfig.getParameter<double>("angleErr");
107  }
108 
109  else if (m_input == std::string("xml")) {
110  m_fileName = iConfig.getParameter<std::string>("fileName");
111  m_shiftErr = iConfig.getParameter<double>("shiftErr");
112  m_angleErr = iConfig.getParameter<double>("angleErr");
113  }
114 
115  else {
116  throw cms::Exception("BadConfig") << "input must be \"ideal\", \"db\", \"surveydb\", or \"xml\"." << std::endl;
117  }
118 
119  if (m_output == std::string("none")) {}
120 
121  else if (m_output == std::string("db")) {}
122 
123  else if (m_output == std::string("surveydb")) {}
124 
125  else if (m_output == std::string("xml")) {
126  m_outputXML = iConfig.getParameter<edm::ParameterSet>("outputXML");
127  }
128 
129  else {
130  throw cms::Exception("BadConfig") << "output must be \"none\", \"db\", or \"surveydb\"." << std::endl;
131  }
132 }
133 
135 
136 // ------------ method called to for each event ------------
137 void
139  if (!m_done) {
141 
142  if (m_input == std::string("ideal")) {
143  MuonAlignmentInputMethod inputMethod;
144  muonAlignment = new MuonAlignment(iSetup, inputMethod);
145  muonAlignment->fillGapsInSurvey(0., 0.);
146  }
147 
148  else if (m_input == std::string("db")) {
150  muonAlignment = new MuonAlignment(iSetup, inputMethod);
151  if (m_getAPEs) {
153  }
154  }
155 
156  else if (m_input == std::string("surveydb")) {
158  muonAlignment = new MuonAlignment(iSetup, inputMethod);
159  muonAlignment->copySurveyToAlignment();
160  }
161 
162  else if (m_input == std::string("scenario")) {
163  MuonAlignmentInputMethod inputMethod;
164  muonAlignment = new MuonAlignment(iSetup, inputMethod);
165 
166  MuonScenarioBuilder muonScenarioBuilder(muonAlignment->getAlignableMuon());
167  muonScenarioBuilder.applyScenario(m_misalignmentScenario);
169  }
170 
171  else if (m_input == std::string("xml")) {
172  MuonAlignmentInputXML inputMethod(m_fileName);
173  muonAlignment = new MuonAlignment(iSetup, inputMethod);
174  muonAlignment->fillGapsInSurvey(m_shiftErr, m_angleErr);
175  }
176 
178 
179  if (m_output == std::string("none")) {}
180 
181  else if (m_output == std::string("db")) {
182  muonAlignment->saveToDB();
183  }
184 
185  else if (m_output == std::string("surveydb")) {
186  muonAlignment->saveSurveyToDB();
187  }
188 
189  else if (m_output == std::string("xml")) {
190  muonAlignment->writeXML(m_outputXML, iSetup);
191  }
192 
193  delete muonAlignment;
194 
195  m_done = true;
196  } // end if not done
197  else {
198  throw cms::Exception("BadConfig") << "Set maxEvents.input to 1. (Your output is okay.)" << std::endl;
199  }
200 }
201 
202 //define this as a plug-in
T getParameter(std::string const &) const
Builds a scenario from configuration and applies it to the alignable Muon.
void copyAlignmentToSurvey(double shiftErr, double angleErr)
virtual void analyze(const edm::Event &, const edm::EventSetup &)
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:17
#define NULL
Definition: scimark2.h:8
void copySurveyToAlignment()
MuonGeometryDBConverter(const edm::ParameterSet &)
void saveSurveyToDB()
int iEvent
Definition: GenABIO.cc:243
AlignableMuon * getAlignableMuon()
Definition: MuonAlignment.h:31
void fillGapsInSurvey(double shiftErr, double angleErr)
void writeXML(const edm::ParameterSet iConfig, const edm::EventSetup &iSetup)
void applyScenario(const edm::ParameterSet &scenario)
Apply misalignment scenario to the Muon.
edm::ParameterSet m_misalignmentScenario