|
ATLAS Offline Software
|
Go to the documentation of this file.
32 m_electronValid(false),
33 m_oppositeCharge(false),
39 bool oppositeCharge,
unsigned short vertexState): m_roiWord(
roiWord),
43 m_electronValid(el_valid),
44 m_oppositeCharge(oppositeCharge),
45 m_vertexState(vertexState)
66 ss <<
"ElectronMuonTopoInfo at address: " << &
d
67 <<
" RoIWord: " <<
d.RoiWord()
68 <<
" Delta Phi: " <<
d.DeltaPhi()
69 <<
" Delta R: " <<
d.DeltaR()
70 <<
" Invariant mass: " <<
d.InvMass()
71 <<
" electron valid: " <<
d.ElecValid()
72 <<
" opposite charge: " <<
d.OppositeCharge()
73 <<
" vertex state: " <<
d.VertexState();
79 return(
m <<
str (
d ) );
84 return(
d1.DeltaPhi()==
d2.DeltaPhi() &&
d1.DeltaR()==
d2.DeltaR() &&
d1.InvMass()==
d2.InvMass()
85 &&
d1.OppositeCharge()==
d2.OppositeCharge() &&
d1.VertexState() ==
d2.VertexState() );
94 double trk_e1_z0error = electron1->
err_Zvtx();
95 double trk_e2_z0error = muon1->
IDTrack()->
param()->ez0();
98 if ( trk_e1_z0error > 0 && trk_e2_z0error > 0 ) {
99 double z0_distance = fabs(electron1->
Zvtx()
102 double z0_error = sqrt(trk_e1_z0error * trk_e1_z0error
103 + trk_e2_z0error * trk_e2_z0error);
111 if (z0_distance > 3*z0_error) {
129 if(
debug) std::cout <<
"Now checking electron perigee at " << perigeeEL <<
" and muon perigee at " << perigeeMU <<
"." << std::endl;
132 double electron_z0=0.;
133 double electron_z0_error=0.;
136 double muon_z0_error=0.;
140 electron_z0 = perigeeEL->parameters()[
Trk::z0];
151 muon_z0 = perigeeMU->parameters()[
Trk::z0];
158 if(
debug) std::cout <<
"Electron z0 = " << electron_z0 <<
"+-" << electron_z0_error <<
"; muon_z0 = " << muon_z0 <<
"+-" << muon_z0_error << std::endl;
162 if ( electron_z0_error > 0 && muon_z0_error > 0 ) {
163 double z0_distance = fabs(electron_z0
166 double z0_error = sqrt(electron_z0_error * electron_z0_error
167 + muon_z0_error * muon_z0_error);
169 pull = z0_distance/z0_error;
171 if(
debug) std::cout <<
"z-distance is " << z0_distance <<
"+-" << z0_error <<
". And the pull is " <<
pull <<
"." << std::endl;
178 if (z0_distance > 3*z0_error) {
194 if ( electron1->
charge() * muon1->
ptq() > 0 )
201 if( (electron1->
charge() * muon1->charge()) > 0 )
212 double distEmu = fabs(
dPhi);
223 double distEmu = fabs(
dPhi);
234 double distEmu = fabs(
dPhi);
245 double distEmu = fabs(
dPhi);
309 double distEmu = fabs(
dPhi);
319 double distEmu = fabs(
dPhi);
326 const egamma* electron1) {
330 double distEmu = fabs(
dPhi);
343 double distEmu = fabs(
dPhi);
377 const egamma* electron1) {
395 double dEta = tau1->
eta() - muon1->eta();
406 double eta1 = electron1->
eta();
410 double Pt1 = electron1->
pt() ;
411 double Pt2 = muon1->
pt();
413 double phi1 = electron1->
phi();
427 double Pt1 = tau1->
pt() ;
428 double Pt2 = tau2->
pt();
430 double phi1 = tau1->
phi();
431 double phi2 = tau2->
phi();
441 double eta2 = electron1->
eta();
444 double Pt1 = tau1->
pt() ;
445 double Pt2 = electron1->
pt();
447 double phi1 = tau1->
phi();
448 double phi2 = electron1->
phi();
461 double Pt1 = tau1->
pt() ;
462 double Pt2 = muon1->
pt();
464 double phi1 = tau1->
phi();
478 double Pt1 = tau1->
pt() ;
479 double Pt2 = tau2->
pt();
481 double phi1 = tau1->
phi();
482 double phi2 = tau2->
phi();
490 const egamma* electron1) {
496 double Pt1 = tau1->
pt() ;
499 double phi1 = tau1->
phi();
509 double eta2 = muon1->eta();
512 double Pt1 = tau1->
pt() ;
513 double Pt2 = muon1->pT() ;
515 double phi1 = tau1->
phi();
516 double phi2 = muon1->parameters()[
Trk::phi];
522 double Pt2,
double eta2,
double phi2,
double m2 )
const {
528 double theta1 = 2*atan2((
double)
exp(-
eta1),1.);
529 double theta2 = 2*atan2((
double)
exp(-
eta2),1.);
530 double P1 = Pt1/
sin(theta1);
531 double P2 = Pt2/
sin(theta2);
539 sincos(phi1,&
p1[1],&
p1[0]);
544 p1[0] = Pt1*scphi1.
cs;
545 p1[1] = Pt1*scphi1.
sn;
552 sincos(phi2,&
p2[1],&
p2[0]);
557 p2[0] = Pt2*scphi2.
cs;
558 p2[1] = Pt2*scphi2.
sn;
561 p1[2] = P1*
cos(theta1);
562 p2[2] = P2*
cos(theta2);
567 double e1 = sqrt(Ptot1*Ptot1 +
m1*
m1);
568 double e2 = sqrt(Ptot2*Ptot2 +
m2*
m2);
579 double eta2 = muon1->eta();
583 double Pt2 = muon1->pT();
586 double phi2 = muon1->parameters()[
Trk::phi];
void SetOppositeCharge(bool OppositeCharge)
const Rec::TrackParticle * trackParticle(unsigned int index=0) const
pointer to TrackParticle
void param(const TrigInDetTrackFitPar *param)
virtual double pt() const
transverse momentum
double invMass(const I4Momentum &pA, const I4Momentum &pB)
invariant mass from two I4momentum references
double e1(const xAOD::CaloCluster &cluster)
return the uncorrected cluster energy in 1st sampling
Dummy class used to allow special convertors to be called for surfaces owned by a detector element.
setSAddress setEtaMS setDirPhiMS setDirZMS setBarrelRadius setEndcapAlpha setEndcapRadius setInterceptInner setEtaMap setEtaBin setIsTgcFailure setDeltaPt deltaPhi
Helper to simultaneously calculate sin and cos of the same angle.
double pt(void) const
transverse momentum
setEt setPhi setE277 setWeta2 eta1
MsgStream & operator<<(MsgStream &m, const ElectronMuonTopoInfo &d)
ElectronMuonTopoInfo is a class for storing information about combuned electron-muon object....
void SetVertexState(unsigned short vextexState)
void SetInvMass(float InvMass)
double deltaR(const TrigElectron *electron1, const CombinedMuonFeature *muon1)
Delta R @ L2.
void SetDeltaPhi(float DeltaPhi)
double invariantMass(const TrigElectron *electron1, const CombinedMuonFeature *muon1)
Invariant mass calculation @ L2.
float m_DeltaR
Delta R between electron and muon.
double deltaPhi(const TrigElectron *electron1, const CombinedMuonFeature *muon1)
Delta phi @ L2.
bool opositeCharge(const TrigElectron *electron1, const CombinedMuonFeature *muon1)
Opposite charge @ L2.
float m_InvMass
Invariant mass of electron and muon.
virtual double phi() const
get phi data member
bool operator==(const ElectronMuonTopoInfo &d1, const ElectronMuonTopoInfo &d2)
virtual ChargeType charge() const
returns charge as a typedef ChargeType currently Charge Type is a double for jets this may be changed...
bool dPhi(const xAOD::TauJet &tau, const xAOD::TauTrack &track, double &out)
bool m_electronValid
boolean flag showing the validity of electron
Object for taus common for ESD and AOD.
const CaloCluster * cluster() const
pointer to CaloCluster
bool OppositeCharge() const
virtual double eta() const =0
pseudo rapidity
virtual double phi() const
phi in [-pi,pi[
unsigned short m_vertexState
3 bit description of vertex: 0=common, 1=not common, 3= not applicable
virtual double eta() const
pseudo rapidity
void SetElecValid(bool ElecValid)
virtual double pt() const
get pt data member
virtual double phi() const =0
phi in [-pi,pi[
bool m_oppositeCharge
True if electron and muon have opposite charged.
double error(const Amg::MatrixX &mat, int index)
return diagonal error of the matrix caller should ensure the matrix is symmetric and the index is in ...
virtual double eta() const
get eta data member
int m_roiWord
Identifier of the RoI.
const TrigInDetTrack * IDTrack(void) const
void SetDeltaR(float DeltaR)
int RoiWord() const
accessor methods
Vertex commonVertex(const TrigElectron *electron1, const CombinedMuonFeature *muon1)
checking Vertex compatibility @ L2
double e2(const xAOD::CaloCluster &cluster)
return the uncorrected cluster energy in 2nd sampling
std::string str(const ElectronMuonTopoInfo &d)
Helper function for printing the object.
virtual double e() const
Retrieve energy independent of signal state.
Helper to simultaneously calculate sin and cos of the same angle.
int charge() const
accessor to return the track charge (sign of TrigInDetTrack pT)
bool dEta(const xAOD::TauJet &tau, const xAOD::TauTrack &track, double &out)
void SetRoiWord(int RoiWord)
set methods
constexpr int pow(int base, int exp) noexcept
float m_DeltaPhi
Delta Phi between electron and muon.