ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/FastOpenGlDisplayer/src/Frog_Analyzer.cc
Revision: 1.40
Committed: Tue Sep 9 16:12:48 2008 UTC (16 years, 7 months ago) by querten
Content type: text/plain
Branch: MAIN
CVS Tags: Version_1_084, Version_1_083, Version_1_082
Changes since 1.39: +19 -12 lines
Log Message:
SetUp cfg for cosmic muons

File Contents

# Content
1 // -*- C++ -*-
2 //
3 // Package: Frog_Analyzer
4 // Class: Frog_Analyzer
5 //
6 /**\class Frog_Analyzer Frog_Analyzer.cc Visualisation/Frog/src/Frog_Analyzer.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 // $Id: Frog_Analyzer.cc,v 1.39 2008/08/26 10:20:34 querten Exp $
17 //
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 "Geometry/CaloEventSetup/interface/CaloTopologyRecord.h"
49 #include "Geometry/Records/interface/IdealGeometryRecord.h"
50 #include "Geometry/CaloGeometry/interface/CaloSubdetectorGeometry.h"
51 #include "Geometry/CaloGeometry/interface/CaloGeometry.h"
52 //#include "Geometry/EcalBarrelAlgo/interface/EcalBarrelGeometry.h"
53 //#include "Geometry/EcalEndcapAlgo/interface/EcalEndcapGeometry.h"
54 #include "Geometry/Records/interface/CaloGeometryRecord.h"
55 #include "Geometry/EcalAlgo/interface/EcalBarrelGeometry.h"
56 #include "Geometry/EcalAlgo/interface/EcalEndcapGeometry.h"
57 #include "Geometry/CaloGeometry/interface/CaloCellGeometry.h"
58 #include "DataFormats/EcalDetId/interface/EcalSubdetector.h"
59
60 #include "Geometry/CommonDetUnit/interface/TrackingGeometry.h"
61 #include "Geometry/Records/interface/MuonGeometryRecord.h"
62 #include "Geometry/DTGeometry/interface/DTGeometry.h"
63 #include "Geometry/CSCGeometry/interface/CSCGeometry.h"
64 #include "Geometry/RPCGeometry/interface/RPCGeometry.h"
65
66 #include "DataFormats/Common/interface/DetSetVector.h"
67 #include "DataFormats/Common/interface/DetSetVectorNew.h"
68
69 #include "DataFormats/SiStripCluster/interface/SiStripClusterCollection.h"
70
71 #include "DataFormats/CaloRecHit/interface/CaloRecHit.h"
72 #include "DataFormats/EcalRecHit/interface/EcalRecHitCollections.h"
73 #include "DataFormats/HcalRecHit/interface/HcalRecHitCollections.h"
74
75 #include "SimDataFormats/TrackingHit/interface/PSimHitContainer.h"
76 #include "SimDataFormats/TrackingHit/interface/PSimHit.h"
77 #include "SimDataFormats/CrossingFrame/interface/CrossingFrame.h"
78 #include "SimDataFormats/CrossingFrame/interface/MixCollection.h"
79 #include "SimDataFormats/CaloHit/interface/PCaloHit.h"
80 #include "SimDataFormats/Track/interface/SimTrack.h"
81 #include "SimDataFormats/Vertex/interface/SimVertex.h"
82
83 #include "DataFormats/Provenance/interface/BranchDescription.h"
84 #include "DataFormats/Provenance/interface/Provenance.h"
85 #include "DataFormats/Candidate/interface/Candidate.h"
86 #include "DataFormats/HepMCCandidate/interface/GenParticleCandidate.h"
87 #include "DataFormats/RecoCandidate/interface/RecoChargedCandidate.h"
88 #include "DataFormats/TrackReco/interface/Track.h"
89 #include "TrackingTools/PatternTools/interface/Trajectory.h"
90 #include "TrackingTools/PatternTools/interface/TrajTrackAssociation.h"
91
92 #include "DataFormats/HepMCCandidate/interface/GenParticle.h"
93
94
95 #include "DataFormats/DTRecHit/interface/DTRecSegment4DCollection.h"
96 #include "DataFormats/CSCRecHit/interface/CSCSegmentCollection.h"
97
98 #include "DataFormats/DTRecHit/interface/DTRecHitCollection.h"
99 #include "DataFormats/CSCRecHit/interface/CSCRecHit2DCollection.h"
100 #include "DataFormats/RPCRecHit/interface/RPCRecHitCollection.h"
101
102 #include "DataFormats/Math/interface/Point3D.h"
103 #include "DataFormats/GeometrySurface/interface/TrapezoidalPlaneBounds.h"
104 #include "DataFormats/GeometrySurface/interface/RectangularPlaneBounds.h"
105
106 #include "DataFormats/SiPixelDetId/interface/PixelSubdetector.h"
107 #include "DataFormats/SiStripDetId/interface/StripSubdetector.h"
108 #include "DataFormats/SiPixelDetId/interface/PXBDetId.h"
109 #include "DataFormats/SiPixelDetId/interface/PXFDetId.h"
110 #include "DataFormats/SiStripDetId/interface/TIBDetId.h"
111 #include "DataFormats/SiStripDetId/interface/TIDDetId.h"
112 #include "DataFormats/SiStripDetId/interface/TOBDetId.h"
113 #include "DataFormats/SiStripDetId/interface/TECDetId.h"
114
115 #include "DataFormats/MuonDetId/interface/DTChamberId.h"
116 #include "DataFormats/MuonDetId/interface/CSCDetId.h"
117 #include "DataFormats/MuonDetId/interface/RPCDetId.h"
118
119 #include "DataFormats/EcalDetId/interface/EBDetId.h"
120 #include "DataFormats/EcalDetId/interface/EEDetId.h"
121 #include "DataFormats/EcalDetId/interface/ESDetId.h"
122 #include "DataFormats/HcalDetId/interface/HcalDetId.h"
123
124 #include "DataFormats/VertexReco/interface/NuclearInteraction.h"
125
126 #include "DataFormats/JetReco/interface/Jet.h"
127 #include "DataFormats/JetReco/interface/BasicJetCollection.h"
128 #include "DataFormats/JetReco/interface/GenJetCollection.h"
129 #include "DataFormats/JetReco/interface/CaloJetCollection.h"
130 #include "DataFormats/JetReco/interface/PFJetCollection.h"
131 #include "DataFormats/METReco/interface/CaloMET.h"
132 #include "DataFormats/METReco/interface/CaloMETFwd.h"
133
134 #include "Visualisation/Frog/soft/Includes/FROG/FROG_Element_Base_With_DetId.h"
135 #include "Visualisation/Frog/soft/Includes/FROG/FROG_Element_Tools.h"
136 #include "Visualisation/Frog/soft/Includes/FROG/FROG_Element_Tools.cpp"
137 #include "Visualisation/Frog/soft/Includes/FROG/FROG_Element_Event_Track.h"
138
139 #include "Visualisation/Frog/soft/Includes/FROG/FROG_Events.h"
140 #include "Visualisation/Frog/soft/Includes/FROG/FROG_Events.cpp"
141
142 #include "Visualisation/Frog/soft/Includes/FROG/FROG_Geometry.h"
143 #include "Visualisation/Frog/soft/Includes/FROG/FROG_Geometry.cpp"
144
145 #include "Visualisation/Frog/soft/Includes/FROG/FROG_DetId.h"
146 #include "Visualisation/Frog/soft/Includes/FROG/FROG_ReadCards.cpp"
147 #include "Visualisation/Frog/soft/Includes/FROG/FROG_Element_Event_NuclInt.h"
148
149 #include "Visualisation/Frog/soft/Includes/FROG/FROG_Coord.h"
150 #include "Visualisation/Frog/soft/Includes/FROG/FROG_Coord.cpp"
151
152
153
154 using namespace edm;
155 using namespace std;
156 using namespace reco;
157
158 //
159 // class decleration
160 //
161
162 class Frog_Analyzer : public edm::EDAnalyzer {
163 public:
164 explicit Frog_Analyzer(const edm::ParameterSet&);
165 ~Frog_Analyzer();
166
167
168 private:
169 virtual void beginJob(const edm::EventSetup& iSetup);
170 virtual void analyze (const edm::Event&, const edm::EventSetup&);
171 virtual void endJob ();
172
173 FROG_Element_Base* events_prim;
174
175 std::string OutputFile;
176
177 std::vector<InputTag> GenParticlesProducers;
178
179 std::vector<InputTag> SimTrackProducers;
180 std::vector<InputTag> SimVertexProducers;
181 std::vector<InputTag> SimHitProducers;
182 std::vector<InputTag> SimCaloHitProducers;
183
184 std::vector<InputTag> NIProducers;
185
186 std::vector<InputTag> TrackProducers;
187 std::vector<InputTag> TrajectoryProducers;
188 std::vector<InputTag> SiStripClusterProducers;
189 std::vector<InputTag> EcalRecHitProducers;
190 std::vector<InputTag> HcalHBHERecHitProducers;
191 std::vector<InputTag> HcalHORecHitProducers;
192 std::vector<InputTag> HcalHFRecHitProducers;
193 std::vector<InputTag> DTSegmentProducers;
194 std::vector<InputTag> CSCSegmentProducers;
195
196 std::vector<InputTag> RPCHitsProducers;
197
198 std::vector<InputTag> CaloTowersProducers;
199 bool CaloTowersProducersBasedOnCaloHits;
200
201 std::vector<InputTag> BasicJetsProducers;
202 std::vector<InputTag> CaloJetsProducers;
203 bool CaloJetsProducersBasedOnCaloTowers;
204
205 std::vector<InputTag> RecoCandidateProducers;
206 std::vector<InputTag> CaloMETProducers;
207
208
209 // ----------member data ---------------------------
210
211 bool ProduceGeom;
212 int NEventsInVisFile;
213 int NEvents;
214
215 unsigned int SRun;
216 unsigned int SEvent;
217 };
218
219 //
220 // constructors and destructor
221 //
222 Frog_Analyzer::Frog_Analyzer(const edm::ParameterSet& iConfig)
223 {
224 OutputFile = iConfig.getParameter<std::string >("OutputFile");
225
226 GenParticlesProducers = iConfig.getParameter<std::vector<InputTag> >("GenParticlesProducers");
227
228 SimTrackProducers = iConfig.getParameter<std::vector<InputTag> >("SimTrackProducers");
229 SimVertexProducers = iConfig.getParameter<std::vector<InputTag> >("SimVertexProducers");
230 SimHitProducers = iConfig.getParameter<std::vector<InputTag> >("SimHitProducers");
231 SimCaloHitProducers = iConfig.getParameter<std::vector<InputTag> >("SimCaloHitProducers");
232
233
234 TrackProducers = iConfig.getParameter<std::vector<InputTag> >("TrackProducers");
235 TrajectoryProducers = iConfig.getParameter<std::vector<InputTag> >("TrajectoryProducers");
236 SiStripClusterProducers = iConfig.getParameter<std::vector<InputTag> >("SiStripClusterProducers");
237 EcalRecHitProducers = iConfig.getParameter<std::vector<InputTag> >("EcalRecHitProducers");
238 HcalHBHERecHitProducers = iConfig.getParameter<std::vector<InputTag> >("HcalHBHERecHitProducers");
239 HcalHORecHitProducers = iConfig.getParameter<std::vector<InputTag> >("HcalHORecHitProducers");
240 HcalHFRecHitProducers = iConfig.getParameter<std::vector<InputTag> >("HcalHFRecHitProducers");
241
242 NIProducers = iConfig.getParameter<std::vector<InputTag> >("NIProducers");
243
244 DTSegmentProducers = iConfig.getParameter<std::vector<InputTag> >("DTSegmentProducers");
245 CSCSegmentProducers = iConfig.getParameter<std::vector<InputTag> >("CSCSegmentProducers");
246
247 RPCHitsProducers = iConfig.getParameter<std::vector<InputTag> >("RPCHitsProducers");
248
249 CaloTowersProducers = iConfig.getParameter<std::vector<InputTag> >("CaloTowersProducers");
250 CaloTowersProducersBasedOnCaloHits = iConfig.getParameter<bool>("CaloTowersProducersBasedOnCaloHits");
251
252
253 BasicJetsProducers = iConfig.getParameter<std::vector<InputTag> >("BasicJetsProducers");
254 CaloJetsProducers = iConfig.getParameter<std::vector<InputTag> >("CaloJetsProducers");
255 CaloJetsProducersBasedOnCaloTowers = iConfig.getParameter<bool>("CaloJetsProducersBasedOnCaloTowers");
256
257 RecoCandidateProducers = iConfig.getParameter<std::vector<InputTag> >("RecoCandidateProducers");
258 CaloMETProducers = iConfig.getParameter<std::vector<InputTag> >("CaloMETProducers");
259
260 ProduceGeom = iConfig.getParameter<bool >("ProduceGeom" );
261 NEventsInVisFile = iConfig.getParameter<int >("NEventsInVisFile" );
262
263 NEvents = 0;
264 }
265
266
267 Frog_Analyzer::~Frog_Analyzer()
268 {
269 }
270
271 // ------------ method called once each job just before starting event loop ------------
272 void
273 Frog_Analyzer::beginJob(const edm::EventSetup& iSetup)
274 {
275 if(ProduceGeom){
276 DetId Detid;
277 unsigned int SubDet;
278
279 unsigned int Frog_DetId;
280 FROG_Element_Base* FEB = NULL;
281 FROG_Element_Base_With_DetId* FEB_Temp = NULL;
282
283 FROG_Element_Base* prim = new FROG_Element_Base(C_PRIMARY);
284 FROG_Element_Base* geom = new FROG_Element_Base(C_GEOMETRY); prim->addDaughter(geom);
285 FROG_Element_Base_With_DetId* tracker = new FROG_Element_Base_With_DetId(C_FEB_DETID, DETID_TRK); geom->addDaughter(tracker);
286 FROG_Element_Base_With_DetId* muon = new FROG_Element_Base_With_DetId(C_FEB_DETID, DETID_MUON); geom->addDaughter(muon);
287 FROG_Element_Base_With_DetId* ecal = new FROG_Element_Base_With_DetId(C_FEB_DETID, DETID_ECAL); geom->addDaughter(ecal);
288 FROG_Element_Base_With_DetId* hcal = new FROG_Element_Base_With_DetId(C_FEB_DETID, DETID_HCAL); geom->addDaughter(hcal);
289 FROG_Element_Base_With_DetId* calo = new FROG_Element_Base_With_DetId(C_FEB_DETID, DETID_CALO); geom->addDaughter(calo);
290
291
292
293 // ### TRACKER GEOMETRY ###
294
295 edm::ESHandle<TrackerGeometry> tkGeom;
296 iSetup.get<TrackerDigiGeometryRecord>().get( tkGeom );
297 vector<GeomDet*> TrackerDets = tkGeom->dets();
298
299 for(unsigned int i=0;i<TrackerDets.size();i++){
300 Detid = TrackerDets[i]->geographicalId();
301 SubDet = Detid.subdetId();
302 if(SubDet<1 || SubDet>6) continue;
303
304
305 GeomDet* DetUnit = TrackerDets[i];
306 if(!DetUnit)continue;
307 const BoundPlane plane = DetUnit->surface();
308 const TrapezoidalPlaneBounds* trapezoidalBounds( dynamic_cast<const TrapezoidalPlaneBounds*>(&(plane.bounds())));
309 const RectangularPlaneBounds* rectangularBounds( dynamic_cast<const RectangularPlaneBounds*>(&(plane.bounds())));
310
311 float width = 0;
312 float length = 0;
313 float thickness = 0;
314 float TrapezoidalParam = 0;
315
316 if(trapezoidalBounds){
317 std::vector<float> const & parameters = (*trapezoidalBounds).parameters();
318 width = parameters[0]*2;
319 length = parameters[3]*2;
320 thickness = (*trapezoidalBounds).thickness();
321 TrapezoidalParam = parameters[1]/parameters[0];
322 }else if(rectangularBounds){
323 width = DetUnit->surface().bounds().width();
324 length = DetUnit->surface().bounds().length();
325 thickness = DetUnit->surface().bounds().thickness();
326 TrapezoidalParam = 1;
327 }
328
329 Surface::GlobalPoint WidthVector = plane.toGlobal( LocalPoint(width/2, 0, 0) );
330 Surface::GlobalPoint LengthVector = plane.toGlobal( LocalPoint(0, length/2, 0) );
331 Surface::GlobalPoint ThickVector = plane.toGlobal( LocalPoint(0, 0, thickness/2) );
332
333 GlobalVector Pos = GlobalVector(DetUnit->position().basicVector());
334
335 FROG_Element_Geom_TrackerMod* mod = new FROG_Element_Geom_TrackerMod(
336 Detid.rawId(), TrapezoidalParam,
337 Pos.x(), Pos.y(), Pos.z(),
338 WidthVector.x() -Pos.x(), WidthVector.y() -Pos.y(), WidthVector.z() -Pos.z(),
339 LengthVector.x()-Pos.x(), LengthVector.y()-Pos.y(), LengthVector.z()-Pos.z(),
340 ThickVector.x() -Pos.x(), ThickVector.y() -Pos.y(), ThickVector.z() -Pos.z());
341
342
343 Frog_DetId = DETID_TRK;
344 FEB = tracker;
345
346 Frog_DetId += SubDet*100000;
347 FEB_Temp = dynamic_cast<FROG_Element_Base_With_DetId*>(FEB);
348 FEB = FEB_Temp->getDaughterWithDetId(Frog_DetId);
349 if(FEB==NULL){FEB = new FROG_Element_Base_With_DetId(C_FEB_DETID, Frog_DetId); FEB_Temp->addDaughter(FEB);}
350
351 if(SubDet==PixelSubdetector::PixelBarrel){
352 PXBDetId detid = PXBDetId(Detid);
353
354 Frog_DetId += detid.layer()*10000;
355 FEB_Temp = dynamic_cast<FROG_Element_Base_With_DetId*>(FEB);
356 FEB = FEB_Temp->getDaughterWithDetId(Frog_DetId);
357 if(FEB==NULL){FEB = new FROG_Element_Base_With_DetId(C_FEB_DETID, Frog_DetId); FEB_Temp->addDaughter(FEB);}
358
359 Frog_DetId += detid.ladder()*100;
360 FEB_Temp = dynamic_cast<FROG_Element_Base_With_DetId*>(FEB);
361 FEB = FEB_Temp->getDaughterWithDetId(Frog_DetId);
362 if(FEB==NULL){FEB = new FROG_Element_Base_With_DetId(C_FEB_DETID, Frog_DetId); FEB_Temp->addDaughter(FEB);}
363 }else if(SubDet==PixelSubdetector::PixelEndcap){
364 PXFDetId detid = PXFDetId(Detid);
365
366 Frog_DetId += detid.side()*10000;
367 FEB_Temp = dynamic_cast<FROG_Element_Base_With_DetId*>(FEB);
368 FEB = FEB_Temp->getDaughterWithDetId(Frog_DetId);
369 if(FEB==NULL){FEB = new FROG_Element_Base_With_DetId(C_FEB_DETID, Frog_DetId); FEB_Temp->addDaughter(FEB);}
370
371 Frog_DetId += detid.disk()*1000;
372 FEB_Temp = dynamic_cast<FROG_Element_Base_With_DetId*>(FEB);
373 FEB = FEB_Temp->getDaughterWithDetId(Frog_DetId);
374 if(FEB==NULL){FEB = new FROG_Element_Base_With_DetId(C_FEB_DETID, Frog_DetId); FEB_Temp->addDaughter(FEB);}
375
376 Frog_DetId += detid.blade()*10;
377 FEB_Temp = dynamic_cast<FROG_Element_Base_With_DetId*>(FEB);
378 FEB = FEB_Temp->getDaughterWithDetId(Frog_DetId);
379 if(FEB==NULL){FEB = new FROG_Element_Base_With_DetId(C_FEB_DETID, Frog_DetId); FEB_Temp->addDaughter(FEB);}
380
381 Frog_DetId += detid.panel()*1;
382 FEB_Temp = dynamic_cast<FROG_Element_Base_With_DetId*>(FEB);
383 FEB = FEB_Temp->getDaughterWithDetId(Frog_DetId);
384 if(FEB==NULL){FEB = new FROG_Element_Base_With_DetId(C_FEB_DETID, Frog_DetId); FEB_Temp->addDaughter(FEB);}
385 }else if(SubDet==StripSubdetector::TIB){
386 TIBDetId detid = TIBDetId(Detid);
387
388 Frog_DetId += detid.layer()*10000;
389 FEB_Temp = dynamic_cast<FROG_Element_Base_With_DetId*>(FEB);
390 FEB = FEB_Temp->getDaughterWithDetId(Frog_DetId);
391 if(FEB==NULL){FEB = new FROG_Element_Base_With_DetId(C_FEB_DETID, Frog_DetId); FEB_Temp->addDaughter(FEB);}
392
393 Frog_DetId += detid.stringNumber()*100;
394 FEB_Temp = dynamic_cast<FROG_Element_Base_With_DetId*>(FEB);
395 FEB = FEB_Temp->getDaughterWithDetId(Frog_DetId);
396 if(FEB==NULL){FEB = new FROG_Element_Base_With_DetId(C_FEB_DETID, Frog_DetId); FEB_Temp->addDaughter(FEB);}
397 }else if(SubDet==StripSubdetector::TID){
398 TIDDetId detid = TIDDetId(Detid);
399
400 Frog_DetId += detid.side()*10000;
401 FEB_Temp = dynamic_cast<FROG_Element_Base_With_DetId*>(FEB);
402 FEB = FEB_Temp->getDaughterWithDetId(Frog_DetId);
403 if(FEB==NULL){FEB = new FROG_Element_Base_With_DetId(C_FEB_DETID, Frog_DetId); FEB_Temp->addDaughter(FEB);}
404
405 Frog_DetId += detid.wheel()*1000;
406 FEB_Temp = dynamic_cast<FROG_Element_Base_With_DetId*>(FEB);
407 FEB = FEB_Temp->getDaughterWithDetId(Frog_DetId);
408 if(FEB==NULL){FEB = new FROG_Element_Base_With_DetId(C_FEB_DETID, Frog_DetId); FEB_Temp->addDaughter(FEB);}
409
410 Frog_DetId += detid.ring()*10;
411 FEB_Temp = dynamic_cast<FROG_Element_Base_With_DetId*>(FEB);
412 FEB = FEB_Temp->getDaughterWithDetId(Frog_DetId);
413 if(FEB==NULL){FEB = new FROG_Element_Base_With_DetId(C_FEB_DETID, Frog_DetId); FEB_Temp->addDaughter(FEB);}
414 }else if(SubDet==StripSubdetector::TOB){
415 TOBDetId detid = TOBDetId(Detid);
416
417 Frog_DetId += detid.layer()*10000;
418 FEB_Temp = dynamic_cast<FROG_Element_Base_With_DetId*>(FEB);
419 FEB = FEB_Temp->getDaughterWithDetId(Frog_DetId);
420 if(FEB==NULL){FEB = new FROG_Element_Base_With_DetId(C_FEB_DETID, Frog_DetId); FEB_Temp->addDaughter(FEB);}
421
422 Frog_DetId += detid.rodNumber()*100;
423 FEB_Temp = dynamic_cast<FROG_Element_Base_With_DetId*>(FEB);
424 FEB = FEB_Temp->getDaughterWithDetId(Frog_DetId);
425 if(FEB==NULL){FEB = new FROG_Element_Base_With_DetId(C_FEB_DETID, Frog_DetId); FEB_Temp->addDaughter(FEB);}
426 }else if(SubDet==StripSubdetector::TEC){
427 TECDetId detid = TECDetId(Detid);
428
429 Frog_DetId += detid.side()*10000;
430 FEB_Temp = dynamic_cast<FROG_Element_Base_With_DetId*>(FEB);
431 FEB = FEB_Temp->getDaughterWithDetId(Frog_DetId);
432 if(FEB==NULL){FEB = new FROG_Element_Base_With_DetId(C_FEB_DETID, Frog_DetId); FEB_Temp->addDaughter(FEB);}
433
434 Frog_DetId += detid.wheel()*1000;
435 FEB_Temp = dynamic_cast<FROG_Element_Base_With_DetId*>(FEB);
436 FEB = FEB_Temp->getDaughterWithDetId(Frog_DetId);
437 if(FEB==NULL){FEB = new FROG_Element_Base_With_DetId(C_FEB_DETID, Frog_DetId); FEB_Temp->addDaughter(FEB);}
438
439 Frog_DetId += detid.ring()*10;
440 FEB_Temp = dynamic_cast<FROG_Element_Base_With_DetId*>(FEB);
441 FEB = FEB_Temp->getDaughterWithDetId(Frog_DetId);
442 if(FEB==NULL){FEB = new FROG_Element_Base_With_DetId(C_FEB_DETID, Frog_DetId); FEB_Temp->addDaughter(FEB);}
443
444 Frog_DetId += detid.petalNumber();
445 FEB_Temp = dynamic_cast<FROG_Element_Base_With_DetId*>(FEB);
446 FEB = FEB_Temp->getDaughterWithDetId(Frog_DetId);
447 if(FEB==NULL){FEB = new FROG_Element_Base_With_DetId(C_FEB_DETID, Frog_DetId); FEB_Temp->addDaughter(FEB);}
448 }else{
449 if(mod)delete mod;
450 continue;
451 }
452 FEB->addDaughter(mod);
453 }
454
455
456 // ### MUON GEOMETRY ###
457
458 edm::ESHandle<DTGeometry> DtGeom;
459 iSetup.get<MuonGeometryRecord>().get( DtGeom );
460 const vector<GeomDet*> DtDets = DtGeom->dets();
461
462 edm::ESHandle<CSCGeometry> CscGeom;
463 iSetup.get<MuonGeometryRecord>().get( CscGeom );
464 const vector<GeomDet*> CscDets = CscGeom->dets();
465
466 edm::ESHandle<RPCGeometry> RpcGeom;
467 iSetup.get<MuonGeometryRecord>().get( RpcGeom );
468 const vector<GeomDet*> RpcDets = RpcGeom->dets();
469
470 vector<GeomDet*> MuonDets;
471 for(unsigned int i=0;i<DtDets.size() ;i++){MuonDets.push_back(DtDets [i]);}
472 for(unsigned int i=0;i<CscDets.size();i++){MuonDets.push_back(CscDets[i]);}
473 for(unsigned int i=0;i<RpcDets.size();i++){MuonDets.push_back(RpcDets[i]);}
474
475 for(unsigned int i=0;i<MuonDets.size();i++)
476 {
477 Detid = DetId(MuonDets[i]->geographicalId());
478 SubDet = Detid.subdetId();
479
480 GeomDet* DetUnit = MuonDets[i];
481 if(!DetUnit)continue;
482 const BoundPlane plane = DetUnit->surface();
483 const TrapezoidalPlaneBounds* trapezoidalBounds( dynamic_cast<const TrapezoidalPlaneBounds*>(&(plane.bounds())));
484 const RectangularPlaneBounds* rectangularBounds( dynamic_cast<const RectangularPlaneBounds*>(&(plane.bounds())));
485
486 float width = 0;
487 float length = 0;
488 float thickness = 0;
489 float TrapezoidalParam = 0;
490
491 if(trapezoidalBounds)
492 {
493 std::vector<float> const & parameters = (*trapezoidalBounds).parameters();
494 width = parameters[0]*2;
495 length = parameters[3]*2;
496 thickness = (*trapezoidalBounds).thickness();
497 TrapezoidalParam = parameters[1]/parameters[0];
498 }else if(rectangularBounds){
499 width = DetUnit->surface().bounds().width();
500 length = DetUnit->surface().bounds().length();
501 thickness = DetUnit->surface().bounds().thickness();
502 TrapezoidalParam = 1;
503 }
504
505 Surface::GlobalPoint WidthVector = plane.toGlobal( LocalPoint(width/2, 0, 0) );
506 Surface::GlobalPoint LengthVector = plane.toGlobal( LocalPoint(0, length/2, 0) );
507 Surface::GlobalPoint ThickVector = plane.toGlobal( LocalPoint(0, 0, thickness/2) );
508
509 GlobalVector Pos = GlobalVector(DetUnit->position().basicVector());
510
511 FROG_Element_Geom_TrackerMod* mod = new FROG_Element_Geom_TrackerMod(
512 Detid.rawId(), TrapezoidalParam,
513 Pos.x(), Pos.y(), Pos.z(),
514 WidthVector.x() -Pos.x(), WidthVector.y() -Pos.y(), WidthVector.z() -Pos.z(),
515 LengthVector.x()-Pos.x(), LengthVector.y()-Pos.y(), LengthVector.z()-Pos.z(),
516 ThickVector.x() -Pos.x(), ThickVector.y() -Pos.y(), ThickVector.z() -Pos.z());
517
518 Frog_DetId = DETID_MUON;
519 FEB = muon;
520
521 Frog_DetId += SubDet*100000;
522 FEB_Temp = dynamic_cast<FROG_Element_Base_With_DetId*>(FEB);
523 FEB = FEB_Temp->getDaughterWithDetId(Frog_DetId);
524 if(FEB==NULL){FEB = new FROG_Element_Base_With_DetId(C_FEB_DETID, Frog_DetId); FEB_Temp->addDaughter(FEB);}
525
526 if(SubDet==1){
527 DTChamberId detid = DTChamberId(Detid);
528
529 Frog_DetId += (detid.wheel()+3)*10000;
530 FEB_Temp = dynamic_cast<FROG_Element_Base_With_DetId*>(FEB);
531 FEB = FEB_Temp->getDaughterWithDetId(Frog_DetId);
532 if(FEB==NULL){FEB = new FROG_Element_Base_With_DetId(C_FEB_DETID, Frog_DetId); FEB_Temp->addDaughter(FEB);}
533
534 Frog_DetId += detid.station()*100;
535 FEB_Temp = dynamic_cast<FROG_Element_Base_With_DetId*>(FEB);
536 FEB = FEB_Temp->getDaughterWithDetId(Frog_DetId);
537 if(FEB==NULL){FEB = new FROG_Element_Base_With_DetId(C_FEB_DETID, Frog_DetId); FEB_Temp->addDaughter(FEB);}
538
539 Frog_DetId += detid.sector()*1;
540 FEB_Temp = dynamic_cast<FROG_Element_Base_With_DetId*>(FEB);
541 FEB = FEB_Temp->getDaughterWithDetId(Frog_DetId);
542 if(FEB==NULL){FEB = new FROG_Element_Base_With_DetId(C_FEB_DETID, Frog_DetId); FEB_Temp->addDaughter(FEB);}
543 }else if(SubDet==2){
544 CSCDetId detid = CSCDetId(Detid);
545
546 Frog_DetId += detid.endcap()*10000;
547 FEB_Temp = dynamic_cast<FROG_Element_Base_With_DetId*>(FEB);
548 FEB = FEB_Temp->getDaughterWithDetId(Frog_DetId);
549 if(FEB==NULL){FEB = new FROG_Element_Base_With_DetId(C_FEB_DETID, Frog_DetId); FEB_Temp->addDaughter(FEB);}
550
551 Frog_DetId += detid.station()*1000;
552 FEB_Temp = dynamic_cast<FROG_Element_Base_With_DetId*>(FEB);
553 FEB = FEB_Temp->getDaughterWithDetId(Frog_DetId);
554 if(FEB==NULL){FEB = new FROG_Element_Base_With_DetId(C_FEB_DETID, Frog_DetId); FEB_Temp->addDaughter(FEB);}
555
556 Frog_DetId += detid.ring()*100;
557 FEB_Temp = dynamic_cast<FROG_Element_Base_With_DetId*>(FEB);
558 FEB = FEB_Temp->getDaughterWithDetId(Frog_DetId);
559 if(FEB==NULL){FEB = new FROG_Element_Base_With_DetId(C_FEB_DETID, Frog_DetId); FEB_Temp->addDaughter(FEB);}
560
561 Frog_DetId += detid.chamber()*1;
562 FEB_Temp = dynamic_cast<FROG_Element_Base_With_DetId*>(FEB);
563 FEB = FEB_Temp->getDaughterWithDetId(Frog_DetId);
564 if(FEB==NULL){FEB = new FROG_Element_Base_With_DetId(C_FEB_DETID, Frog_DetId); FEB_Temp->addDaughter(FEB);}
565 }else if(SubDet==3){
566 RPCDetId detid = RPCDetId(Detid);
567
568 Frog_DetId += (detid.region()+2)*10000;
569 FEB_Temp = dynamic_cast<FROG_Element_Base_With_DetId*>(FEB);
570 FEB = FEB_Temp->getDaughterWithDetId(Frog_DetId);
571 if(FEB==NULL){FEB = new FROG_Element_Base_With_DetId(C_FEB_DETID, Frog_DetId); FEB_Temp->addDaughter(FEB);}
572
573 // Barrel
574 if(detid.region()==0){
575 Frog_DetId += (detid.ring()+3)*1000;
576 FEB_Temp = dynamic_cast<FROG_Element_Base_With_DetId*>(FEB);
577 FEB = FEB_Temp->getDaughterWithDetId(Frog_DetId);
578 if(FEB==NULL){FEB = new FROG_Element_Base_With_DetId(C_FEB_DETID, Frog_DetId); FEB_Temp->addDaughter(FEB);}
579 // Endcap
580 }else{
581 Frog_DetId += detid.ring()*1000;
582 FEB_Temp = dynamic_cast<FROG_Element_Base_With_DetId*>(FEB);
583 FEB = FEB_Temp->getDaughterWithDetId(Frog_DetId);
584 if(FEB==NULL){FEB = new FROG_Element_Base_With_DetId(C_FEB_DETID, Frog_DetId); FEB_Temp->addDaughter(FEB);}
585 }
586
587 Frog_DetId += detid.station()*100;
588 FEB_Temp = dynamic_cast<FROG_Element_Base_With_DetId*>(FEB);
589 FEB = FEB_Temp->getDaughterWithDetId(Frog_DetId);
590 if(FEB==NULL){FEB = new FROG_Element_Base_With_DetId(C_FEB_DETID, Frog_DetId); FEB_Temp->addDaughter(FEB);}
591
592 Frog_DetId += detid.sector()*1;
593 FEB_Temp = dynamic_cast<FROG_Element_Base_With_DetId*>(FEB);
594 FEB = FEB_Temp->getDaughterWithDetId(Frog_DetId);
595 if(FEB==NULL){FEB = new FROG_Element_Base_With_DetId(C_FEB_DETID, Frog_DetId); FEB_Temp->addDaughter(FEB);}
596 }
597
598 FEB->addDaughter(mod);
599 }
600
601
602
603 // ### CALO GEOMETRY ###
604
605 edm::ESHandle<CaloGeometry> CaloGeom;
606 iSetup.get<CaloGeometryRecord>().get( CaloGeom );
607 const vector<DetId> CaloDets = CaloGeom->getValidDetIds();
608
609 for(unsigned int i=0;i<CaloDets.size();i++)
610 {
611 Detid = CaloDets[i];
612 SubDet = Detid.subdetId();
613
614 if(Detid.det()==DetId::Ecal){
615 if(SubDet<1 || SubDet>3) continue;
616
617 Frog_DetId = DETID_ECAL;
618 FEB = ecal;
619
620 Frog_DetId += SubDet*100000;
621 FEB_Temp = dynamic_cast<FROG_Element_Base_With_DetId*>(FEB);
622 FEB = FEB_Temp->getDaughterWithDetId(Frog_DetId);
623 if(FEB==NULL){FEB = new FROG_Element_Base_With_DetId(C_FEB_DETID, Frog_DetId); FEB_Temp->addDaughter(FEB);}
624
625 if(SubDet==1){
626 EBDetId detid = EBDetId(Detid);
627
628 Frog_DetId += ((detid.zside()==1)+1)*10000;
629 FEB_Temp = dynamic_cast<FROG_Element_Base_With_DetId*>(FEB);
630 FEB = FEB_Temp->getDaughterWithDetId(Frog_DetId);
631 if(FEB==NULL){FEB = new FROG_Element_Base_With_DetId(C_FEB_DETID, Frog_DetId); FEB_Temp->addDaughter(FEB);}
632
633 Frog_DetId += (detid.tower_ieta()*detid.zside())*100;
634 FEB_Temp = dynamic_cast<FROG_Element_Base_With_DetId*>(FEB);
635 FEB = FEB_Temp->getDaughterWithDetId(Frog_DetId);
636 if(FEB==NULL){FEB = new FROG_Element_Base_With_DetId(C_FEB_DETID, Frog_DetId); FEB_Temp->addDaughter(FEB);}
637
638 Frog_DetId += detid.tower_iphi()*1;
639 FEB_Temp = dynamic_cast<FROG_Element_Base_With_DetId*>(FEB);
640 FEB = FEB_Temp->getDaughterWithDetId(Frog_DetId);
641 if(FEB==NULL){FEB = new FROG_Element_Base_With_DetId(C_FEB_DETID, Frog_DetId); FEB_Temp->addDaughter(FEB);}
642 }else if(SubDet==2){
643 EEDetId detid = EEDetId(Detid);
644
645 Frog_DetId += ((detid.zside()==1)+1)*10000;
646 FEB_Temp = dynamic_cast<FROG_Element_Base_With_DetId*>(FEB);
647 FEB = FEB_Temp->getDaughterWithDetId(Frog_DetId);
648 if(FEB==NULL){FEB = new FROG_Element_Base_With_DetId(C_FEB_DETID, Frog_DetId); FEB_Temp->addDaughter(FEB);}
649
650 Frog_DetId += detid.iquadrant()*1000;
651 FEB_Temp = dynamic_cast<FROG_Element_Base_With_DetId*>(FEB);
652 FEB = FEB_Temp->getDaughterWithDetId(Frog_DetId);
653 if(FEB==NULL){FEB = new FROG_Element_Base_With_DetId(C_FEB_DETID, Frog_DetId); FEB_Temp->addDaughter(FEB);}
654
655 Frog_DetId += detid.isc();
656 FEB_Temp = dynamic_cast<FROG_Element_Base_With_DetId*>(FEB);
657 FEB = FEB_Temp->getDaughterWithDetId(Frog_DetId);
658 if(FEB==NULL){FEB = new FROG_Element_Base_With_DetId(C_FEB_DETID, Frog_DetId); FEB_Temp->addDaughter(FEB);}
659 }else if(SubDet==3){
660 ESDetId detid = ESDetId(Detid);
661
662 Frog_DetId += ((detid.zside()==1)+1)*10000;
663 FEB_Temp = dynamic_cast<FROG_Element_Base_With_DetId*>(FEB);
664 FEB = FEB_Temp->getDaughterWithDetId(Frog_DetId);
665 if(FEB==NULL){FEB = new FROG_Element_Base_With_DetId(C_FEB_DETID, Frog_DetId); FEB_Temp->addDaughter(FEB);}
666
667 Frog_DetId += detid.plane()*1000;
668 FEB_Temp = dynamic_cast<FROG_Element_Base_With_DetId*>(FEB);
669 FEB = FEB_Temp->getDaughterWithDetId(Frog_DetId);
670 if(FEB==NULL){FEB = new FROG_Element_Base_With_DetId(C_FEB_DETID, Frog_DetId); FEB_Temp->addDaughter(FEB);}
671
672 Frog_DetId += detid.six()*50;
673 FEB_Temp = dynamic_cast<FROG_Element_Base_With_DetId*>(FEB);
674 FEB = FEB_Temp->getDaughterWithDetId(Frog_DetId);
675 if(FEB==NULL){FEB = new FROG_Element_Base_With_DetId(C_FEB_DETID, Frog_DetId); FEB_Temp->addDaughter(FEB);}
676
677 Frog_DetId += detid.siy();
678 FEB_Temp = dynamic_cast<FROG_Element_Base_With_DetId*>(FEB);
679 FEB = FEB_Temp->getDaughterWithDetId(Frog_DetId);
680 if(FEB==NULL){FEB = new FROG_Element_Base_With_DetId(C_FEB_DETID, Frog_DetId); FEB_Temp->addDaughter(FEB);}
681 }
682 }else if(Detid.det()==DetId::Hcal){
683 if(SubDet<1 || SubDet>4) continue;
684
685 Frog_DetId = DETID_HCAL;
686 FEB = hcal;
687
688 Frog_DetId += SubDet*100000;
689 FEB_Temp = dynamic_cast<FROG_Element_Base_With_DetId*>(FEB);
690 FEB = FEB_Temp->getDaughterWithDetId(Frog_DetId);
691 if(FEB==NULL){FEB = new FROG_Element_Base_With_DetId(C_FEB_DETID, Frog_DetId); FEB_Temp->addDaughter(FEB);}
692
693 HcalDetId detid = HcalDetId(Detid);
694
695 Frog_DetId += ((detid.zside()==1)+1)*10000;
696 FEB_Temp = dynamic_cast<FROG_Element_Base_With_DetId*>(FEB);
697 FEB = FEB_Temp->getDaughterWithDetId(Frog_DetId);
698 if(FEB==NULL){FEB = new FROG_Element_Base_With_DetId(C_FEB_DETID, Frog_DetId); FEB_Temp->addDaughter(FEB);}
699
700 Frog_DetId += detid.ietaAbs()*100;
701 FEB_Temp = dynamic_cast<FROG_Element_Base_With_DetId*>(FEB);
702 FEB = FEB_Temp->getDaughterWithDetId(Frog_DetId);
703 if(FEB==NULL){FEB = new FROG_Element_Base_With_DetId(C_FEB_DETID, Frog_DetId); FEB_Temp->addDaughter(FEB);}
704
705 Frog_DetId += detid.iphi()*1;
706 FEB_Temp = dynamic_cast<FROG_Element_Base_With_DetId*>(FEB);
707 FEB = FEB_Temp->getDaughterWithDetId(Frog_DetId);
708 if(FEB==NULL){FEB = new FROG_Element_Base_With_DetId(C_FEB_DETID, Frog_DetId); FEB_Temp->addDaughter(FEB);}
709
710 }else if(Detid.det() == DetId::Calo){
711
712 Frog_DetId = DETID_CALO;
713 FEB = calo;
714
715 if(SubDet!=(unsigned int)CaloTowerDetId::SubdetId)continue;
716
717 Frog_DetId += SubDet*100000;
718 FEB_Temp = dynamic_cast<FROG_Element_Base_With_DetId*>(FEB);
719 FEB = FEB_Temp->getDaughterWithDetId(Frog_DetId);
720 if(FEB==NULL){FEB = new FROG_Element_Base_With_DetId(C_FEB_DETID, Frog_DetId); FEB_Temp->addDaughter(FEB);}
721
722 if(SubDet==(unsigned int)CaloTowerDetId::SubdetId){
723 CaloTowerDetId detid = CaloTowerDetId(Detid);
724
725 Frog_DetId += ((detid.zside()==1)+1)*10000;
726 FEB_Temp = dynamic_cast<FROG_Element_Base_With_DetId*>(FEB);
727 FEB = FEB_Temp->getDaughterWithDetId(Frog_DetId);
728 if(FEB==NULL){FEB = new FROG_Element_Base_With_DetId(C_FEB_DETID, Frog_DetId); FEB_Temp->addDaughter(FEB);}
729
730 Frog_DetId += (detid.ieta()*detid.zside())*100;
731 FEB_Temp = dynamic_cast<FROG_Element_Base_With_DetId*>(FEB);
732 FEB = FEB_Temp->getDaughterWithDetId(Frog_DetId);
733 if(FEB==NULL){FEB = new FROG_Element_Base_With_DetId(C_FEB_DETID, Frog_DetId); FEB_Temp->addDaughter(FEB);}
734
735 Frog_DetId += detid.iphi()*1;
736 FEB_Temp = dynamic_cast<FROG_Element_Base_With_DetId*>(FEB);
737 FEB = FEB_Temp->getDaughterWithDetId(Frog_DetId);
738 if(FEB==NULL){FEB = new FROG_Element_Base_With_DetId(C_FEB_DETID, Frog_DetId); FEB_Temp->addDaughter(FEB);}
739 }
740 }
741
742 const CaloCellGeometry* CellGeom = CaloGeom->getGeometry(Detid);
743 GlobalPoint CellPos = CellGeom->getPosition();
744 const CaloCellGeometry::CornersVec CellCorners = CellGeom->getCorners();
745
746 float cX = (CellCorners[0].x() + CellCorners[2].x())/2;
747 float cY = (CellCorners[0].y() + CellCorners[2].y())/2;
748 float cZ = (CellCorners[0].z() + CellCorners[2].z())/2;
749
750 float wX = (CellCorners[1].x() - CellCorners[0].x())/2;
751 float wY = (CellCorners[1].y() - CellCorners[0].y())/2;
752 float wZ = (CellCorners[1].z() - CellCorners[0].z())/2;
753
754 float hX = (CellCorners[3].x() - CellCorners[0].x())/2;
755 float hY = (CellCorners[3].y() - CellCorners[0].y())/2;
756 float hZ = (CellCorners[3].z() - CellCorners[0].z())/2;
757
758 float F = sqrt( pow(CellCorners[4].x()+CellCorners[6].x(),2) + pow(CellCorners[4].y()+CellCorners[6].y(),2) + pow(CellCorners[4].z()+CellCorners[6].z(),2) );
759 F /= sqrt( pow(CellCorners[0].x()+CellCorners[2].x(),2) + pow(CellCorners[0].y()+CellCorners[2].y(),2) + pow(CellCorners[0].z()+CellCorners[2].z(),2) );
760
761 FROG_Element_Geom_CaloMod* mod = new FROG_Element_Geom_CaloMod(
762 Detid.rawId(), F,
763 cX , cY , cZ ,
764 wX , wY , wZ ,
765 hX , hY , hZ );
766
767 FEB->addDaughter(mod);
768 }
769
770 // ### Save .geom ###
771
772 FROG_Geometry* CMS_Geom = new FROG_Geometry(prim);
773 CMS_Geom->Save("CMS.geom");
774 }
775
776 events_prim = new FROG_Element_Base(C_PRIMARY);
777 }
778
779 // ------------ method called once each job just after ending the event loop ------------
780 void
781 Frog_Analyzer::endJob()
782 {
783 if(NEvents>0){
784 char OutputFileName[1024];
785 sprintf(OutputFileName,"%s",OutputFile.substr(0,OutputFile.size()-4).c_str());
786 if(NEventsInVisFile>=0)sprintf(OutputFileName,"%s_R%i_E%i.vis",OutputFileName,SRun,SEvent);
787 sprintf(OutputFileName,"%s.vis",OutputFileName);
788
789 FROG_Events* events = new FROG_Events(events_prim);
790 events->Save((char*) OutputFileName);
791 delete events;
792 delete events_prim;
793
794 events_prim = new FROG_Element_Base(C_PRIMARY);
795 NEvents=0;
796 }
797 }
798
799
800
801 //
802 // member functions
803 //
804
805 // ------------ method called to for each event ------------
806 void
807 Frog_Analyzer::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup)
808 {
809 if(NEvents == 0){
810 SRun = iEvent.id().run();
811 SEvent = iEvent.id().event();
812 }
813
814
815 FROG_Element_Event* event = new FROG_Element_Event(iEvent.id().run(), iEvent.id().event(), iEvent.time().value() );
816 events_prim->addDaughter(event);
817
818 // access the tracker
819 edm::ESHandle<TrackerGeometry> tkGeom;
820 iSetup.get<TrackerDigiGeometryRecord>().get( tkGeom );
821
822 edm::ESHandle<DTGeometry> DtGeom;
823 iSetup.get<MuonGeometryRecord>().get( DtGeom );
824
825 edm::ESHandle<CSCGeometry> CscGeom;
826 iSetup.get<MuonGeometryRecord>().get( CscGeom );
827
828 edm::ESHandle<RPCGeometry> RpcGeom;
829 iSetup.get<MuonGeometryRecord>().get( RpcGeom );
830
831 edm::ESHandle<CaloGeometry> CaloGeom;
832 iSetup.get<CaloGeometryRecord>().get( CaloGeom );
833
834
835 // ### GENPARTICLES ###
836 FROG_Element_Base_With_DetId* frogGen = new FROG_Element_Base_With_DetId(C_FEB_DETID, EVTID_GEN);
837 event->addDaughter(frogGen);
838
839 FROG_Element_Base_With_DetId* frogGenPartColl = new FROG_Element_Base_With_DetId(C_FEB_DETID, EVTID_GEN_CAND);
840 frogGen->addDaughter(frogGenPartColl);
841
842
843 for(unsigned int i=0;i<GenParticlesProducers.size();i++){
844 edm::Handle<GenParticleCollection> h_gen_Particles;
845 iEvent.getByLabel(GenParticlesProducers[i], h_gen_Particles);
846 GenParticleCollection gen_Particles = *h_gen_Particles.product();
847
848 FROG_Element_Base_With_DetId* frogGenPartCollb = new FROG_Element_Base_With_DetId(C_FEB_DETID, EVTID_GEN_CAND + i + 1);
849 frogGenPartColl->addDaughter(frogGenPartCollb);
850
851 for(unsigned int h=0;h<gen_Particles.size();h++){
852 if(gen_Particles[h].status()!=1)continue;
853 FROG_Element_Event_Candidate* frogGenPart = new FROG_Element_Event_Candidate(gen_Particles[h].pdgId(), gen_Particles[h].p(), gen_Particles[h].eta(), gen_Particles[h].phi());
854 frogGenPartCollb->addDaughter(frogGenPart);
855 }
856 }
857
858
859
860 // ### SIMTRACK ###
861 FROG_Element_Base_With_DetId* frogSimTrkColl = new FROG_Element_Base_With_DetId(C_FEB_DETID, EVTID_SIMTRK);
862 event->addDaughter(frogSimTrkColl);
863
864 for(unsigned int i=0;i<SimTrackProducers.size();i++){
865 edm::Handle<std::vector< SimTrack > > h_SimTracks;
866 iEvent.getByLabel(SimTrackProducers[i], h_SimTracks);
867 std::vector< SimTrack > SimTrackColl = *h_SimTracks.product();
868
869 for ( unsigned int a = 0; a < SimTrackColl.size(); ++a ) {
870 SimTrack simTrack =SimTrackColl[a];
871
872 FROG_Element_Event_Sim_Track* frogSimTrk = new FROG_Element_Event_Sim_Track(simTrack.trackId(),
873 simTrack.momentum().x(), simTrack.momentum().y(), simTrack.momentum().z(),
874 simTrack.momentum().e(), simTrack.type(), simTrack.vertIndex(),
875 simTrack.charge() );
876 frogSimTrkColl->addDaughter(frogSimTrk);
877 }
878 }
879
880 // ### SIMVERTEX ###
881 FROG_Element_Base_With_DetId* frogSimVtx = new FROG_Element_Base_With_DetId(C_FEB_DETID, EVTID_SIMVTX);
882 event->addDaughter(frogSimVtx);
883
884 for(unsigned int i=0;i<SimVertexProducers.size();i++){
885 edm::Handle<std::vector< SimVertex > > h_Vertex;
886 iEvent.getByLabel(SimVertexProducers[i], h_Vertex);
887 std::vector< SimVertex > VertexColl = *h_Vertex.product();
888
889 for (unsigned int b = 0; b < VertexColl.size(); ++b ) {
890 SimVertex Vertex = VertexColl[b];
891
892 FROG_Element_Event_Sim_Vertex* frogSimVertex = new FROG_Element_Event_Sim_Vertex(
893 Vertex.position().x(), Vertex.position().y(), Vertex.position().z(),
894 Vertex.parentIndex());
895
896 frogSimVtx->addDaughter(frogSimVertex);
897 }
898 }
899
900
901 // ### SIMHIT ###
902
903 FROG_Element_Base_With_DetId* frogSimHit = new FROG_Element_Base_With_DetId(C_FEB_DETID, EVTID_SIMHIT);
904 event->addDaughter(frogSimHit);
905 for(unsigned int i=0;i<SimHitProducers.size();i++){
906 edm::Handle<std::vector< PSimHit > > h_Hits;
907 iEvent.getByLabel(SimHitProducers[i], h_Hits);
908 std::vector< PSimHit > Hits = *h_Hits.product();
909
910 FROG_Element_Base_With_DetId* frogSimHitColl = new FROG_Element_Base_With_DetId(C_FEB_DETID, EVTID_SIMHIT + i + 1);
911 frogSimHit->addDaughter(frogSimHitColl);
912
913 for(unsigned int h=0; h<Hits.size(); h++)
914 {
915 DetId theDetUnitId(Hits[h].detUnitId());
916 const GeomDet* theDet = NULL;
917 if(theDetUnitId.det() == DetId::Tracker)theDet = tkGeom->idToDet(theDetUnitId);
918 if(theDetUnitId.det() == DetId::Muon && theDetUnitId.subdetId() == MuonSubdetId::DT) theDet = DtGeom->idToDet(theDetUnitId);
919 if(theDetUnitId.det() == DetId::Muon && theDetUnitId.subdetId() == MuonSubdetId::CSC)theDet = CscGeom->idToDet(theDetUnitId);
920 if(theDetUnitId.det() == DetId::Muon && theDetUnitId.subdetId() == MuonSubdetId::RPC)theDet = RpcGeom->idToDet(theDetUnitId);
921
922
923 FROG_Element_Event_Sim_Hit* frogSimHit = new FROG_Element_Event_Sim_Hit(
924 theDet->surface().toGlobal(Hits[h].localPosition()).x(),theDet->surface().toGlobal(Hits[h].localPosition()).y(),theDet->surface().toGlobal(Hits[h].localPosition()).z(),
925 Hits[h].energyLoss(), Hits[h].processType() );
926 frogSimHitColl->addDaughter(frogSimHit);
927 }
928 }
929
930 // ### SIMCALOHIT ###
931
932 for(unsigned int i=0;i<SimCaloHitProducers.size();i++){
933 edm::Handle<std::vector< PCaloHit > > h_CaloHits;
934 iEvent.getByLabel(SimCaloHitProducers[i], h_CaloHits);
935 std::vector< PCaloHit > CaloHits = *h_CaloHits.product();
936
937 FROG_Element_Base_With_DetId* frogSimHitColl = new FROG_Element_Base_With_DetId(C_FEB_DETID, EVTID_SIMHIT + SimHitProducers.size() + i + 1);
938 frogSimHit->addDaughter(frogSimHitColl);
939
940 for(unsigned int h=0; h<CaloHits.size(); h++)
941 {
942 DetId theDetUnitId(CaloHits[h].id());
943 const CaloCellGeometry* CellGeom = NULL;
944 if(theDetUnitId.det() == DetId::Ecal || theDetUnitId.det() == DetId::Hcal)CellGeom = CaloGeom->getGeometry(theDetUnitId);
945 if(CellGeom==NULL)continue;
946
947
948 FROG_Element_Event_Sim_Hit* frogSimCaloHit = new FROG_Element_Event_Sim_Hit(
949 CellGeom->getPosition().x(),CellGeom->getPosition().y(),CellGeom->getPosition().z(),
950 CaloHits[h].energy(), CaloHits[h].depth() );
951 frogSimHitColl->addDaughter(frogSimCaloHit);
952 }
953 }
954
955 // NUCLEAR INTERACTIONS
956 for(unsigned int i=0;i<NIProducers.size();i++) {
957 edm::Handle<std::vector<reco::NuclearInteraction> > h_NIs;
958 iEvent.getByLabel(NIProducers[i], h_NIs);
959 std::vector<reco::NuclearInteraction> NIs = *h_NIs.product();
960 FROG_Element_Base_With_DetId* frogNIColl = new FROG_Element_Base_With_DetId(C_FEB_DETID, EVTID_NUCLINT + i);
961 event->addDaughter(frogNIColl);
962
963 for(unsigned int h=0; h<NIs.size();h++){
964 reco::NuclearInteraction ni = NIs[i];
965 float vtx_x = ni.vertex().x();
966 float vtx_y = ni.vertex().y();
967 float vtx_z = ni.vertex().z();
968 float like = ni.likelihood();
969 FROG_Element_Event_NuclInt* frogNI = new FROG_Element_Event_NuclInt(vtx_x, vtx_y, vtx_z, like );
970 frogNIColl->addDaughter(frogNI);
971 }
972 }
973
974
975
976 // ### TRAJECTORY ###
977 FROG_Element_Base_With_DetId* frogTrk = new FROG_Element_Base_With_DetId(C_FEB_DETID, EVTID_TRK);
978 event->addDaughter(frogTrk);
979
980 for(unsigned int i=0;i<TrajectoryProducers.size();i++){
981 Handle<TrajTrackAssociationCollection> trajTrackAssociationHandle;
982 iEvent.getByLabel(TrajectoryProducers[i], trajTrackAssociationHandle);
983 const TrajTrackAssociationCollection TrajToTrackMap = *trajTrackAssociationHandle.product();
984
985 FROG_Element_Base_With_DetId* frogTrkColl = new FROG_Element_Base_With_DetId(C_FEB_DETID, EVTID_TRK + i + 1);
986 frogTrk->addDaughter(frogTrkColl);
987
988 for(TrajTrackAssociationCollection::const_iterator it = TrajToTrackMap.begin(); it!=TrajToTrackMap.end(); ++it) {
989 Trajectory recoTraj = *it->key;
990 FROG_Element_Event_Track* frogTrk = new FROG_Element_Event_Track(i,it->val->p(),it->val->pt(),it->key->chiSquared());
991 frogTrkColl->addDaughter(frogTrk);
992
993 std::vector<TrajectoryMeasurement> measurements = recoTraj.measurements();
994 for(unsigned int h=0;h<measurements.size();h++){
995
996 TrajectoryMeasurement::ConstRecHitPointer h_it = measurements[h].recHit();
997 if(!h_it->isValid() )continue;
998 DetId detId = h_it->geographicalId();
999 GlobalPoint globalPos = measurements[h].updatedState().globalPosition();
1000
1001 FROG_Element_Event_Hit* frogHit = new FROG_Element_Event_Hit(detId.rawId(), globalPos.x(),globalPos.y(), globalPos.z(), -1);
1002 frogTrk->addDaughter(frogHit);
1003 }
1004 printf("Add a Trajectory\n");
1005 }
1006 }
1007
1008 // ### TRACK ###
1009
1010 for(unsigned int i=0;i<TrackProducers.size();i++){
1011 edm::Handle<std::vector< reco::Track > > h_Tracks;
1012 iEvent.getByLabel(TrackProducers[i], h_Tracks);
1013 std::vector< reco::Track > TrackColl = *h_Tracks.product();
1014
1015 FROG_Element_Base_With_DetId* frogTrkColl = new FROG_Element_Base_With_DetId(C_FEB_DETID, EVTID_TRK + TrajectoryProducers.size() + i + 1);
1016 frogTrk->addDaughter(frogTrkColl);
1017
1018 //printf("Size of the TrackCOllection : %i = %i\n",i,TrackColl.size());
1019 for ( unsigned int t = 0; t < TrackColl.size(); ++t ) {
1020 reco::Track recoTrack =TrackColl[t];
1021
1022 FROG_Element_Event_Track* frogTrk = new FROG_Element_Event_Track(TrajectoryProducers.size()+i,recoTrack.p(),recoTrack.pt(), recoTrack.chi2());
1023 frogTrkColl->addDaughter(frogTrk);
1024
1025 for(unsigned int h=0;h<recoTrack.recHitsSize();h++){
1026 TrackingRecHitRef h_it = recoTrack.recHit(h);
1027 if(!h_it->isValid() )continue;
1028 DetId detId = h_it->geographicalId();
1029 const GeomDet * theDet = NULL;
1030
1031 if(detId.det()==DetId::Tracker) theDet = tkGeom->idToDet(detId);
1032 if(detId.det()==DetId::Muon && detId.subdetId() == 1) theDet = DtGeom->idToDet(detId);
1033 if(detId.det()==DetId::Muon && detId.subdetId() == 2) theDet = CscGeom->idToDet(detId);
1034 if(detId.det()==DetId::Muon && detId.subdetId() == 3) theDet = RpcGeom->idToDet(detId);
1035
1036 LocalPoint localPos = h_it->localPosition();
1037
1038 FROG_Element_Event_Hit* frogHit = new FROG_Element_Event_Hit(
1039 detId.rawId(),
1040 theDet->surface().toGlobal(localPos).x(),
1041 theDet->surface().toGlobal(localPos).y(),
1042 theDet->surface().toGlobal(localPos).z(),
1043 -1);
1044 frogTrk->addDaughter(frogHit);
1045 }
1046 printf("Add a Track\n");
1047
1048 }
1049 }
1050
1051
1052 // ### SiStrip Clusters ###
1053 FROG_Element_Base_With_DetId* frogSSTHit = new FROG_Element_Base_With_DetId(C_FEB_DETID, EVTID_SISTRIPHIT);
1054 event->addDaughter(frogSSTHit);
1055 for(unsigned int i=0;i<SiStripClusterProducers.size();i++){
1056 edm::Handle<edmNew::DetSetVector<SiStripCluster> > h_Sst_Hits;
1057 iEvent.getByLabel(SiStripClusterProducers[i], h_Sst_Hits);
1058 const edmNew::DetSetVector<SiStripCluster>& Sst_Hits = *h_Sst_Hits.product();
1059
1060
1061 FROG_Element_Base_With_DetId* frogSstHitColl = new FROG_Element_Base_With_DetId(C_FEB_DETID, EVTID_SISTRIPHIT + i + 1);
1062 frogSSTHit->addDaughter(frogSstHitColl);
1063
1064
1065 for (edmNew::DetSetVector<SiStripCluster>::const_iterator DSViter = Sst_Hits.begin(); DSViter != Sst_Hits.end(); ++DSViter) {
1066 edmNew::DetSet<SiStripCluster>::const_iterator begin=DSViter->begin();
1067 edmNew::DetSet<SiStripCluster>::const_iterator end =DSViter->end();
1068 for(edmNew::DetSet<SiStripCluster>::const_iterator iCluster=begin;iCluster!=end;++iCluster){
1069
1070 const GeomDetUnit* detUnit = tkGeom->idToDetUnit (DetId( iCluster->geographicalId() ) );
1071 if(!detUnit)continue;
1072
1073 const StripGeomDetUnit* DetUnit = dynamic_cast<const StripGeomDetUnit*> ( detUnit );
1074 if(!DetUnit)continue;
1075
1076 const StripTopology& Topo = DetUnit->specificTopology();
1077
1078 unsigned int Charge = 0;
1079 for(unsigned int i=0;i<iCluster->amplitudes().size();i++){Charge+=iCluster->amplitudes()[i];}
1080
1081 unsigned int MiddleStrip = iCluster->firstStrip() + iCluster->amplitudes().size()/2;
1082
1083 float Pitch = DetUnit->surface().bounds().width() / Topo.nstrips();
1084 float XPos = (MiddleStrip * Pitch) - DetUnit->surface().bounds().width()/2;
1085 //float YPos = DetUnit->surface().bounds().thickness()/2;
1086 //float ZPos = DetUnit->surface().bounds().length()/2;
1087
1088 Surface::GlobalPoint Pos = DetUnit->surface().toGlobal( LocalPoint(XPos, 0, 0) );
1089
1090
1091 FROG_Element_Event_Hit_SiStrip* frogStripHit = new FROG_Element_Event_Hit_SiStrip(iCluster->geographicalId(), iCluster->firstStrip(), Pitch);
1092 for(unsigned int i=0;i<iCluster->amplitudes().size();i++){frogStripHit->Ampl_.push_back(iCluster->amplitudes()[i]);}
1093 frogSstHitColl->addDaughter(frogStripHit);
1094 }}
1095
1096 }
1097
1098
1099
1100 // ### CALORecHits ###
1101 FROG_Element_Base_With_DetId* frogCaloHit = new FROG_Element_Base_With_DetId(C_FEB_DETID, EVTID_CALOHIT);
1102 event->addDaughter(frogCaloHit);
1103
1104
1105 // ### ECALRecHits ###
1106 FROG_Element_Base_With_DetId* frogEcalHit = new FROG_Element_Base_With_DetId(C_FEB_DETID, EVTID_ECALHIT);
1107 frogCaloHit->addDaughter(frogEcalHit);
1108 for(unsigned int i=0;i<EcalRecHitProducers.size();i++){
1109 edm::Handle<EcalRecHitCollection > h_Ecal_RecHits;
1110 iEvent.getByLabel(EcalRecHitProducers[i], h_Ecal_RecHits);
1111 EcalRecHitCollection Ecal_RecHits = *h_Ecal_RecHits.product();
1112
1113 FROG_Element_Base_With_DetId* frogHitColl = new FROG_Element_Base_With_DetId(C_FEB_DETID, EVTID_ECALHIT + i + 1);
1114 frogEcalHit->addDaughter(frogHitColl);
1115
1116 for(unsigned int eh=0;eh<Ecal_RecHits.size();eh++){
1117 FROG_Element_Event_CaloHit* frogCaloHit = new FROG_Element_Event_CaloHit((Ecal_RecHits[eh].detid()).rawId(),
1118 Ecal_RecHits[eh].energy(), Ecal_RecHits[eh].time());
1119 frogHitColl->addDaughter(frogCaloHit);
1120 }
1121 }
1122
1123
1124 // ### HCALRecHits ###
1125 FROG_Element_Base_With_DetId* frogHcalHit = new FROG_Element_Base_With_DetId(C_FEB_DETID, EVTID_HCALHIT);
1126 frogCaloHit->addDaughter(frogHcalHit);
1127 for(unsigned int i=0;i<HcalHBHERecHitProducers.size();i++){
1128 edm::Handle<HBHERecHitCollection > h_HcalHBHE_RecHits;
1129 iEvent.getByLabel(HcalHBHERecHitProducers[i], h_HcalHBHE_RecHits);
1130 HBHERecHitCollection HcalHBHE_RecHits = *h_HcalHBHE_RecHits.product();
1131
1132 FROG_Element_Base_With_DetId* frogHitColl = new FROG_Element_Base_With_DetId(C_FEB_DETID, EVTID_HCALHIT + i + 1);
1133 frogHcalHit->addDaughter(frogHitColl);
1134
1135 for(unsigned int hh=0;hh<HcalHBHE_RecHits.size();hh++){
1136 FROG_Element_Event_CaloHit* frogCaloHit = new FROG_Element_Event_CaloHit((HcalHBHE_RecHits[hh].detid()).rawId(),
1137 HcalHBHE_RecHits[hh].energy(), HcalHBHE_RecHits[hh].time());
1138 frogHitColl->addDaughter(frogCaloHit);
1139 }
1140 }
1141
1142 for(unsigned int i=0;i<HcalHORecHitProducers.size();i++){
1143 edm::Handle<HORecHitCollection > h_HcalHO_RecHits;
1144 iEvent.getByLabel(HcalHORecHitProducers[i], h_HcalHO_RecHits);
1145 HORecHitCollection HcalHO_RecHits = *h_HcalHO_RecHits.product();
1146
1147 FROG_Element_Base_With_DetId* frogHitColl = new FROG_Element_Base_With_DetId(C_FEB_DETID, EVTID_HCALHIT + HcalHBHERecHitProducers.size() + i + 1);
1148 frogHcalHit->addDaughter(frogHitColl);
1149
1150 for(unsigned int hh=0;hh<HcalHO_RecHits.size();hh++){
1151 FROG_Element_Event_CaloHit* frogCaloHit = new FROG_Element_Event_CaloHit((HcalHO_RecHits[hh].detid()).rawId(),
1152 HcalHO_RecHits[hh].energy(), HcalHO_RecHits[hh].time());
1153 frogHitColl->addDaughter(frogCaloHit);
1154 }
1155 }
1156
1157 for(unsigned int i=0;i<HcalHFRecHitProducers.size();i++){
1158 edm::Handle<HFRecHitCollection > h_HcalHF_RecHits;
1159 iEvent.getByLabel(HcalHFRecHitProducers[i], h_HcalHF_RecHits);
1160 HFRecHitCollection HcalHF_RecHits = *h_HcalHF_RecHits.product();
1161
1162 FROG_Element_Base_With_DetId* frogHitColl = new FROG_Element_Base_With_DetId(C_FEB_DETID, EVTID_HCALHIT + HcalHBHERecHitProducers.size() + HcalHORecHitProducers.size() + i + 1);
1163 frogHcalHit->addDaughter(frogHitColl);
1164
1165 for(unsigned int hh=0;hh<HcalHF_RecHits.size();hh++){
1166 FROG_Element_Event_CaloHit* frogCaloHit = new FROG_Element_Event_CaloHit((HcalHF_RecHits[hh].detid()).rawId(),
1167 HcalHF_RecHits[hh].energy(), HcalHF_RecHits[hh].time());
1168 frogHitColl->addDaughter(frogCaloHit);
1169 }
1170 }
1171
1172
1173 // ### Muon Segments ###
1174 FROG_Element_Base_With_DetId* frogMuonSeg = new FROG_Element_Base_With_DetId(C_FEB_DETID, EVTID_MUONSEG);
1175 event->addDaughter(frogMuonSeg);
1176
1177 for(unsigned int i=0;i<CSCSegmentProducers.size();i++){
1178 edm::Handle<CSCSegmentCollection > h_CSC_Segments;
1179 iEvent.getByLabel(CSCSegmentProducers[i], h_CSC_Segments);
1180 CSCSegmentCollection CSC_Segments = *h_CSC_Segments.product();
1181
1182 FROG_Element_Base_With_DetId* frogSegColl = new FROG_Element_Base_With_DetId(C_FEB_DETID, EVTID_MUONSEG + i + 1);
1183 frogMuonSeg->addDaughter(frogSegColl);
1184
1185 for(unsigned int s=0;s<CSC_Segments.size();s++){
1186 DetId theDetUnitId = CSC_Segments[s].geographicalId();
1187 const GeomDet* theDet = CscGeom->idToDet(theDetUnitId);
1188
1189 FROG_Element_Event_Segment* frogSeg = new FROG_Element_Event_Segment(theDetUnitId.rawId(),
1190 theDet->surface().toGlobal(CSC_Segments[s].localPosition()).x() , theDet->surface().toGlobal(CSC_Segments[s].localPosition()).y() , theDet->surface().toGlobal(CSC_Segments[s].localPosition()).z() ,
1191 theDet->surface().toGlobal(CSC_Segments[s].localDirection()).x(), theDet->surface().toGlobal(CSC_Segments[s].localDirection()).y(), theDet->surface().toGlobal(CSC_Segments[s].localDirection()).z() );
1192 frogSegColl->addDaughter(frogSeg);
1193 }
1194 }
1195
1196 for(unsigned int i=0;i<DTSegmentProducers.size();i++){
1197 edm::Handle<DTRecSegment4DCollection > h_DT_Segments;
1198 iEvent.getByLabel(DTSegmentProducers[i], h_DT_Segments);
1199 DTRecSegment4DCollection DT_Segments = *h_DT_Segments.product();
1200
1201 FROG_Element_Base_With_DetId* frogSegColl = new FROG_Element_Base_With_DetId(C_FEB_DETID, EVTID_MUONSEG + CSCSegmentProducers.size() + i + 1);
1202 frogMuonSeg->addDaughter(frogSegColl);
1203
1204 for(unsigned int s=0;s<DT_Segments.size();s++){
1205 DetId theDetUnitId = DT_Segments[s].geographicalId();
1206 const GeomDet* theDet = DtGeom->idToDet(theDetUnitId);
1207
1208 FROG_Element_Event_Segment* frogSeg = new FROG_Element_Event_Segment(theDetUnitId.rawId(),
1209 theDet->surface().toGlobal(DT_Segments[s].localPosition()).x() , theDet->surface().toGlobal(DT_Segments[s].localPosition()).y() , theDet->surface().toGlobal(DT_Segments[s].localPosition()).z() ,
1210 theDet->surface().toGlobal(DT_Segments[s].localDirection()).x(), theDet->surface().toGlobal(DT_Segments[s].localDirection()).y(), theDet->surface().toGlobal(DT_Segments[s].localDirection()).z() );
1211 frogSegColl->addDaughter(frogSeg);
1212 }
1213 }
1214
1215 // ### Muon Hits ###
1216 FROG_Element_Base_With_DetId* frogMuonHit = new FROG_Element_Base_With_DetId(C_FEB_DETID, EVTID_MUONHIT);
1217 event->addDaughter(frogMuonHit);
1218 for(unsigned int i=0;i<RPCHitsProducers.size();i++){
1219 edm::Handle<RPCRecHitCollection > h_RPC_Hits;
1220 iEvent.getByLabel(RPCHitsProducers[i], h_RPC_Hits);
1221 RPCRecHitCollection RPC_Hits = *h_RPC_Hits.product();
1222
1223 FROG_Element_Base_With_DetId* frogHitColl = new FROG_Element_Base_With_DetId(C_FEB_DETID, EVTID_MUONHIT + i + 1);
1224 frogMuonHit->addDaughter(frogHitColl);
1225
1226 for(unsigned int h=0;h<RPC_Hits.size();h++){
1227 DetId theDetUnitId = RPC_Hits[h].geographicalId();
1228 const GeomDet* theDet = RpcGeom->idToDet(theDetUnitId);
1229
1230 FROG_Element_Event_Hit* frogHit = new FROG_Element_Event_Hit(theDetUnitId.rawId(),
1231 theDet->surface().toGlobal(RPC_Hits[h].localPosition()).x() , theDet->surface().toGlobal(RPC_Hits[h].localPosition()).y() , theDet->surface().toGlobal(RPC_Hits[h].localPosition()).z(), -1 );
1232 frogHitColl->addDaughter(frogHit);
1233 }
1234 }
1235
1236
1237 // ### Calo Towers ###
1238 FROG_Element_Base_With_DetId* frogCaloTower = new FROG_Element_Base_With_DetId(C_FEB_DETID, EVTID_CALOTOWER);
1239 event->addDaughter(frogCaloTower);
1240 for(unsigned int i=0;i<CaloTowersProducers.size();i++){
1241 edm::Handle<CaloTowerCollection> h_Calo_Towers;
1242 iEvent.getByLabel(CaloTowersProducers[i], h_Calo_Towers);
1243 CaloTowerCollection Calo_Towers = *h_Calo_Towers.product();
1244
1245 FROG_Element_Base_With_DetId* frogCaloTowerColl = new FROG_Element_Base_With_DetId(C_FEB_DETID, EVTID_CALOTOWER + i + 1);
1246 frogCaloTower->addDaughter(frogCaloTowerColl);
1247
1248 for(unsigned int h=0;h<Calo_Towers.size();h++){
1249 FROG_Element_Event_CaloTower* frogTower = new FROG_Element_Event_CaloTower(Calo_Towers[h].id().rawId(), Calo_Towers[h].emEnergy(),Calo_Towers[h].hadEnergy());
1250 frogCaloTowerColl->addDaughter(frogTower);
1251
1252 if(i==0 && CaloTowersProducersBasedOnCaloHits){
1253 frogTower->Components_CollEvtId_ = EVTID_CALOHIT;
1254 std::vector<DetId> TowersDetIds = Calo_Towers[h].constituents();
1255 for(unsigned int D=0;D<TowersDetIds.size();D++){frogTower->Components_Vector_.push_back(TowersDetIds[D]);}
1256 }
1257
1258 }
1259 }
1260
1261 FROG_Element_Base_With_DetId* frogJet = new FROG_Element_Base_With_DetId(C_FEB_DETID, EVTID_JET);
1262 event->addDaughter(frogJet);
1263
1264
1265 // ### Basic Jets ###
1266 FROG_Element_Base_With_DetId* frogBasicJet = new FROG_Element_Base_With_DetId(C_FEB_DETID, EVTID_JET_BASIC);
1267 frogJet->addDaughter(frogBasicJet);
1268 for(unsigned int i=0;i<BasicJetsProducers.size();i++){
1269 edm::Handle<BasicJetCollection> h_Basic_Jets;
1270 iEvent.getByLabel(BasicJetsProducers[i], h_Basic_Jets);
1271 BasicJetCollection Basic_Jets = *h_Basic_Jets.product();
1272
1273 FROG_Element_Base_With_DetId* frogBasicJetColl = new FROG_Element_Base_With_DetId(C_FEB_DETID, EVTID_JET_BASIC + i + 1);
1274 frogBasicJet->addDaughter(frogBasicJetColl);
1275
1276 for(unsigned int h=0;h<Basic_Jets.size();h++){
1277 FROG_Element_Event_Jet* frogJet = new FROG_Element_Event_Jet(Basic_Jets[h].p(), Basic_Jets[h].eta(),Basic_Jets[h].phi());
1278 frogBasicJet->addDaughter(frogJet);
1279 }
1280 }
1281
1282
1283 // ### Calo Jets ###
1284 FROG_Element_Base_With_DetId* frogCaloJet = new FROG_Element_Base_With_DetId(C_FEB_DETID, EVTID_JET_CALO);
1285 frogJet->addDaughter(frogCaloJet);
1286 for(unsigned int i=0;i<CaloJetsProducers.size();i++){
1287 edm::Handle<CaloJetCollection> h_Calo_Jets;
1288 iEvent.getByLabel(CaloJetsProducers[i], h_Calo_Jets);
1289 CaloJetCollection Calo_Jets = *h_Calo_Jets.product();
1290
1291 FROG_Element_Base_With_DetId* frogCaloJetColl = new FROG_Element_Base_With_DetId(C_FEB_DETID, EVTID_JET_CALO + i + 1);
1292 frogCaloJet->addDaughter(frogCaloJetColl);
1293
1294 for(unsigned int h=0;h<Calo_Jets.size();h++){
1295 FROG_Element_Event_Jet* frogJet = new FROG_Element_Event_Jet(Calo_Jets[h].p(), Calo_Jets[h].eta(),Calo_Jets[h].phi());
1296 frogCaloJetColl->addDaughter(frogJet);
1297
1298 if(CaloJetsProducersBasedOnCaloTowers){
1299 std::vector<CaloTowerPtr> CaloTowers = Calo_Jets[h].getCaloConstituents();
1300 frogJet->Components_CollEvtId_ = EVTID_CALOTOWER + 1;
1301 for(unsigned int t=0;t<CaloTowers.size();t++){ frogJet->Components_Vector_.push_back(CaloTowers[t]->id().rawId());}
1302 }
1303 }
1304 }
1305
1306 // ### RecoCandidates ###
1307 FROG_Element_Base_With_DetId* frogRecoCand = new FROG_Element_Base_With_DetId(C_FEB_DETID, EVTID_RECOCAND);
1308 event->addDaughter(frogRecoCand);
1309 for(unsigned int i=0;i<RecoCandidateProducers.size();i++){
1310 edm::Handle<CandidateCollection> h_reco_Candidates;
1311 iEvent.getByLabel(RecoCandidateProducers[i], h_reco_Candidates);
1312 CandidateCollection reco_Candidates = *h_reco_Candidates.product();
1313
1314 FROG_Element_Base_With_DetId* frogRecoCandColl = new FROG_Element_Base_With_DetId(C_FEB_DETID, EVTID_RECOCAND + i + 1);
1315 frogRecoCand->addDaughter(frogRecoCandColl);
1316
1317 for(unsigned int h=0;h<reco_Candidates.size();h++){
1318 FROG_Element_Event_Candidate* frogCandidate = new FROG_Element_Event_Candidate(reco_Candidates[h].pdgId(), reco_Candidates[h].p(), reco_Candidates[h].eta(),reco_Candidates[h].phi());
1319 frogRecoCandColl->addDaughter(frogCandidate);
1320 }
1321 }
1322
1323 // ### MET ###
1324 FROG_Element_Base_With_DetId* frogMET = new FROG_Element_Base_With_DetId(C_FEB_DETID, EVTID_MET_CALO);
1325 event->addDaughter(frogMET);
1326 for(unsigned int i=0;i<CaloMETProducers.size();i++){
1327 edm::Handle<CaloMETCollection> h_met;
1328 iEvent.getByLabel(CaloMETProducers[i], h_met);
1329 CaloMETCollection reco_met = *h_met.product();
1330
1331 FROG_Element_Base_With_DetId* frogMETColl = new FROG_Element_Base_With_DetId(C_FEB_DETID, EVTID_MET_CALO + i + 1);
1332 frogMET->addDaughter(frogMETColl);
1333
1334 for(unsigned int h=0;h<reco_met.size();h++){
1335 FROG_Element_Event_MET* frogMETevt = new FROG_Element_Event_MET(i, reco_met[h].p(), reco_met[h].eta(),reco_met[h].phi(), reco_met[h].sumEt());
1336 frogMET->addDaughter(frogMETevt);
1337 }
1338 }
1339
1340
1341
1342
1343 NEvents++;
1344 if(NEvents == NEventsInVisFile){
1345 char OutputFileName[1024];
1346 sprintf(OutputFileName,"%s",OutputFile.substr(0,OutputFile.size()-4).c_str());
1347 if(NEventsInVisFile>=0)sprintf(OutputFileName,"%s_R%i_E%i.vis",OutputFileName,SRun,SEvent);
1348 sprintf(OutputFileName,"%s.vis",OutputFileName);
1349
1350 FROG_Events* events = new FROG_Events(events_prim);
1351 events->Save((char*) OutputFileName);
1352 delete events;
1353 delete events_prim;
1354
1355 events_prim = new FROG_Element_Base(C_PRIMARY);
1356 NEvents=0;
1357 }
1358
1359 }
1360
1361
1362 //define this as a plug-in
1363 DEFINE_FWK_MODULE(Frog_Analyzer);
1364
1365