CMS 3D CMS Logo

List of all members | Public Member Functions | Private Member Functions | Private Attributes
RPCGeometryValidate Class Reference
Inheritance diagram for RPCGeometryValidate:

Public Member Functions

 RPCGeometryValidate (const ParameterSet &)
 
 ~RPCGeometryValidate () override
 

Private Member Functions

void analyze (const edm::Event &, const edm::EventSetup &) override
 
void beginJob () override
 
void clearData ()
 
void clearData2 ()
 
void compareShape (const GeomDet *, const float *)
 
void compareTransform (const GlobalPoint &, const TGeoMatrix *)
 
void endJob () override
 
float getDiff (const float, const float)
 
float getDistance (const GlobalPoint &, const GlobalPoint &)
 
void makeHistogram (const string &, vector< float > &)
 
void makeHistograms (const char *)
 
void makeHistograms2 (const char *)
 
void validateRPCChamberGeometry ()
 
void validateRPCStripsGeometry ()
 

Private Attributes

vector< float > bottomWidths_
 
FWGeometry fwGeometry_
 
vector< float > globalDistances_
 
string infileName_
 
vector< float > lengths_
 
vector< float > nstrips_
 
TFile * outFile_
 
string outfileName_
 
vector< float > pitch_
 
edm::ESHandle< RPCGeometryrpcGeometry_
 
vector< float > stripslen_
 
vector< float > thicknesses_
 
int tolerance_
 
vector< float > topWidths_
 

Detailed Description

Definition at line 50 of file RPCGeometryValidate.cc.

Constructor & Destructor Documentation

RPCGeometryValidate::RPCGeometryValidate ( const ParameterSet iConfig)
explicit

Definition at line 103 of file RPCGeometryValidate.cc.

References fwGeometry_, infileName_, FWGeometry::loadMap(), outFile_, and outfileName_.

104  : infileName_(iConfig.getUntrackedParameter<string>("infileName", "cmsGeom10.root")),
105  outfileName_(iConfig.getUntrackedParameter<string>("outfileName", "validateRPCGeometry.root")),
106  tolerance_(iConfig.getUntrackedParameter<int>("tolerance", 6)) {
108  outFile_ = new TFile(outfileName_.c_str(), "RECREATE");
109 }
T getUntrackedParameter(std::string const &, T const &) const
void loadMap(const char *fileName)
Definition: FWGeometry.cc:99
RPCGeometryValidate::~RPCGeometryValidate ( )
inlineoverride

Definition at line 53 of file RPCGeometryValidate.cc.

References analyze(), bk::beginJob(), and CSCSkim_cfi::makeHistograms.

53 {}

Member Function Documentation

void RPCGeometryValidate::analyze ( const edm::Event event,
const edm::EventSetup eventSetup 
)
overrideprivate

Definition at line 111 of file RPCGeometryValidate.cc.

References edm::EventSetup::get(), edm::ESHandleBase::isValid(), rpcGeometry_, validateRPCChamberGeometry(), and validateRPCStripsGeometry().

111  {
112  eventSetup.get<MuonGeometryRecord>().get(rpcGeometry_);
113  if (rpcGeometry_.isValid()) {
114  LogVerbatim("RPCGeometry") << "Validating RPC chamber geometry";
117  } else
118  LogVerbatim("RPCGeometry") << "Invalid RPC geometry";
119 }
T get() const
Definition: EventSetup.h:73
edm::ESHandle< RPCGeometry > rpcGeometry_
bool isValid() const
Definition: ESHandle.h:44
void RPCGeometryValidate::beginJob ( void  )
overrideprivate

Definition at line 297 of file RPCGeometryValidate.cc.

References outFile_.

297 { outFile_->cd(); }
void RPCGeometryValidate::clearData ( )
inlineprivate

Definition at line 73 of file RPCGeometryValidate.cc.

Referenced by validateRPCChamberGeometry().

73  {
74  globalDistances_.clear();
75  topWidths_.clear();
76  bottomWidths_.clear();
77  lengths_.clear();
78  thicknesses_.clear();
79  }
vector< float > bottomWidths_
vector< float > topWidths_
vector< float > thicknesses_
vector< float > globalDistances_
vector< float > lengths_
void RPCGeometryValidate::clearData2 ( )
inlineprivate

Definition at line 81 of file RPCGeometryValidate.cc.

Referenced by validateRPCStripsGeometry().

81  {
82  nstrips_.clear();
83  pitch_.clear();
84  stripslen_.clear();
85  }
vector< float > nstrips_
vector< float > stripslen_
void RPCGeometryValidate::compareShape ( const GeomDet det,
const float *  shape 
)
private

Definition at line 183 of file RPCGeometryValidate.cc.

References bottomWidths_, Surface::bounds(), Bounds::length(), lengths_, GeomDet::surface(), Bounds::thickness(), Calorimetry_cff::thickness, thicknesses_, topWidths_, and Bounds::width().

Referenced by validateRPCChamberGeometry().

183  {
184  float shapeTopWidth;
185  float shapeBottomWidth;
186  float shapeLength;
187  float shapeThickness;
188 
189  if (shape[0] == 1) {
190  shapeTopWidth = shape[2];
191  shapeBottomWidth = shape[1];
192  shapeLength = shape[4];
193  shapeThickness = shape[3];
194  } else if (shape[0] == 2) {
195  shapeTopWidth = shape[1];
196  shapeBottomWidth = shape[1];
197  shapeLength = shape[2];
198  shapeThickness = shape[3];
199  } else {
200  LogVerbatim("RPCGeometry") << "Failed to get box or trapezoid from shape";
201 
202  return;
203  }
204 
205  float topWidth, bottomWidth;
206  float length, thickness;
207 
208  const Bounds* bounds = &(det->surface().bounds());
209  if (const TrapezoidalPlaneBounds* tpbs = dynamic_cast<const TrapezoidalPlaneBounds*>(bounds)) {
210  array<const float, 4> const& ps = tpbs->parameters();
211 
212  assert(ps.size() == 4);
213 
214  bottomWidth = ps[0];
215  topWidth = ps[1];
216  thickness = ps[2];
217  length = ps[3];
218  } else if ((dynamic_cast<const RectangularPlaneBounds*>(bounds))) {
219  length = det->surface().bounds().length() * 0.5;
220  topWidth = det->surface().bounds().width() * 0.5;
221  bottomWidth = topWidth;
222  thickness = det->surface().bounds().thickness() * 0.5;
223  } else {
224  LogVerbatim("RPCGeometry") << "Failed to get bounds";
225 
226  return;
227  }
228  topWidths_.push_back(fabs(shapeTopWidth - topWidth));
229  bottomWidths_.push_back(fabs(shapeBottomWidth - bottomWidth));
230  lengths_.push_back(fabs(shapeLength - length));
231  thicknesses_.push_back(fabs(shapeThickness - thickness));
232 }
vector< float > bottomWidths_
virtual float length() const =0
const Bounds & bounds() const
Definition: Surface.h:89
const Plane & surface() const
The nominal surface of the GeomDet.
Definition: GeomDet.h:37
vector< float > topWidths_
virtual float width() const =0
vector< float > thicknesses_
vector< float > lengths_
virtual float thickness() const =0
Definition: Bounds.h:20
void RPCGeometryValidate::compareTransform ( const GlobalPoint gp,
const TGeoMatrix *  matrix 
)
private

Definition at line 171 of file RPCGeometryValidate.cc.

References HLT_2018_cff::distance, MillePedeFileConverter_cfg::e, getDistance(), globalDistances_, and DTRecHitClients_cfi::local.

Referenced by validateRPCChamberGeometry().

171  {
172  double local[3] = {0.0, 0.0, 0.0};
173  double global[3];
174 
175  matrix->LocalToMaster(local, global);
176 
177  float distance = getDistance(GlobalPoint(global[0], global[1], global[2]), gp);
178  if ((distance >= 0.0) && (distance < 1.0e-7))
179  distance = 0.0; // set a tollerance for the distance inside Histos
180  globalDistances_.push_back(distance);
181 }
Global3DPoint GlobalPoint
Definition: GlobalPoint.h:10
float getDistance(const GlobalPoint &, const GlobalPoint &)
vector< float > globalDistances_
void RPCGeometryValidate::endJob ( void  )
overrideprivate

Definition at line 299 of file RPCGeometryValidate.cc.

References DEFINE_FWK_MODULE, outFile_, and outfileName_.

299  {
300  LogVerbatim("RPCGeometry") << "Done.";
301  LogVerbatim("RPCGeometry") << "Results written to " << outfileName_;
302  outFile_->Close();
303 }
float RPCGeometryValidate::getDiff ( const float  val1,
const float  val2 
)
private

Definition at line 239 of file RPCGeometryValidate.cc.

References almost_equal(), and tolerance_.

239  {
240  if (almost_equal(val1, val2, tolerance_))
241  return 0.0f;
242  else
243  return (val1 - val2);
244 }
enable_if<!numeric_limits< T >::is_integer, bool >::type almost_equal(T x, T y, int ulp)
float RPCGeometryValidate::getDistance ( const GlobalPoint p1,
const GlobalPoint p2 
)
private

Definition at line 234 of file RPCGeometryValidate.cc.

References mathSSE::sqrt(), PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), and PV3DBase< T, PVType, FrameType >::z().

Referenced by compareTransform().

234  {
235  return sqrt((p1.x() - p2.x()) * (p1.x() - p2.x()) + (p1.y() - p2.y()) * (p1.y() - p2.y()) +
236  (p1.z() - p2.z()) * (p1.z() - p2.z()));
237 }
T y() const
Definition: PV3DBase.h:60
T sqrt(T t)
Definition: SSEVec.h:19
T z() const
Definition: PV3DBase.h:61
T x() const
Definition: PV3DBase.h:59
void RPCGeometryValidate::makeHistogram ( const string &  name,
vector< float > &  data 
)
private

Definition at line 282 of file RPCGeometryValidate.cc.

References begin, end, compare::hist, and HLT_2018_cff::maxE.

Referenced by makeHistograms(), and makeHistograms2().

282  {
283  if (data.empty())
284  return;
285 
286  const auto [minE, maxE] = minmax_element(begin(data), end(data));
287 
288  TH1D hist(name.c_str(), name.c_str(), 100, *minE * (1 + 0.10), *maxE * (1 + 0.10));
289 
290  for (auto const& it : data)
291  hist.Fill(it);
292 
293  hist.GetXaxis()->SetTitle("[cm]");
294  hist.Write();
295 }
#define end
Definition: vmac.h:39
#define begin
Definition: vmac.h:32
char data[epos_bytes_allocation]
Definition: EPOS_Wrapper.h:79
void RPCGeometryValidate::makeHistograms ( const char *  detector)
private

Definition at line 246 of file RPCGeometryValidate.cc.

References bottomWidths_, ztail::d, globalDistances_, lengths_, makeHistogram(), outFile_, thicknesses_, and topWidths_.

Referenced by validateRPCChamberGeometry().

246  {
247  outFile_->cd();
248 
249  string d(detector);
250 
251  string gdn = d + ": distance between points in global coordinates";
253 
254  string twn = d + ": absolute difference between top widths (along X)";
256 
257  string bwn = d + ": absolute difference between bottom widths (along X)";
259 
260  string ln = d + ": absolute difference between lengths (along Y)";
261  makeHistogram(ln, lengths_);
262 
263  string tn = d + ": absolute difference between thicknesses (along Z)";
265 }
vector< float > bottomWidths_
vector< float > topWidths_
vector< float > thicknesses_
void makeHistogram(const string &, vector< float > &)
d
Definition: ztail.py:151
vector< float > globalDistances_
vector< float > lengths_
void RPCGeometryValidate::makeHistograms2 ( const char *  detector)
private

Definition at line 267 of file RPCGeometryValidate.cc.

References ztail::d, makeHistogram(), nstrips_, outFile_, pi, pitch_, and stripslen_.

Referenced by validateRPCStripsGeometry().

267  {
268  outFile_->cd();
269 
270  string d(detector);
271 
272  string ns = d + ": absolute difference between nStrips";
273  makeHistogram(ns, nstrips_);
274 
275  string pi = d + ": absolute difference between Strips Pitch";
276  makeHistogram(pi, pitch_);
277 
278  string pl = d + ": absolute difference between Strips Length";
280 }
vector< float > nstrips_
vector< float > stripslen_
const Double_t pi
void makeHistogram(const string &, vector< float > &)
d
Definition: ztail.py:151
void RPCGeometryValidate::validateRPCChamberGeometry ( )
private

Definition at line 121 of file RPCGeometryValidate.cc.

References clearData(), compareShape(), compareTransform(), fwGeometry_, FWGeometry::getMatrix(), FWGeometry::getShapePars(), runTauDisplay::gp, makeHistograms(), makeMuonMisalignmentScenario::matrix, DetId::rawId(), RPCGeometry::rolls(), and rpcGeometry_.

Referenced by analyze().

121  {
122  clearData();
123 
124  for (auto const& it : rpcGeometry_->rolls()) {
125  RPCDetId chId = it->id();
126  GlobalPoint gp = it->surface().toGlobal(LocalPoint(0.0, 0.0, 0.0));
127 
128  const TGeoMatrix* matrix = fwGeometry_.getMatrix(chId.rawId());
129 
130  if (!matrix) {
131  LogVerbatim("RPCGeometry") << "Failed to get matrix of RPC chamber with detid: " << chId.rawId();
132  continue;
133  }
134  compareTransform(gp, matrix);
135 
136  auto const& shape = fwGeometry_.getShapePars(chId.rawId());
137 
138  if (!shape) {
139  LogVerbatim("RPCGeometry") << "Failed to get shape of RPC chamber with detid: " << chId.rawId();
140  continue;
141  }
142  compareShape(it, shape);
143  }
144  makeHistograms("RPC Chamber");
145 }
Point3DBase< Scalar, LocalTag > LocalPoint
Definition: Definitions.h:30
const std::vector< const RPCRoll * > & rolls() const
Return a vector of all RPC rolls.
Definition: RPCGeometry.cc:44
constexpr uint32_t rawId() const
get the raw id
Definition: DetId.h:57
void makeHistograms(const char *)
const TGeoMatrix * getMatrix(unsigned int id) const
Definition: FWGeometry.cc:221
const float * getShapePars(unsigned int id) const
Definition: FWGeometry.cc:485
void compareTransform(const GlobalPoint &, const TGeoMatrix *)
edm::ESHandle< RPCGeometry > rpcGeometry_
void compareShape(const GeomDet *, const float *)
void RPCGeometryValidate::validateRPCStripsGeometry ( )
private

Definition at line 147 of file RPCGeometryValidate.cc.

References clearData2(), fwGeometry_, FWGeometry::getParameters(), makeHistograms2(), nstrips_, pitch_, DetId::rawId(), RPCGeometry::rolls(), rpcGeometry_, StripTopology::stripLength(), and stripslen_.

Referenced by analyze().

147  {
148  clearData2();
149 
150  for (auto const& it : rpcGeometry_->rolls()) {
151  RPCDetId chId = it->id();
152  const int n_strips = it->nstrips();
153  const float n_pitch = it->pitch();
154  const StripTopology& topo = it->specificTopology();
155  const float stripLen = topo.stripLength();
156  const float* parameters = fwGeometry_.getParameters(chId.rawId());
157 
158  if (n_strips) {
159  for (int istrips = 1; istrips <= n_strips; istrips++) {
160  nstrips_.push_back(fabs(n_strips - parameters[0]));
161  pitch_.push_back(fabs(n_pitch - parameters[2]));
162  stripslen_.push_back(fabs(stripLen - parameters[1]));
163  }
164  } else {
165  LogVerbatim("RPCGeometry") << "ATTENTION! nStrips == 0";
166  }
167  }
168  makeHistograms2("RPC Strips");
169 }
virtual float stripLength() const =0
const float * getParameters(unsigned int id) const
Definition: FWGeometry.cc:474
const std::vector< const RPCRoll * > & rolls() const
Return a vector of all RPC rolls.
Definition: RPCGeometry.cc:44
constexpr uint32_t rawId() const
get the raw id
Definition: DetId.h:57
vector< float > nstrips_
vector< float > stripslen_
edm::ESHandle< RPCGeometry > rpcGeometry_
void makeHistograms2(const char *)

Member Data Documentation

vector<float> RPCGeometryValidate::bottomWidths_
private

Definition at line 92 of file RPCGeometryValidate.cc.

Referenced by compareShape(), and makeHistograms().

FWGeometry RPCGeometryValidate::fwGeometry_
private
vector<float> RPCGeometryValidate::globalDistances_
private

Definition at line 90 of file RPCGeometryValidate.cc.

Referenced by compareTransform(), and makeHistograms().

string RPCGeometryValidate::infileName_
private

Definition at line 98 of file RPCGeometryValidate.cc.

Referenced by RPCGeometryValidate().

vector<float> RPCGeometryValidate::lengths_
private

Definition at line 93 of file RPCGeometryValidate.cc.

Referenced by compareShape(), and makeHistograms().

vector<float> RPCGeometryValidate::nstrips_
private

Definition at line 95 of file RPCGeometryValidate.cc.

Referenced by makeHistograms2(), and validateRPCStripsGeometry().

TFile* RPCGeometryValidate::outFile_
private
string RPCGeometryValidate::outfileName_
private

Definition at line 99 of file RPCGeometryValidate.cc.

Referenced by endJob(), and RPCGeometryValidate().

vector<float> RPCGeometryValidate::pitch_
private

Definition at line 96 of file RPCGeometryValidate.cc.

Referenced by makeHistograms2(), and validateRPCStripsGeometry().

edm::ESHandle<RPCGeometry> RPCGeometryValidate::rpcGeometry_
private
vector<float> RPCGeometryValidate::stripslen_
private

Definition at line 97 of file RPCGeometryValidate.cc.

Referenced by makeHistograms2(), and validateRPCStripsGeometry().

vector<float> RPCGeometryValidate::thicknesses_
private

Definition at line 94 of file RPCGeometryValidate.cc.

Referenced by compareShape(), and makeHistograms().

int RPCGeometryValidate::tolerance_
private

Definition at line 100 of file RPCGeometryValidate.cc.

Referenced by getDiff().

vector<float> RPCGeometryValidate::topWidths_
private

Definition at line 91 of file RPCGeometryValidate.cc.

Referenced by compareShape(), and makeHistograms().