ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/FastOpenGlDisplayer/src/OpenGLDisplayer.cc
Revision: 1.3
Committed: Mon Mar 17 06:26:31 2008 UTC (17 years, 1 month ago) by querten
Content type: text/plain
Branch: MAIN
Changes since 1.2: +26 -9 lines
Log Message:
Add Basic Tracker Geometry Informations

File Contents

# User Rev Content
1 querten 1.1 // -*- C++ -*-
2     //
3     // Package: OpenGLDisplayer
4     // Class: OpenGLDisplayer
5     //
6     /**\class OpenGLDisplayer OpenGLDisplayer.cc Visualisation/OpenGLDisplayer/src/OpenGLDisplayer.cc
7    
8     Description: <one line class summary>
9    
10     Implementation:
11     <Notes on implementation>
12     */
13     //
14     // Original Author: Loic QUERTENMONT
15     // Created: Fri Oct 26 07:22:12 CEST 2007
16 querten 1.3 // $Id: OpenGLDisplayer.cc,v 1.2 2008/03/15 17:02:20 querten Exp $
17 querten 1.1 //
18     //
19    
20    
21     // system include files
22     #include <memory>
23    
24     // user include files
25     #include "FWCore/Framework/interface/Frameworkfwd.h"
26     #include "FWCore/Framework/interface/EDAnalyzer.h"
27    
28     #include "FWCore/Framework/interface/Event.h"
29     #include "FWCore/Framework/interface/MakerMacros.h"
30    
31     #include "FWCore/ParameterSet/interface/ParameterSet.h"
32     #include "FWCore/ServiceRegistry/interface/Service.h"
33     #include "FWCore/Framework/interface/ESHandle.h"
34    
35     #include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h"
36     #include "Geometry/CommonDetUnit/interface/GeomDetUnit.h"
37     #include "Geometry/Records/interface/TrackerDigiGeometryRecord.h"
38     #include "Geometry/TrackerNumberingBuilder/interface/GeometricDet.h"
39     #include "Geometry/CommonTopologies/interface/PixelTopology.h"
40     #include "Geometry/CommonTopologies/interface/StripTopology.h"
41     #include "Geometry/TrackerGeometryBuilder/interface/PixelGeomDetType.h"
42     #include "Geometry/TrackerGeometryBuilder/interface/StripGeomDetType.h"
43     #include "Geometry/TrackerGeometryBuilder/interface/PixelGeomDetUnit.h"
44     #include "Geometry/TrackerGeometryBuilder/interface/StripGeomDetUnit.h"
45     #include "DataFormats/GeometrySurface/interface/BoundSurface.h"
46     #include "DataFormats/DetId/interface/DetId.h"
47    
48     #include "SimDataFormats/TrackingHit/interface/PSimHitContainer.h"
49     #include "SimDataFormats/TrackingHit/interface/PSimHit.h"
50     #include "SimDataFormats/CrossingFrame/interface/CrossingFrame.h"
51     #include "SimDataFormats/CrossingFrame/interface/MixCollection.h"
52     #include "SimDataFormats/CaloHit/interface/PCaloHit.h"
53     #include "SimDataFormats/Track/interface/SimTrack.h"
54     #include "SimDataFormats/Vertex/interface/SimVertex.h"
55    
56     #include "DataFormats/Provenance/interface/BranchDescription.h"
57     #include "DataFormats/Provenance/interface/Provenance.h"
58     #include "DataFormats/Candidate/interface/Candidate.h"
59     #include "DataFormats/HepMCCandidate/interface/GenParticleCandidate.h"
60     #include "DataFormats/RecoCandidate/interface/RecoChargedCandidate.h"
61     #include "DataFormats/TrackReco/interface/Track.h"
62    
63     #include "DataFormats/Math/interface/Point3D.h"
64    
65    
66     #include "Visualisation/OpenGLDisplayer/interface/SimEvent.h"
67 querten 1.3 #include "Visualisation/OpenGLDisplayer/interface/Geometry.h"
68 querten 1.1
69     using namespace edm;
70     using namespace std;
71    
72     //
73     // class decleration
74     //
75    
76     class OpenGLDisplayer : public edm::EDAnalyzer {
77     public:
78     explicit OpenGLDisplayer(const edm::ParameterSet&);
79     ~OpenGLDisplayer();
80    
81    
82     private:
83 querten 1.3 virtual void beginJob(const edm::EventSetup& iSetup);
84     virtual void analyze (const edm::Event&, const edm::EventSetup&);
85     virtual void endJob ();
86 querten 1.1
87    
88     MySimEvents* MyEvents;
89 querten 1.3 Geometry* Geom;
90 querten 1.1
91    
92     std::vector<std::string> SimHitSubdetectors;
93    
94     std::string OutputFile;
95    
96    
97     // ----------member data ---------------------------
98     };
99    
100     //
101     // constructors and destructor
102     //
103     OpenGLDisplayer::OpenGLDisplayer(const edm::ParameterSet& iConfig)
104     {
105     SimHitSubdetectors = iConfig.getParameter<std::vector<std::string> >("SimHitSubdetectors");
106    
107     OutputFile = iConfig.getParameter<std::string >("OutputFile");
108     }
109    
110    
111     OpenGLDisplayer::~OpenGLDisplayer()
112     {
113     }
114    
115     // ------------ method called once each job just before starting event loop ------------
116     void
117 querten 1.3 OpenGLDisplayer::beginJob(const edm::EventSetup& iSetup)
118 querten 1.1 {
119    
120 querten 1.3 MyEvents = new MySimEvents();
121     Geom = new Geometry();
122    
123     edm::ESHandle<TrackerGeometry> tkGeom;
124     iSetup.get<TrackerDigiGeometryRecord>().get( tkGeom );
125     vector<GeomDet*> Det = tkGeom->dets();
126    
127     for(unsigned int i=0;i<Det.size();i++){
128     DetId Detid = Det[i]->geographicalId();
129     int SubDet = Detid.subdetId();
130    
131     StripGeomDetUnit* DetUnit = dynamic_cast<StripGeomDetUnit*> (Det[i]);
132     if(!DetUnit)continue;
133    
134     GlobalVector Pos = GlobalVector(DetUnit->position().basicVector());
135    
136     Geom->Add_TrackerDet(SubDet,Pos.x(),Pos.y(),Pos.z(),Detid.rawId());
137     }
138     Geom->Save("Tracker.geom");
139 querten 1.1
140    
141     }
142    
143     // ------------ method called once each job just after ending the event loop ------------
144     void
145     OpenGLDisplayer::endJob() {
146    
147     MyEvents->Save((char*) OutputFile.c_str());
148     MyEvents->Load((char*) OutputFile.c_str());
149     }
150    
151    
152    
153     //
154     // member functions
155     //
156    
157     // ------------ method called to for each event ------------
158     void
159     OpenGLDisplayer::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup)
160     {
161    
162     edm::Handle<std::vector< SimTrack > > h_SimTracks;
163     iEvent.getByLabel("g4SimHits", h_SimTracks);
164     std::vector< SimTrack > SimTrackColl = *h_SimTracks.product();
165    
166     edm::Handle<std::vector< SimVertex > > h_Vertex;
167     iEvent.getByLabel("g4SimHits", h_Vertex);
168     std::vector< SimVertex > VertexColl = *h_Vertex.product();
169    
170    
171    
172     // access the tracker
173     edm::ESHandle<TrackerGeometry> theTrackerGeometry;
174     iSetup.get<TrackerDigiGeometryRecord>().get(theTrackerGeometry);
175     const TrackerGeometry& theTracker(*theTrackerGeometry);
176    
177     // the DetUnits
178     TrackingGeometry::DetContainer theDetUnits = theTracker.dets();
179    
180    
181    
182    
183     // Save the data
184    
185     MySimEvent* MyEvent = new MySimEvent;
186    
187     for ( unsigned int a = 0; a < SimTrackColl.size(); ++a ) {
188     MySimTrack MysimTrack;
189     SimTrack simTrack =SimTrackColl[a];
190    
191     MysimTrack.track_id =simTrack.trackId();
192     MysimTrack.Type =simTrack.type();
193     MysimTrack.parent_vertex=simTrack.vertIndex();
194     MysimTrack.Px =simTrack.momentum().x();
195     MysimTrack.Py =simTrack.momentum().y();
196     MysimTrack.Pz =simTrack.momentum().z();
197     MysimTrack.E =simTrack.momentum().e();
198     MysimTrack.charge =simTrack.charge();
199    
200     MyEvent->MySimTrackCollection.push_back(MysimTrack);
201     }
202    
203    
204     for (unsigned int b = 0; b < VertexColl.size(); ++b ) {
205     MySimVertex MyVertex;
206     SimVertex Vertex = VertexColl[b];
207    
208     MyVertex.parentTrack_id =Vertex.parentIndex ();
209     MyVertex.x =Vertex.position().x();
210     MyVertex.y =Vertex.position().y();
211     MyVertex.z =Vertex.position().z();
212    
213     MyEvent->MySimVertexCollection.push_back(MyVertex);
214     }
215    
216     for(unsigned int i=0; i<SimHitSubdetectors.size(); i++)
217     {
218     edm::Handle<std::vector< PSimHit > > h_Hits;
219     iEvent.getByLabel("g4SimHits",SimHitSubdetectors[i].c_str(), h_Hits);
220     std::vector< PSimHit > Hits = *h_Hits.product();
221    
222     for(unsigned int h=0; h<Hits.size(); h++)
223     {
224     DetId theDetUnitId(Hits[h].detUnitId());
225     const GeomDet * theDet = theTracker.idToDet(theDetUnitId);
226    
227     MyPSimHit Hit;
228     Hit.x = theDet->surface().toGlobal(Hits[h].localPosition()).x();
229     Hit.y = theDet->surface().toGlobal(Hits[h].localPosition()).y();
230     Hit.z = theDet->surface().toGlobal(Hits[h].localPosition()).z();
231     Hit.ProcessType = Hits[h].processType();
232     Hit.dEdX = Hits[h].energyLoss();
233    
234     MyEvent->MyPSimHitCollection.push_back(Hit);
235    
236     }
237     }
238    
239     edm::Handle<std::vector< reco::Track > > h_Tracks;
240     iEvent.getByLabel("ctfWithMaterialTracks", h_Tracks);
241     std::vector< reco::Track > TrackColl = *h_Tracks.product();
242    
243     for ( unsigned int t = 0; t < TrackColl.size(); ++t ) {
244     MyRecoTrack MyrecoTrack;
245     reco::Track recoTrack =TrackColl[t];
246    
247 querten 1.2 // MyrecoTrack.Hits = new MyRecoHit[MyrecoTrack.N];
248 querten 1.1
249 querten 1.2 for(unsigned int h=0;h<recoTrack.recHitsSize();h++){
250 querten 1.1 TrackingRecHitRef h_it = recoTrack.recHit(h);
251     if(!h_it->isValid() )continue;
252     DetId detId = h_it->geographicalId();
253     const GeomDet * theDet = theTracker.idToDet(detId);
254     LocalPoint localPos = h_it->localPosition();
255 querten 1.2
256     MyRecoHit hit;
257     hit.x = theDet->surface().toGlobal(localPos).x();
258     hit.y = theDet->surface().toGlobal(localPos).y();
259     hit.z = theDet->surface().toGlobal(localPos).z();
260     hit.DetId = detId.rawId();
261     hit.Charge = -1;
262     MyrecoTrack.Hits.push_back(hit);
263    
264    
265     // printf("%8.2f %8.2f %8.2f\n",theDet->surface().toGlobal(localPos).x(),theDet->surface().toGlobal(localPos).y(),theDet->surface().toGlobal(localPos).z());
266 querten 1.1 }
267     MyEvent->MyRecoTrackCollection.push_back(MyrecoTrack);
268     }
269    
270     MyEvents->Events.push_back(MyEvent);
271    
272     }
273    
274    
275     //define this as a plug-in
276     DEFINE_FWK_MODULE(OpenGLDisplayer);
277    
278