CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_6_1_2_SLHC2/src/CondTools/Geometry/plugins/PGeometricDetExtraBuilder.cc

Go to the documentation of this file.
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