![]() |
![]() |
00001 #include "PGeometricDetExtraBuilder.h" 00002 00003 #include "FWCore/ServiceRegistry/interface/Service.h" 00004 #include "FWCore/ParameterSet/interface/ParameterSet.h" 00005 #include "FWCore/Framework/interface/Event.h" 00006 #include "CondCore/DBOutputService/interface/PoolDBOutputService.h" 00007 #include "FWCore/Framework/interface/EventSetup.h" 00008 #include "FWCore/Framework/interface/ESTransientHandle.h" 00009 #include "FWCore/Framework/interface/ESHandle.h" 00010 #include "CondFormats/GeometryObjects/interface/PGeometricDetExtra.h" 00011 #include "Geometry/Records/interface/PGeometricDetExtraRcd.h" 00012 #include "Geometry/TrackerNumberingBuilder/interface/GeometricDetExtra.h" 00013 #include <DetectorDescription/Core/interface/DDCompactView.h> 00014 #include <DetectorDescription/Core/interface/DDExpandedView.h> 00015 #include "DetectorDescription/Core/interface/DDExpandedNode.h" 00016 00017 #include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" 00018 00019 #include "Geometry/TrackerNumberingBuilder/interface/CmsTrackerStringToEnum.h" 00020 00021 #include "FWCore/MessageLogger/interface/MessageLogger.h" 00022 00023 #include <iostream> 00024 #include <string> 00025 #include <vector> 00026 00027 PGeometricDetExtraBuilder::PGeometricDetExtraBuilder(const edm::ParameterSet& iConfig) 00028 { 00029 } 00030 00031 PGeometricDetExtraBuilder::~PGeometricDetExtraBuilder() 00032 { 00033 } 00034 00035 void 00036 PGeometricDetExtraBuilder::beginRun( const edm::Run&, edm::EventSetup const& es) 00037 { 00038 PGeometricDetExtra* pgde = new PGeometricDetExtra; 00039 edm::Service<cond::service::PoolDBOutputService> mydbservice; 00040 if( !mydbservice.isAvailable() ){ 00041 edm::LogError("PGeometricDetExtraBuilder")<<"PoolDBOutputService unavailable"; 00042 return; 00043 } 00044 edm::ESTransientHandle<DDCompactView> cpvH; 00045 edm::ESHandle<std::vector<GeometricDetExtra> > gdeH; 00046 es.get<IdealGeometryRecord>().get( cpvH ); 00047 es.get<IdealGeometryRecord>().get( gdeH ); 00048 const std::vector<GeometricDetExtra>& gdes = (*gdeH); 00049 00050 std::vector<GeometricDetExtra>::const_iterator git = gdes.begin(); 00051 std::vector<GeometricDetExtra>::const_iterator egit = gdes.end(); 00052 00053 for (; git!= egit; ++git) { // one level below "tracker" 00054 putOne(*git, pgde); 00055 } 00056 if ( mydbservice->isNewTagRequest("PGeometricDetExtraRcd") ) { 00057 mydbservice->createNewIOV<PGeometricDetExtra>( pgde,mydbservice->beginOfTime(),mydbservice->endOfTime(),"PGeometricDetExtraRcd"); 00058 } else { 00059 edm::LogError("PGeometricDetExtraBuilder")<<"PGeometricDetExtra and PGeometricDetExtraRcd Tag already present"; 00060 } 00061 } 00062 00063 void PGeometricDetExtraBuilder::putOne ( const GeometricDetExtra& gde, PGeometricDetExtra* pgde ) { 00064 PGeometricDetExtra::Item item; 00065 item._geographicalId = gde.geographicalId(); 00066 item._volume = gde.volume(); 00067 item._density = gde.density(); 00068 item._weight = gde.weight(); 00069 item._copy = gde.copyno(); 00070 item._material = gde.material(); 00071 pgde->pgdes_.push_back ( item ); 00072 } 00073