Page Menu
Home
HEPForge
Search
Configure Global Search
Log In
Files
F11222082
Frog_Analyzer.cc
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
47 KB
Subscribers
None
Frog_Analyzer.cc
View Options
// -*- C++ -*-
//
// Package: Frog_Analyzer
// Class: Frog_Analyzer
//
/**\class Frog_Analyzer Frog_Analyzer.cc Visualisation/Frog/src/Frog_Analyzer.cc
Description: <one line class summary>
Implementation:
<Notes on implementation>
*/
//
// Original Author: Loic QUERTENMONT
// Created: Fri Oct 26 07:22:12 CEST 2007
// $Id: Frog_Analyzer.cc,v 1.22 2008-07-09 08:49:50 querten Exp $
//
//
// system include files
#include
<memory>
// user include files
#include
"FWCore/Framework/interface/Frameworkfwd.h"
#include
"FWCore/Framework/interface/EDAnalyzer.h"
#include
"FWCore/Framework/interface/Event.h"
#include
"FWCore/Framework/interface/MakerMacros.h"
#include
"FWCore/ParameterSet/interface/ParameterSet.h"
#include
"FWCore/ServiceRegistry/interface/Service.h"
#include
"FWCore/Framework/interface/ESHandle.h"
#include
"Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h"
#include
"Geometry/CommonDetUnit/interface/GeomDetUnit.h"
#include
"Geometry/Records/interface/TrackerDigiGeometryRecord.h"
#include
"Geometry/TrackerNumberingBuilder/interface/GeometricDet.h"
#include
"Geometry/CommonTopologies/interface/PixelTopology.h"
#include
"Geometry/CommonTopologies/interface/StripTopology.h"
#include
"Geometry/TrackerGeometryBuilder/interface/PixelGeomDetType.h"
#include
"Geometry/TrackerGeometryBuilder/interface/StripGeomDetType.h"
#include
"Geometry/TrackerGeometryBuilder/interface/PixelGeomDetUnit.h"
#include
"Geometry/TrackerGeometryBuilder/interface/StripGeomDetUnit.h"
#include
"DataFormats/GeometrySurface/interface/BoundSurface.h"
#include
"DataFormats/DetId/interface/DetId.h"
#include
"Geometry/CaloEventSetup/interface/CaloTopologyRecord.h"
#include
"Geometry/Records/interface/IdealGeometryRecord.h"
#include
"Geometry/CaloGeometry/interface/CaloSubdetectorGeometry.h"
#include
"Geometry/CaloGeometry/interface/CaloGeometry.h"
#include
"Geometry/EcalBarrelAlgo/interface/EcalBarrelGeometry.h"
#include
"Geometry/EcalEndcapAlgo/interface/EcalEndcapGeometry.h"
#include
"Geometry/CaloGeometry/interface/CaloCellGeometry.h"
#include
"DataFormats/EcalDetId/interface/EcalSubdetector.h"
#include
"Geometry/CommonDetUnit/interface/TrackingGeometry.h"
#include
"Geometry/Records/interface/MuonGeometryRecord.h"
#include
"Geometry/DTGeometry/interface/DTGeometry.h"
#include
"Geometry/CSCGeometry/interface/CSCGeometry.h"
#include
"Geometry/RPCGeometry/interface/RPCGeometry.h"
#include
"DataFormats/CaloRecHit/interface/CaloRecHit.h"
#include
"DataFormats/EcalRecHit/interface/EcalRecHitCollections.h"
#include
"DataFormats/HcalRecHit/interface/HcalRecHitCollections.h"
#include
"SimDataFormats/TrackingHit/interface/PSimHitContainer.h"
#include
"SimDataFormats/TrackingHit/interface/PSimHit.h"
#include
"SimDataFormats/CrossingFrame/interface/CrossingFrame.h"
#include
"SimDataFormats/CrossingFrame/interface/MixCollection.h"
#include
"SimDataFormats/CaloHit/interface/PCaloHit.h"
#include
"SimDataFormats/Track/interface/SimTrack.h"
#include
"SimDataFormats/Vertex/interface/SimVertex.h"
#include
"DataFormats/Provenance/interface/BranchDescription.h"
#include
"DataFormats/Provenance/interface/Provenance.h"
#include
"DataFormats/Candidate/interface/Candidate.h"
#include
"DataFormats/HepMCCandidate/interface/GenParticleCandidate.h"
#include
"DataFormats/RecoCandidate/interface/RecoChargedCandidate.h"
#include
"DataFormats/TrackReco/interface/Track.h"
#include
"TrackingTools/PatternTools/interface/Trajectory.h"
#include
"TrackingTools/PatternTools/interface/TrajTrackAssociation.h"
#include
"DataFormats/DTRecHit/interface/DTRecSegment4DCollection.h"
#include
"DataFormats/CSCRecHit/interface/CSCSegmentCollection.h"
#include
"DataFormats/DTRecHit/interface/DTRecHitCollection.h"
#include
"DataFormats/CSCRecHit/interface/CSCRecHit2DCollection.h"
#include
"DataFormats/RPCRecHit/interface/RPCRecHitCollection.h"
#include
"DataFormats/Math/interface/Point3D.h"
#include
"DataFormats/GeometrySurface/interface/TrapezoidalPlaneBounds.h"
#include
"DataFormats/GeometrySurface/interface/RectangularPlaneBounds.h"
#include
"DataFormats/SiPixelDetId/interface/PixelSubdetector.h"
#include
"DataFormats/SiStripDetId/interface/StripSubdetector.h"
#include
"DataFormats/SiPixelDetId/interface/PXBDetId.h"
#include
"DataFormats/SiPixelDetId/interface/PXFDetId.h"
#include
"DataFormats/SiStripDetId/interface/TIBDetId.h"
#include
"DataFormats/SiStripDetId/interface/TIDDetId.h"
#include
"DataFormats/SiStripDetId/interface/TOBDetId.h"
#include
"DataFormats/SiStripDetId/interface/TECDetId.h"
#include
"DataFormats/MuonDetId/interface/DTChamberId.h"
#include
"DataFormats/MuonDetId/interface/CSCDetId.h"
#include
"DataFormats/MuonDetId/interface/RPCDetId.h"
#include
"DataFormats/EcalDetId/interface/EBDetId.h"
#include
"DataFormats/EcalDetId/interface/EEDetId.h"
#include
"DataFormats/EcalDetId/interface/ESDetId.h"
#include
"DataFormats/HcalDetId/interface/HcalDetId.h"
#include
"Visualisation/Frog/soft/Includes/FROG/FROG_Element_Base_With_DetId.h"
#include
"Visualisation/Frog/soft/Includes/FROG/FROG_Element_Tools.h"
#include
"Visualisation/Frog/soft/Includes/FROG/FROG_Element_Tools.cpp"
#include
"Visualisation/Frog/soft/Includes/FROG/FROG_Element_Event_Track.h"
#include
"Visualisation/Frog/soft/Includes/FROG/FROG_Events.h"
#include
"Visualisation/Frog/soft/Includes/FROG/FROG_Events.cpp"
#include
"Visualisation/Frog/soft/Includes/FROG/FROG_Geometry.h"
#include
"Visualisation/Frog/soft/Includes/FROG/FROG_Geometry.cpp"
#include
"Visualisation/Frog/soft/Includes/FROG/FROG_DetId.h"
#include
"Visualisation/Frog/soft/Includes/FROG/FROG_ReadCards.cpp"
using
namespace
edm
;
using
namespace
std
;
//
// class decleration
//
class
Frog_Analyzer
:
public
edm
::
EDAnalyzer
{
public
:
explicit
Frog_Analyzer
(
const
edm
::
ParameterSet
&
);
~
Frog_Analyzer
();
private
:
virtual
void
beginJob
(
const
edm
::
EventSetup
&
iSetup
);
virtual
void
analyze
(
const
edm
::
Event
&
,
const
edm
::
EventSetup
&
);
virtual
void
endJob
();
FROG_Element_Base
*
events_prim
;
std
::
string
OutputFile
;
std
::
vector
<
InputTag
>
SimTrackProducers
;
std
::
vector
<
InputTag
>
SimVertexProducers
;
std
::
vector
<
InputTag
>
SimHitProducers
;
std
::
vector
<
InputTag
>
TrackProducers
;
std
::
vector
<
InputTag
>
TrajectoryProducers
;
std
::
vector
<
InputTag
>
EcalRecHitProducers
;
std
::
vector
<
InputTag
>
HcalHBHERecHitProducers
;
std
::
vector
<
InputTag
>
HcalHORecHitProducers
;
std
::
vector
<
InputTag
>
HcalHFRecHitProducers
;
std
::
vector
<
InputTag
>
DTSegmentProducers
;
std
::
vector
<
InputTag
>
CSCSegmentProducers
;
std
::
vector
<
InputTag
>
RPCHitsProducers
;
// ----------member data ---------------------------
bool
ProduceGeom
;
int
NEventsInVisFile
;
int
NEvents
;
unsigned
int
SRun
;
unsigned
int
SEvent
;
};
//
// constructors and destructor
//
Frog_Analyzer
::
Frog_Analyzer
(
const
edm
::
ParameterSet
&
iConfig
)
{
OutputFile
=
iConfig
.
getParameter
<
std
::
string
>
(
"OutputFile"
);
SimTrackProducers
=
iConfig
.
getParameter
<
std
::
vector
<
InputTag
>
>
(
"SimTrackProducers"
);
SimVertexProducers
=
iConfig
.
getParameter
<
std
::
vector
<
InputTag
>
>
(
"SimVertexProducers"
);
SimHitProducers
=
iConfig
.
getParameter
<
std
::
vector
<
InputTag
>
>
(
"SimHitProducers"
);
TrackProducers
=
iConfig
.
getParameter
<
std
::
vector
<
InputTag
>
>
(
"TrackProducers"
);
TrajectoryProducers
=
iConfig
.
getParameter
<
std
::
vector
<
InputTag
>
>
(
"TrajectoryProducers"
);
EcalRecHitProducers
=
iConfig
.
getParameter
<
std
::
vector
<
InputTag
>
>
(
"EcalRecHitProducers"
);
HcalHBHERecHitProducers
=
iConfig
.
getParameter
<
std
::
vector
<
InputTag
>
>
(
"HcalHBHERecHitProducers"
);
HcalHORecHitProducers
=
iConfig
.
getParameter
<
std
::
vector
<
InputTag
>
>
(
"HcalHORecHitProducers"
);
HcalHFRecHitProducers
=
iConfig
.
getParameter
<
std
::
vector
<
InputTag
>
>
(
"HcalHFRecHitProducers"
);
DTSegmentProducers
=
iConfig
.
getParameter
<
std
::
vector
<
InputTag
>
>
(
"DTSegmentProducers"
);
CSCSegmentProducers
=
iConfig
.
getParameter
<
std
::
vector
<
InputTag
>
>
(
"CSCSegmentProducers"
);
RPCHitsProducers
=
iConfig
.
getParameter
<
std
::
vector
<
InputTag
>
>
(
"RPCHitsProducers"
);
ProduceGeom
=
iConfig
.
getParameter
<
bool
>
(
"ProduceGeom"
);
NEventsInVisFile
=
iConfig
.
getParameter
<
int
>
(
"NEventsInVisFile"
);
NEvents
=
0
;
}
Frog_Analyzer
::~
Frog_Analyzer
()
{
}
// ------------ method called once each job just before starting event loop ------------
void
Frog_Analyzer
::
beginJob
(
const
edm
::
EventSetup
&
iSetup
)
{
if
(
ProduceGeom
){
DetId
Detid
;
unsigned
int
SubDet
;
unsigned
int
Frog_DetId
;
FROG_Element_Base
*
FEB
=
NULL
;
FROG_Element_Base_With_DetId
*
FEB_Temp
=
NULL
;
FROG_Element_Base
*
prim
=
new
FROG_Element_Base
(
C_PRIMARY
);
FROG_Element_Base
*
geom
=
new
FROG_Element_Base
(
C_GEOMETRY
);
prim
->
addDaughter
(
geom
);
FROG_Element_Base_With_DetId
*
tracker
=
new
FROG_Element_Base_With_DetId
(
C_FEB_DETID
,
DETID_TRK
);
geom
->
addDaughter
(
tracker
);
FROG_Element_Base_With_DetId
*
muon
=
new
FROG_Element_Base_With_DetId
(
C_FEB_DETID
,
DETID_MUON
);
geom
->
addDaughter
(
muon
);
FROG_Element_Base_With_DetId
*
ecal
=
new
FROG_Element_Base_With_DetId
(
C_FEB_DETID
,
DETID_ECAL
);
geom
->
addDaughter
(
ecal
);
FROG_Element_Base_With_DetId
*
hcal
=
new
FROG_Element_Base_With_DetId
(
C_FEB_DETID
,
DETID_HCAL
);
geom
->
addDaughter
(
hcal
);
// ### TRACKER GEOMETRY ###
edm
::
ESHandle
<
TrackerGeometry
>
tkGeom
;
iSetup
.
get
<
TrackerDigiGeometryRecord
>
().
get
(
tkGeom
);
vector
<
GeomDet
*>
TrackerDets
=
tkGeom
->
dets
();
for
(
unsigned
int
i
=
0
;
i
<
TrackerDets
.
size
();
i
++
){
Detid
=
TrackerDets
[
i
]
->
geographicalId
();
SubDet
=
Detid
.
subdetId
();
if
(
SubDet
<
1
||
SubDet
>
6
)
continue
;
GeomDet
*
DetUnit
=
TrackerDets
[
i
];
if
(
!
DetUnit
)
continue
;
const
BoundPlane
plane
=
DetUnit
->
surface
();
const
TrapezoidalPlaneBounds
*
trapezoidalBounds
(
dynamic_cast
<
const
TrapezoidalPlaneBounds
*>
(
&
(
plane
.
bounds
())));
const
RectangularPlaneBounds
*
rectangularBounds
(
dynamic_cast
<
const
RectangularPlaneBounds
*>
(
&
(
plane
.
bounds
())));
float
width
=
0
;
float
length
=
0
;
float
thickness
=
0
;
float
TrapezoidalParam
=
0
;
if
(
trapezoidalBounds
){
std
::
vector
<
float
>
const
&
parameters
=
(
*
trapezoidalBounds
).
parameters
();
width
=
parameters
[
0
]
*
2
;
length
=
parameters
[
3
]
*
2
;
thickness
=
(
*
trapezoidalBounds
).
thickness
();
TrapezoidalParam
=
parameters
[
1
]
/
parameters
[
0
];
}
else
if
(
rectangularBounds
){
width
=
DetUnit
->
surface
().
bounds
().
width
();
length
=
DetUnit
->
surface
().
bounds
().
length
();
thickness
=
DetUnit
->
surface
().
bounds
().
thickness
();
TrapezoidalParam
=
1
;
}
Surface
::
GlobalPoint
WidthVector
=
plane
.
toGlobal
(
LocalPoint
(
width
/
2
,
0
,
0
)
);
Surface
::
GlobalPoint
LengthVector
=
plane
.
toGlobal
(
LocalPoint
(
0
,
length
/
2
,
0
)
);
Surface
::
GlobalPoint
ThickVector
=
plane
.
toGlobal
(
LocalPoint
(
0
,
0
,
thickness
/
2
)
);
GlobalVector
Pos
=
GlobalVector
(
DetUnit
->
position
().
basicVector
());
FROG_Element_Geom_TrackerMod
*
mod
=
new
FROG_Element_Geom_TrackerMod
(
Detid
.
rawId
(),
TrapezoidalParam
,
Pos
.
x
(),
Pos
.
y
(),
Pos
.
z
(),
WidthVector
.
x
()
-
Pos
.
x
(),
WidthVector
.
y
()
-
Pos
.
y
(),
WidthVector
.
z
()
-
Pos
.
z
(),
LengthVector
.
x
()
-
Pos
.
x
(),
LengthVector
.
y
()
-
Pos
.
y
(),
LengthVector
.
z
()
-
Pos
.
z
(),
ThickVector
.
x
()
-
Pos
.
x
(),
ThickVector
.
y
()
-
Pos
.
y
(),
ThickVector
.
z
()
-
Pos
.
z
());
Frog_DetId
=
DETID_TRK
;
FEB
=
tracker
;
Frog_DetId
+=
SubDet
*
100000
;
FEB_Temp
=
dynamic_cast
<
FROG_Element_Base_With_DetId
*>
(
FEB
);
FEB
=
FEB_Temp
->
getDaughterWithDetId
(
Frog_DetId
);
if
(
FEB
==
NULL
){
FEB
=
new
FROG_Element_Base_With_DetId
(
C_FEB_DETID
,
Frog_DetId
);
FEB_Temp
->
addDaughter
(
FEB
);}
if
(
SubDet
==
PixelSubdetector
::
PixelBarrel
){
PXBDetId
detid
=
PXBDetId
(
Detid
);
Frog_DetId
+=
detid
.
layer
()
*
10000
;
FEB_Temp
=
dynamic_cast
<
FROG_Element_Base_With_DetId
*>
(
FEB
);
FEB
=
FEB_Temp
->
getDaughterWithDetId
(
Frog_DetId
);
if
(
FEB
==
NULL
){
FEB
=
new
FROG_Element_Base_With_DetId
(
C_FEB_DETID
,
Frog_DetId
);
FEB_Temp
->
addDaughter
(
FEB
);}
Frog_DetId
+=
detid
.
ladder
()
*
100
;
FEB_Temp
=
dynamic_cast
<
FROG_Element_Base_With_DetId
*>
(
FEB
);
FEB
=
FEB_Temp
->
getDaughterWithDetId
(
Frog_DetId
);
if
(
FEB
==
NULL
){
FEB
=
new
FROG_Element_Base_With_DetId
(
C_FEB_DETID
,
Frog_DetId
);
FEB_Temp
->
addDaughter
(
FEB
);}
}
else
if
(
SubDet
==
PixelSubdetector
::
PixelEndcap
){
PXFDetId
detid
=
PXFDetId
(
Detid
);
Frog_DetId
+=
detid
.
side
()
*
10000
;
FEB_Temp
=
dynamic_cast
<
FROG_Element_Base_With_DetId
*>
(
FEB
);
FEB
=
FEB_Temp
->
getDaughterWithDetId
(
Frog_DetId
);
if
(
FEB
==
NULL
){
FEB
=
new
FROG_Element_Base_With_DetId
(
C_FEB_DETID
,
Frog_DetId
);
FEB_Temp
->
addDaughter
(
FEB
);}
Frog_DetId
+=
detid
.
disk
()
*
1000
;
FEB_Temp
=
dynamic_cast
<
FROG_Element_Base_With_DetId
*>
(
FEB
);
FEB
=
FEB_Temp
->
getDaughterWithDetId
(
Frog_DetId
);
if
(
FEB
==
NULL
){
FEB
=
new
FROG_Element_Base_With_DetId
(
C_FEB_DETID
,
Frog_DetId
);
FEB_Temp
->
addDaughter
(
FEB
);}
Frog_DetId
+=
detid
.
blade
()
*
10
;
FEB_Temp
=
dynamic_cast
<
FROG_Element_Base_With_DetId
*>
(
FEB
);
FEB
=
FEB_Temp
->
getDaughterWithDetId
(
Frog_DetId
);
if
(
FEB
==
NULL
){
FEB
=
new
FROG_Element_Base_With_DetId
(
C_FEB_DETID
,
Frog_DetId
);
FEB_Temp
->
addDaughter
(
FEB
);}
Frog_DetId
+=
detid
.
panel
()
*
1
;
FEB_Temp
=
dynamic_cast
<
FROG_Element_Base_With_DetId
*>
(
FEB
);
FEB
=
FEB_Temp
->
getDaughterWithDetId
(
Frog_DetId
);
if
(
FEB
==
NULL
){
FEB
=
new
FROG_Element_Base_With_DetId
(
C_FEB_DETID
,
Frog_DetId
);
FEB_Temp
->
addDaughter
(
FEB
);}
}
else
if
(
SubDet
==
StripSubdetector
::
TIB
){
TIBDetId
detid
=
TIBDetId
(
Detid
);
Frog_DetId
+=
detid
.
layer
()
*
10000
;
FEB_Temp
=
dynamic_cast
<
FROG_Element_Base_With_DetId
*>
(
FEB
);
FEB
=
FEB_Temp
->
getDaughterWithDetId
(
Frog_DetId
);
if
(
FEB
==
NULL
){
FEB
=
new
FROG_Element_Base_With_DetId
(
C_FEB_DETID
,
Frog_DetId
);
FEB_Temp
->
addDaughter
(
FEB
);}
Frog_DetId
+=
detid
.
stringNumber
()
*
100
;
FEB_Temp
=
dynamic_cast
<
FROG_Element_Base_With_DetId
*>
(
FEB
);
FEB
=
FEB_Temp
->
getDaughterWithDetId
(
Frog_DetId
);
if
(
FEB
==
NULL
){
FEB
=
new
FROG_Element_Base_With_DetId
(
C_FEB_DETID
,
Frog_DetId
);
FEB_Temp
->
addDaughter
(
FEB
);}
}
else
if
(
SubDet
==
StripSubdetector
::
TID
){
TIDDetId
detid
=
TIDDetId
(
Detid
);
Frog_DetId
+=
detid
.
side
()
*
10000
;
FEB_Temp
=
dynamic_cast
<
FROG_Element_Base_With_DetId
*>
(
FEB
);
FEB
=
FEB_Temp
->
getDaughterWithDetId
(
Frog_DetId
);
if
(
FEB
==
NULL
){
FEB
=
new
FROG_Element_Base_With_DetId
(
C_FEB_DETID
,
Frog_DetId
);
FEB_Temp
->
addDaughter
(
FEB
);}
Frog_DetId
+=
detid
.
wheel
()
*
1000
;
FEB_Temp
=
dynamic_cast
<
FROG_Element_Base_With_DetId
*>
(
FEB
);
FEB
=
FEB_Temp
->
getDaughterWithDetId
(
Frog_DetId
);
if
(
FEB
==
NULL
){
FEB
=
new
FROG_Element_Base_With_DetId
(
C_FEB_DETID
,
Frog_DetId
);
FEB_Temp
->
addDaughter
(
FEB
);}
Frog_DetId
+=
detid
.
ring
()
*
10
;
FEB_Temp
=
dynamic_cast
<
FROG_Element_Base_With_DetId
*>
(
FEB
);
FEB
=
FEB_Temp
->
getDaughterWithDetId
(
Frog_DetId
);
if
(
FEB
==
NULL
){
FEB
=
new
FROG_Element_Base_With_DetId
(
C_FEB_DETID
,
Frog_DetId
);
FEB_Temp
->
addDaughter
(
FEB
);}
}
else
if
(
SubDet
==
StripSubdetector
::
TOB
){
TOBDetId
detid
=
TOBDetId
(
Detid
);
Frog_DetId
+=
detid
.
layer
()
*
10000
;
FEB_Temp
=
dynamic_cast
<
FROG_Element_Base_With_DetId
*>
(
FEB
);
FEB
=
FEB_Temp
->
getDaughterWithDetId
(
Frog_DetId
);
if
(
FEB
==
NULL
){
FEB
=
new
FROG_Element_Base_With_DetId
(
C_FEB_DETID
,
Frog_DetId
);
FEB_Temp
->
addDaughter
(
FEB
);}
Frog_DetId
+=
detid
.
rodNumber
()
*
100
;
FEB_Temp
=
dynamic_cast
<
FROG_Element_Base_With_DetId
*>
(
FEB
);
FEB
=
FEB_Temp
->
getDaughterWithDetId
(
Frog_DetId
);
if
(
FEB
==
NULL
){
FEB
=
new
FROG_Element_Base_With_DetId
(
C_FEB_DETID
,
Frog_DetId
);
FEB_Temp
->
addDaughter
(
FEB
);}
}
else
if
(
SubDet
==
StripSubdetector
::
TEC
){
TECDetId
detid
=
TECDetId
(
Detid
);
Frog_DetId
+=
detid
.
side
()
*
10000
;
FEB_Temp
=
dynamic_cast
<
FROG_Element_Base_With_DetId
*>
(
FEB
);
FEB
=
FEB_Temp
->
getDaughterWithDetId
(
Frog_DetId
);
if
(
FEB
==
NULL
){
FEB
=
new
FROG_Element_Base_With_DetId
(
C_FEB_DETID
,
Frog_DetId
);
FEB_Temp
->
addDaughter
(
FEB
);}
Frog_DetId
+=
detid
.
wheel
()
*
1000
;
FEB_Temp
=
dynamic_cast
<
FROG_Element_Base_With_DetId
*>
(
FEB
);
FEB
=
FEB_Temp
->
getDaughterWithDetId
(
Frog_DetId
);
if
(
FEB
==
NULL
){
FEB
=
new
FROG_Element_Base_With_DetId
(
C_FEB_DETID
,
Frog_DetId
);
FEB_Temp
->
addDaughter
(
FEB
);}
Frog_DetId
+=
detid
.
ring
()
*
10
;
FEB_Temp
=
dynamic_cast
<
FROG_Element_Base_With_DetId
*>
(
FEB
);
FEB
=
FEB_Temp
->
getDaughterWithDetId
(
Frog_DetId
);
if
(
FEB
==
NULL
){
FEB
=
new
FROG_Element_Base_With_DetId
(
C_FEB_DETID
,
Frog_DetId
);
FEB_Temp
->
addDaughter
(
FEB
);}
Frog_DetId
+=
detid
.
petalNumber
();
FEB_Temp
=
dynamic_cast
<
FROG_Element_Base_With_DetId
*>
(
FEB
);
FEB
=
FEB_Temp
->
getDaughterWithDetId
(
Frog_DetId
);
if
(
FEB
==
NULL
){
FEB
=
new
FROG_Element_Base_With_DetId
(
C_FEB_DETID
,
Frog_DetId
);
FEB_Temp
->
addDaughter
(
FEB
);}
}
else
{
if
(
mod
)
delete
mod
;
continue
;
}
FEB
->
addDaughter
(
mod
);
}
// ### MUON GEOMETRY ###
edm
::
ESHandle
<
DTGeometry
>
DtGeom
;
iSetup
.
get
<
MuonGeometryRecord
>
().
get
(
DtGeom
);
const
vector
<
GeomDet
*>
DtDets
=
DtGeom
->
dets
();
edm
::
ESHandle
<
CSCGeometry
>
CscGeom
;
iSetup
.
get
<
MuonGeometryRecord
>
().
get
(
CscGeom
);
const
vector
<
GeomDet
*>
CscDets
=
CscGeom
->
dets
();
edm
::
ESHandle
<
RPCGeometry
>
RpcGeom
;
iSetup
.
get
<
MuonGeometryRecord
>
().
get
(
RpcGeom
);
const
vector
<
GeomDet
*>
RpcDets
=
RpcGeom
->
dets
();
vector
<
GeomDet
*>
MuonDets
;
for
(
unsigned
int
i
=
0
;
i
<
DtDets
.
size
()
;
i
++
){
MuonDets
.
push_back
(
DtDets
[
i
]);}
for
(
unsigned
int
i
=
0
;
i
<
CscDets
.
size
();
i
++
){
MuonDets
.
push_back
(
CscDets
[
i
]);}
for
(
unsigned
int
i
=
0
;
i
<
RpcDets
.
size
();
i
++
){
MuonDets
.
push_back
(
RpcDets
[
i
]);}
for
(
unsigned
int
i
=
0
;
i
<
MuonDets
.
size
();
i
++
)
{
Detid
=
DetId
(
MuonDets
[
i
]
->
geographicalId
());
SubDet
=
Detid
.
subdetId
();
GeomDet
*
DetUnit
=
MuonDets
[
i
];
if
(
!
DetUnit
)
continue
;
const
BoundPlane
plane
=
DetUnit
->
surface
();
const
TrapezoidalPlaneBounds
*
trapezoidalBounds
(
dynamic_cast
<
const
TrapezoidalPlaneBounds
*>
(
&
(
plane
.
bounds
())));
const
RectangularPlaneBounds
*
rectangularBounds
(
dynamic_cast
<
const
RectangularPlaneBounds
*>
(
&
(
plane
.
bounds
())));
float
width
=
0
;
float
length
=
0
;
float
thickness
=
0
;
float
TrapezoidalParam
=
0
;
if
(
trapezoidalBounds
)
{
std
::
vector
<
float
>
const
&
parameters
=
(
*
trapezoidalBounds
).
parameters
();
width
=
parameters
[
0
]
*
2
;
length
=
parameters
[
3
]
*
2
;
thickness
=
(
*
trapezoidalBounds
).
thickness
();
TrapezoidalParam
=
parameters
[
1
]
/
parameters
[
0
];
}
else
if
(
rectangularBounds
){
width
=
DetUnit
->
surface
().
bounds
().
width
();
length
=
DetUnit
->
surface
().
bounds
().
length
();
thickness
=
DetUnit
->
surface
().
bounds
().
thickness
();
TrapezoidalParam
=
1
;
}
Surface
::
GlobalPoint
WidthVector
=
plane
.
toGlobal
(
LocalPoint
(
width
/
2
,
0
,
0
)
);
Surface
::
GlobalPoint
LengthVector
=
plane
.
toGlobal
(
LocalPoint
(
0
,
length
/
2
,
0
)
);
Surface
::
GlobalPoint
ThickVector
=
plane
.
toGlobal
(
LocalPoint
(
0
,
0
,
thickness
/
2
)
);
GlobalVector
Pos
=
GlobalVector
(
DetUnit
->
position
().
basicVector
());
FROG_Element_Geom_TrackerMod
*
mod
=
new
FROG_Element_Geom_TrackerMod
(
Detid
.
rawId
(),
TrapezoidalParam
,
Pos
.
x
(),
Pos
.
y
(),
Pos
.
z
(),
WidthVector
.
x
()
-
Pos
.
x
(),
WidthVector
.
y
()
-
Pos
.
y
(),
WidthVector
.
z
()
-
Pos
.
z
(),
LengthVector
.
x
()
-
Pos
.
x
(),
LengthVector
.
y
()
-
Pos
.
y
(),
LengthVector
.
z
()
-
Pos
.
z
(),
ThickVector
.
x
()
-
Pos
.
x
(),
ThickVector
.
y
()
-
Pos
.
y
(),
ThickVector
.
z
()
-
Pos
.
z
());
Frog_DetId
=
DETID_MUON
;
FEB
=
muon
;
Frog_DetId
+=
SubDet
*
100000
;
FEB_Temp
=
dynamic_cast
<
FROG_Element_Base_With_DetId
*>
(
FEB
);
FEB
=
FEB_Temp
->
getDaughterWithDetId
(
Frog_DetId
);
if
(
FEB
==
NULL
){
FEB
=
new
FROG_Element_Base_With_DetId
(
C_FEB_DETID
,
Frog_DetId
);
FEB_Temp
->
addDaughter
(
FEB
);}
if
(
SubDet
==
1
){
DTChamberId
detid
=
DTChamberId
(
Detid
);
Frog_DetId
+=
(
detid
.
wheel
()
+
3
)
*
10000
;
FEB_Temp
=
dynamic_cast
<
FROG_Element_Base_With_DetId
*>
(
FEB
);
FEB
=
FEB_Temp
->
getDaughterWithDetId
(
Frog_DetId
);
if
(
FEB
==
NULL
){
FEB
=
new
FROG_Element_Base_With_DetId
(
C_FEB_DETID
,
Frog_DetId
);
FEB_Temp
->
addDaughter
(
FEB
);}
Frog_DetId
+=
detid
.
station
()
*
100
;
FEB_Temp
=
dynamic_cast
<
FROG_Element_Base_With_DetId
*>
(
FEB
);
FEB
=
FEB_Temp
->
getDaughterWithDetId
(
Frog_DetId
);
if
(
FEB
==
NULL
){
FEB
=
new
FROG_Element_Base_With_DetId
(
C_FEB_DETID
,
Frog_DetId
);
FEB_Temp
->
addDaughter
(
FEB
);}
Frog_DetId
+=
detid
.
sector
()
*
1
;
FEB_Temp
=
dynamic_cast
<
FROG_Element_Base_With_DetId
*>
(
FEB
);
FEB
=
FEB_Temp
->
getDaughterWithDetId
(
Frog_DetId
);
if
(
FEB
==
NULL
){
FEB
=
new
FROG_Element_Base_With_DetId
(
C_FEB_DETID
,
Frog_DetId
);
FEB_Temp
->
addDaughter
(
FEB
);}
}
else
if
(
SubDet
==
2
){
CSCDetId
detid
=
CSCDetId
(
Detid
);
Frog_DetId
+=
detid
.
endcap
()
*
10000
;
FEB_Temp
=
dynamic_cast
<
FROG_Element_Base_With_DetId
*>
(
FEB
);
FEB
=
FEB_Temp
->
getDaughterWithDetId
(
Frog_DetId
);
if
(
FEB
==
NULL
){
FEB
=
new
FROG_Element_Base_With_DetId
(
C_FEB_DETID
,
Frog_DetId
);
FEB_Temp
->
addDaughter
(
FEB
);}
Frog_DetId
+=
detid
.
station
()
*
1000
;
FEB_Temp
=
dynamic_cast
<
FROG_Element_Base_With_DetId
*>
(
FEB
);
FEB
=
FEB_Temp
->
getDaughterWithDetId
(
Frog_DetId
);
if
(
FEB
==
NULL
){
FEB
=
new
FROG_Element_Base_With_DetId
(
C_FEB_DETID
,
Frog_DetId
);
FEB_Temp
->
addDaughter
(
FEB
);}
Frog_DetId
+=
detid
.
ring
()
*
100
;
FEB_Temp
=
dynamic_cast
<
FROG_Element_Base_With_DetId
*>
(
FEB
);
FEB
=
FEB_Temp
->
getDaughterWithDetId
(
Frog_DetId
);
if
(
FEB
==
NULL
){
FEB
=
new
FROG_Element_Base_With_DetId
(
C_FEB_DETID
,
Frog_DetId
);
FEB_Temp
->
addDaughter
(
FEB
);}
Frog_DetId
+=
detid
.
chamber
()
*
1
;
FEB_Temp
=
dynamic_cast
<
FROG_Element_Base_With_DetId
*>
(
FEB
);
FEB
=
FEB_Temp
->
getDaughterWithDetId
(
Frog_DetId
);
if
(
FEB
==
NULL
){
FEB
=
new
FROG_Element_Base_With_DetId
(
C_FEB_DETID
,
Frog_DetId
);
FEB_Temp
->
addDaughter
(
FEB
);}
}
else
if
(
SubDet
==
3
){
RPCDetId
detid
=
RPCDetId
(
Detid
);
Frog_DetId
+=
(
detid
.
region
()
+
2
)
*
10000
;
FEB_Temp
=
dynamic_cast
<
FROG_Element_Base_With_DetId
*>
(
FEB
);
FEB
=
FEB_Temp
->
getDaughterWithDetId
(
Frog_DetId
);
if
(
FEB
==
NULL
){
FEB
=
new
FROG_Element_Base_With_DetId
(
C_FEB_DETID
,
Frog_DetId
);
FEB_Temp
->
addDaughter
(
FEB
);}
// Barrel
if
(
detid
.
region
()
==
0
){
Frog_DetId
+=
(
detid
.
ring
()
+
3
)
*
1000
;
FEB_Temp
=
dynamic_cast
<
FROG_Element_Base_With_DetId
*>
(
FEB
);
FEB
=
FEB_Temp
->
getDaughterWithDetId
(
Frog_DetId
);
if
(
FEB
==
NULL
){
FEB
=
new
FROG_Element_Base_With_DetId
(
C_FEB_DETID
,
Frog_DetId
);
FEB_Temp
->
addDaughter
(
FEB
);}
// Endcap
}
else
{
Frog_DetId
+=
detid
.
ring
()
*
1000
;
FEB_Temp
=
dynamic_cast
<
FROG_Element_Base_With_DetId
*>
(
FEB
);
FEB
=
FEB_Temp
->
getDaughterWithDetId
(
Frog_DetId
);
if
(
FEB
==
NULL
){
FEB
=
new
FROG_Element_Base_With_DetId
(
C_FEB_DETID
,
Frog_DetId
);
FEB_Temp
->
addDaughter
(
FEB
);}
}
Frog_DetId
+=
detid
.
station
()
*
100
;
FEB_Temp
=
dynamic_cast
<
FROG_Element_Base_With_DetId
*>
(
FEB
);
FEB
=
FEB_Temp
->
getDaughterWithDetId
(
Frog_DetId
);
if
(
FEB
==
NULL
){
FEB
=
new
FROG_Element_Base_With_DetId
(
C_FEB_DETID
,
Frog_DetId
);
FEB_Temp
->
addDaughter
(
FEB
);}
Frog_DetId
+=
detid
.
sector
()
*
1
;
FEB_Temp
=
dynamic_cast
<
FROG_Element_Base_With_DetId
*>
(
FEB
);
FEB
=
FEB_Temp
->
getDaughterWithDetId
(
Frog_DetId
);
if
(
FEB
==
NULL
){
FEB
=
new
FROG_Element_Base_With_DetId
(
C_FEB_DETID
,
Frog_DetId
);
FEB_Temp
->
addDaughter
(
FEB
);}
}
FEB
->
addDaughter
(
mod
);
}
// ### CALO GEOMETRY ###
edm
::
ESHandle
<
CaloGeometry
>
CaloGeom
;
iSetup
.
get
<
IdealGeometryRecord
>
().
get
(
CaloGeom
);
const
vector
<
DetId
>
CaloDets
=
CaloGeom
->
getValidDetIds
();
for
(
unsigned
int
i
=
0
;
i
<
CaloDets
.
size
();
i
++
)
{
Detid
=
CaloDets
[
i
];
SubDet
=
Detid
.
subdetId
();
if
(
Detid
.
det
()
==
DetId
::
Ecal
){
if
(
SubDet
<
1
||
SubDet
>
3
)
continue
;
Frog_DetId
=
DETID_ECAL
;
FEB
=
ecal
;
Frog_DetId
+=
SubDet
*
100000
;
FEB_Temp
=
dynamic_cast
<
FROG_Element_Base_With_DetId
*>
(
FEB
);
FEB
=
FEB_Temp
->
getDaughterWithDetId
(
Frog_DetId
);
if
(
FEB
==
NULL
){
FEB
=
new
FROG_Element_Base_With_DetId
(
C_FEB_DETID
,
Frog_DetId
);
FEB_Temp
->
addDaughter
(
FEB
);}
if
(
SubDet
==
1
){
EBDetId
detid
=
EBDetId
(
Detid
);
Frog_DetId
+=
((
detid
.
zside
()
==
1
)
+
1
)
*
10000
;
FEB_Temp
=
dynamic_cast
<
FROG_Element_Base_With_DetId
*>
(
FEB
);
FEB
=
FEB_Temp
->
getDaughterWithDetId
(
Frog_DetId
);
if
(
FEB
==
NULL
){
FEB
=
new
FROG_Element_Base_With_DetId
(
C_FEB_DETID
,
Frog_DetId
);
FEB_Temp
->
addDaughter
(
FEB
);}
Frog_DetId
+=
(
detid
.
tower_ieta
()
*
detid
.
zside
())
*
100
;
FEB_Temp
=
dynamic_cast
<
FROG_Element_Base_With_DetId
*>
(
FEB
);
FEB
=
FEB_Temp
->
getDaughterWithDetId
(
Frog_DetId
);
if
(
FEB
==
NULL
){
FEB
=
new
FROG_Element_Base_With_DetId
(
C_FEB_DETID
,
Frog_DetId
);
FEB_Temp
->
addDaughter
(
FEB
);}
Frog_DetId
+=
detid
.
tower_iphi
()
*
1
;
FEB_Temp
=
dynamic_cast
<
FROG_Element_Base_With_DetId
*>
(
FEB
);
FEB
=
FEB_Temp
->
getDaughterWithDetId
(
Frog_DetId
);
if
(
FEB
==
NULL
){
FEB
=
new
FROG_Element_Base_With_DetId
(
C_FEB_DETID
,
Frog_DetId
);
FEB_Temp
->
addDaughter
(
FEB
);}
}
else
if
(
SubDet
==
2
){
EEDetId
detid
=
EEDetId
(
Detid
);
Frog_DetId
+=
((
detid
.
zside
()
==
1
)
+
1
)
*
10000
;
FEB_Temp
=
dynamic_cast
<
FROG_Element_Base_With_DetId
*>
(
FEB
);
FEB
=
FEB_Temp
->
getDaughterWithDetId
(
Frog_DetId
);
if
(
FEB
==
NULL
){
FEB
=
new
FROG_Element_Base_With_DetId
(
C_FEB_DETID
,
Frog_DetId
);
FEB_Temp
->
addDaughter
(
FEB
);}
Frog_DetId
+=
detid
.
iquadrant
()
*
1000
;
FEB_Temp
=
dynamic_cast
<
FROG_Element_Base_With_DetId
*>
(
FEB
);
FEB
=
FEB_Temp
->
getDaughterWithDetId
(
Frog_DetId
);
if
(
FEB
==
NULL
){
FEB
=
new
FROG_Element_Base_With_DetId
(
C_FEB_DETID
,
Frog_DetId
);
FEB_Temp
->
addDaughter
(
FEB
);}
Frog_DetId
+=
detid
.
isc
();
FEB_Temp
=
dynamic_cast
<
FROG_Element_Base_With_DetId
*>
(
FEB
);
FEB
=
FEB_Temp
->
getDaughterWithDetId
(
Frog_DetId
);
if
(
FEB
==
NULL
){
FEB
=
new
FROG_Element_Base_With_DetId
(
C_FEB_DETID
,
Frog_DetId
);
FEB_Temp
->
addDaughter
(
FEB
);}
}
else
if
(
SubDet
==
3
){
ESDetId
detid
=
ESDetId
(
Detid
);
Frog_DetId
+=
((
detid
.
zside
()
==
1
)
+
1
)
*
10000
;
FEB_Temp
=
dynamic_cast
<
FROG_Element_Base_With_DetId
*>
(
FEB
);
FEB
=
FEB_Temp
->
getDaughterWithDetId
(
Frog_DetId
);
if
(
FEB
==
NULL
){
FEB
=
new
FROG_Element_Base_With_DetId
(
C_FEB_DETID
,
Frog_DetId
);
FEB_Temp
->
addDaughter
(
FEB
);}
Frog_DetId
+=
detid
.
plane
()
*
1000
;
FEB_Temp
=
dynamic_cast
<
FROG_Element_Base_With_DetId
*>
(
FEB
);
FEB
=
FEB_Temp
->
getDaughterWithDetId
(
Frog_DetId
);
if
(
FEB
==
NULL
){
FEB
=
new
FROG_Element_Base_With_DetId
(
C_FEB_DETID
,
Frog_DetId
);
FEB_Temp
->
addDaughter
(
FEB
);}
Frog_DetId
+=
detid
.
six
()
*
50
;
FEB_Temp
=
dynamic_cast
<
FROG_Element_Base_With_DetId
*>
(
FEB
);
FEB
=
FEB_Temp
->
getDaughterWithDetId
(
Frog_DetId
);
if
(
FEB
==
NULL
){
FEB
=
new
FROG_Element_Base_With_DetId
(
C_FEB_DETID
,
Frog_DetId
);
FEB_Temp
->
addDaughter
(
FEB
);}
Frog_DetId
+=
detid
.
siy
();
FEB_Temp
=
dynamic_cast
<
FROG_Element_Base_With_DetId
*>
(
FEB
);
FEB
=
FEB_Temp
->
getDaughterWithDetId
(
Frog_DetId
);
if
(
FEB
==
NULL
){
FEB
=
new
FROG_Element_Base_With_DetId
(
C_FEB_DETID
,
Frog_DetId
);
FEB_Temp
->
addDaughter
(
FEB
);}
}
}
else
if
(
Detid
.
det
()
==
DetId
::
Hcal
){
if
(
SubDet
<
1
||
SubDet
>
4
)
continue
;
Frog_DetId
=
DETID_HCAL
;
FEB
=
hcal
;
Frog_DetId
+=
SubDet
*
100000
;
FEB_Temp
=
dynamic_cast
<
FROG_Element_Base_With_DetId
*>
(
FEB
);
FEB
=
FEB_Temp
->
getDaughterWithDetId
(
Frog_DetId
);
if
(
FEB
==
NULL
){
FEB
=
new
FROG_Element_Base_With_DetId
(
C_FEB_DETID
,
Frog_DetId
);
FEB_Temp
->
addDaughter
(
FEB
);}
if
(
true
){
HcalDetId
detid
=
HcalDetId
(
Detid
);
Frog_DetId
+=
((
detid
.
zside
()
==
1
)
+
1
)
*
10000
;
FEB_Temp
=
dynamic_cast
<
FROG_Element_Base_With_DetId
*>
(
FEB
);
FEB
=
FEB_Temp
->
getDaughterWithDetId
(
Frog_DetId
);
if
(
FEB
==
NULL
){
FEB
=
new
FROG_Element_Base_With_DetId
(
C_FEB_DETID
,
Frog_DetId
);
FEB_Temp
->
addDaughter
(
FEB
);}
Frog_DetId
+=
detid
.
ietaAbs
()
*
100
;
FEB_Temp
=
dynamic_cast
<
FROG_Element_Base_With_DetId
*>
(
FEB
);
FEB
=
FEB_Temp
->
getDaughterWithDetId
(
Frog_DetId
);
if
(
FEB
==
NULL
){
FEB
=
new
FROG_Element_Base_With_DetId
(
C_FEB_DETID
,
Frog_DetId
);
FEB_Temp
->
addDaughter
(
FEB
);}
Frog_DetId
+=
detid
.
iphi
()
*
1
;
FEB_Temp
=
dynamic_cast
<
FROG_Element_Base_With_DetId
*>
(
FEB
);
FEB
=
FEB_Temp
->
getDaughterWithDetId
(
Frog_DetId
);
if
(
FEB
==
NULL
){
FEB
=
new
FROG_Element_Base_With_DetId
(
C_FEB_DETID
,
Frog_DetId
);
FEB_Temp
->
addDaughter
(
FEB
);}
}
}
else
if
(
Detid
.
det
()
==
DetId
::
Calo
){
continue
;
/*
Frog_DetId = DETID_CALO + 1000000;
FEB = hcal;
Frog_DetId += SubDet*100000;
FEB_Temp = dynamic_cast<FROG_Element_Base_With_DetId*>(FEB);
FEB = FEB_Temp->getDaughterWithDetId(Frog_DetId);
if(FEB==NULL){FEB = new FROG_Element_Base_With_DetId(C_FEB_DETID, Frog_DetId); FEB_Temp->addDaughter(FEB);}
*/
}
const
CaloCellGeometry
*
CellGeom
=
CaloGeom
->
getGeometry
(
Detid
);
GlobalPoint
CellPos
=
CellGeom
->
getPosition
();
const
CaloCellGeometry
::
CornersVec
CellCorners
=
CellGeom
->
getCorners
();
float
cX
=
(
CellCorners
[
0
].
x
()
+
CellCorners
[
2
].
x
())
/
2
;
float
cY
=
(
CellCorners
[
0
].
y
()
+
CellCorners
[
2
].
y
())
/
2
;
float
cZ
=
(
CellCorners
[
0
].
z
()
+
CellCorners
[
2
].
z
())
/
2
;
float
wX
=
(
CellCorners
[
1
].
x
()
-
CellCorners
[
0
].
x
())
/
2
;
float
wY
=
(
CellCorners
[
1
].
y
()
-
CellCorners
[
0
].
y
())
/
2
;
float
wZ
=
(
CellCorners
[
1
].
z
()
-
CellCorners
[
0
].
z
())
/
2
;
float
hX
=
(
CellCorners
[
3
].
x
()
-
CellCorners
[
0
].
x
())
/
2
;
float
hY
=
(
CellCorners
[
3
].
y
()
-
CellCorners
[
0
].
y
())
/
2
;
float
hZ
=
(
CellCorners
[
3
].
z
()
-
CellCorners
[
0
].
z
())
/
2
;
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
)
);
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
)
);
FROG_Element_Geom_CaloMod
*
mod
=
new
FROG_Element_Geom_CaloMod
(
Detid
.
rawId
(),
F
,
cX
,
cY
,
cZ
,
wX
,
wY
,
wZ
,
hX
,
hY
,
hZ
);
FEB
->
addDaughter
(
mod
);
}
// ### Save .geom ###
FROG_Geometry
*
CMS_Geom
=
new
FROG_Geometry
(
prim
);
CMS_Geom
->
Save
(
"CMS.geom"
);
}
events_prim
=
new
FROG_Element_Base
(
C_PRIMARY
);
}
// ------------ method called once each job just after ending the event loop ------------
void
Frog_Analyzer
::
endJob
()
{
if
(
NEvents
>
0
){
char
OutputFileName
[
1024
];
sprintf
(
OutputFileName
,
"%s"
,
OutputFile
.
substr
(
0
,
OutputFile
.
size
()
-
4
).
c_str
());
if
(
NEventsInVisFile
>=
0
)
sprintf
(
OutputFileName
,
"%s_R%i_E%i.vis"
,
OutputFileName
,
SRun
,
SEvent
);
sprintf
(
OutputFileName
,
"%s.vis"
,
OutputFileName
);
FROG_Events
*
events
=
new
FROG_Events
(
events_prim
);
events
->
Save
((
char
*
)
OutputFileName
);
delete
events
;
delete
events_prim
;
events_prim
=
new
FROG_Element_Base
(
C_PRIMARY
);
NEvents
=
0
;
}
}
//
// member functions
//
// ------------ method called to for each event ------------
void
Frog_Analyzer
::
analyze
(
const
edm
::
Event
&
iEvent
,
const
edm
::
EventSetup
&
iSetup
)
{
if
(
NEvents
==
0
){
SRun
=
iEvent
.
id
().
run
();
SEvent
=
iEvent
.
id
().
event
();
}
FROG_Element_Event
*
event
=
new
FROG_Element_Event
();
events_prim
->
addDaughter
(
event
);
// access the tracker
edm
::
ESHandle
<
TrackerGeometry
>
tkGeom
;
iSetup
.
get
<
TrackerDigiGeometryRecord
>
().
get
(
tkGeom
);
edm
::
ESHandle
<
DTGeometry
>
DtGeom
;
iSetup
.
get
<
MuonGeometryRecord
>
().
get
(
DtGeom
);
edm
::
ESHandle
<
CSCGeometry
>
CscGeom
;
iSetup
.
get
<
MuonGeometryRecord
>
().
get
(
CscGeom
);
edm
::
ESHandle
<
RPCGeometry
>
RpcGeom
;
iSetup
.
get
<
MuonGeometryRecord
>
().
get
(
RpcGeom
);
// ### SIMTRACK ###
for
(
unsigned
int
i
=
0
;
i
<
SimTrackProducers
.
size
();
i
++
){
edm
::
Handle
<
std
::
vector
<
SimTrack
>
>
h_SimTracks
;
iEvent
.
getByLabel
(
SimTrackProducers
[
i
],
h_SimTracks
);
std
::
vector
<
SimTrack
>
SimTrackColl
=
*
h_SimTracks
.
product
();
FROG_Element_Base_With_DetId
*
frogSimTrkColl
=
new
FROG_Element_Base_With_DetId
(
C_FEB_DETID
,
EVTID_SIMTRK
+
i
);
event
->
addDaughter
(
frogSimTrkColl
);
for
(
unsigned
int
a
=
0
;
a
<
SimTrackColl
.
size
();
++
a
)
{
SimTrack
simTrack
=
SimTrackColl
[
a
];
FROG_Element_Event_Sim_Track
*
frogSimTrk
=
new
FROG_Element_Event_Sim_Track
(
simTrack
.
trackId
(),
simTrack
.
momentum
().
x
(),
simTrack
.
momentum
().
y
(),
simTrack
.
momentum
().
z
(),
simTrack
.
momentum
().
e
(),
simTrack
.
type
(),
simTrack
.
vertIndex
(),
simTrack
.
charge
()
);
frogSimTrkColl
->
addDaughter
(
frogSimTrk
);
}
}
// ### SIMVERTEX ###
for
(
unsigned
int
i
=
0
;
i
<
SimVertexProducers
.
size
();
i
++
){
edm
::
Handle
<
std
::
vector
<
SimVertex
>
>
h_Vertex
;
iEvent
.
getByLabel
(
SimVertexProducers
[
i
],
h_Vertex
);
std
::
vector
<
SimVertex
>
VertexColl
=
*
h_Vertex
.
product
();
FROG_Element_Base_With_DetId
*
frogSimVtxColl
=
new
FROG_Element_Base_With_DetId
(
C_FEB_DETID
,
EVTID_SIMVTX
+
i
);
event
->
addDaughter
(
frogSimVtxColl
);
for
(
unsigned
int
b
=
0
;
b
<
VertexColl
.
size
();
++
b
)
{
SimVertex
Vertex
=
VertexColl
[
b
];
FROG_Element_Event_Sim_Vertex
*
frogSimVtx
=
new
FROG_Element_Event_Sim_Vertex
(
Vertex
.
position
().
x
(),
Vertex
.
position
().
y
(),
Vertex
.
position
().
z
(),
Vertex
.
parentIndex
());
frogSimVtxColl
->
addDaughter
(
frogSimVtx
);
}
}
// ### SIMHIT ###
for
(
unsigned
int
i
=
0
;
i
<
SimHitProducers
.
size
();
i
++
){
edm
::
Handle
<
std
::
vector
<
PSimHit
>
>
h_Hits
;
iEvent
.
getByLabel
(
SimHitProducers
[
i
],
h_Hits
);
std
::
vector
<
PSimHit
>
Hits
=
*
h_Hits
.
product
();
FROG_Element_Base_With_DetId
*
frogSimHitColl
=
new
FROG_Element_Base_With_DetId
(
C_FEB_DETID
,
EVTID_SIMHIT
+
i
);
event
->
addDaughter
(
frogSimHitColl
);
for
(
unsigned
int
h
=
0
;
h
<
Hits
.
size
();
h
++
)
{
DetId
theDetUnitId
(
Hits
[
h
].
detUnitId
());
const
GeomDet
*
theDet
=
tkGeom
->
idToDet
(
theDetUnitId
);
FROG_Element_Event_Sim_Hit
*
frogSimHit
=
new
FROG_Element_Event_Sim_Hit
(
theDet
->
surface
().
toGlobal
(
Hits
[
h
].
localPosition
()).
x
(),
theDet
->
surface
().
toGlobal
(
Hits
[
h
].
localPosition
()).
y
(),
theDet
->
surface
().
toGlobal
(
Hits
[
h
].
localPosition
()).
z
(),
Hits
[
h
].
energyLoss
(),
Hits
[
h
].
processType
()
);
frogSimHitColl
->
addDaughter
(
frogSimHit
);
}
}
// ### TRAJECTORY ###
for
(
unsigned
int
i
=
0
;
i
<
TrajectoryProducers
.
size
();
i
++
){
Handle
<
TrajTrackAssociationCollection
>
trajTrackAssociationHandle
;
iEvent
.
getByLabel
(
TrajectoryProducers
[
i
],
trajTrackAssociationHandle
);
const
TrajTrackAssociationCollection
TrajToTrackMap
=
*
trajTrackAssociationHandle
.
product
();
FROG_Element_Base_With_DetId
*
frogTrkColl
=
new
FROG_Element_Base_With_DetId
(
C_FEB_DETID
,
EVTID_TRK
+
i
);
event
->
addDaughter
(
frogTrkColl
);
for
(
TrajTrackAssociationCollection
::
const_iterator
it
=
TrajToTrackMap
.
begin
();
it
!=
TrajToTrackMap
.
end
();
++
it
)
{
Trajectory
recoTraj
=
*
it
->
key
;
FROG_Element_Event_Track
*
frogTrk
=
new
FROG_Element_Event_Track
(
i
,
it
->
val
->
p
(),
it
->
val
->
pt
(),
it
->
key
->
chiSquared
());
frogTrkColl
->
addDaughter
(
frogTrk
);
std
::
vector
<
TrajectoryMeasurement
>
measurements
=
recoTraj
.
measurements
();
for
(
unsigned
int
h
=
0
;
h
<
measurements
.
size
();
h
++
){
TrajectoryMeasurement
::
ConstRecHitPointer
h_it
=
measurements
[
h
].
recHit
();
if
(
!
h_it
->
isValid
()
)
continue
;
DetId
detId
=
h_it
->
geographicalId
();
GlobalPoint
globalPos
=
measurements
[
h
].
updatedState
().
globalPosition
();
FROG_Element_Event_Hit
*
frogHit
=
new
FROG_Element_Event_Hit
(
detId
.
rawId
(),
globalPos
.
x
(),
globalPos
.
y
(),
globalPos
.
z
(),
-
1
);
frogTrk
->
addDaughter
(
frogHit
);
}
}
}
// ### TRACK ###
for
(
unsigned
int
i
=
0
;
i
<
TrackProducers
.
size
();
i
++
){
edm
::
Handle
<
std
::
vector
<
reco
::
Track
>
>
h_Tracks
;
iEvent
.
getByLabel
(
TrackProducers
[
i
],
h_Tracks
);
std
::
vector
<
reco
::
Track
>
TrackColl
=
*
h_Tracks
.
product
();
FROG_Element_Base_With_DetId
*
frogTrkColl
=
new
FROG_Element_Base_With_DetId
(
C_FEB_DETID
,
EVTID_TRK
+
TrajectoryProducers
.
size
()
+
i
);
event
->
addDaughter
(
frogTrkColl
);
//printf("Size of the TrackCOllection : %i = %i\n",i,TrackColl.size());
for
(
unsigned
int
t
=
0
;
t
<
TrackColl
.
size
();
++
t
)
{
reco
::
Track
recoTrack
=
TrackColl
[
t
];
FROG_Element_Event_Track
*
frogTrk
=
new
FROG_Element_Event_Track
(
TrajectoryProducers
.
size
()
+
i
,
recoTrack
.
p
(),
recoTrack
.
pt
(),
recoTrack
.
chi2
());
frogTrkColl
->
addDaughter
(
frogTrk
);
for
(
unsigned
int
h
=
0
;
h
<
recoTrack
.
recHitsSize
();
h
++
){
TrackingRecHitRef
h_it
=
recoTrack
.
recHit
(
h
);
if
(
!
h_it
->
isValid
()
)
continue
;
DetId
detId
=
h_it
->
geographicalId
();
const
GeomDet
*
theDet
=
NULL
;
if
(
detId
.
det
()
==
DetId
::
Tracker
)
theDet
=
tkGeom
->
idToDet
(
detId
);
if
(
detId
.
det
()
==
DetId
::
Muon
&&
detId
.
subdetId
()
==
1
)
theDet
=
DtGeom
->
idToDet
(
detId
);
if
(
detId
.
det
()
==
DetId
::
Muon
&&
detId
.
subdetId
()
==
2
)
theDet
=
CscGeom
->
idToDet
(
detId
);
if
(
detId
.
det
()
==
DetId
::
Muon
&&
detId
.
subdetId
()
==
3
)
theDet
=
RpcGeom
->
idToDet
(
detId
);
LocalPoint
localPos
=
h_it
->
localPosition
();
FROG_Element_Event_Hit
*
frogHit
=
new
FROG_Element_Event_Hit
(
detId
.
rawId
(),
theDet
->
surface
().
toGlobal
(
localPos
).
x
(),
theDet
->
surface
().
toGlobal
(
localPos
).
y
(),
theDet
->
surface
().
toGlobal
(
localPos
).
z
(),
-
1
);
frogTrk
->
addDaughter
(
frogHit
);
}
}
}
// ### ECALRecHits ###
for
(
unsigned
int
i
=
0
;
i
<
EcalRecHitProducers
.
size
();
i
++
){
edm
::
Handle
<
EcalRecHitCollection
>
h_Ecal_RecHits
;
iEvent
.
getByLabel
(
EcalRecHitProducers
[
i
],
h_Ecal_RecHits
);
EcalRecHitCollection
Ecal_RecHits
=
*
h_Ecal_RecHits
.
product
();
FROG_Element_Base_With_DetId
*
frogHitColl
=
new
FROG_Element_Base_With_DetId
(
C_FEB_DETID
,
EVTID_ECALHIT
+
i
);
event
->
addDaughter
(
frogHitColl
);
for
(
unsigned
int
eh
=
0
;
eh
<
Ecal_RecHits
.
size
();
eh
++
){
FROG_Element_Event_CaloHit
*
frogCaloHit
=
new
FROG_Element_Event_CaloHit
((
Ecal_RecHits
[
eh
].
detid
()).
rawId
(),
Ecal_RecHits
[
eh
].
energy
(),
Ecal_RecHits
[
eh
].
time
());
frogHitColl
->
addDaughter
(
frogCaloHit
);
}
}
// ### HCALRecHits ###
for
(
unsigned
int
i
=
0
;
i
<
HcalHBHERecHitProducers
.
size
();
i
++
){
edm
::
Handle
<
HBHERecHitCollection
>
h_HcalHBHE_RecHits
;
iEvent
.
getByLabel
(
HcalHBHERecHitProducers
[
i
],
h_HcalHBHE_RecHits
);
HBHERecHitCollection
HcalHBHE_RecHits
=
*
h_HcalHBHE_RecHits
.
product
();
FROG_Element_Base_With_DetId
*
frogHitColl
=
new
FROG_Element_Base_With_DetId
(
C_FEB_DETID
,
EVTID_HCALHIT
+
i
);
event
->
addDaughter
(
frogHitColl
);
for
(
unsigned
int
hh
=
0
;
hh
<
HcalHBHE_RecHits
.
size
();
hh
++
){
FROG_Element_Event_CaloHit
*
frogCaloHit
=
new
FROG_Element_Event_CaloHit
((
HcalHBHE_RecHits
[
hh
].
detid
()).
rawId
(),
HcalHBHE_RecHits
[
hh
].
energy
(),
HcalHBHE_RecHits
[
hh
].
time
());
frogHitColl
->
addDaughter
(
frogCaloHit
);
}
}
for
(
unsigned
int
i
=
0
;
i
<
HcalHORecHitProducers
.
size
();
i
++
){
edm
::
Handle
<
HORecHitCollection
>
h_HcalHO_RecHits
;
iEvent
.
getByLabel
(
HcalHORecHitProducers
[
i
],
h_HcalHO_RecHits
);
HORecHitCollection
HcalHO_RecHits
=
*
h_HcalHO_RecHits
.
product
();
FROG_Element_Base_With_DetId
*
frogHitColl
=
new
FROG_Element_Base_With_DetId
(
C_FEB_DETID
,
EVTID_HCALHIT
+
HcalHBHERecHitProducers
.
size
()
+
i
);
event
->
addDaughter
(
frogHitColl
);
for
(
unsigned
int
hh
=
0
;
hh
<
HcalHO_RecHits
.
size
();
hh
++
){
FROG_Element_Event_CaloHit
*
frogCaloHit
=
new
FROG_Element_Event_CaloHit
((
HcalHO_RecHits
[
hh
].
detid
()).
rawId
(),
HcalHO_RecHits
[
hh
].
energy
(),
HcalHO_RecHits
[
hh
].
time
());
frogHitColl
->
addDaughter
(
frogCaloHit
);
}
}
for
(
unsigned
int
i
=
0
;
i
<
HcalHFRecHitProducers
.
size
();
i
++
){
edm
::
Handle
<
HFRecHitCollection
>
h_HcalHF_RecHits
;
iEvent
.
getByLabel
(
HcalHFRecHitProducers
[
i
],
h_HcalHF_RecHits
);
HFRecHitCollection
HcalHF_RecHits
=
*
h_HcalHF_RecHits
.
product
();
FROG_Element_Base_With_DetId
*
frogHitColl
=
new
FROG_Element_Base_With_DetId
(
C_FEB_DETID
,
EVTID_HCALHIT
+
HcalHBHERecHitProducers
.
size
()
+
HcalHORecHitProducers
.
size
()
+
i
);
event
->
addDaughter
(
frogHitColl
);
for
(
unsigned
int
hh
=
0
;
hh
<
HcalHF_RecHits
.
size
();
hh
++
){
FROG_Element_Event_CaloHit
*
frogCaloHit
=
new
FROG_Element_Event_CaloHit
((
HcalHF_RecHits
[
hh
].
detid
()).
rawId
(),
HcalHF_RecHits
[
hh
].
energy
(),
HcalHF_RecHits
[
hh
].
time
());
frogHitColl
->
addDaughter
(
frogCaloHit
);
}
}
// ### Muon Segments ###
for
(
unsigned
int
i
=
0
;
i
<
CSCSegmentProducers
.
size
();
i
++
){
edm
::
Handle
<
CSCSegmentCollection
>
h_CSC_Segments
;
iEvent
.
getByLabel
(
CSCSegmentProducers
[
i
],
h_CSC_Segments
);
CSCSegmentCollection
CSC_Segments
=
*
h_CSC_Segments
.
product
();
FROG_Element_Base_With_DetId
*
frogSegColl
=
new
FROG_Element_Base_With_DetId
(
C_FEB_DETID
,
EVTID_MUONSEG
+
i
);
event
->
addDaughter
(
frogSegColl
);
for
(
unsigned
int
s
=
0
;
s
<
CSC_Segments
.
size
();
s
++
){
DetId
theDetUnitId
=
CSC_Segments
[
s
].
geographicalId
();
const
GeomDet
*
theDet
=
CscGeom
->
idToDet
(
theDetUnitId
);
FROG_Element_Event_Segment
*
frogSeg
=
new
FROG_Element_Event_Segment
(
theDetUnitId
.
rawId
(),
theDet
->
surface
().
toGlobal
(
CSC_Segments
[
s
].
localPosition
()).
x
()
,
theDet
->
surface
().
toGlobal
(
CSC_Segments
[
s
].
localPosition
()).
y
()
,
theDet
->
surface
().
toGlobal
(
CSC_Segments
[
s
].
localPosition
()).
z
()
,
theDet
->
surface
().
toGlobal
(
CSC_Segments
[
s
].
localDirection
()).
x
(),
theDet
->
surface
().
toGlobal
(
CSC_Segments
[
s
].
localDirection
()).
y
(),
theDet
->
surface
().
toGlobal
(
CSC_Segments
[
s
].
localDirection
()).
z
()
);
frogSegColl
->
addDaughter
(
frogSeg
);
}
}
for
(
unsigned
int
i
=
0
;
i
<
DTSegmentProducers
.
size
();
i
++
){
edm
::
Handle
<
DTRecSegment4DCollection
>
h_DT_Segments
;
iEvent
.
getByLabel
(
DTSegmentProducers
[
i
],
h_DT_Segments
);
DTRecSegment4DCollection
DT_Segments
=
*
h_DT_Segments
.
product
();
FROG_Element_Base_With_DetId
*
frogSegColl
=
new
FROG_Element_Base_With_DetId
(
C_FEB_DETID
,
EVTID_MUONSEG
+
CSCSegmentProducers
.
size
()
+
i
);
event
->
addDaughter
(
frogSegColl
);
for
(
unsigned
int
s
=
0
;
s
<
DT_Segments
.
size
();
s
++
){
DetId
theDetUnitId
=
DT_Segments
[
s
].
geographicalId
();
const
GeomDet
*
theDet
=
DtGeom
->
idToDet
(
theDetUnitId
);
FROG_Element_Event_Segment
*
frogSeg
=
new
FROG_Element_Event_Segment
(
theDetUnitId
.
rawId
(),
theDet
->
surface
().
toGlobal
(
DT_Segments
[
s
].
localPosition
()).
x
()
,
theDet
->
surface
().
toGlobal
(
DT_Segments
[
s
].
localPosition
()).
y
()
,
theDet
->
surface
().
toGlobal
(
DT_Segments
[
s
].
localPosition
()).
z
()
,
theDet
->
surface
().
toGlobal
(
DT_Segments
[
s
].
localDirection
()).
x
(),
theDet
->
surface
().
toGlobal
(
DT_Segments
[
s
].
localDirection
()).
y
(),
theDet
->
surface
().
toGlobal
(
DT_Segments
[
s
].
localDirection
()).
z
()
);
frogSegColl
->
addDaughter
(
frogSeg
);
}
}
// ### Muon Hits ###
for
(
unsigned
int
i
=
0
;
i
<
RPCHitsProducers
.
size
();
i
++
){
edm
::
Handle
<
RPCRecHitCollection
>
h_RPC_Hits
;
iEvent
.
getByLabel
(
RPCHitsProducers
[
i
],
h_RPC_Hits
);
RPCRecHitCollection
RPC_Hits
=
*
h_RPC_Hits
.
product
();
FROG_Element_Base_With_DetId
*
frogHitColl
=
new
FROG_Element_Base_With_DetId
(
C_FEB_DETID
,
EVTID_MUONHIT
+
i
);
event
->
addDaughter
(
frogHitColl
);
for
(
unsigned
int
h
=
0
;
h
<
RPC_Hits
.
size
();
h
++
){
DetId
theDetUnitId
=
RPC_Hits
[
h
].
geographicalId
();
const
GeomDet
*
theDet
=
RpcGeom
->
idToDet
(
theDetUnitId
);
FROG_Element_Event_Hit
*
frogHit
=
new
FROG_Element_Event_Hit
(
theDetUnitId
.
rawId
(),
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
);
frogHitColl
->
addDaughter
(
frogHit
);
}
}
NEvents
++
;
if
(
NEvents
==
NEventsInVisFile
){
char
OutputFileName
[
1024
];
sprintf
(
OutputFileName
,
"%s"
,
OutputFile
.
substr
(
0
,
OutputFile
.
size
()
-
4
).
c_str
());
if
(
NEventsInVisFile
>=
0
)
sprintf
(
OutputFileName
,
"%s_R%i_E%i.vis"
,
OutputFileName
,
SRun
,
SEvent
);
sprintf
(
OutputFileName
,
"%s.vis"
,
OutputFileName
);
FROG_Events
*
events
=
new
FROG_Events
(
events_prim
);
events
->
Save
((
char
*
)
OutputFileName
);
delete
events
;
delete
events_prim
;
events_prim
=
new
FROG_Element_Base
(
C_PRIMARY
);
NEvents
=
0
;
}
}
//define this as a plug-in
DEFINE_FWK_MODULE
(
Frog_Analyzer
);
File Metadata
Details
Attached
Mime Type
text/x-c++
Expires
Wed, May 14, 11:22 AM (17 h, 27 s)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
5111412
Default Alt Text
Frog_Analyzer.cc (47 KB)
Attached To
rFROGSVN frogsvn
Event Timeline
Log In to Comment