CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
SiPixelFakeLorentzAngleESSource.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 //
3 // Package: SiPixelFakeLorentzAngleESSource
4 // Class: SiPixelFakeLorentzAngleESSource
5 //
13 //
14 // Original Author: Lotte Wilke
15 // Created: Jan 31 2008
16 //
17 //
18 
19 // user include files
20 
30 
31 //
32 // constructors and destructor
33 //
35  : fp_(conf_.getParameter<edm::FileInPath>("file")),
36  t_topo_fp_(conf_.getParameter<edm::FileInPath>("topologyInput")),
37  myLabel_(conf_.getParameter<std::string>("appendToDataLabel")),
38  BPixParameters_(conf_.getParameter<Parameters>("BPixParameters")),
39  FPixParameters_(conf_.getParameter<Parameters>("FPixParameters")),
40  ModuleParameters_(conf_.getParameter<Parameters>("ModuleParameters")),
41  bPixLorentzAnglePerTesla_((float)conf_.getUntrackedParameter<double>("bPixLorentzAnglePerTesla", -9999.)),
42  fPixLorentzAnglePerTesla_((float)conf_.getUntrackedParameter<double>("fPixLorentzAnglePerTesla", -9999.)) {
43  edm::LogInfo("SiPixelFakeLorentzAngleESSource::SiPixelFakeLorentzAngleESSource");
44  // the following line is needed to tell the framework what data is being produced
45  setWhatProduced(this);
46  findingRecord<SiPixelLorentzAngleRcd>();
47 }
48 
49 std::unique_ptr<SiPixelLorentzAngle> SiPixelFakeLorentzAngleESSource::produce(const SiPixelLorentzAngleRcd&) {
50  using namespace edm::es;
51  unsigned int nmodules = 0;
54  const std::vector<uint32_t>& DetIds = reader.getAllDetIds();
55 
57 
58  // Loop over detectors
59  for (const auto& detit : DetIds) {
60  nmodules++;
61  const DetId detid(detit);
62  auto rawId = detid.rawId();
63  int found = 0;
64  int side = tTopo.side(detid); // 1:-z 2:+z for fpix, for bpix gives 0
65 
66  // fill bpix values for LA
67  if (detid.subdetId() == static_cast<int>(PixelSubdetector::PixelBarrel)) {
68  int layer = tTopo.pxbLayer(detid);
69  // Barrel ladder id 1-20,32,44.
70  int ladder = tTopo.pxbLadder(detid);
71  // Barrel Z-index=1,8
72  int module = tTopo.pxbModule(detid);
73  if (module < 5) {
74  side = 1;
75  } else {
76  side = 2;
77  }
78 
79  LogDebug("SiPixelFakeLorentzAngleESSource") << " pixel barrel:"
80  << " layer=" << layer << " ladder=" << ladder << " module=" << module
81  << " rawId=" << rawId << " side " << side;
82 
83  // use a commmon value (e.g. for MC)
84  if (bPixLorentzAnglePerTesla_ != -9999.) { // use common value for all
85  edm::LogInfo("SiPixelFakeLorentzAngleESSource")
86  << " LA = " << bPixLorentzAnglePerTesla_ << " common for all bpix" << std::endl;
87  if (!obj->putLorentzAngle(detid.rawId(), bPixLorentzAnglePerTesla_))
88  edm::LogError("SiPixelFakeLorentzAngleESSource")
89  << "ERROR!: detid " << rawId << " already exists" << std::endl;
90  } else {
91  //first individuals are put
92  for (const auto& it : ModuleParameters_) {
93  if (it.getParameter<unsigned int>("rawid") == detid.rawId()) {
94  float lorentzangle = (float)it.getParameter<double>("angle");
95  if (!found) {
96  obj->putLorentzAngle(detid.rawId(), lorentzangle);
97  edm::LogInfo("SiPixelFakeLorentzAngleESSource")
98  << " LA= " << lorentzangle << " individual value " << detid.rawId() << std::endl;
99  found = 1;
100  } else
101  edm::LogError("SiPixelFakeLorentzAngleESSource") << "ERROR!: detid already exists" << std::endl;
102  }
103  }
104 
105  //modules already put are automatically skipped
106  for (const auto& it : BPixParameters_) {
107  if (it.exists("layer"))
108  if (it.getParameter<int>("layer") != layer)
109  continue;
110  if (it.exists("ladder"))
111  if (it.getParameter<int>("ladder") != ladder)
112  continue;
113  if (it.exists("module"))
114  if (it.getParameter<int>("module") != module)
115  continue;
116  if (it.exists("side"))
117  if (it.getParameter<int>("side") != side)
118  continue;
119  if (!found) {
120  float lorentzangle = (float)it.getParameter<double>("angle");
121  obj->putLorentzAngle(detid.rawId(), lorentzangle);
122  edm::LogInfo("SiPixelFakeLorentzAngleESSource") << " LA= " << lorentzangle << std::endl;
123  found = 2;
124  } else if (found == 1) {
125  edm::LogWarning("SiPixelFakeLorentzAngleESSource")
126  << "detid already given in ModuleParameters, skipping ..." << std::endl;
127  } else
128  edm::LogError("SiPixelFakeLorentzAngleESSource")
129  << " ERROR!: detid " << rawId << " already exists" << std::endl;
130  }
131  }
132  } else if (detid.subdetId() == static_cast<int>(PixelSubdetector::PixelEndcap)) {
133  // fill fpix values for LA (for phase2 fpix & epix)
134 
135  // For fpix we also need to find the ring number which is not available from topology
136  // Convert to online
137  PixelEndcapName pen(detid, &tTopo, true); // use det-id phaseq
138 
139  //PixelEndcapName::HalfCylinder sh = pen.halfCylinder(); //enum
140  //string nameF = pen.name();
141  //int plaquetteName = pen.plaquetteName();
142  int disk = pen.diskName();
143  int blade = pen.bladeName();
144  int panel = pen.pannelName();
145  int ring = pen.ringName();
146 
147  LogDebug("SiPixelFakeLorentzAngleESSource") << " pixel endcap:"
148  << " side=" << side << " disk=" << disk << " blade =" << blade
149  << " pannel=" << panel << " ring=" << ring << " rawId=" << rawId;
150 
151  // use a commmon value (e.g. for MC)
152  if (fPixLorentzAnglePerTesla_ != -9999.) { // use common value for all
153  edm::LogInfo("SiPixelFakeLorentzAngleESSource")
154  << " LA = " << fPixLorentzAnglePerTesla_ << " common for all fpix" << std::endl;
155  if (!obj->putLorentzAngle(detid.rawId(), fPixLorentzAnglePerTesla_))
156  edm::LogError("SiPixelFakeLorentzAngleESSource") << " ERROR! detid already exists" << std::endl;
157  } else {
158  //first individuals are put
159  for (const auto& it : ModuleParameters_) {
160  if (it.getParameter<unsigned int>("rawid") == detid.rawId()) {
161  float lorentzangle = (float)it.getParameter<double>("angle");
162  if (!found) {
163  obj->putLorentzAngle(detid.rawId(), lorentzangle);
164  edm::LogInfo("SiPixelFakeLorentzAngleESSource")
165  << " LA= " << lorentzangle << " individual value " << detid.rawId() << std::endl;
166  found = 1;
167  } else
168  edm::LogError("SiPixelFakeLorentzAngleESSource")
169  << "ERROR!: detid " << rawId << " already exists" << std::endl;
170  } // if
171  } // for
172 
173  //modules already put are automatically skipped
174  for (const auto& it : FPixParameters_) {
175  if (it.exists("side"))
176  if (it.getParameter<int>("side") != side)
177  continue;
178  if (it.exists("disk"))
179  if (it.getParameter<int>("disk") != disk)
180  continue;
181  if (it.exists("ring"))
182  if (it.getParameter<int>("ring") != ring)
183  continue;
184  if (it.exists("blade"))
185  if (it.getParameter<int>("blade") != blade)
186  continue;
187  if (it.exists("panel"))
188  if (it.getParameter<int>("panel") != panel)
189  continue;
190  if (it.exists("HVgroup"))
191  if (it.getParameter<int>("HVgroup") != HVgroup(panel, ring))
192  continue;
193  if (!found) {
194  float lorentzangle = (float)it.getParameter<double>("angle");
195  obj->putLorentzAngle(detid.rawId(), lorentzangle);
196  edm::LogInfo("SiPixelFakeLorentzAngleESSource") << " LA= " << lorentzangle << std::endl;
197  found = 2;
198  } else if (found == 1) {
199  edm::LogWarning("SiPixelFakeLorentzAngleESSource")
200  << " detid " << rawId << " already given in ModuleParameters, skipping ..." << std::endl;
201  } else
202  edm::LogError("SiPixelFakeLorentzAngleESSource")
203  << "ERROR!: detid" << rawId << "already exists" << std::endl;
204  } // for
205  } // if
206  } // bpix/fpix
207  } // iterate on detids
208 
209  edm::LogInfo("SiPixelFakeLorentzAngleESSource") << "Modules = " << nmodules << std::endl;
210 
211  return std::unique_ptr<SiPixelLorentzAngle>(obj);
212 }
213 
215  const edm::IOVSyncValue& iosv,
216  edm::ValidityInterval& oValidity) {
218  oValidity = infinity;
219 }
220 
222  if (1 == panel && (1 == module || 2 == module)) {
223  return 1;
224  } else if (1 == panel && (3 == module || 4 == module)) {
225  return 2;
226  } else if (2 == panel && 1 == module) {
227  return 1;
228  } else if (2 == panel && (2 == module || 3 == module)) {
229  return 2;
230  } else {
231  edm::LogError("SiPixelFakeLorentzAngleESSource")
232  << " ERROR! in SiPixelFakeLorentzAngleESSource::HVgroup(...), panel = " << panel << ", module = " << module
233  << std::endl;
234  return 0;
235  }
236 }
237 
240  desc.setComment("ESSource to supply per-module SiPixelLorentzAngle payloads in the EventSetup");
241 
242  desc.add<edm::FileInPath>(
243  "file", edm::FileInPath("SLHCUpgradeSimulations/Geometry/data/PhaseI/PixelSkimmedGeometry_phase1.txt"))
244  ->setComment("Tracker skimmed geometry");
245  desc.add<edm::FileInPath>("topologyInput",
246  edm::FileInPath("Geometry/TrackerCommonData/data/PhaseI/trackerParameters.xml"))
247  ->setComment("Tracker Topology");
248 
249  desc.add<std::string>("appendToDataLabel", "")->setComment("label to which write the data");
250  desc.addUntracked<double>("bPixLorentzAnglePerTesla", -9999.)->setComment("LA value for all BPix");
251  desc.addUntracked<double>("fPixLorentzAnglePerTesla", -9999.)->setComment("LA value for all FPix");
252 
253  edm::ParameterSetDescription desc_BPixParameters;
254  desc_BPixParameters.addOptional<int>("layer");
255  desc_BPixParameters.addOptional<int>("ladder");
256  desc_BPixParameters.addOptional<int>("module");
257  desc_BPixParameters.addOptional<int>("side");
258  desc_BPixParameters.add<double>("angle");
259  std::vector<edm::ParameterSet> default_BPixParametersToAdd;
260  desc.addVPSet("BPixParameters", desc_BPixParameters, default_BPixParametersToAdd)
261  ->setComment("LA values for given BPix regions");
262 
263  edm::ParameterSetDescription desc_FPixParameters;
264  desc_FPixParameters.addOptional<int>("side");
265  desc_FPixParameters.addOptional<int>("disk");
266  desc_FPixParameters.addOptional<int>("ring");
267  desc_FPixParameters.addOptional<int>("blade");
268  desc_FPixParameters.addOptional<int>("panel");
269  desc_FPixParameters.addOptional<int>("HVgroup");
270  desc_FPixParameters.add<double>("angle");
271  std::vector<edm::ParameterSet> default_FPixParametersToAdd;
272  desc.addVPSet("FPixParameters", desc_FPixParameters, default_FPixParametersToAdd)
273  ->setComment("LA values for given FPix regions");
274 
275  edm::ParameterSetDescription desc_ModuleParameters;
276  desc_ModuleParameters.add<unsigned int>("rawid");
277  desc_ModuleParameters.add<double>("angle");
278  std::vector<edm::ParameterSet> default_ModuleParametersToAdd;
279  desc.addVPSet("ModuleParameters", desc_ModuleParameters, default_ModuleParametersToAdd)
280  ->setComment("LA values for given modules");
281 
282  descriptions.addWithDefaultLabel(desc);
283 }
auto setWhatProduced(T *iThis, const es::Label &iLabel={})
Definition: ESProducer.h:163
void setComment(std::string const &value)
void addWithDefaultLabel(ParameterSetDescription const &psetDescription)
ParameterDescriptionBase * addOptional(U const &iLabel, T const &value)
ParameterDescriptionBase * addVPSet(U const &iLabel, ParameterSetDescription const &validator, std::vector< ParameterSet > const &defaults)
ParameterDescriptionBase * addUntracked(U const &iLabel, T const &value)
static const IOVSyncValue & endOfTime()
Definition: IOVSyncValue.cc:82
constexpr uint32_t rawId() const
get the raw id
Definition: DetId.h:57
Log< level::Error, false > LogError
constexpr std::array< uint8_t, layerIndexSize > layer
std::vector< edm::ParameterSet > Parameters
int bladeName() const
blade id
void setComment(std::string const &value)
static const IOVSyncValue & beginOfTime()
Definition: IOVSyncValue.cc:88
virtual std::unique_ptr< SiPixelLorentzAngle > produce(const SiPixelLorentzAngleRcd &)
constexpr int subdetId() const
get the contents of the subdetector field (not cast into any detector&#39;s numbering enum) ...
Definition: DetId.h:48
const double infinity
SiPixelFakeLorentzAngleESSource(const edm::ParameterSet &)
tuple reader
Definition: DQM.py:105
ParameterDescriptionBase * add(U const &iLabel, T const &value)
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
Log< level::Info, false > LogInfo
Definition: DetId.h:17
void setIntervalFor(const edm::eventsetup::EventSetupRecordKey &, const edm::IOVSyncValue &, edm::ValidityInterval &) override
int pannelName() const
pannel id
TrackerTopology fromTrackerParametersXMLFile(const std::string &xmlFileName)
std::string fullPath() const
Definition: FileInPath.cc:161
int diskName() const
disk id
Log< level::Warning, false > LogWarning
int ringName() const
ring Id
tuple module
Definition: callgraph.py:69
#define LogDebug(id)