Skip to content
Snippets Groups Projects

CandidateMatchHelpers: Try to transform the cluster calo position vector wrt to (0,0,0) to a position vector wrt to track perigee position

All threads resolved!
Files
5
@@ -192,14 +192,17 @@ bool egammaSelectedTrackCopy::Select(const EventContext& ctx,
{
ATH_MSG_DEBUG("egammaSelectedTrackCopy::Select()" );
if (cluster == 0 || track == 0) return false;
if (cluster == nullptr || track == nullptr) return false;
const Trk::Perigee& candidatePerigee = track->perigeeParameters();
//Get Perigee Parameters
const double trkPhi = candidatePerigee.parameters()[Trk::phi];
const double trkEta = candidatePerigee.eta();
const double r_first=candidatePerigee.position().perp();
const double z_first=candidatePerigee.position().z();
const double z_perigee=candidatePerigee.position().z();
const double r_perigee=candidatePerigee.position().perp();
const Amg::Vector3D PerigeeXYZPosition(candidatePerigee.position().x(),
candidatePerigee.position().y(),
z_perigee);
//Get Cluster parameters
const double clusterEta=cluster->etaBE(2);
@@ -215,42 +218,59 @@ bool egammaSelectedTrackCopy::Select(const EventContext& ctx,
return false;
}
//Calculate corrrected eta and Phi
const double etaclus_corrected = CandidateMatchHelpers::CorrectedEta(clusterEta,z_first,isEndCap);
const double phiRot = CandidateMatchHelpers::PhiROT(Et,trkEta, track->charge(),r_first ,isEndCap) ;
const double phiRotTrack = CandidateMatchHelpers::PhiROT(track->pt(),trkEta, track->charge(),r_first ,isEndCap) ;
//Calcualate deltaPhis
const double deltaPhiStd = P4Helpers::deltaPhi(cluster->phiBE(2), trkPhi);
const double trkPhiCorr = P4Helpers::deltaPhi(trkPhi, phiRot);
const double deltaPhi2 = P4Helpers::deltaPhi(cluster->phiBE(2), trkPhiCorr);
//Calculate the eta/phi of the cluster as would be seen from the perigee position of the Track
const Amg::Vector3D XYZClusterWrtTrackPerigee = CandidateMatchHelpers::approxXYZwrtPoint(*cluster,
PerigeeXYZPosition,
isEndCap);
//Calculate the possible rotation of the track
//Once assuming the cluster Et being the better estimate (e.g big brem)
const double phiRotRescaled = CandidateMatchHelpers::PhiROT(Et,trkEta,
track->charge(),
r_perigee,
isEndCap) ;
//And also assuming the track Pt being correct
const double phiRotTrack = CandidateMatchHelpers::PhiROT(track->pt(),
trkEta,
track->charge(),
r_perigee,
isEndCap) ;
//
const double clusterPhiCorrected=XYZClusterWrtTrackPerigee.phi();
//deltaPhi between the track and the cluster
const double deltaPhiStd = P4Helpers::deltaPhi(clusterPhiCorrected, trkPhi);
//deltaPhi between the track and the cluster accounting for rotation assuming cluster Et is a better estimator
const double trkPhiRescaled= P4Helpers::deltaPhi(trkPhi, phiRotRescaled);
const double deltaPhiRescaled = P4Helpers::deltaPhi(clusterPhiCorrected, trkPhiRescaled);
//deltaPhi between the track and the cluster accounting for rotation
const double trkPhiCorrTrack = P4Helpers::deltaPhi(trkPhi, phiRotTrack);
const double deltaPhi2Track = P4Helpers::deltaPhi(cluster->phiBE(2), trkPhiCorrTrack);
const double deltaPhiTrack = P4Helpers::deltaPhi(clusterPhiCorrected, trkPhiCorrTrack);
/*
* First we will see if it fails the quick match
* Then if it passed it will get 2 chances to be selected
* One if it matches from last measurement
* The second if it matched from Perigee rescales
*/
//Broad phi check
if ( (fabs(deltaPhi2) > 2*m_broadDeltaPhi)
&& (fabs(deltaPhi2Track) > 2.*m_broadDeltaPhi)
if ((fabs(deltaPhiRescaled) > 2*m_broadDeltaPhi)
&& (fabs(deltaPhiTrack) > 2.*m_broadDeltaPhi)
&& (fabs(deltaPhiStd) > 2*m_broadDeltaPhi)){
ATH_MSG_DEBUG("FAILS broad window phi match (track phi, phirotCluster , phiRotTrack ,cluster phi): ( "
<< trkPhi << ", " << phiRot<< ", "<<phiRotTrack<< ", " << cluster->phiBE(2) << ")" );
ATH_MSG_DEBUG("FAILS broad window phi match (track phi, phirotCluster , phiRotTrack , "
<<"cluster phi corrected, cluster phi): ( "
<< trkPhi << ", " << phiRotRescaled<< ", "<<phiRotTrack<< ", "
<<clusterPhiCorrected<< ", " <<cluster->phi() <<")" );
return false;
}
//if TRT we can stop here , we can not check much in eta really.
if(trkTRT){
return true;
}
const double clusterEtaCorrected=XYZClusterWrtTrackPerigee.eta();
//eta check
if (fabs(cluster->etaBE(2) - trkEta) > 2*m_broadDeltaEta &&
fabs( etaclus_corrected- trkEta) > 2.*m_broadDeltaEta){
//Broad eta check
if (fabs(cluster->eta() - trkEta) > 2*m_broadDeltaEta &&
fabs(clusterEtaCorrected- trkEta) > 2.*m_broadDeltaEta){
ATH_MSG_DEBUG("FAILS broad window eta match (track eta, cluster eta, cluster eta corrected): ( "
<< trkEta << ", " << cluster->etaBE(2) <<", "<<etaclus_corrected<<")" );
<< trkEta << ", " << cluster->etaBE(2) <<", "<<clusterEtaCorrected<<" )");
return false;
}
Loading