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

# 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.40 // $Id: Frog_Analyzer.cc,v 1.39 2008/08/26 10:20:34 querten Exp $
17 querten 1.1 //
18     //
19    
20    
21     // system include files
22     #include <memory>
23    
24     // user include files
25     #include "FWCore/Framework/interface/Frameworkfwd.h"
26     #include "FWCore/Framework/interface/EDAnalyzer.h"
27    
28     #include "FWCore/Framework/interface/Event.h"
29     #include "FWCore/Framework/interface/MakerMacros.h"
30    
31     #include "FWCore/ParameterSet/interface/ParameterSet.h"
32     #include "FWCore/ServiceRegistry/interface/Service.h"
33     #include "FWCore/Framework/interface/ESHandle.h"
34    
35     #include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h"
36     #include "Geometry/CommonDetUnit/interface/GeomDetUnit.h"
37     #include "Geometry/Records/interface/TrackerDigiGeometryRecord.h"
38     #include "Geometry/TrackerNumberingBuilder/interface/GeometricDet.h"
39     #include "Geometry/CommonTopologies/interface/PixelTopology.h"
40     #include "Geometry/CommonTopologies/interface/StripTopology.h"
41     #include "Geometry/TrackerGeometryBuilder/interface/PixelGeomDetType.h"
42     #include "Geometry/TrackerGeometryBuilder/interface/StripGeomDetType.h"
43     #include "Geometry/TrackerGeometryBuilder/interface/PixelGeomDetUnit.h"
44     #include "Geometry/TrackerGeometryBuilder/interface/StripGeomDetUnit.h"
45     #include "DataFormats/GeometrySurface/interface/BoundSurface.h"
46     #include "DataFormats/DetId/interface/DetId.h"
47    
48     #include "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 querten 1.28 //#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 querten 1.1 #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 querten 1.37 #include "DataFormats/Common/interface/DetSetVector.h"
67     #include "DataFormats/Common/interface/DetSetVectorNew.h"
68    
69     #include "DataFormats/SiStripCluster/interface/SiStripClusterCollection.h"
70 querten 1.1
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 roberfro 1.5 #include "TrackingTools/PatternTools/interface/Trajectory.h"
90 querten 1.6 #include "TrackingTools/PatternTools/interface/TrajTrackAssociation.h"
91    
92 querten 1.36 #include "DataFormats/HepMCCandidate/interface/GenParticle.h"
93    
94 querten 1.1
95 querten 1.2 #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 querten 1.1 #include "DataFormats/Math/interface/Point3D.h"
103     #include "DataFormats/GeometrySurface/interface/TrapezoidalPlaneBounds.h"
104     #include "DataFormats/GeometrySurface/interface/RectangularPlaneBounds.h"
105    
106 querten 1.11 #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 querten 1.28 #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 roberfro 1.38 #include "DataFormats/METReco/interface/CaloMET.h"
132     #include "DataFormats/METReco/interface/CaloMETFwd.h"
133 querten 1.28
134 querten 1.11 #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 roberfro 1.13 #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 querten 1.11
145 roberfro 1.13 #include "Visualisation/Frog/soft/Includes/FROG/FROG_DetId.h"
146 querten 1.18 #include "Visualisation/Frog/soft/Includes/FROG/FROG_ReadCards.cpp"
147 querten 1.28 #include "Visualisation/Frog/soft/Includes/FROG/FROG_Element_Event_NuclInt.h"
148 querten 1.27
149 querten 1.36 #include "Visualisation/Frog/soft/Includes/FROG/FROG_Coord.h"
150     #include "Visualisation/Frog/soft/Includes/FROG/FROG_Coord.cpp"
151    
152 querten 1.1
153 roberfro 1.24
154 querten 1.1 using namespace edm;
155     using namespace std;
156 querten 1.28 using namespace reco;
157 querten 1.1
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 querten 1.15 FROG_Element_Base* events_prim;
174 querten 1.1
175 querten 1.11 std::string OutputFile;
176 querten 1.1
177 querten 1.40 std::vector<InputTag> GenParticlesProducers;
178 querten 1.36
179 querten 1.1 std::vector<InputTag> SimTrackProducers;
180     std::vector<InputTag> SimVertexProducers;
181     std::vector<InputTag> SimHitProducers;
182 querten 1.25 std::vector<InputTag> SimCaloHitProducers;
183    
184 roberfro 1.24 std::vector<InputTag> NIProducers;
185 querten 1.1
186 querten 1.9 std::vector<InputTag> TrackProducers;
187 roberfro 1.5 std::vector<InputTag> TrajectoryProducers;
188 querten 1.37 std::vector<InputTag> SiStripClusterProducers;
189 querten 1.1 std::vector<InputTag> EcalRecHitProducers;
190     std::vector<InputTag> HcalHBHERecHitProducers;
191     std::vector<InputTag> HcalHORecHitProducers;
192     std::vector<InputTag> HcalHFRecHitProducers;
193 querten 1.2 std::vector<InputTag> DTSegmentProducers;
194     std::vector<InputTag> CSCSegmentProducers;
195    
196     std::vector<InputTag> RPCHitsProducers;
197 querten 1.1
198 querten 1.35 std::vector<InputTag> CaloTowersProducers;
199     bool CaloTowersProducersBasedOnCaloHits;
200    
201 querten 1.33 std::vector<InputTag> BasicJetsProducers;
202 querten 1.28 std::vector<InputTag> CaloJetsProducers;
203 querten 1.35 bool CaloJetsProducersBasedOnCaloTowers;
204 querten 1.28
205 querten 1.36 std::vector<InputTag> RecoCandidateProducers;
206 roberfro 1.38 std::vector<InputTag> CaloMETProducers;
207 querten 1.36
208    
209 querten 1.22 // ----------member data ---------------------------
210    
211     bool ProduceGeom;
212     int NEventsInVisFile;
213     int NEvents;
214 querten 1.1
215 querten 1.22 unsigned int SRun;
216     unsigned int SEvent;
217 querten 1.1 };
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 querten 1.40 GenParticlesProducers = iConfig.getParameter<std::vector<InputTag> >("GenParticlesProducers");
227 querten 1.36
228 querten 1.1 SimTrackProducers = iConfig.getParameter<std::vector<InputTag> >("SimTrackProducers");
229     SimVertexProducers = iConfig.getParameter<std::vector<InputTag> >("SimVertexProducers");
230     SimHitProducers = iConfig.getParameter<std::vector<InputTag> >("SimHitProducers");
231 querten 1.25 SimCaloHitProducers = iConfig.getParameter<std::vector<InputTag> >("SimCaloHitProducers");
232    
233 querten 1.1
234 querten 1.10 TrackProducers = iConfig.getParameter<std::vector<InputTag> >("TrackProducers");
235 querten 1.9 TrajectoryProducers = iConfig.getParameter<std::vector<InputTag> >("TrajectoryProducers");
236 querten 1.37 SiStripClusterProducers = iConfig.getParameter<std::vector<InputTag> >("SiStripClusterProducers");
237 querten 1.1 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 roberfro 1.24 NIProducers = iConfig.getParameter<std::vector<InputTag> >("NIProducers");
243    
244 querten 1.2 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 querten 1.35 CaloTowersProducers = iConfig.getParameter<std::vector<InputTag> >("CaloTowersProducers");
250     CaloTowersProducersBasedOnCaloHits = iConfig.getParameter<bool>("CaloTowersProducersBasedOnCaloHits");
251    
252    
253 querten 1.33 BasicJetsProducers = iConfig.getParameter<std::vector<InputTag> >("BasicJetsProducers");
254 querten 1.28 CaloJetsProducers = iConfig.getParameter<std::vector<InputTag> >("CaloJetsProducers");
255 querten 1.35 CaloJetsProducersBasedOnCaloTowers = iConfig.getParameter<bool>("CaloJetsProducersBasedOnCaloTowers");
256 querten 1.28
257 querten 1.36 RecoCandidateProducers = iConfig.getParameter<std::vector<InputTag> >("RecoCandidateProducers");
258 roberfro 1.38 CaloMETProducers = iConfig.getParameter<std::vector<InputTag> >("CaloMETProducers");
259 querten 1.36
260 querten 1.22 ProduceGeom = iConfig.getParameter<bool >("ProduceGeom" );
261     NEventsInVisFile = iConfig.getParameter<int >("NEventsInVisFile" );
262    
263     NEvents = 0;
264 querten 1.1 }
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 querten 1.22 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 querten 1.34 FROG_Element_Base_With_DetId* calo = new FROG_Element_Base_With_DetId(C_FEB_DETID, DETID_CALO); geom->addDaughter(calo);
290    
291 querten 1.22
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 querten 1.11
304 querten 1.1
305 querten 1.22 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 querten 1.1
329 querten 1.22 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 querten 1.1
342    
343 querten 1.22 Frog_DetId = DETID_TRK;
344     FEB = tracker;
345 querten 1.11
346 querten 1.22 Frog_DetId += SubDet*100000;
347 querten 1.11 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 querten 1.22 if(SubDet==PixelSubdetector::PixelBarrel){
352     PXBDetId detid = PXBDetId(Detid);
353 querten 1.11
354 querten 1.22 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 querten 1.11
359 querten 1.22 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 querten 1.11
366 querten 1.22 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 querten 1.11
371 querten 1.22 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 querten 1.11
376 querten 1.22 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 querten 1.11
381 querten 1.22 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 querten 1.11
388 querten 1.22 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 querten 1.11
393 querten 1.22 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 querten 1.11
400 querten 1.22 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 querten 1.11
405 querten 1.22 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 querten 1.11
417 querten 1.22 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 querten 1.11
422 querten 1.22 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 querten 1.11
429 querten 1.22 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 querten 1.11
434 querten 1.22 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 querten 1.1
439 querten 1.22 Frog_DetId += detid.ring()*10;
440 querten 1.11 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 querten 1.22
444     Frog_DetId += detid.petalNumber();
445 querten 1.11 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 querten 1.22 }else{
449     if(mod)delete mod;
450     continue;
451 querten 1.11 }
452 querten 1.22 FEB->addDaughter(mod);
453     }
454 querten 1.11
455    
456 querten 1.22 // ### MUON GEOMETRY ###
457 querten 1.11
458 querten 1.22 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 querten 1.1
475 querten 1.22 for(unsigned int i=0;i<MuonDets.size();i++)
476     {
477     Detid = DetId(MuonDets[i]->geographicalId());
478     SubDet = Detid.subdetId();
479 querten 1.1
480 querten 1.22 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 querten 1.1
505 querten 1.22 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 querten 1.7
518 querten 1.22 Frog_DetId = DETID_MUON;
519     FEB = muon;
520 querten 1.7
521 querten 1.11 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 querten 1.22 DTChamberId detid = DTChamberId(Detid);
528 querten 1.11
529 querten 1.22 Frog_DetId += (detid.wheel()+3)*10000;
530 querten 1.11 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 querten 1.22 Frog_DetId += detid.station()*100;
535 querten 1.11 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 querten 1.22 Frog_DetId += detid.sector()*1;
540 querten 1.11 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 querten 1.22 CSCDetId detid = CSCDetId(Detid);
545    
546     Frog_DetId += detid.endcap()*10000;
547 querten 1.11 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 querten 1.22
551     Frog_DetId += detid.station()*1000;
552 querten 1.11 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 querten 1.22
556     Frog_DetId += detid.ring()*100;
557 querten 1.11 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 querten 1.22
561     Frog_DetId += detid.chamber()*1;
562 querten 1.11 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 querten 1.22 }else if(SubDet==3){
566     RPCDetId detid = RPCDetId(Detid);
567 querten 1.11
568 querten 1.22 Frog_DetId += (detid.region()+2)*10000;
569 querten 1.11 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 querten 1.22 // 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 querten 1.11 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 querten 1.22 Frog_DetId += detid.sector()*1;
593 querten 1.11 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 querten 1.22 FEB->addDaughter(mod);
599     }
600    
601    
602    
603     // ### CALO GEOMETRY ###
604    
605     edm::ESHandle<CaloGeometry> CaloGeom;
606 querten 1.28 iSetup.get<CaloGeometryRecord>().get( CaloGeom );
607 querten 1.22 const vector<DetId> CaloDets = CaloGeom->getValidDetIds();
608 querten 1.11
609 querten 1.22 for(unsigned int i=0;i<CaloDets.size();i++)
610     {
611     Detid = CaloDets[i];
612     SubDet = Detid.subdetId();
613    
614 querten 1.34 if(Detid.det()==DetId::Ecal){
615     if(SubDet<1 || SubDet>3) continue;
616 querten 1.11
617 querten 1.34 Frog_DetId = DETID_ECAL;
618     FEB = ecal;
619 querten 1.11
620 querten 1.34 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 querten 1.22
710 querten 1.34 }else if(Detid.det() == DetId::Calo){
711 querten 1.22
712 querten 1.34 Frog_DetId = DETID_CALO;
713     FEB = calo;
714 querten 1.22
715 querten 1.34 if(SubDet!=(unsigned int)CaloTowerDetId::SubdetId)continue;
716 querten 1.22
717 querten 1.34 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 querten 1.35 }
741 querten 1.22
742 querten 1.34 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 querten 1.22
767 querten 1.34 FEB->addDaughter(mod);
768 querten 1.11 }
769    
770 querten 1.22 // ### Save .geom ###
771 querten 1.11
772 querten 1.22 FROG_Geometry* CMS_Geom = new FROG_Geometry(prim);
773     CMS_Geom->Save("CMS.geom");
774 querten 1.11 }
775    
776 querten 1.15 events_prim = new FROG_Element_Base(C_PRIMARY);
777 querten 1.1 }
778    
779     // ------------ method called once each job just after ending the event loop ------------
780     void
781 roberfro 1.13 Frog_Analyzer::endJob()
782 querten 1.22 {
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 querten 1.1 }
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 querten 1.22 if(NEvents == 0){
810     SRun = iEvent.id().run();
811     SEvent = iEvent.id().event();
812     }
813    
814    
815 querten 1.26 FROG_Element_Event* event = new FROG_Element_Event(iEvent.id().run(), iEvent.id().event(), iEvent.time().value() );
816 querten 1.15 events_prim->addDaughter(event);
817 querten 1.1
818 querten 1.2 // access the tracker
819     edm::ESHandle<TrackerGeometry> tkGeom;
820     iSetup.get<TrackerDigiGeometryRecord>().get( tkGeom );
821 querten 1.1
822 querten 1.2 edm::ESHandle<DTGeometry> DtGeom;
823     iSetup.get<MuonGeometryRecord>().get( DtGeom );
824    
825     edm::ESHandle<CSCGeometry> CscGeom;
826     iSetup.get<MuonGeometryRecord>().get( CscGeom );
827 querten 1.1
828 querten 1.2 edm::ESHandle<RPCGeometry> RpcGeom;
829     iSetup.get<MuonGeometryRecord>().get( RpcGeom );
830 querten 1.1
831 querten 1.25 edm::ESHandle<CaloGeometry> CaloGeom;
832 querten 1.36 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 querten 1.40
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 querten 1.36 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 querten 1.40 frogGenPartCollb->addDaughter(frogGenPart);
855     }
856 querten 1.36 }
857    
858    
859 querten 1.25
860 querten 1.2 // ### SIMTRACK ###
861 querten 1.25 FROG_Element_Base_With_DetId* frogSimTrkColl = new FROG_Element_Base_With_DetId(C_FEB_DETID, EVTID_SIMTRK);
862     event->addDaughter(frogSimTrkColl);
863    
864 querten 1.1 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 roberfro 1.13 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 querten 1.15 frogSimTrkColl->addDaughter(frogSimTrk);
877 querten 1.1 }
878     }
879    
880 querten 1.2 // ### SIMVERTEX ###
881 querten 1.25 FROG_Element_Base_With_DetId* frogSimVtx = new FROG_Element_Base_With_DetId(C_FEB_DETID, EVTID_SIMVTX);
882     event->addDaughter(frogSimVtx);
883    
884 querten 1.1 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 querten 1.25 FROG_Element_Event_Sim_Vertex* frogSimVertex = new FROG_Element_Event_Sim_Vertex(
893 roberfro 1.13 Vertex.position().x(), Vertex.position().y(), Vertex.position().z(),
894     Vertex.parentIndex());
895 querten 1.1
896 querten 1.25 frogSimVtx->addDaughter(frogSimVertex);
897 querten 1.1 }
898     }
899    
900 roberfro 1.13
901 querten 1.2 // ### SIMHIT ###
902 querten 1.15
903 querten 1.25 FROG_Element_Base_With_DetId* frogSimHit = new FROG_Element_Base_With_DetId(C_FEB_DETID, EVTID_SIMHIT);
904     event->addDaughter(frogSimHit);
905 querten 1.1 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 querten 1.25 FROG_Element_Base_With_DetId* frogSimHitColl = new FROG_Element_Base_With_DetId(C_FEB_DETID, EVTID_SIMHIT + i + 1);
911     frogSimHit->addDaughter(frogSimHitColl);
912 querten 1.15
913 querten 1.1 for(unsigned int h=0; h<Hits.size(); h++)
914     {
915 querten 1.2 DetId theDetUnitId(Hits[h].detUnitId());
916 querten 1.25 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 querten 1.1
922 querten 1.15
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 querten 1.1 }
928     }
929 querten 1.15
930 querten 1.25 // ### 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 roberfro 1.24 // 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 querten 1.1
974    
975 querten 1.25
976 querten 1.9 // ### TRAJECTORY ###
977 querten 1.25 FROG_Element_Base_With_DetId* frogTrk = new FROG_Element_Base_With_DetId(C_FEB_DETID, EVTID_TRK);
978     event->addDaughter(frogTrk);
979    
980 roberfro 1.5 for(unsigned int i=0;i<TrajectoryProducers.size();i++){
981 querten 1.6 Handle<TrajTrackAssociationCollection> trajTrackAssociationHandle;
982     iEvent.getByLabel(TrajectoryProducers[i], trajTrackAssociationHandle);
983     const TrajTrackAssociationCollection TrajToTrackMap = *trajTrackAssociationHandle.product();
984    
985 querten 1.25 FROG_Element_Base_With_DetId* frogTrkColl = new FROG_Element_Base_With_DetId(C_FEB_DETID, EVTID_TRK + i + 1);
986     frogTrk->addDaughter(frogTrkColl);
987 querten 1.15
988 querten 1.6 for(TrajTrackAssociationCollection::const_iterator it = TrajToTrackMap.begin(); it!=TrajToTrackMap.end(); ++it) {
989     Trajectory recoTraj = *it->key;
990 querten 1.15 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 querten 1.1
993 roberfro 1.5 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 querten 1.1 if(!h_it->isValid() )continue;
998     DetId detId = h_it->geographicalId();
999 roberfro 1.5 GlobalPoint globalPos = measurements[h].updatedState().globalPosition();
1000 querten 1.1
1001 querten 1.15 FROG_Element_Event_Hit* frogHit = new FROG_Element_Event_Hit(detId.rawId(), globalPos.x(),globalPos.y(), globalPos.z(), -1);
1002     frogTrk->addDaughter(frogHit);
1003 querten 1.1 }
1004 querten 1.40 printf("Add a Trajectory\n");
1005 querten 1.1 }
1006     }
1007    
1008 querten 1.9 // ### 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 querten 1.25 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 querten 1.15
1018 querten 1.11 //printf("Size of the TrackCOllection : %i = %i\n",i,TrackColl.size());
1019 querten 1.9 for ( unsigned int t = 0; t < TrackColl.size(); ++t ) {
1020 querten 1.15 reco::Track recoTrack =TrackColl[t];
1021 querten 1.9
1022 querten 1.15 FROG_Element_Event_Track* frogTrk = new FROG_Element_Event_Track(TrajectoryProducers.size()+i,recoTrack.p(),recoTrack.pt(), recoTrack.chi2());
1023     frogTrkColl->addDaughter(frogTrk);
1024 querten 1.9
1025 querten 1.15 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 querten 1.40 printf("Add a Track\n");
1047    
1048 querten 1.9 }
1049     }
1050    
1051    
1052 querten 1.37 // ### 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 querten 1.39
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 querten 1.37 edmNew::DetSet<SiStripCluster>::const_iterator end =DSViter->end();
1068 querten 1.39 for(edmNew::DetSet<SiStripCluster>::const_iterator iCluster=begin;iCluster!=end;++iCluster){
1069 querten 1.37
1070 querten 1.39 const GeomDetUnit* detUnit = tkGeom->idToDetUnit (DetId( iCluster->geographicalId() ) );
1071     if(!detUnit)continue;
1072 querten 1.37
1073     const StripGeomDetUnit* DetUnit = dynamic_cast<const StripGeomDetUnit*> ( detUnit );
1074     if(!DetUnit)continue;
1075    
1076 querten 1.39 const StripTopology& Topo = DetUnit->specificTopology();
1077 querten 1.37
1078     unsigned int Charge = 0;
1079 querten 1.39 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 querten 1.37
1083 querten 1.39 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 querten 1.37
1088     Surface::GlobalPoint Pos = DetUnit->surface().toGlobal( LocalPoint(XPos, 0, 0) );
1089    
1090    
1091 querten 1.39 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 querten 1.37 frogSstHitColl->addDaughter(frogStripHit);
1094     }}
1095    
1096     }
1097    
1098    
1099    
1100 querten 1.35 // ### 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 querten 1.2 // ### ECALRecHits ###
1106 querten 1.25 FROG_Element_Base_With_DetId* frogEcalHit = new FROG_Element_Base_With_DetId(C_FEB_DETID, EVTID_ECALHIT);
1107 querten 1.35 frogCaloHit->addDaughter(frogEcalHit);
1108 querten 1.1 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 querten 1.25 FROG_Element_Base_With_DetId* frogHitColl = new FROG_Element_Base_With_DetId(C_FEB_DETID, EVTID_ECALHIT + i + 1);
1114     frogEcalHit->addDaughter(frogHitColl);
1115 querten 1.15
1116 querten 1.1 for(unsigned int eh=0;eh<Ecal_RecHits.size();eh++){
1117 roberfro 1.14 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 querten 1.15 frogHitColl->addDaughter(frogCaloHit);
1120 querten 1.1 }
1121     }
1122    
1123    
1124 querten 1.2 // ### HCALRecHits ###
1125 querten 1.25 FROG_Element_Base_With_DetId* frogHcalHit = new FROG_Element_Base_With_DetId(C_FEB_DETID, EVTID_HCALHIT);
1126 querten 1.35 frogCaloHit->addDaughter(frogHcalHit);
1127 querten 1.1 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 querten 1.25 FROG_Element_Base_With_DetId* frogHitColl = new FROG_Element_Base_With_DetId(C_FEB_DETID, EVTID_HCALHIT + i + 1);
1133     frogHcalHit->addDaughter(frogHitColl);
1134 querten 1.15
1135 querten 1.1 for(unsigned int hh=0;hh<HcalHBHE_RecHits.size();hh++){
1136 roberfro 1.14 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 querten 1.15 frogHitColl->addDaughter(frogCaloHit);
1139 querten 1.1 }
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 querten 1.25 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 querten 1.15
1150 querten 1.1 for(unsigned int hh=0;hh<HcalHO_RecHits.size();hh++){
1151 querten 1.15 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 querten 1.1 }
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 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);
1163     frogHcalHit->addDaughter(frogHitColl);
1164 querten 1.15
1165 querten 1.1 for(unsigned int hh=0;hh<HcalHF_RecHits.size();hh++){
1166 querten 1.15 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 querten 1.1 }
1170     }
1171    
1172 querten 1.25
1173 querten 1.2 // ### Muon Segments ###
1174 querten 1.25 FROG_Element_Base_With_DetId* frogMuonSeg = new FROG_Element_Base_With_DetId(C_FEB_DETID, EVTID_MUONSEG);
1175     event->addDaughter(frogMuonSeg);
1176    
1177 querten 1.2 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 querten 1.25 FROG_Element_Base_With_DetId* frogSegColl = new FROG_Element_Base_With_DetId(C_FEB_DETID, EVTID_MUONSEG + i + 1);
1183     frogMuonSeg->addDaughter(frogSegColl);
1184 querten 1.15
1185 querten 1.2 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 querten 1.15 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 querten 1.2 }
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 querten 1.25 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 querten 1.15
1204 querten 1.2 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 querten 1.15 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 querten 1.2 }
1213     }
1214    
1215     // ### Muon Hits ###
1216 querten 1.25 FROG_Element_Base_With_DetId* frogMuonHit = new FROG_Element_Base_With_DetId(C_FEB_DETID, EVTID_MUONHIT);
1217     event->addDaughter(frogMuonHit);
1218 querten 1.2 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 querten 1.25 FROG_Element_Base_With_DetId* frogHitColl = new FROG_Element_Base_With_DetId(C_FEB_DETID, EVTID_MUONHIT + i + 1);
1224     frogMuonHit->addDaughter(frogHitColl);
1225 querten 1.15
1226 querten 1.2 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 querten 1.15 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 querten 1.2 }
1234     }
1235    
1236 querten 1.25
1237 querten 1.35 // ### 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 querten 1.33 // ### Basic Jets ###
1266 querten 1.35 FROG_Element_Base_With_DetId* frogBasicJet = new FROG_Element_Base_With_DetId(C_FEB_DETID, EVTID_JET_BASIC);
1267     frogJet->addDaughter(frogBasicJet);
1268 querten 1.33 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 querten 1.35 FROG_Element_Base_With_DetId* frogBasicJetColl = new FROG_Element_Base_With_DetId(C_FEB_DETID, EVTID_JET_BASIC + i + 1);
1274 querten 1.33 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 querten 1.28
1283     // ### Calo Jets ###
1284     FROG_Element_Base_With_DetId* frogCaloJet = new FROG_Element_Base_With_DetId(C_FEB_DETID, EVTID_JET_CALO);
1285 querten 1.35 frogJet->addDaughter(frogCaloJet);
1286 querten 1.28 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 querten 1.30 FROG_Element_Event_Jet* frogJet = new FROG_Element_Event_Jet(Calo_Jets[h].p(), Calo_Jets[h].eta(),Calo_Jets[h].phi());
1296 querten 1.35 frogCaloJetColl->addDaughter(frogJet);
1297 querten 1.32
1298 querten 1.35 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 querten 1.32 }
1303 querten 1.28 }
1304     }
1305    
1306 querten 1.36 // ### 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 roberfro 1.29 }
1321     }
1322    
1323 roberfro 1.38 // ### 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 querten 1.28
1342    
1343 querten 1.22 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 roberfro 1.13
1355 querten 1.22 events_prim = new FROG_Element_Base(C_PRIMARY);
1356     NEvents=0;
1357     }
1358 querten 1.15
1359 querten 1.1 }
1360    
1361    
1362     //define this as a plug-in
1363     DEFINE_FWK_MODULE(Frog_Analyzer);
1364    
1365