ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/FastOpenGlDisplayer/src/Frog_Analyzer.cc
Revision: 1.25
Committed: Sun Jul 13 16:38:03 2008 UTC (16 years, 9 months ago) by querten
Content type: text/plain
Branch: MAIN
CVS Tags: Version_1_06, Version_1_05, Version_1_04, Version_1_03
Changes since 1.24: +84 -31 lines
Log Message:
Recover PSimHits & PCaloHits

File Contents

# User Rev Content
1 querten 1.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 querten 1.25 // $Id: Frog_Analyzer.cc,v 1.24 2008/07/11 14:52:50 roberfro 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 "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/CaloGeometry/interface/CaloCellGeometry.h"
55     #include "DataFormats/EcalDetId/interface/EcalSubdetector.h"
56    
57     #include "Geometry/CommonDetUnit/interface/TrackingGeometry.h"
58     #include "Geometry/Records/interface/MuonGeometryRecord.h"
59     #include "Geometry/DTGeometry/interface/DTGeometry.h"
60     #include "Geometry/CSCGeometry/interface/CSCGeometry.h"
61     #include "Geometry/RPCGeometry/interface/RPCGeometry.h"
62    
63    
64     #include "DataFormats/CaloRecHit/interface/CaloRecHit.h"
65     #include "DataFormats/EcalRecHit/interface/EcalRecHitCollections.h"
66     #include "DataFormats/HcalRecHit/interface/HcalRecHitCollections.h"
67    
68     #include "SimDataFormats/TrackingHit/interface/PSimHitContainer.h"
69     #include "SimDataFormats/TrackingHit/interface/PSimHit.h"
70     #include "SimDataFormats/CrossingFrame/interface/CrossingFrame.h"
71     #include "SimDataFormats/CrossingFrame/interface/MixCollection.h"
72     #include "SimDataFormats/CaloHit/interface/PCaloHit.h"
73     #include "SimDataFormats/Track/interface/SimTrack.h"
74     #include "SimDataFormats/Vertex/interface/SimVertex.h"
75    
76     #include "DataFormats/Provenance/interface/BranchDescription.h"
77     #include "DataFormats/Provenance/interface/Provenance.h"
78     #include "DataFormats/Candidate/interface/Candidate.h"
79     #include "DataFormats/HepMCCandidate/interface/GenParticleCandidate.h"
80     #include "DataFormats/RecoCandidate/interface/RecoChargedCandidate.h"
81     #include "DataFormats/TrackReco/interface/Track.h"
82 roberfro 1.5 #include "TrackingTools/PatternTools/interface/Trajectory.h"
83 querten 1.6 #include "TrackingTools/PatternTools/interface/TrajTrackAssociation.h"
84    
85 querten 1.1
86 querten 1.2 #include "DataFormats/DTRecHit/interface/DTRecSegment4DCollection.h"
87     #include "DataFormats/CSCRecHit/interface/CSCSegmentCollection.h"
88    
89     #include "DataFormats/DTRecHit/interface/DTRecHitCollection.h"
90     #include "DataFormats/CSCRecHit/interface/CSCRecHit2DCollection.h"
91     #include "DataFormats/RPCRecHit/interface/RPCRecHitCollection.h"
92    
93 querten 1.1 #include "DataFormats/Math/interface/Point3D.h"
94     #include "DataFormats/GeometrySurface/interface/TrapezoidalPlaneBounds.h"
95     #include "DataFormats/GeometrySurface/interface/RectangularPlaneBounds.h"
96    
97 querten 1.11 #include "DataFormats/SiPixelDetId/interface/PixelSubdetector.h"
98     #include "DataFormats/SiStripDetId/interface/StripSubdetector.h"
99     #include "DataFormats/SiPixelDetId/interface/PXBDetId.h"
100     #include "DataFormats/SiPixelDetId/interface/PXFDetId.h"
101     #include "DataFormats/SiStripDetId/interface/TIBDetId.h"
102     #include "DataFormats/SiStripDetId/interface/TIDDetId.h"
103     #include "DataFormats/SiStripDetId/interface/TOBDetId.h"
104     #include "DataFormats/SiStripDetId/interface/TECDetId.h"
105    
106     #include "DataFormats/MuonDetId/interface/DTChamberId.h"
107     #include "DataFormats/MuonDetId/interface/CSCDetId.h"
108     #include "DataFormats/MuonDetId/interface/RPCDetId.h"
109    
110     #include "DataFormats/EcalDetId/interface/EBDetId.h"
111     #include "DataFormats/EcalDetId/interface/EEDetId.h"
112     #include "DataFormats/EcalDetId/interface/ESDetId.h"
113     #include "DataFormats/HcalDetId/interface/HcalDetId.h"
114    
115     #include "Visualisation/Frog/soft/Includes/FROG/FROG_Element_Base_With_DetId.h"
116     #include "Visualisation/Frog/soft/Includes/FROG/FROG_Element_Tools.h"
117     #include "Visualisation/Frog/soft/Includes/FROG/FROG_Element_Tools.cpp"
118 roberfro 1.13 #include "Visualisation/Frog/soft/Includes/FROG/FROG_Element_Event_Track.h"
119    
120     #include "Visualisation/Frog/soft/Includes/FROG/FROG_Events.h"
121     #include "Visualisation/Frog/soft/Includes/FROG/FROG_Events.cpp"
122    
123     #include "Visualisation/Frog/soft/Includes/FROG/FROG_Geometry.h"
124     #include "Visualisation/Frog/soft/Includes/FROG/FROG_Geometry.cpp"
125 querten 1.11
126 roberfro 1.13 #include "Visualisation/Frog/soft/Includes/FROG/FROG_DetId.h"
127 querten 1.18 #include "Visualisation/Frog/soft/Includes/FROG/FROG_ReadCards.cpp"
128 querten 1.1
129 roberfro 1.24 #include "DataFormats/VertexReco/interface/NuclearInteraction.h"
130    
131     #include "Visualisation/Frog/soft/Includes/FROG/FROG_Element_Event_NuclInt.h"
132    
133 querten 1.11
134 querten 1.1 using namespace edm;
135     using namespace std;
136    
137     //
138     // class decleration
139     //
140    
141     class Frog_Analyzer : public edm::EDAnalyzer {
142     public:
143     explicit Frog_Analyzer(const edm::ParameterSet&);
144     ~Frog_Analyzer();
145    
146    
147     private:
148     virtual void beginJob(const edm::EventSetup& iSetup);
149     virtual void analyze (const edm::Event&, const edm::EventSetup&);
150     virtual void endJob ();
151    
152 querten 1.15 FROG_Element_Base* events_prim;
153 querten 1.1
154 querten 1.11 std::string OutputFile;
155 querten 1.1
156     std::vector<InputTag> SimTrackProducers;
157     std::vector<InputTag> SimVertexProducers;
158     std::vector<InputTag> SimHitProducers;
159 querten 1.25 std::vector<InputTag> SimCaloHitProducers;
160    
161 roberfro 1.24 std::vector<InputTag> NIProducers;
162 querten 1.1
163 querten 1.9 std::vector<InputTag> TrackProducers;
164 roberfro 1.5 std::vector<InputTag> TrajectoryProducers;
165 querten 1.1 std::vector<InputTag> EcalRecHitProducers;
166     std::vector<InputTag> HcalHBHERecHitProducers;
167     std::vector<InputTag> HcalHORecHitProducers;
168     std::vector<InputTag> HcalHFRecHitProducers;
169 querten 1.2 std::vector<InputTag> DTSegmentProducers;
170     std::vector<InputTag> CSCSegmentProducers;
171    
172     std::vector<InputTag> RPCHitsProducers;
173 querten 1.1
174 querten 1.22 // ----------member data ---------------------------
175    
176     bool ProduceGeom;
177     int NEventsInVisFile;
178     int NEvents;
179 querten 1.1
180 querten 1.22 unsigned int SRun;
181     unsigned int SEvent;
182 querten 1.1 };
183    
184     //
185     // constructors and destructor
186     //
187     Frog_Analyzer::Frog_Analyzer(const edm::ParameterSet& iConfig)
188     {
189     OutputFile = iConfig.getParameter<std::string >("OutputFile");
190    
191     SimTrackProducers = iConfig.getParameter<std::vector<InputTag> >("SimTrackProducers");
192     SimVertexProducers = iConfig.getParameter<std::vector<InputTag> >("SimVertexProducers");
193     SimHitProducers = iConfig.getParameter<std::vector<InputTag> >("SimHitProducers");
194 querten 1.25 SimCaloHitProducers = iConfig.getParameter<std::vector<InputTag> >("SimCaloHitProducers");
195    
196 querten 1.1
197 querten 1.10 TrackProducers = iConfig.getParameter<std::vector<InputTag> >("TrackProducers");
198 querten 1.9 TrajectoryProducers = iConfig.getParameter<std::vector<InputTag> >("TrajectoryProducers");
199 querten 1.1 EcalRecHitProducers = iConfig.getParameter<std::vector<InputTag> >("EcalRecHitProducers");
200     HcalHBHERecHitProducers = iConfig.getParameter<std::vector<InputTag> >("HcalHBHERecHitProducers");
201     HcalHORecHitProducers = iConfig.getParameter<std::vector<InputTag> >("HcalHORecHitProducers");
202     HcalHFRecHitProducers = iConfig.getParameter<std::vector<InputTag> >("HcalHFRecHitProducers");
203    
204 roberfro 1.24 NIProducers = iConfig.getParameter<std::vector<InputTag> >("NIProducers");
205    
206 querten 1.2 DTSegmentProducers = iConfig.getParameter<std::vector<InputTag> >("DTSegmentProducers");
207     CSCSegmentProducers = iConfig.getParameter<std::vector<InputTag> >("CSCSegmentProducers");
208    
209     RPCHitsProducers = iConfig.getParameter<std::vector<InputTag> >("RPCHitsProducers");
210    
211 querten 1.22 ProduceGeom = iConfig.getParameter<bool >("ProduceGeom" );
212     NEventsInVisFile = iConfig.getParameter<int >("NEventsInVisFile" );
213    
214     NEvents = 0;
215 querten 1.1 }
216    
217    
218     Frog_Analyzer::~Frog_Analyzer()
219     {
220     }
221    
222     // ------------ method called once each job just before starting event loop ------------
223     void
224     Frog_Analyzer::beginJob(const edm::EventSetup& iSetup)
225     {
226 querten 1.22 if(ProduceGeom){
227     DetId Detid;
228     unsigned int SubDet;
229    
230     unsigned int Frog_DetId;
231     FROG_Element_Base* FEB = NULL;
232     FROG_Element_Base_With_DetId* FEB_Temp = NULL;
233    
234     FROG_Element_Base* prim = new FROG_Element_Base(C_PRIMARY);
235     FROG_Element_Base* geom = new FROG_Element_Base(C_GEOMETRY); prim->addDaughter(geom);
236     FROG_Element_Base_With_DetId* tracker = new FROG_Element_Base_With_DetId(C_FEB_DETID, DETID_TRK); geom->addDaughter(tracker);
237     FROG_Element_Base_With_DetId* muon = new FROG_Element_Base_With_DetId(C_FEB_DETID, DETID_MUON); geom->addDaughter(muon);
238     FROG_Element_Base_With_DetId* ecal = new FROG_Element_Base_With_DetId(C_FEB_DETID, DETID_ECAL); geom->addDaughter(ecal);
239     FROG_Element_Base_With_DetId* hcal = new FROG_Element_Base_With_DetId(C_FEB_DETID, DETID_HCAL); geom->addDaughter(hcal);
240    
241    
242     // ### TRACKER GEOMETRY ###
243    
244     edm::ESHandle<TrackerGeometry> tkGeom;
245     iSetup.get<TrackerDigiGeometryRecord>().get( tkGeom );
246     vector<GeomDet*> TrackerDets = tkGeom->dets();
247    
248     for(unsigned int i=0;i<TrackerDets.size();i++){
249     Detid = TrackerDets[i]->geographicalId();
250     SubDet = Detid.subdetId();
251     if(SubDet<1 || SubDet>6) continue;
252 querten 1.11
253 querten 1.1
254 querten 1.22 GeomDet* DetUnit = TrackerDets[i];
255     if(!DetUnit)continue;
256     const BoundPlane plane = DetUnit->surface();
257     const TrapezoidalPlaneBounds* trapezoidalBounds( dynamic_cast<const TrapezoidalPlaneBounds*>(&(plane.bounds())));
258     const RectangularPlaneBounds* rectangularBounds( dynamic_cast<const RectangularPlaneBounds*>(&(plane.bounds())));
259    
260     float width = 0;
261     float length = 0;
262     float thickness = 0;
263     float TrapezoidalParam = 0;
264    
265     if(trapezoidalBounds){
266     std::vector<float> const & parameters = (*trapezoidalBounds).parameters();
267     width = parameters[0]*2;
268     length = parameters[3]*2;
269     thickness = (*trapezoidalBounds).thickness();
270     TrapezoidalParam = parameters[1]/parameters[0];
271     }else if(rectangularBounds){
272     width = DetUnit->surface().bounds().width();
273     length = DetUnit->surface().bounds().length();
274     thickness = DetUnit->surface().bounds().thickness();
275     TrapezoidalParam = 1;
276     }
277 querten 1.1
278 querten 1.22 Surface::GlobalPoint WidthVector = plane.toGlobal( LocalPoint(width/2, 0, 0) );
279     Surface::GlobalPoint LengthVector = plane.toGlobal( LocalPoint(0, length/2, 0) );
280     Surface::GlobalPoint ThickVector = plane.toGlobal( LocalPoint(0, 0, thickness/2) );
281    
282     GlobalVector Pos = GlobalVector(DetUnit->position().basicVector());
283    
284     FROG_Element_Geom_TrackerMod* mod = new FROG_Element_Geom_TrackerMod(
285     Detid.rawId(), TrapezoidalParam,
286     Pos.x(), Pos.y(), Pos.z(),
287     WidthVector.x() -Pos.x(), WidthVector.y() -Pos.y(), WidthVector.z() -Pos.z(),
288     LengthVector.x()-Pos.x(), LengthVector.y()-Pos.y(), LengthVector.z()-Pos.z(),
289     ThickVector.x() -Pos.x(), ThickVector.y() -Pos.y(), ThickVector.z() -Pos.z());
290 querten 1.1
291    
292 querten 1.22 Frog_DetId = DETID_TRK;
293     FEB = tracker;
294 querten 1.11
295 querten 1.22 Frog_DetId += SubDet*100000;
296 querten 1.11 FEB_Temp = dynamic_cast<FROG_Element_Base_With_DetId*>(FEB);
297     FEB = FEB_Temp->getDaughterWithDetId(Frog_DetId);
298     if(FEB==NULL){FEB = new FROG_Element_Base_With_DetId(C_FEB_DETID, Frog_DetId); FEB_Temp->addDaughter(FEB);}
299    
300 querten 1.22 if(SubDet==PixelSubdetector::PixelBarrel){
301     PXBDetId detid = PXBDetId(Detid);
302 querten 1.11
303 querten 1.22 Frog_DetId += detid.layer()*10000;
304     FEB_Temp = dynamic_cast<FROG_Element_Base_With_DetId*>(FEB);
305     FEB = FEB_Temp->getDaughterWithDetId(Frog_DetId);
306     if(FEB==NULL){FEB = new FROG_Element_Base_With_DetId(C_FEB_DETID, Frog_DetId); FEB_Temp->addDaughter(FEB);}
307 querten 1.11
308 querten 1.22 Frog_DetId += detid.ladder()*100;
309     FEB_Temp = dynamic_cast<FROG_Element_Base_With_DetId*>(FEB);
310     FEB = FEB_Temp->getDaughterWithDetId(Frog_DetId);
311     if(FEB==NULL){FEB = new FROG_Element_Base_With_DetId(C_FEB_DETID, Frog_DetId); FEB_Temp->addDaughter(FEB);}
312     }else if(SubDet==PixelSubdetector::PixelEndcap){
313     PXFDetId detid = PXFDetId(Detid);
314 querten 1.11
315 querten 1.22 Frog_DetId += detid.side()*10000;
316     FEB_Temp = dynamic_cast<FROG_Element_Base_With_DetId*>(FEB);
317     FEB = FEB_Temp->getDaughterWithDetId(Frog_DetId);
318     if(FEB==NULL){FEB = new FROG_Element_Base_With_DetId(C_FEB_DETID, Frog_DetId); FEB_Temp->addDaughter(FEB);}
319 querten 1.11
320 querten 1.22 Frog_DetId += detid.disk()*1000;
321     FEB_Temp = dynamic_cast<FROG_Element_Base_With_DetId*>(FEB);
322     FEB = FEB_Temp->getDaughterWithDetId(Frog_DetId);
323     if(FEB==NULL){FEB = new FROG_Element_Base_With_DetId(C_FEB_DETID, Frog_DetId); FEB_Temp->addDaughter(FEB);}
324 querten 1.11
325 querten 1.22 Frog_DetId += detid.blade()*10;
326     FEB_Temp = dynamic_cast<FROG_Element_Base_With_DetId*>(FEB);
327     FEB = FEB_Temp->getDaughterWithDetId(Frog_DetId);
328     if(FEB==NULL){FEB = new FROG_Element_Base_With_DetId(C_FEB_DETID, Frog_DetId); FEB_Temp->addDaughter(FEB);}
329 querten 1.11
330 querten 1.22 Frog_DetId += detid.panel()*1;
331     FEB_Temp = dynamic_cast<FROG_Element_Base_With_DetId*>(FEB);
332     FEB = FEB_Temp->getDaughterWithDetId(Frog_DetId);
333     if(FEB==NULL){FEB = new FROG_Element_Base_With_DetId(C_FEB_DETID, Frog_DetId); FEB_Temp->addDaughter(FEB);}
334     }else if(SubDet==StripSubdetector::TIB){
335     TIBDetId detid = TIBDetId(Detid);
336 querten 1.11
337 querten 1.22 Frog_DetId += detid.layer()*10000;
338     FEB_Temp = dynamic_cast<FROG_Element_Base_With_DetId*>(FEB);
339     FEB = FEB_Temp->getDaughterWithDetId(Frog_DetId);
340     if(FEB==NULL){FEB = new FROG_Element_Base_With_DetId(C_FEB_DETID, Frog_DetId); FEB_Temp->addDaughter(FEB);}
341 querten 1.11
342 querten 1.22 Frog_DetId += detid.stringNumber()*100;
343     FEB_Temp = dynamic_cast<FROG_Element_Base_With_DetId*>(FEB);
344     FEB = FEB_Temp->getDaughterWithDetId(Frog_DetId);
345     if(FEB==NULL){FEB = new FROG_Element_Base_With_DetId(C_FEB_DETID, Frog_DetId); FEB_Temp->addDaughter(FEB);}
346     }else if(SubDet==StripSubdetector::TID){
347     TIDDetId detid = TIDDetId(Detid);
348 querten 1.11
349 querten 1.22 Frog_DetId += detid.side()*10000;
350     FEB_Temp = dynamic_cast<FROG_Element_Base_With_DetId*>(FEB);
351     FEB = FEB_Temp->getDaughterWithDetId(Frog_DetId);
352     if(FEB==NULL){FEB = new FROG_Element_Base_With_DetId(C_FEB_DETID, Frog_DetId); FEB_Temp->addDaughter(FEB);}
353 querten 1.11
354 querten 1.22 Frog_DetId += detid.wheel()*1000;
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.ring()*10;
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==StripSubdetector::TOB){
364     TOBDetId detid = TOBDetId(Detid);
365 querten 1.11
366 querten 1.22 Frog_DetId += detid.layer()*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 querten 1.11
371 querten 1.22 Frog_DetId += detid.rodNumber()*100;
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     }else if(SubDet==StripSubdetector::TEC){
376     TECDetId detid = TECDetId(Detid);
377 querten 1.11
378 querten 1.22 Frog_DetId += detid.side()*10000;
379     FEB_Temp = dynamic_cast<FROG_Element_Base_With_DetId*>(FEB);
380     FEB = FEB_Temp->getDaughterWithDetId(Frog_DetId);
381     if(FEB==NULL){FEB = new FROG_Element_Base_With_DetId(C_FEB_DETID, Frog_DetId); FEB_Temp->addDaughter(FEB);}
382 querten 1.11
383 querten 1.22 Frog_DetId += detid.wheel()*1000;
384     FEB_Temp = dynamic_cast<FROG_Element_Base_With_DetId*>(FEB);
385     FEB = FEB_Temp->getDaughterWithDetId(Frog_DetId);
386     if(FEB==NULL){FEB = new FROG_Element_Base_With_DetId(C_FEB_DETID, Frog_DetId); FEB_Temp->addDaughter(FEB);}
387 querten 1.1
388 querten 1.22 Frog_DetId += detid.ring()*10;
389 querten 1.11 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 querten 1.22
393     Frog_DetId += detid.petalNumber();
394 querten 1.11 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 querten 1.22 }else{
398     if(mod)delete mod;
399     continue;
400 querten 1.11 }
401 querten 1.22 FEB->addDaughter(mod);
402     }
403 querten 1.11
404    
405 querten 1.22 // ### MUON GEOMETRY ###
406 querten 1.11
407 querten 1.22 edm::ESHandle<DTGeometry> DtGeom;
408     iSetup.get<MuonGeometryRecord>().get( DtGeom );
409     const vector<GeomDet*> DtDets = DtGeom->dets();
410    
411     edm::ESHandle<CSCGeometry> CscGeom;
412     iSetup.get<MuonGeometryRecord>().get( CscGeom );
413     const vector<GeomDet*> CscDets = CscGeom->dets();
414    
415     edm::ESHandle<RPCGeometry> RpcGeom;
416     iSetup.get<MuonGeometryRecord>().get( RpcGeom );
417     const vector<GeomDet*> RpcDets = RpcGeom->dets();
418    
419     vector<GeomDet*> MuonDets;
420     for(unsigned int i=0;i<DtDets.size() ;i++){MuonDets.push_back(DtDets [i]);}
421     for(unsigned int i=0;i<CscDets.size();i++){MuonDets.push_back(CscDets[i]);}
422     for(unsigned int i=0;i<RpcDets.size();i++){MuonDets.push_back(RpcDets[i]);}
423 querten 1.1
424 querten 1.22 for(unsigned int i=0;i<MuonDets.size();i++)
425     {
426     Detid = DetId(MuonDets[i]->geographicalId());
427     SubDet = Detid.subdetId();
428 querten 1.1
429 querten 1.22 GeomDet* DetUnit = MuonDets[i];
430     if(!DetUnit)continue;
431     const BoundPlane plane = DetUnit->surface();
432     const TrapezoidalPlaneBounds* trapezoidalBounds( dynamic_cast<const TrapezoidalPlaneBounds*>(&(plane.bounds())));
433     const RectangularPlaneBounds* rectangularBounds( dynamic_cast<const RectangularPlaneBounds*>(&(plane.bounds())));
434    
435     float width = 0;
436     float length = 0;
437     float thickness = 0;
438     float TrapezoidalParam = 0;
439    
440     if(trapezoidalBounds)
441     {
442     std::vector<float> const & parameters = (*trapezoidalBounds).parameters();
443     width = parameters[0]*2;
444     length = parameters[3]*2;
445     thickness = (*trapezoidalBounds).thickness();
446     TrapezoidalParam = parameters[1]/parameters[0];
447     }else if(rectangularBounds){
448     width = DetUnit->surface().bounds().width();
449     length = DetUnit->surface().bounds().length();
450     thickness = DetUnit->surface().bounds().thickness();
451     TrapezoidalParam = 1;
452     }
453 querten 1.1
454 querten 1.22 Surface::GlobalPoint WidthVector = plane.toGlobal( LocalPoint(width/2, 0, 0) );
455     Surface::GlobalPoint LengthVector = plane.toGlobal( LocalPoint(0, length/2, 0) );
456     Surface::GlobalPoint ThickVector = plane.toGlobal( LocalPoint(0, 0, thickness/2) );
457    
458     GlobalVector Pos = GlobalVector(DetUnit->position().basicVector());
459    
460     FROG_Element_Geom_TrackerMod* mod = new FROG_Element_Geom_TrackerMod(
461     Detid.rawId(), TrapezoidalParam,
462     Pos.x(), Pos.y(), Pos.z(),
463     WidthVector.x() -Pos.x(), WidthVector.y() -Pos.y(), WidthVector.z() -Pos.z(),
464     LengthVector.x()-Pos.x(), LengthVector.y()-Pos.y(), LengthVector.z()-Pos.z(),
465     ThickVector.x() -Pos.x(), ThickVector.y() -Pos.y(), ThickVector.z() -Pos.z());
466 querten 1.7
467 querten 1.22 Frog_DetId = DETID_MUON;
468     FEB = muon;
469 querten 1.7
470 querten 1.11 Frog_DetId += SubDet*100000;
471     FEB_Temp = dynamic_cast<FROG_Element_Base_With_DetId*>(FEB);
472     FEB = FEB_Temp->getDaughterWithDetId(Frog_DetId);
473     if(FEB==NULL){FEB = new FROG_Element_Base_With_DetId(C_FEB_DETID, Frog_DetId); FEB_Temp->addDaughter(FEB);}
474    
475     if(SubDet==1){
476 querten 1.22 DTChamberId detid = DTChamberId(Detid);
477 querten 1.11
478 querten 1.22 Frog_DetId += (detid.wheel()+3)*10000;
479 querten 1.11 FEB_Temp = dynamic_cast<FROG_Element_Base_With_DetId*>(FEB);
480     FEB = FEB_Temp->getDaughterWithDetId(Frog_DetId);
481     if(FEB==NULL){FEB = new FROG_Element_Base_With_DetId(C_FEB_DETID, Frog_DetId); FEB_Temp->addDaughter(FEB);}
482    
483 querten 1.22 Frog_DetId += detid.station()*100;
484 querten 1.11 FEB_Temp = dynamic_cast<FROG_Element_Base_With_DetId*>(FEB);
485     FEB = FEB_Temp->getDaughterWithDetId(Frog_DetId);
486     if(FEB==NULL){FEB = new FROG_Element_Base_With_DetId(C_FEB_DETID, Frog_DetId); FEB_Temp->addDaughter(FEB);}
487    
488 querten 1.22 Frog_DetId += detid.sector()*1;
489 querten 1.11 FEB_Temp = dynamic_cast<FROG_Element_Base_With_DetId*>(FEB);
490     FEB = FEB_Temp->getDaughterWithDetId(Frog_DetId);
491     if(FEB==NULL){FEB = new FROG_Element_Base_With_DetId(C_FEB_DETID, Frog_DetId); FEB_Temp->addDaughter(FEB);}
492     }else if(SubDet==2){
493 querten 1.22 CSCDetId detid = CSCDetId(Detid);
494    
495     Frog_DetId += detid.endcap()*10000;
496 querten 1.11 FEB_Temp = dynamic_cast<FROG_Element_Base_With_DetId*>(FEB);
497     FEB = FEB_Temp->getDaughterWithDetId(Frog_DetId);
498     if(FEB==NULL){FEB = new FROG_Element_Base_With_DetId(C_FEB_DETID, Frog_DetId); FEB_Temp->addDaughter(FEB);}
499 querten 1.22
500     Frog_DetId += detid.station()*1000;
501 querten 1.11 FEB_Temp = dynamic_cast<FROG_Element_Base_With_DetId*>(FEB);
502     FEB = FEB_Temp->getDaughterWithDetId(Frog_DetId);
503     if(FEB==NULL){FEB = new FROG_Element_Base_With_DetId(C_FEB_DETID, Frog_DetId); FEB_Temp->addDaughter(FEB);}
504 querten 1.22
505     Frog_DetId += detid.ring()*100;
506 querten 1.11 FEB_Temp = dynamic_cast<FROG_Element_Base_With_DetId*>(FEB);
507     FEB = FEB_Temp->getDaughterWithDetId(Frog_DetId);
508     if(FEB==NULL){FEB = new FROG_Element_Base_With_DetId(C_FEB_DETID, Frog_DetId); FEB_Temp->addDaughter(FEB);}
509 querten 1.22
510     Frog_DetId += detid.chamber()*1;
511 querten 1.11 FEB_Temp = dynamic_cast<FROG_Element_Base_With_DetId*>(FEB);
512     FEB = FEB_Temp->getDaughterWithDetId(Frog_DetId);
513     if(FEB==NULL){FEB = new FROG_Element_Base_With_DetId(C_FEB_DETID, Frog_DetId); FEB_Temp->addDaughter(FEB);}
514 querten 1.22 }else if(SubDet==3){
515     RPCDetId detid = RPCDetId(Detid);
516 querten 1.11
517 querten 1.22 Frog_DetId += (detid.region()+2)*10000;
518 querten 1.11 FEB_Temp = dynamic_cast<FROG_Element_Base_With_DetId*>(FEB);
519     FEB = FEB_Temp->getDaughterWithDetId(Frog_DetId);
520     if(FEB==NULL){FEB = new FROG_Element_Base_With_DetId(C_FEB_DETID, Frog_DetId); FEB_Temp->addDaughter(FEB);}
521    
522 querten 1.22 // Barrel
523     if(detid.region()==0){
524     Frog_DetId += (detid.ring()+3)*1000;
525     FEB_Temp = dynamic_cast<FROG_Element_Base_With_DetId*>(FEB);
526     FEB = FEB_Temp->getDaughterWithDetId(Frog_DetId);
527     if(FEB==NULL){FEB = new FROG_Element_Base_With_DetId(C_FEB_DETID, Frog_DetId); FEB_Temp->addDaughter(FEB);}
528     // Endcap
529     }else{
530     Frog_DetId += detid.ring()*1000;
531     FEB_Temp = dynamic_cast<FROG_Element_Base_With_DetId*>(FEB);
532     FEB = FEB_Temp->getDaughterWithDetId(Frog_DetId);
533     if(FEB==NULL){FEB = new FROG_Element_Base_With_DetId(C_FEB_DETID, Frog_DetId); FEB_Temp->addDaughter(FEB);}
534     }
535    
536     Frog_DetId += detid.station()*100;
537 querten 1.11 FEB_Temp = dynamic_cast<FROG_Element_Base_With_DetId*>(FEB);
538     FEB = FEB_Temp->getDaughterWithDetId(Frog_DetId);
539     if(FEB==NULL){FEB = new FROG_Element_Base_With_DetId(C_FEB_DETID, Frog_DetId); FEB_Temp->addDaughter(FEB);}
540    
541 querten 1.22 Frog_DetId += detid.sector()*1;
542 querten 1.11 FEB_Temp = dynamic_cast<FROG_Element_Base_With_DetId*>(FEB);
543     FEB = FEB_Temp->getDaughterWithDetId(Frog_DetId);
544     if(FEB==NULL){FEB = new FROG_Element_Base_With_DetId(C_FEB_DETID, Frog_DetId); FEB_Temp->addDaughter(FEB);}
545     }
546    
547 querten 1.22 FEB->addDaughter(mod);
548     }
549    
550    
551    
552     // ### CALO GEOMETRY ###
553    
554     edm::ESHandle<CaloGeometry> CaloGeom;
555     iSetup.get<IdealGeometryRecord>().get( CaloGeom );
556     const vector<DetId> CaloDets = CaloGeom->getValidDetIds();
557 querten 1.11
558 querten 1.22 for(unsigned int i=0;i<CaloDets.size();i++)
559     {
560     Detid = CaloDets[i];
561     SubDet = Detid.subdetId();
562    
563     if(Detid.det()==DetId::Ecal){
564     if(SubDet<1 || SubDet>3) continue;
565 querten 1.11
566 querten 1.22 Frog_DetId = DETID_ECAL;
567     FEB = ecal;
568 querten 1.11
569 querten 1.22 Frog_DetId += SubDet*100000;
570 querten 1.11 FEB_Temp = dynamic_cast<FROG_Element_Base_With_DetId*>(FEB);
571     FEB = FEB_Temp->getDaughterWithDetId(Frog_DetId);
572     if(FEB==NULL){FEB = new FROG_Element_Base_With_DetId(C_FEB_DETID, Frog_DetId); FEB_Temp->addDaughter(FEB);}
573    
574 querten 1.22 if(SubDet==1){
575     EBDetId detid = EBDetId(Detid);
576    
577     Frog_DetId += ((detid.zside()==1)+1)*10000;
578     FEB_Temp = dynamic_cast<FROG_Element_Base_With_DetId*>(FEB);
579     FEB = FEB_Temp->getDaughterWithDetId(Frog_DetId);
580     if(FEB==NULL){FEB = new FROG_Element_Base_With_DetId(C_FEB_DETID, Frog_DetId); FEB_Temp->addDaughter(FEB);}
581    
582     Frog_DetId += (detid.tower_ieta()*detid.zside())*100;
583     FEB_Temp = dynamic_cast<FROG_Element_Base_With_DetId*>(FEB);
584     FEB = FEB_Temp->getDaughterWithDetId(Frog_DetId);
585     if(FEB==NULL){FEB = new FROG_Element_Base_With_DetId(C_FEB_DETID, Frog_DetId); FEB_Temp->addDaughter(FEB);}
586    
587     Frog_DetId += detid.tower_iphi()*1;
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     }else if(SubDet==2){
592     EEDetId detid = EEDetId(Detid);
593    
594     Frog_DetId += ((detid.zside()==1)+1)*10000;
595     FEB_Temp = dynamic_cast<FROG_Element_Base_With_DetId*>(FEB);
596     FEB = FEB_Temp->getDaughterWithDetId(Frog_DetId);
597     if(FEB==NULL){FEB = new FROG_Element_Base_With_DetId(C_FEB_DETID, Frog_DetId); FEB_Temp->addDaughter(FEB);}
598    
599     Frog_DetId += detid.iquadrant()*1000;
600     FEB_Temp = dynamic_cast<FROG_Element_Base_With_DetId*>(FEB);
601     FEB = FEB_Temp->getDaughterWithDetId(Frog_DetId);
602     if(FEB==NULL){FEB = new FROG_Element_Base_With_DetId(C_FEB_DETID, Frog_DetId); FEB_Temp->addDaughter(FEB);}
603    
604     Frog_DetId += detid.isc();
605     FEB_Temp = dynamic_cast<FROG_Element_Base_With_DetId*>(FEB);
606     FEB = FEB_Temp->getDaughterWithDetId(Frog_DetId);
607     if(FEB==NULL){FEB = new FROG_Element_Base_With_DetId(C_FEB_DETID, Frog_DetId); FEB_Temp->addDaughter(FEB);}
608     }else if(SubDet==3){
609     ESDetId detid = ESDetId(Detid);
610    
611     Frog_DetId += ((detid.zside()==1)+1)*10000;
612     FEB_Temp = dynamic_cast<FROG_Element_Base_With_DetId*>(FEB);
613     FEB = FEB_Temp->getDaughterWithDetId(Frog_DetId);
614     if(FEB==NULL){FEB = new FROG_Element_Base_With_DetId(C_FEB_DETID, Frog_DetId); FEB_Temp->addDaughter(FEB);}
615    
616     Frog_DetId += detid.plane()*1000;
617     FEB_Temp = dynamic_cast<FROG_Element_Base_With_DetId*>(FEB);
618     FEB = FEB_Temp->getDaughterWithDetId(Frog_DetId);
619     if(FEB==NULL){FEB = new FROG_Element_Base_With_DetId(C_FEB_DETID, Frog_DetId); FEB_Temp->addDaughter(FEB);}
620    
621     Frog_DetId += detid.six()*50;
622     FEB_Temp = dynamic_cast<FROG_Element_Base_With_DetId*>(FEB);
623     FEB = FEB_Temp->getDaughterWithDetId(Frog_DetId);
624     if(FEB==NULL){FEB = new FROG_Element_Base_With_DetId(C_FEB_DETID, Frog_DetId); FEB_Temp->addDaughter(FEB);}
625    
626     Frog_DetId += detid.siy();
627     FEB_Temp = dynamic_cast<FROG_Element_Base_With_DetId*>(FEB);
628     FEB = FEB_Temp->getDaughterWithDetId(Frog_DetId);
629     if(FEB==NULL){FEB = new FROG_Element_Base_With_DetId(C_FEB_DETID, Frog_DetId); FEB_Temp->addDaughter(FEB);}
630     }
631     }else if(Detid.det()==DetId::Hcal){
632     if(SubDet<1 || SubDet>4) continue;
633    
634     Frog_DetId = DETID_HCAL;
635     FEB = hcal;
636    
637     Frog_DetId += SubDet*100000;
638 querten 1.11 FEB_Temp = dynamic_cast<FROG_Element_Base_With_DetId*>(FEB);
639     FEB = FEB_Temp->getDaughterWithDetId(Frog_DetId);
640     if(FEB==NULL){FEB = new FROG_Element_Base_With_DetId(C_FEB_DETID, Frog_DetId); FEB_Temp->addDaughter(FEB);}
641    
642 querten 1.22 if(true){
643     HcalDetId detid = HcalDetId(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.ietaAbs()*100;
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.iphi()*1;
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     }
660    
661     }else if(Detid.det() == DetId::Calo){
662     continue;
663     /*
664     Frog_DetId = DETID_CALO + 1000000;
665     FEB = hcal;
666    
667     Frog_DetId += SubDet*100000;
668 querten 1.11 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 querten 1.22 */
672 querten 1.11 }
673    
674 querten 1.22 const CaloCellGeometry* CellGeom = CaloGeom->getGeometry(Detid);
675     GlobalPoint CellPos = CellGeom->getPosition();
676     const CaloCellGeometry::CornersVec CellCorners = CellGeom->getCorners();
677    
678     float cX = (CellCorners[0].x() + CellCorners[2].x())/2;
679     float cY = (CellCorners[0].y() + CellCorners[2].y())/2;
680     float cZ = (CellCorners[0].z() + CellCorners[2].z())/2;
681    
682     float wX = (CellCorners[1].x() - CellCorners[0].x())/2;
683     float wY = (CellCorners[1].y() - CellCorners[0].y())/2;
684     float wZ = (CellCorners[1].z() - CellCorners[0].z())/2;
685    
686     float hX = (CellCorners[3].x() - CellCorners[0].x())/2;
687     float hY = (CellCorners[3].y() - CellCorners[0].y())/2;
688     float hZ = (CellCorners[3].z() - CellCorners[0].z())/2;
689    
690     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) );
691     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) );
692    
693     FROG_Element_Geom_CaloMod* mod = new FROG_Element_Geom_CaloMod(
694     Detid.rawId(), F,
695     cX , cY , cZ ,
696     wX , wY , wZ ,
697     hX , hY , hZ );
698 querten 1.11
699 querten 1.22 FEB->addDaughter(mod);
700 querten 1.11 }
701    
702 querten 1.22 // ### Save .geom ###
703 querten 1.11
704 querten 1.22 FROG_Geometry* CMS_Geom = new FROG_Geometry(prim);
705     CMS_Geom->Save("CMS.geom");
706 querten 1.11 }
707    
708 querten 1.15 events_prim = new FROG_Element_Base(C_PRIMARY);
709 querten 1.1 }
710    
711     // ------------ method called once each job just after ending the event loop ------------
712     void
713 roberfro 1.13 Frog_Analyzer::endJob()
714 querten 1.22 {
715     if(NEvents>0){
716     char OutputFileName[1024];
717     sprintf(OutputFileName,"%s",OutputFile.substr(0,OutputFile.size()-4).c_str());
718     if(NEventsInVisFile>=0)sprintf(OutputFileName,"%s_R%i_E%i.vis",OutputFileName,SRun,SEvent);
719     sprintf(OutputFileName,"%s.vis",OutputFileName);
720    
721     FROG_Events* events = new FROG_Events(events_prim);
722     events->Save((char*) OutputFileName);
723     delete events;
724     delete events_prim;
725    
726     events_prim = new FROG_Element_Base(C_PRIMARY);
727     NEvents=0;
728     }
729 querten 1.1 }
730    
731    
732    
733     //
734     // member functions
735     //
736    
737     // ------------ method called to for each event ------------
738     void
739     Frog_Analyzer::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup)
740     {
741 querten 1.22 if(NEvents == 0){
742     SRun = iEvent.id().run();
743     SEvent = iEvent.id().event();
744     }
745    
746    
747 querten 1.23 FROG_Element_Event* event = new FROG_Element_Event(iEvent.id().run(), iEvent.id().event() );
748 querten 1.15 events_prim->addDaughter(event);
749 querten 1.1
750 querten 1.2 // access the tracker
751     edm::ESHandle<TrackerGeometry> tkGeom;
752     iSetup.get<TrackerDigiGeometryRecord>().get( tkGeom );
753 querten 1.1
754 querten 1.2 edm::ESHandle<DTGeometry> DtGeom;
755     iSetup.get<MuonGeometryRecord>().get( DtGeom );
756    
757     edm::ESHandle<CSCGeometry> CscGeom;
758     iSetup.get<MuonGeometryRecord>().get( CscGeom );
759 querten 1.1
760 querten 1.2 edm::ESHandle<RPCGeometry> RpcGeom;
761     iSetup.get<MuonGeometryRecord>().get( RpcGeom );
762 querten 1.1
763 querten 1.25 edm::ESHandle<CaloGeometry> CaloGeom;
764     iSetup.get<IdealGeometryRecord>().get( CaloGeom );
765    
766    
767 querten 1.2 // ### SIMTRACK ###
768 querten 1.25 FROG_Element_Base_With_DetId* frogSimTrkColl = new FROG_Element_Base_With_DetId(C_FEB_DETID, EVTID_SIMTRK);
769     event->addDaughter(frogSimTrkColl);
770    
771 querten 1.1 for(unsigned int i=0;i<SimTrackProducers.size();i++){
772     edm::Handle<std::vector< SimTrack > > h_SimTracks;
773     iEvent.getByLabel(SimTrackProducers[i], h_SimTracks);
774     std::vector< SimTrack > SimTrackColl = *h_SimTracks.product();
775    
776     for ( unsigned int a = 0; a < SimTrackColl.size(); ++a ) {
777     SimTrack simTrack =SimTrackColl[a];
778    
779 roberfro 1.13 FROG_Element_Event_Sim_Track* frogSimTrk = new FROG_Element_Event_Sim_Track(simTrack.trackId(),
780     simTrack.momentum().x(), simTrack.momentum().y(), simTrack.momentum().z(),
781     simTrack.momentum().e(), simTrack.type(), simTrack.vertIndex(),
782     simTrack.charge() );
783 querten 1.15 frogSimTrkColl->addDaughter(frogSimTrk);
784 querten 1.1 }
785     }
786    
787 querten 1.2 // ### SIMVERTEX ###
788 querten 1.25 FROG_Element_Base_With_DetId* frogSimVtx = new FROG_Element_Base_With_DetId(C_FEB_DETID, EVTID_SIMVTX);
789     event->addDaughter(frogSimVtx);
790    
791 querten 1.1 for(unsigned int i=0;i<SimVertexProducers.size();i++){
792     edm::Handle<std::vector< SimVertex > > h_Vertex;
793     iEvent.getByLabel(SimVertexProducers[i], h_Vertex);
794     std::vector< SimVertex > VertexColl = *h_Vertex.product();
795    
796     for (unsigned int b = 0; b < VertexColl.size(); ++b ) {
797     SimVertex Vertex = VertexColl[b];
798    
799 querten 1.25 FROG_Element_Event_Sim_Vertex* frogSimVertex = new FROG_Element_Event_Sim_Vertex(
800 roberfro 1.13 Vertex.position().x(), Vertex.position().y(), Vertex.position().z(),
801     Vertex.parentIndex());
802 querten 1.1
803 querten 1.25 frogSimVtx->addDaughter(frogSimVertex);
804 querten 1.1 }
805     }
806    
807 roberfro 1.13
808 querten 1.2 // ### SIMHIT ###
809 querten 1.15
810 querten 1.25 FROG_Element_Base_With_DetId* frogSimHit = new FROG_Element_Base_With_DetId(C_FEB_DETID, EVTID_SIMHIT);
811     event->addDaughter(frogSimHit);
812 querten 1.1 for(unsigned int i=0;i<SimHitProducers.size();i++){
813     edm::Handle<std::vector< PSimHit > > h_Hits;
814     iEvent.getByLabel(SimHitProducers[i], h_Hits);
815     std::vector< PSimHit > Hits = *h_Hits.product();
816    
817 querten 1.25 FROG_Element_Base_With_DetId* frogSimHitColl = new FROG_Element_Base_With_DetId(C_FEB_DETID, EVTID_SIMHIT + i + 1);
818     frogSimHit->addDaughter(frogSimHitColl);
819 querten 1.15
820 querten 1.1 for(unsigned int h=0; h<Hits.size(); h++)
821     {
822 querten 1.2 DetId theDetUnitId(Hits[h].detUnitId());
823 querten 1.25 const GeomDet* theDet = NULL;
824     if(theDetUnitId.det() == DetId::Tracker)theDet = tkGeom->idToDet(theDetUnitId);
825     if(theDetUnitId.det() == DetId::Muon && theDetUnitId.subdetId() == MuonSubdetId::DT) theDet = DtGeom->idToDet(theDetUnitId);
826     if(theDetUnitId.det() == DetId::Muon && theDetUnitId.subdetId() == MuonSubdetId::CSC)theDet = CscGeom->idToDet(theDetUnitId);
827     if(theDetUnitId.det() == DetId::Muon && theDetUnitId.subdetId() == MuonSubdetId::RPC)theDet = RpcGeom->idToDet(theDetUnitId);
828 querten 1.1
829 querten 1.15
830     FROG_Element_Event_Sim_Hit* frogSimHit = new FROG_Element_Event_Sim_Hit(
831     theDet->surface().toGlobal(Hits[h].localPosition()).x(),theDet->surface().toGlobal(Hits[h].localPosition()).y(),theDet->surface().toGlobal(Hits[h].localPosition()).z(),
832     Hits[h].energyLoss(), Hits[h].processType() );
833     frogSimHitColl->addDaughter(frogSimHit);
834 querten 1.1 }
835     }
836 querten 1.15
837 querten 1.25 // ### SIMCALOHIT ###
838    
839     for(unsigned int i=0;i<SimCaloHitProducers.size();i++){
840     edm::Handle<std::vector< PCaloHit > > h_CaloHits;
841     iEvent.getByLabel(SimCaloHitProducers[i], h_CaloHits);
842     std::vector< PCaloHit > CaloHits = *h_CaloHits.product();
843    
844     FROG_Element_Base_With_DetId* frogSimHitColl = new FROG_Element_Base_With_DetId(C_FEB_DETID, EVTID_SIMHIT + SimHitProducers.size() + i + 1);
845     frogSimHit->addDaughter(frogSimHitColl);
846    
847     for(unsigned int h=0; h<CaloHits.size(); h++)
848     {
849     DetId theDetUnitId(CaloHits[h].id());
850     const CaloCellGeometry* CellGeom = NULL;
851     if(theDetUnitId.det() == DetId::Ecal || theDetUnitId.det() == DetId::Hcal)CellGeom = CaloGeom->getGeometry(theDetUnitId);
852     if(CellGeom==NULL)continue;
853    
854    
855     FROG_Element_Event_Sim_Hit* frogSimCaloHit = new FROG_Element_Event_Sim_Hit(
856     CellGeom->getPosition().x(),CellGeom->getPosition().y(),CellGeom->getPosition().z(),
857     CaloHits[h].energy(), CaloHits[h].depth() );
858     frogSimHitColl->addDaughter(frogSimCaloHit);
859     }
860     }
861    
862 roberfro 1.24 // NUCLEAR INTERACTIONS
863     for(unsigned int i=0;i<NIProducers.size();i++) {
864     edm::Handle<std::vector<reco::NuclearInteraction> > h_NIs;
865     iEvent.getByLabel(NIProducers[i], h_NIs);
866     std::vector<reco::NuclearInteraction> NIs = *h_NIs.product();
867     FROG_Element_Base_With_DetId* frogNIColl = new FROG_Element_Base_With_DetId(C_FEB_DETID, EVTID_NUCLINT + i);
868     event->addDaughter(frogNIColl);
869    
870     for(unsigned int h=0; h<NIs.size();h++){
871     reco::NuclearInteraction ni = NIs[i];
872     float vtx_x = ni.vertex().x();
873     float vtx_y = ni.vertex().y();
874     float vtx_z = ni.vertex().z();
875     float like = ni.likelihood();
876     FROG_Element_Event_NuclInt* frogNI = new FROG_Element_Event_NuclInt(vtx_x, vtx_y, vtx_z, like );
877     frogNIColl->addDaughter(frogNI);
878     }
879     }
880 querten 1.1
881    
882 querten 1.25
883 querten 1.9 // ### TRAJECTORY ###
884 querten 1.25 FROG_Element_Base_With_DetId* frogTrk = new FROG_Element_Base_With_DetId(C_FEB_DETID, EVTID_TRK);
885     event->addDaughter(frogTrk);
886    
887 roberfro 1.5 for(unsigned int i=0;i<TrajectoryProducers.size();i++){
888 querten 1.6 Handle<TrajTrackAssociationCollection> trajTrackAssociationHandle;
889     iEvent.getByLabel(TrajectoryProducers[i], trajTrackAssociationHandle);
890     const TrajTrackAssociationCollection TrajToTrackMap = *trajTrackAssociationHandle.product();
891    
892 querten 1.25 FROG_Element_Base_With_DetId* frogTrkColl = new FROG_Element_Base_With_DetId(C_FEB_DETID, EVTID_TRK + i + 1);
893     frogTrk->addDaughter(frogTrkColl);
894 querten 1.15
895 querten 1.6 for(TrajTrackAssociationCollection::const_iterator it = TrajToTrackMap.begin(); it!=TrajToTrackMap.end(); ++it) {
896     Trajectory recoTraj = *it->key;
897 querten 1.15 FROG_Element_Event_Track* frogTrk = new FROG_Element_Event_Track(i,it->val->p(),it->val->pt(),it->key->chiSquared());
898     frogTrkColl->addDaughter(frogTrk);
899 querten 1.1
900 roberfro 1.5 std::vector<TrajectoryMeasurement> measurements = recoTraj.measurements();
901     for(unsigned int h=0;h<measurements.size();h++){
902    
903     TrajectoryMeasurement::ConstRecHitPointer h_it = measurements[h].recHit();
904 querten 1.1 if(!h_it->isValid() )continue;
905     DetId detId = h_it->geographicalId();
906 roberfro 1.5 GlobalPoint globalPos = measurements[h].updatedState().globalPosition();
907 querten 1.1
908 querten 1.15 FROG_Element_Event_Hit* frogHit = new FROG_Element_Event_Hit(detId.rawId(), globalPos.x(),globalPos.y(), globalPos.z(), -1);
909     frogTrk->addDaughter(frogHit);
910 querten 1.1 }
911     }
912     }
913    
914 querten 1.9 // ### TRACK ###
915    
916     for(unsigned int i=0;i<TrackProducers.size();i++){
917     edm::Handle<std::vector< reco::Track > > h_Tracks;
918     iEvent.getByLabel(TrackProducers[i], h_Tracks);
919     std::vector< reco::Track > TrackColl = *h_Tracks.product();
920    
921 querten 1.25 FROG_Element_Base_With_DetId* frogTrkColl = new FROG_Element_Base_With_DetId(C_FEB_DETID, EVTID_TRK + TrajectoryProducers.size() + i + 1);
922     frogTrk->addDaughter(frogTrkColl);
923 querten 1.15
924 querten 1.11 //printf("Size of the TrackCOllection : %i = %i\n",i,TrackColl.size());
925 querten 1.9 for ( unsigned int t = 0; t < TrackColl.size(); ++t ) {
926 querten 1.15 reco::Track recoTrack =TrackColl[t];
927 querten 1.9
928 querten 1.15 FROG_Element_Event_Track* frogTrk = new FROG_Element_Event_Track(TrajectoryProducers.size()+i,recoTrack.p(),recoTrack.pt(), recoTrack.chi2());
929     frogTrkColl->addDaughter(frogTrk);
930 querten 1.9
931 querten 1.15 for(unsigned int h=0;h<recoTrack.recHitsSize();h++){
932     TrackingRecHitRef h_it = recoTrack.recHit(h);
933     if(!h_it->isValid() )continue;
934     DetId detId = h_it->geographicalId();
935     const GeomDet * theDet = NULL;
936    
937     if(detId.det()==DetId::Tracker) theDet = tkGeom->idToDet(detId);
938     if(detId.det()==DetId::Muon && detId.subdetId() == 1) theDet = DtGeom->idToDet(detId);
939     if(detId.det()==DetId::Muon && detId.subdetId() == 2) theDet = CscGeom->idToDet(detId);
940     if(detId.det()==DetId::Muon && detId.subdetId() == 3) theDet = RpcGeom->idToDet(detId);
941    
942     LocalPoint localPos = h_it->localPosition();
943    
944     FROG_Element_Event_Hit* frogHit = new FROG_Element_Event_Hit(
945     detId.rawId(),
946     theDet->surface().toGlobal(localPos).x(),
947     theDet->surface().toGlobal(localPos).y(),
948     theDet->surface().toGlobal(localPos).z(),
949     -1);
950     frogTrk->addDaughter(frogHit);
951     }
952 querten 1.9 }
953     }
954    
955    
956 querten 1.2 // ### ECALRecHits ###
957 querten 1.25 FROG_Element_Base_With_DetId* frogEcalHit = new FROG_Element_Base_With_DetId(C_FEB_DETID, EVTID_ECALHIT);
958     event->addDaughter(frogEcalHit);
959 querten 1.1 for(unsigned int i=0;i<EcalRecHitProducers.size();i++){
960     edm::Handle<EcalRecHitCollection > h_Ecal_RecHits;
961     iEvent.getByLabel(EcalRecHitProducers[i], h_Ecal_RecHits);
962     EcalRecHitCollection Ecal_RecHits = *h_Ecal_RecHits.product();
963    
964 querten 1.25 FROG_Element_Base_With_DetId* frogHitColl = new FROG_Element_Base_With_DetId(C_FEB_DETID, EVTID_ECALHIT + i + 1);
965     frogEcalHit->addDaughter(frogHitColl);
966 querten 1.15
967 querten 1.1 for(unsigned int eh=0;eh<Ecal_RecHits.size();eh++){
968 roberfro 1.14 FROG_Element_Event_CaloHit* frogCaloHit = new FROG_Element_Event_CaloHit((Ecal_RecHits[eh].detid()).rawId(),
969     Ecal_RecHits[eh].energy(), Ecal_RecHits[eh].time());
970 querten 1.15 frogHitColl->addDaughter(frogCaloHit);
971 querten 1.1 }
972     }
973    
974    
975 querten 1.2 // ### HCALRecHits ###
976 querten 1.25 FROG_Element_Base_With_DetId* frogHcalHit = new FROG_Element_Base_With_DetId(C_FEB_DETID, EVTID_HCALHIT);
977     event->addDaughter(frogHcalHit);
978 querten 1.1 for(unsigned int i=0;i<HcalHBHERecHitProducers.size();i++){
979     edm::Handle<HBHERecHitCollection > h_HcalHBHE_RecHits;
980     iEvent.getByLabel(HcalHBHERecHitProducers[i], h_HcalHBHE_RecHits);
981     HBHERecHitCollection HcalHBHE_RecHits = *h_HcalHBHE_RecHits.product();
982    
983 querten 1.25 FROG_Element_Base_With_DetId* frogHitColl = new FROG_Element_Base_With_DetId(C_FEB_DETID, EVTID_HCALHIT + i + 1);
984     frogHcalHit->addDaughter(frogHitColl);
985 querten 1.15
986 querten 1.1 for(unsigned int hh=0;hh<HcalHBHE_RecHits.size();hh++){
987 roberfro 1.14 FROG_Element_Event_CaloHit* frogCaloHit = new FROG_Element_Event_CaloHit((HcalHBHE_RecHits[hh].detid()).rawId(),
988     HcalHBHE_RecHits[hh].energy(), HcalHBHE_RecHits[hh].time());
989 querten 1.15 frogHitColl->addDaughter(frogCaloHit);
990 querten 1.1 }
991     }
992    
993     for(unsigned int i=0;i<HcalHORecHitProducers.size();i++){
994     edm::Handle<HORecHitCollection > h_HcalHO_RecHits;
995     iEvent.getByLabel(HcalHORecHitProducers[i], h_HcalHO_RecHits);
996     HORecHitCollection HcalHO_RecHits = *h_HcalHO_RecHits.product();
997    
998 querten 1.25 FROG_Element_Base_With_DetId* frogHitColl = new FROG_Element_Base_With_DetId(C_FEB_DETID, EVTID_HCALHIT + HcalHBHERecHitProducers.size() + i + 1);
999     frogHcalHit->addDaughter(frogHitColl);
1000 querten 1.15
1001 querten 1.1 for(unsigned int hh=0;hh<HcalHO_RecHits.size();hh++){
1002 querten 1.15 FROG_Element_Event_CaloHit* frogCaloHit = new FROG_Element_Event_CaloHit((HcalHO_RecHits[hh].detid()).rawId(),
1003     HcalHO_RecHits[hh].energy(), HcalHO_RecHits[hh].time());
1004     frogHitColl->addDaughter(frogCaloHit);
1005 querten 1.1 }
1006     }
1007    
1008     for(unsigned int i=0;i<HcalHFRecHitProducers.size();i++){
1009     edm::Handle<HFRecHitCollection > h_HcalHF_RecHits;
1010     iEvent.getByLabel(HcalHFRecHitProducers[i], h_HcalHF_RecHits);
1011     HFRecHitCollection HcalHF_RecHits = *h_HcalHF_RecHits.product();
1012    
1013 querten 1.25 FROG_Element_Base_With_DetId* frogHitColl = new FROG_Element_Base_With_DetId(C_FEB_DETID, EVTID_HCALHIT + HcalHBHERecHitProducers.size() + HcalHORecHitProducers.size() + i + 1);
1014     frogHcalHit->addDaughter(frogHitColl);
1015 querten 1.15
1016 querten 1.1 for(unsigned int hh=0;hh<HcalHF_RecHits.size();hh++){
1017 querten 1.15 FROG_Element_Event_CaloHit* frogCaloHit = new FROG_Element_Event_CaloHit((HcalHF_RecHits[hh].detid()).rawId(),
1018     HcalHF_RecHits[hh].energy(), HcalHF_RecHits[hh].time());
1019     frogHitColl->addDaughter(frogCaloHit);
1020 querten 1.1 }
1021     }
1022    
1023 querten 1.25
1024 querten 1.2 // ### Muon Segments ###
1025 querten 1.25 FROG_Element_Base_With_DetId* frogMuonSeg = new FROG_Element_Base_With_DetId(C_FEB_DETID, EVTID_MUONSEG);
1026     event->addDaughter(frogMuonSeg);
1027    
1028 querten 1.2 for(unsigned int i=0;i<CSCSegmentProducers.size();i++){
1029     edm::Handle<CSCSegmentCollection > h_CSC_Segments;
1030     iEvent.getByLabel(CSCSegmentProducers[i], h_CSC_Segments);
1031     CSCSegmentCollection CSC_Segments = *h_CSC_Segments.product();
1032    
1033 querten 1.25 FROG_Element_Base_With_DetId* frogSegColl = new FROG_Element_Base_With_DetId(C_FEB_DETID, EVTID_MUONSEG + i + 1);
1034     frogMuonSeg->addDaughter(frogSegColl);
1035 querten 1.15
1036 querten 1.2 for(unsigned int s=0;s<CSC_Segments.size();s++){
1037     DetId theDetUnitId = CSC_Segments[s].geographicalId();
1038     const GeomDet* theDet = CscGeom->idToDet(theDetUnitId);
1039    
1040 querten 1.15 FROG_Element_Event_Segment* frogSeg = new FROG_Element_Event_Segment(theDetUnitId.rawId(),
1041     theDet->surface().toGlobal(CSC_Segments[s].localPosition()).x() , theDet->surface().toGlobal(CSC_Segments[s].localPosition()).y() , theDet->surface().toGlobal(CSC_Segments[s].localPosition()).z() ,
1042     theDet->surface().toGlobal(CSC_Segments[s].localDirection()).x(), theDet->surface().toGlobal(CSC_Segments[s].localDirection()).y(), theDet->surface().toGlobal(CSC_Segments[s].localDirection()).z() );
1043     frogSegColl->addDaughter(frogSeg);
1044 querten 1.2 }
1045     }
1046    
1047     for(unsigned int i=0;i<DTSegmentProducers.size();i++){
1048     edm::Handle<DTRecSegment4DCollection > h_DT_Segments;
1049     iEvent.getByLabel(DTSegmentProducers[i], h_DT_Segments);
1050     DTRecSegment4DCollection DT_Segments = *h_DT_Segments.product();
1051    
1052 querten 1.25 FROG_Element_Base_With_DetId* frogSegColl = new FROG_Element_Base_With_DetId(C_FEB_DETID, EVTID_MUONSEG + CSCSegmentProducers.size() + i + 1);
1053     frogMuonSeg->addDaughter(frogSegColl);
1054 querten 1.15
1055 querten 1.2 for(unsigned int s=0;s<DT_Segments.size();s++){
1056     DetId theDetUnitId = DT_Segments[s].geographicalId();
1057     const GeomDet* theDet = DtGeom->idToDet(theDetUnitId);
1058    
1059 querten 1.15 FROG_Element_Event_Segment* frogSeg = new FROG_Element_Event_Segment(theDetUnitId.rawId(),
1060     theDet->surface().toGlobal(DT_Segments[s].localPosition()).x() , theDet->surface().toGlobal(DT_Segments[s].localPosition()).y() , theDet->surface().toGlobal(DT_Segments[s].localPosition()).z() ,
1061     theDet->surface().toGlobal(DT_Segments[s].localDirection()).x(), theDet->surface().toGlobal(DT_Segments[s].localDirection()).y(), theDet->surface().toGlobal(DT_Segments[s].localDirection()).z() );
1062     frogSegColl->addDaughter(frogSeg);
1063 querten 1.2 }
1064     }
1065    
1066     // ### Muon Hits ###
1067 querten 1.25 FROG_Element_Base_With_DetId* frogMuonHit = new FROG_Element_Base_With_DetId(C_FEB_DETID, EVTID_MUONHIT);
1068     event->addDaughter(frogMuonHit);
1069 querten 1.2 for(unsigned int i=0;i<RPCHitsProducers.size();i++){
1070     edm::Handle<RPCRecHitCollection > h_RPC_Hits;
1071     iEvent.getByLabel(RPCHitsProducers[i], h_RPC_Hits);
1072     RPCRecHitCollection RPC_Hits = *h_RPC_Hits.product();
1073    
1074 querten 1.25 FROG_Element_Base_With_DetId* frogHitColl = new FROG_Element_Base_With_DetId(C_FEB_DETID, EVTID_MUONHIT + i + 1);
1075     frogMuonHit->addDaughter(frogHitColl);
1076 querten 1.15
1077 querten 1.2 for(unsigned int h=0;h<RPC_Hits.size();h++){
1078     DetId theDetUnitId = RPC_Hits[h].geographicalId();
1079     const GeomDet* theDet = RpcGeom->idToDet(theDetUnitId);
1080    
1081 querten 1.15 FROG_Element_Event_Hit* frogHit = new FROG_Element_Event_Hit(theDetUnitId.rawId(),
1082     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 );
1083     frogHitColl->addDaughter(frogHit);
1084 querten 1.2 }
1085     }
1086    
1087 querten 1.25
1088 querten 1.22 NEvents++;
1089     if(NEvents == NEventsInVisFile){
1090     char OutputFileName[1024];
1091     sprintf(OutputFileName,"%s",OutputFile.substr(0,OutputFile.size()-4).c_str());
1092     if(NEventsInVisFile>=0)sprintf(OutputFileName,"%s_R%i_E%i.vis",OutputFileName,SRun,SEvent);
1093     sprintf(OutputFileName,"%s.vis",OutputFileName);
1094    
1095     FROG_Events* events = new FROG_Events(events_prim);
1096     events->Save((char*) OutputFileName);
1097     delete events;
1098     delete events_prim;
1099 roberfro 1.13
1100 querten 1.22 events_prim = new FROG_Element_Base(C_PRIMARY);
1101     NEvents=0;
1102     }
1103 querten 1.15
1104 querten 1.1 }
1105    
1106    
1107     //define this as a plug-in
1108     DEFINE_FWK_MODULE(Frog_Analyzer);
1109    
1110