CMS 3D CMS Logo

VisDTRecHit.cc

Go to the documentation of this file.
00001 #include "VisReco/Analyzer/interface/VisDTRecHit.h"
00002 #include "VisReco/Analyzer/interface/IguanaService.h"
00003 #include "FWCore/Framework/interface/Event.h"
00004 #include "FWCore/Framework/interface/ESHandle.h"
00005 #include "FWCore/Framework/interface/EventSetup.h"
00006 #include "FWCore/Framework/interface/MakerMacros.h"
00007 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00008 #include "FWCore/ServiceRegistry/interface/Service.h"
00009 #include "FWCore/Utilities/interface/Exception.h"
00010 
00011 #include "DataFormats/DTRecHit/interface/DTRecHit1D.h"
00012 #include "DataFormats/DTRecHit/interface/DTRecHit1DPair.h"
00013 #include "DataFormats/DTRecHit/interface/DTRecHitCollection.h" 
00014 #include "Geometry/DTGeometry/interface/DTLayer.h"
00015 #include "Geometry/DTGeometry/interface/DTGeometry.h"
00016 #include "Geometry/Records/interface/MuonGeometryRecord.h"
00017 #include "Iguana/Framework/interface/IgCollection.h"
00018 
00019 using namespace edm::service;
00020 using namespace DTEnums;
00021 
00022 VisDTRecHit::VisDTRecHit(const edm::ParameterSet& iConfig)
00023     : inputTag_(iConfig.getParameter<edm::InputTag>("visDTRecHitTag"))
00024 {}
00025 
00026 void VisDTRecHit::analyze (const edm::Event& event, const edm::EventSetup& eventSetup)
00027 {
00028     edm::Service<IguanaService> config;
00029     if (! config.isAvailable ()) 
00030     {
00031         throw cms::Exception ("Configuration")
00032             << "VisDTRecHit requires the IguanaService\n"
00033             "which is not present in the configuration file.\n"
00034             "You must add the service in the configuration file\n"
00035             "or remove the module that requires it";
00036     }
00037 
00038     edm::ESHandle<DTGeometry> geom;
00039     eventSetup.get<MuonGeometryRecord>().get(geom);
00040 
00041     edm::Handle<DTRecHitCollection> collection;
00042     event.getByLabel (inputTag_, collection);
00043 
00044     if ( collection.isValid () && geom.isValid ())
00045     {
00046         IgDataStorage* storage = config->storage();
00047         IgCollection& recHits = storage->getCollection("DTRecHits_V1");
00048 
00049         IgProperty WIRE_ID = recHits.addProperty("wireId", int(0));
00050         IgProperty LAYER_ID = recHits.addProperty("layerId", int(0));
00051         IgProperty SUPERLAYER_ID = recHits.addProperty("superLayerId", int(0));
00052         IgProperty SECTOR_ID = recHits.addProperty("sectorId", int(0));
00053         IgProperty STATION_ID = recHits.addProperty("stationId", int(0));
00054         IgProperty WHEEL_ID = recHits.addProperty("wheelId", int(0));
00055         IgProperty DIGITIME = recHits.addProperty("digitime", 0.0);
00056 
00057         IgProperty LPLUS_GLOBALPOS = recHits.addProperty("lPlusGlobalPos", IgV3d());
00058         IgProperty LMINUS_GLOBALPOS = recHits.addProperty("lMinusGlobalPos", IgV3d());
00059         IgProperty RPLUS_GLOBALPOS = recHits.addProperty("rPlusGlobalPos", IgV3d());
00060         IgProperty RMINUS_GLOBALPOS = recHits.addProperty("rMinusGlobalPos", IgV3d());
00061         IgProperty LGLOBALPOS = recHits.addProperty("lGlobalPos", IgV3d());
00062         IgProperty RGLOBALPOS = recHits.addProperty("rGlobalPos", IgV3d());
00063 
00064         for ( DTRecHitCollection::const_iterator dit = collection->begin();
00065               dit != collection->end(); ++dit )
00066         {
00067             IgCollectionItem recHit = recHits.create();
00068 
00069             const DTRecHit1D* lrechit = (*dit).componentRecHit(Left);
00070             const DTRecHit1D* rrechit = (*dit).componentRecHit(Right);
00071             
00072             int wireId = (*dit).wireId().wire();
00073             recHit[WIRE_ID] = static_cast<int>(wireId);
00074             
00075             int layerId = (*dit).wireId().layerId().layer();
00076             recHit[LAYER_ID] = static_cast<int>(layerId);
00077              
00078             int superLayerId = (*dit).wireId().layerId().superlayerId().superLayer();
00079             recHit[SUPERLAYER_ID] = static_cast<int>(superLayerId);
00080              
00081             int sectorId = (*dit).wireId().layerId().superlayerId().chamberId().sector();
00082             recHit[SECTOR_ID] = static_cast<int>(sectorId);
00083              
00084             int stationId = (*dit).wireId().layerId().superlayerId().chamberId().station();
00085             recHit[STATION_ID] = static_cast<int>(stationId);
00086              
00087             int wheelId = (*dit).wireId().layerId().superlayerId().chamberId().wheel();
00088             recHit[WHEEL_ID] = static_cast<int>(wheelId);
00089             
00090             double digitime = (*dit).digiTime();
00091             recHit[DIGITIME] = static_cast<double>(digitime);
00092 
00093             const DTLayer* layer = geom->layer((*dit).wireId());  
00094             const DTTopology& topo = layer->specificTopology();
00095                
00096             LocalPoint lLocalPos = lrechit->localPosition();
00097             LocalPoint rLocalPos = rrechit->localPosition();
00098                
00099             LocalPoint yPlusLeft(lLocalPos.x(),topo.cellLenght()/2.,0.);
00100             LocalPoint yMinusLeft(lLocalPos.x(),-topo.cellLenght()/2.,0.);
00101             LocalPoint yPlusRight(rLocalPos.x(),topo.cellLenght()/2.,0.);
00102             LocalPoint yMinusRight(rLocalPos.x(),-topo.cellLenght()/2.,0.);
00103                
00104             GlobalPoint lPlusGlobalPos = layer->toGlobal(yPlusLeft);
00105             GlobalPoint lMinusGlobalPos = layer->toGlobal(yMinusLeft);
00106             GlobalPoint rPlusGlobalPos = layer->toGlobal(yPlusRight);
00107             GlobalPoint rMinusGlobalPos = layer->toGlobal(yMinusRight);
00108                
00109             GlobalPoint lGlobalPos = layer->toGlobal(lLocalPos);
00110             GlobalPoint rGlobalPos = layer->toGlobal(rLocalPos);
00111 
00112             recHit[LPLUS_GLOBALPOS] = IgV3d(static_cast<double>(lPlusGlobalPos.x()/100.0),
00113                                             static_cast<double>(lPlusGlobalPos.y()/100.0),
00114                                             static_cast<double>(lPlusGlobalPos.z()/100.0));
00115 
00116             recHit[LMINUS_GLOBALPOS] = IgV3d(static_cast<double>(lMinusGlobalPos.x()/100.0),
00117                                               static_cast<double>(lMinusGlobalPos.y()/100.0),
00118                                               static_cast<double>(lMinusGlobalPos.z()/100.0));
00119              
00120             recHit[RPLUS_GLOBALPOS] = IgV3d(static_cast<double>(rPlusGlobalPos.x()/100.0),
00121                                              static_cast<double>(rPlusGlobalPos.y()/100.0),
00122                                              static_cast<double>(rPlusGlobalPos.z()/100.0));
00123 
00124             recHit[RMINUS_GLOBALPOS] = IgV3d(static_cast<double>(rMinusGlobalPos.x()/100.0),
00125                                              static_cast<double>(rMinusGlobalPos.y()/100.0),
00126                                              static_cast<double>(rMinusGlobalPos.z()/100.0));
00127 
00128             recHit[LGLOBALPOS] = IgV3d(static_cast<double>(lGlobalPos.x()/100.0),
00129                                        static_cast<double>(lGlobalPos.y()/100.0),
00130                                        static_cast<double>(lGlobalPos.z()/100.0));
00131 
00132             recHit[RGLOBALPOS] = IgV3d(static_cast<double>(rGlobalPos.x()/100.0),
00133                                         static_cast<double>(rGlobalPos.y()/100.0),
00134                                         static_cast<double>(rGlobalPos.z()/100.0));
00135         }
00136         
00137     }
00138     
00139     else 
00140     {
00141         // friendlyName:moduleLabel:instanceName:processName
00142         std::string error = "### Error: DTRecHits "
00143                             + edm::TypeID (typeid (DTRecHitCollection)).friendlyClassName () + ":" 
00144                             + inputTag_.label() + ":"
00145                             + inputTag_.instance() + ":" 
00146                             + inputTag_.process() + " are not found.";
00147 
00148         IgDataStorage *storage = config->storage ();
00149         IgCollection &collection = storage->getCollection ("Errors_V1");
00150         IgProperty ERROR_MSG = collection.addProperty ("Error", std::string ());
00151         IgCollectionItem item = collection.create ();
00152         item [ERROR_MSG] = error;
00153     }
00154 }
00155 
00156 DEFINE_FWK_MODULE(VisDTRecHit);

Generated on Tue Jun 9 17:50:08 2009 for CMSSW by  doxygen 1.5.4