Go to the documentation of this file.00001 #include <string>
00002 #include <vector>
00003 #include <iostream>
00004
00005 #include "FWCore/Framework/interface/EDAnalyzer.h"
00006 #include "FWCore/Framework/interface/Event.h"
00007 #include "FWCore/Framework/interface/EventSetup.h"
00008 #include "FWCore/Framework/interface/ESHandle.h"
00009 #include "FWCore/Framework/interface/ESTransientHandle.h"
00010 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00011 #include "FWCore/Utilities/interface/InputTag.h"
00012 #include "FWCore/ParameterSet/interface/types.h"
00013 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00014
00015 #include "DataFormats/DetId/interface/DetId.h"
00016 #include "DataFormats/Math/interface/Vector3D.h"
00017 #include "DetectorDescription/Core/interface/DDFilteredView.h"
00018 #include "DetectorDescription/Core/interface/DDCompactView.h"
00019 #include "DetectorDescription/Core/interface/DDMaterial.h"
00020 #include "Geometry/CommonDetUnit/interface/GeomDet.h"
00021 #include "Geometry/Records/interface/TrackerDigiGeometryRecord.h"
00022 #include "Geometry/Records/interface/IdealGeometryRecord.h"
00023 #include "Geometry/TrackerNumberingBuilder/interface/CmsTrackerStringToEnum.h"
00024 #include "Geometry/TrackerNumberingBuilder/interface/GeometricDet.h"
00025 #include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h"
00026
00027 static
00028 bool dddGetStringRaw(const DDFilteredView & view, const std::string & name, std::string & value) {
00029 DDValue parameter(name);
00030 std::vector<const DDsvalues_type *> result;
00031 view.specificsV(result);
00032 for (std::vector<const DDsvalues_type *>::iterator it = result.begin(); it != result.end(); ++it) {
00033 if (DDfetch(*it,parameter)) {
00034 if (parameter.strings().size() == 1) {
00035 value = parameter.strings().front();
00036 return true;
00037 } else {
00038 return false;
00039 }
00040 }
00041 }
00042 return false;
00043 }
00044
00045 static inline
00046 double dddGetDouble(const std::string & s, const DDFilteredView & view) {
00047 std::string value;
00048 if (dddGetStringRaw(view, s, value))
00049 return double(::atof(value.c_str()));
00050 else
00051 return NAN;
00052 }
00053
00054 static inline
00055 std::string dddGetString(const std::string & s, const DDFilteredView & view) {
00056 std::string value;
00057 if (dddGetStringRaw(view, s, value))
00058 return value;
00059 else
00060 return std::string();
00061 }
00062
00063 static inline
00064 std::ostream & operator<<(std::ostream & out, const math::XYZVector & v) {
00065 return out << "(" << v.rho() << ", " << v.z() << ", " << v.phi() << ")";
00066 }
00067
00068 class ListIds : public edm::EDAnalyzer
00069 {
00070 public:
00071 ListIds(const edm::ParameterSet &);
00072 virtual ~ListIds();
00073
00074 private:
00075 void analyze(const edm::Event &, const edm::EventSetup &);
00076 void beginJob() {}
00077 void endJob();
00078 };
00079
00080 ListIds::ListIds(const edm::ParameterSet &) {
00081 }
00082
00083 ListIds::~ListIds() {
00084 }
00085
00086 void
00087 ListIds::analyze(const edm::Event& evt, const edm::EventSetup& setup){
00088 std::cout << "______________________________ DDD ______________________________" << std::endl;
00089 edm::ESTransientHandle<DDCompactView> hDdd;
00090 setup.get<IdealGeometryRecord>().get( hDdd );
00091
00092 std::string attribute = "TkDDDStructure";
00093 CmsTrackerStringToEnum theCmsTrackerStringToEnum;
00094 DDSpecificsFilter filter;
00095 filter.setCriteria(DDValue(attribute, "any", 0), DDSpecificsFilter::not_equals);
00096 DDFilteredView fv(*hDdd);
00097 fv.addFilter(filter);
00098 if (theCmsTrackerStringToEnum.type(dddGetString(attribute, fv)) != GeometricDet::Tracker) {
00099 fv.firstChild();
00100 if (theCmsTrackerStringToEnum.type(dddGetString(attribute, fv)) != GeometricDet::Tracker)
00101 throw cms::Exception("Configuration") << "The first child of the DDFilteredView is not what is expected \n"
00102 << dddGetString(attribute, fv);
00103 }
00104
00105 std::cout << std::fixed << std::setprecision(3);
00106 do {
00107
00108 if (fv.logicalPart().material().name() == "materials:Silicon") {
00109
00110
00111 const DDGeoHistory & history = fv.geoHistory();
00112 std::cout << '/';
00113 for (unsigned int h = 2; h < history.size(); ++h) {
00114 std::cout << '/' << history[h].logicalPart().name().name() << '[' << history[h].copyno() << ']';
00115 }
00116
00117
00118 math::XYZVector position = fv.translation() / 10.;
00119 std::cout << "\t" << position << std::endl;
00120 }
00121 } while (fv.next());
00122 std::cout << std::endl;
00123
00124 std::cout << "______________________________ std::vector<GeomDet*> from TrackerGeometry::dets() ______________________________" << std::endl;
00125 edm::ESHandle<TrackerGeometry> hGeo;
00126 setup.get<TrackerDigiGeometryRecord>().get( hGeo );
00127
00128 std::cout << std::fixed << std::setprecision(3);
00129 const std::vector<GeomDet*> & dets = hGeo->dets();
00130 for (unsigned int i = 0; i < dets.size(); ++i) {
00131 const GeomDet & det = *dets[i];
00132
00133
00134 const Surface::PositionType & p = det.position();
00135 math::XYZVector position(p.x(), p.y(), p.z());
00136
00137 std::cout << det.subDetector() << '\t'
00138 << det.geographicalId().det() << '\t'
00139 << det.geographicalId().subdetId() << '\t'
00140 << det.geographicalId().rawId() << "\t"
00141 << position;
00142 const std::vector<const GeomDet*> & parts = det.components();
00143 if (parts.size()) {
00144 std::cout << "\t[" << parts[0]->geographicalId().rawId();
00145 for (unsigned int j = 1; j < parts.size(); ++j)
00146 std::cout << '\t' << parts[j]->geographicalId().rawId();
00147 std::cout << ']';
00148 }
00149 std::cout << std::endl;
00150 }
00151
00152 }
00153
00154 void
00155 ListIds::endJob() {
00156 }
00157
00158
00159
00160 #include "FWCore/PluginManager/interface/ModuleDef.h"
00161 #include "FWCore/Framework/interface/MakerMacros.h"
00162 DEFINE_FWK_MODULE(ListIds);