CMS 3D CMS Logo

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
FWPFUtils.cc
Go to the documentation of this file.
2 
3 //______________________________________________________________________________
4 FWPFUtils::FWPFUtils() : m_trackerTrackPropagator(0), m_trackPropagator(0), m_magField(0)
5 {
6  // ECAL
7  m_caloR1 = 129; // Centres of front faces of the crystals in supermodules (1.29m) - Barrel
8  m_caloZ1 = 303.353; // Longitudinal distance between the interaction point and last tracker layer - Endcap
9 
10  // HCAL
11  m_caloR2 = 177.7; // Longitudinal profile in the barrel (inner radius) - Barrel
12  m_caloR3 = 287.65; // Longitudinal profile in the barrel (outer radius) - Barrel
13  m_caloZ2 = 400.458; // Longitudinal distance between the interaction point and the endcap envelope - Endcap
14 }
15 
16 //______________________________________________________________________________
17 TEveTrack *
19 {
20  TEveTrackPropagator *propagator = ( !iData.extra().isAvailable() ) ? m_trackerTrackPropagator : m_trackPropagator;
21 
22  TEveRecTrack t;
23  t.fBeta = 1;
24  t.fP = TEveVector( iData.px(), iData.py(), iData.pz() );
25  t.fV = TEveVector( iData.vertex().x(), iData.vertex().y(), iData.vertex().z() );
26  t.fSign = iData.charge();
27  TEveTrack *trk = new TEveTrack( &t, propagator );
28  trk->MakeTrack();
29 
30  return trk;
31 }
32 
33 //______________________________________________________________________________
34 TEveVector
35 FWPFUtils::lineCircleIntersect( const TEveVector &v1, const TEveVector &v2, float r )
36 {
37  // Definitions
38  float x, y;
39  float dx = v1.fX - v2.fX;
40  float dy = v1.fY - v2.fY;
41  float dr = sqrt( ( dx * dx ) + ( dy * dy ) );
42  float D = ( ( v2.fX * v1.fY ) - ( v1.fX * v2.fY ) );
43 
44  float rtDescrim = sqrt( ( ( r * r ) * ( dr * dr ) ) - ( D * D ) );
45 
46  if( dy < 0 ) // Going down
47  {
48  x = ( D * dy ) - ( ( sgn(dy) * dx ) * rtDescrim );
49  x /= ( dr * dr );
50 
51  y = ( -D * dx ) - ( fabs( dy ) * rtDescrim );
52  y /= ( dr * dr );
53  }
54  else
55  {
56 
57  x = ( D * dy ) + ( ( sgn(dy) * dx ) * rtDescrim );
58  x /= ( dr * dr );
59 
60  y = ( -D * dx ) + ( fabs( dy ) * rtDescrim );
61  y /= ( dr * dr );
62  }
63 
64  TEveVector result = TEveVector( x, y, 0.001 );
65  return result;
66 }
67 
68 //______________________________________________________________________________
69 TEveVector
70 FWPFUtils::lineLineIntersect( const TEveVector &p1, const TEveVector &p2, const TEveVector &p3, const TEveVector &p4 )
71 {
72  TEveVector a = p2 - p1;
73  TEveVector b = p4 - p3;
74  TEveVector c = p3 - p1;
75  TEveVector result;
76  float s, val;
77 
78  s = dot( cross( c, b ), cross( a, b ) );
79  val = dot( cross( a, b ), cross( a, b ) );
80  s /= val;
81 
82  result = p1 + ( a * s );
83  return result;
84 }
85 
86 //______________________________________________________________________________
87 TEveVector
88 FWPFUtils::cross( const TEveVector &v1, const TEveVector &v2 )
89 {
90  TEveVector vec;
91 
92  vec.fX = ( v1.fY * v2.fZ ) - ( v1.fZ * v2.fY );
93  vec.fY = ( v1.fZ * v2.fX ) - ( v1.fX * v2.fZ );
94  vec.fZ = ( v1.fX * v2.fY ) - ( v1.fY * v2.fX );
95 
96  return vec;
97 }
98 
99 //______________________________________________________________________________
100 float
101 FWPFUtils::linearInterpolation( const TEveVector &p1, const TEveVector &p2, float z )
102 {
103  float y;
104 
105  y = ( ( z - fabs( p1.fZ ) ) * p2.fY ) + ( ( fabs( p2.fZ ) - z ) * p1.fY );
106  y /= ( fabs( p2.fZ) - fabs( p1.fZ ) );
107 
108  return y;
109 }
110 
111 //______________________________________________________________________________
112 float
113 FWPFUtils::dot( const TEveVector &v1, const TEveVector &v2 )
114 {
115  float result = ( v1.fX * v2.fX ) + ( v1.fY * v2.fY ) + ( v1.fZ * v1.fZ );
116 
117  return result;
118 }
119 
120 //______________________________________________________________________________
121 float
122 FWPFUtils::sgn( float val )
123 {
124  return ( val < 0 ) ? -1 : 1;
125 }
126 
127 //______________________________________________________________________________
128 bool
129 FWPFUtils::checkIntersect( const TEveVector &p, float r )
130 {
131  float h = sqrt( ( p.fX * p.fX ) + ( p.fY * p.fY ) );
132 
133  if( h >= r )
134  return true;
135 
136  return false;
137 }
138 
139 //______________________________________________________________________________
140 void
142 {
143  m_magField = new FWMagField();
144 
145  // Common propagator, helix stepper
146  m_trackPropagator = new TEveTrackPropagator();
147  m_trackPropagator->SetMagFieldObj( m_magField, false );
148  m_trackPropagator->SetMaxR( m_caloR3 );
149  m_trackPropagator->SetMaxZ( m_caloZ2 );
150  m_trackPropagator->SetDelta( 0.01 );
151  m_trackPropagator->SetProjTrackBreaking( TEveTrackPropagator::kPTB_UseLastPointPos );
152  m_trackPropagator->SetRnrPTBMarkers( kTRUE );
153  m_trackPropagator->IncDenyDestroy();
154 
155  // Tracker propagator
156  m_trackerTrackPropagator = new TEveTrackPropagator();
157  m_trackerTrackPropagator->SetStepper( TEveTrackPropagator::kRungeKutta );
158  m_trackerTrackPropagator->SetMagFieldObj( m_magField, false );
159  m_trackerTrackPropagator->SetDelta( 0.01 );
162  m_trackerTrackPropagator->SetProjTrackBreaking( TEveTrackPropagator::kPTB_UseLastPointPos );
163  m_trackerTrackPropagator->SetRnrPTBMarkers( kTRUE );
164  m_trackerTrackPropagator->IncDenyDestroy();
165 }
166 
float m_caloR3
Definition: FWPFUtils.h:64
float m_caloZ2
Definition: FWPFUtils.h:66
FWMagField * m_magField
Definition: FWPFUtils.h:60
bool checkIntersect(const TEveVector &vec, float r)
Definition: FWPFUtils.cc:129
const TrackExtraRef & extra() const
reference to &quot;extra&quot; object
Definition: Track.h:97
float m_caloZ1
Definition: FWPFUtils.h:65
double px() const
x coordinate of momentum vector
Definition: TrackBase.h:132
bool isAvailable() const
Definition: Ref.h:278
TEveVector lineCircleIntersect(const TEveVector &v1, const TEveVector &v2, float r)
Definition: FWPFUtils.cc:35
Definition: DDAxes.h:10
T sqrt(T t)
Definition: SSEVec.h:28
double p4[4]
Definition: TauolaWrapper.h:92
tuple result
Definition: query.py:137
TEveTrackPropagator * m_trackPropagator
Definition: FWPFUtils.h:59
FWPFUtils()
Definition: FWPFUtils.cc:4
double p2[4]
Definition: TauolaWrapper.h:90
double pz() const
z coordinate of momentum vector
Definition: TrackBase.h:136
const Point & vertex() const
reference point on the track. This method is DEPRECATED, please use referencePoint() instead ...
Definition: TrackBase.h:155
void initPropagator()
Definition: FWPFUtils.cc:141
float dot(const TEveVector &v1, const TEveVector &v2)
Definition: FWPFUtils.cc:113
double b
Definition: hdecay.h:120
float m_caloR1
Definition: FWPFUtils.h:62
float m_caloR2
Definition: FWPFUtils.h:63
double p1[4]
Definition: TauolaWrapper.h:89
double a
Definition: hdecay.h:121
TEveVector cross(const TEveVector &v1, const TEveVector &v2)
Definition: FWPFUtils.cc:88
float sgn(float val)
Definition: FWPFUtils.cc:122
int charge() const
track electric charge
Definition: TrackBase.h:112
string s
Definition: asciidump.py:422
float linearInterpolation(const TEveVector &p1, const TEveVector &p2, float r)
Definition: FWPFUtils.cc:101
The Signals That Services Can Subscribe To This is based on ActivityRegistry h
Helper function to determine trigger accepts.
Definition: Activities.doc:4
DecomposeProduct< arg, typename Div::arg > D
Definition: Factorize.h:150
TEveTrack * getTrack(const reco::Track &iData)
Definition: FWPFUtils.cc:18
double py() const
y coordinate of momentum vector
Definition: TrackBase.h:134
TEveVector lineLineIntersect(const TEveVector &v1, const TEveVector &v2, const TEveVector &v3, const TEveVector &v4)
Definition: FWPFUtils.cc:70
double p3[4]
Definition: TauolaWrapper.h:91
TEveTrackPropagator * m_trackerTrackPropagator
Definition: FWPFUtils.h:58