MarlinTrkProcessors  2.4.1
Classes | Public Member Functions | Protected Types | Protected Member Functions | Protected Attributes | Static Protected Attributes | List of all members
FPCCDSiliconTracking_MarlinTrk Class Reference

=== FPCCDSiliconTracking_MarlinTrk Processor ===
This processor is based on SiliconTracking_MarlinTrk Processor (author: Steve Apline). More...

#include <FPCCDSiliconTracking_MarlinTrk.h>

Inheritance diagram for FPCCDSiliconTracking_MarlinTrk:

Classes

class  BuildedTrack
 
class  ClusterStatus
 
struct  compare_TrackExtended
 Compare tracks according to their chi2/ndf. More...
 
struct  GeoData_t
 
class  MCP_BuildedTrack
 
class  MCP_Triplet
 
class  Timer
 
class  TracksWithNHitsContainer
 A helper class to allow good code readability by accessing tracks with N hits. More...
 
class  Triplet
 
struct  vxdGeoData_t
 

Public Member Functions

virtual Processor * newProcessor ()
 
virtual void init ()
 Initialization.
 
virtual void processRunHeader (LCRunHeader *run)
 Run header processor.
 
virtual void processEvent (LCEvent *evt)
 Event processor.
 
virtual void check (LCEvent *evt)
 
virtual void end ()
 Called after data processing for clean up.
 

Protected Types

enum  MCPContributions {
  contVXD, contFTD, contSIT, contVXDFTD,
  contVXDSIT, contFTDSIT, contVXDFTDSIT, contBG,
  contSize
}
 
enum  BuildTrackResult {
  NormalEnd, ManyMisAssignments, ManyOutliers, PhiThetaError,
  BuildTrackResultSize
}
 
typedef std::map< std::pair
< int, int >, int > 
RangeMap
 
typedef std::map< std::vector
< int >, std::vector< int > > 
RangeMapVer2
 
typedef std::vector< BuildedTrackBuildedTrackVec
 
typedef std::map< MCParticle
*, MCP_BuildedTrack
BTMap
 
typedef std::map< MCParticle
*, MCP_Triplet
TripMap
 

Protected Member Functions

void drawEvent ()
 
LCCollection * GetCollection (LCEvent *evt, std::string colName)
 helper function to get collection using try catch block
 
LCRelationNavigator * GetRelations (LCEvent *evt, std::string RelName)
 helper function to get relations using try catch block
 
int InitialiseVTX (LCEvent *evt)
 
int InitialiseFTD (LCEvent *evt)
 
void ProcessOneSector (int iSectorPhi, int iSectorTheta)
 
void ProcessOneSectorVer2 (int iSectorPhi, int iSectorTheta)
 
void CleanUp ()
 
TrackExtended * TestTriplet (TrackerHitExtended *outerHit, TrackerHitExtended *middleHit, TrackerHitExtended *innerHit, HelixClass_double &helix, int omegamode)
 
int BuildTrack_KalFit (TrackerHitExtended *outerHit, TrackerHitExtended *middleHit, TrackerHitExtended *innerHit, HelixClass_double &helix, int innerlayer, TrackExtended *trackAR)
 
void getPhiThetaRegionForHighPt (int *boundaries, TrackExtended *trackAR)
 
void Sorting (TrackExtendedVec &trackVec)
 
void CreateTrack (TrackExtended *trackAR)
 
void AttachRemainingVTXHitsSlow ()
 
void AttachRemainingFTDHitsSlow ()
 
void AttachRemainingVTXHitsFast ()
 
void AttachRemainingFTDHitsFast ()
 
void AttachRemainingVTXHitsVeryFast ()
 
void TrackingInFTD ()
 
int BuildTrackFTD (TrackExtended *trackAR, int *nLR, int iS)
 
int AttachHitToTrack (TrackExtended *trackAR, TrackerHitExtended *hit, int iopt)
 
int AttachHitToTrack_KalFit (TrackExtended *trackAR, TrackerHitExtended *hit)
 
void FinalRefit (LCCollectionVec *trk_col, LCCollectionVec *rel_col)
 
int getDetectorID (TrackerHit *hit)
 
int getSideID (TrackerHit *hit)
 
int getLayerID (TrackerHit *hit)
 
int getModuleID (TrackerHit *hit)
 
int getSensorID (TrackerHit *hit)
 
int getDetectorID (SimTrackerHit *hit)
 
int getSideID (SimTrackerHit *hit)
 
int getLayerID (SimTrackerHit *hit)
 
int getModuleID (SimTrackerHit *hit)
 
int getSensorID (SimTrackerHit *hit)
 
void setupGearGeom (const gear::GearMgr *gearMgr)
 
int getIntersectionEasy (HelixClass_double &helix, TrackerHit *curInmos, int layer, double *isec, double *ref)
 
int getIntersectionEasyTest (HelixClass_double &helix, TrackerHit *basisTrkhit, int layer, std::vector< double > &vec)
 
int CheckTiltOf2Clusters (TrackerHit *A, TrackerHit *B, int level)
 
float DotOf2Clusters (TrackerHit *A, TrackerHit *B)
 
int KalFit (int &ndf, float &Chi2, TrackerHitVec trkHits, TrackerHitVec &hits_in_fit, TrackerHitVec &outliers, float *par, float *epar, HelixClass_double &helix)
 
int getPhiThetaRegion (TrackExtended *trackAR, int layer, int *Boundaries)
 
void InitVXDGeometry ()
 
void InitSITGeometry ()
 
TVector3 LocalToGlobal (TVector3 local, int layer, int ladder)
 
void calcTrackParameterOfMCP (MCParticle *pmcp, double *par)
 
double getNeededPhiSectors (double Pt, int outly, int inly)
 
void getNeededPhiSectorsVer2 (double Pt, std::vector< int > layers, std::vector< double > &phiDiff)
 
MCPMap LoadMCPMap ()
 
enum MCPContributions getMCPContribution (IntVec nsub)
 
void SetBuildedTrack (TrackExtended *trackAR, BuildedTrackVec &btrackvec)
 
void BuildedTrackDebuger1 (BuildedTrackVec::iterator begin, BuildedTrackVec::iterator end)
 
void BuildedTrackDebuger2 (std::vector< const BuildedTrack * >::iterator begin, std::vector< const BuildedTrack * >::iterator end)
 
void TripletDebugerWithMCPRemain (int nth, std::vector< std::map< MCParticle *, MCP_Triplet > > A)
 
IntVec getNHitsInSubDet (SimTrackerHitVec simvec)
 
void TripletDebuger1 (std::vector< Triplet >::iterator begin, std::vector< Triplet >::iterator end)
 
void TripletDebuger2 (std::vector< const Triplet * >::iterator begin, std::vector< const Triplet * >::iterator end)
 

Protected Attributes

int _nRun
 
int _nEvt
 
EVENT::LCEvent * _current_event
 
int _nDivisionsInPhi
 
int _nDivisionsInTheta
 
int _nLayers
 
MarlinTrk::HelixFit * _fastfitter
 
MarlinTrk::IMarlinTrkSystem * _trksystem
 pointer to the IMarlinTrkSystem instance
 
bool _runMarlinTrkDiagnostics
 
std::string _MarlinTrkDiagnosticsName
 
bool _MSOn
 
bool _ElossOn
 
bool _SmoothOn
 
float _initialTrackError_d0
 
float _initialTrackError_phi0
 
float _initialTrackError_omega
 
float _initialTrackError_z0
 
float _initialTrackError_tanL
 
double _maxChi2PerHit
 
double _maxChi2PerHit2nd
 
bool _UseEventDisplay
 
std::vector< int > _colours
 
bool _createDiagnosticsHistograms
 
DiagnosticsHistograms::Histograms_histos
 
int _ntriplets
 
int _ntriplets_good
 
int _ntriplets_2MCP
 
int _ntriplets_3MCP
 
int _ntriplets_1MCP_Bad
 
int _ntriplets_bad
 
std::string _colNameMCParticles
 input MCParticle collection and threshold used for Drawing
 
std::string _VTXHitCollection
 
std::string _FTDPixelHitCollection
 
std::string _FTDSpacePointCollection
 
std::string _SITHitCollection
 
std::string _siTrkCollection
 
std::vector< LCCollection * > _colTrackerHits
 
std::map< LCCollection
*, std::string > 
_colNamesTrackerHits
 
std::vector
< TrackerHitExtendedVec > 
_sectors
 
std::vector
< TrackerHitExtendedVec > 
_sectorsFTD
 
TracksWithNHitsContainer _tracksWithNHitsContainer
 
int _useBuildTrackForHighPt
 
double _cosThetaRangeForBuildTrackForHighPt
 
double _phiRangeForBuildTrackForHighPt
 
float _bField
 
float _chi2WRPhiTriplet
 
float _chi2WRPhiQuartet
 
float _chi2WRPhiSeptet
 
float _chi2WZTriplet
 
float _chi2WZQuartet
 
float _chi2WZSeptet
 
float _minDistCutAttachForFTD
 
float _minDistCutAttachForVXD
 
int _minimalLayerToAttach
 
int _minMissAddition
 
double _dPhi
 
double _dTheta
 
double _dPhiFTD
 
std::vector< int > _Combinations
 
std::vector< int > _CombinationsFTD
 
float _resolutionRPhiVTX
 
float _resolutionZVTX
 
float _resolutionRPhiFTD
 
float _resolutionZFTD
 
float _resolutionRPhiSIT
 
float _resolutionZSIT
 
float _phiCutForMerging
 
float _tanlambdaCutForMerging
 
float _angleCutForMerging
 
int _print
 
int _checkForDelta
 
float _minDistToDelta
 
float _distRPhi
 
float _distZ
 
float _chi2FitCut
 
float _chi2FitCut_lowPt
 
TrackExtendedVec _trackImplVec
 
float _cutOnD0
 
float _cutOnZ0
 
float _cutOnOmegaVXD
 
float _cutOnOmegaFTD
 
double _cutOnPtVXD
 
double _cutOnPtFTD
 
int _minimalHits
 
int _nHitsChi2
 
int _attachVXD
 
int _attachFTD
 
int _max_hits_per_sector
 
int _nTotalVTXHits
 
int _nTotalFTDHits
 
int _nTotalSITHits
 
int _useSIT
 
int _useFTD
 
UTIL::BitField64 * _encoder
 
unsigned int _nLayersVTX
 
unsigned int _nLayersSIT
 
std::vector< float > _zLayerFTD
 
unsigned int _nlayersFTD
 
bool _petalBasedFTDWithOverlaps
 
int _nPhiFTD
 
int _output_track_col_quality
 
int _sw_theta
 
float _chi2FitCut_kalman
 
bool _useClusterRejection
 
float _minDotOf2Clusters
 
struct
FPCCDSiliconTracking_MarlinTrk::vxdGeoData_t 
_vxd
 
struct
FPCCDSiliconTracking_MarlinTrk::vxdGeoData_t 
_sit
 
FloatVec _pixelSizeVec
 
float _pixelheight
 
RangeMap _phiRangeForTriplet
 
RangeMapVer2 _phiRangeForTripletVer2
 
float _safetyPhiRange_ratio
 
int _safetyPhiRange_fix
 Extra range in addition to main range used for triplet construction process and needed to find triplet is calculated by getNeededPhiSectors, but safety range is not considered. More...
 
float _fudgeFactorForSITsr_rphi
 
float _fudgeFactorForSITsr_z
 
int _fudgePhiRange
 
int _fudgeThetaRange
 
std::string _colNameVXDTrackerHitRelations
 
std::string _colNameSITSpacePointRelations
 
std::string _colNameFTDSpacePointRelations
 
std::string _colNameFTDPixelTrackerHitRelations
 
LCRelationNavigator * _navVXD
 
LCRelationNavigator * _navSIT
 
LCRelationNavigator * _navFTDsp
 
LCRelationNavigator * _navFTDpix
 
std::string _colNameVXDSimHit
 
std::string _colNameSITSimHit
 
std::string _colNameFTDspSimHit
 
std::string _colNameFTDpixSimHit
 
LCCollection * _simVXD
 
LCCollection * _simSIT
 
LCCollection * _simFTDsp
 
LCCollection * _simFTDpix
 
double _nSigmaBuild_phi
 
double _nSigmaBuild_theta
 
bool _keepCandidate
 
moriUTIL_moriUtil
 
GetPurityUtil_purityUtil
 
bool _mydebug
 
bool _mydebugKalFit
 
bool _mydebugIntersection
 
bool _mydebugRoot
 
bool _mydebugRootVXD
 
bool _mydebugRootFTD
 
bool _mydebugRootVXDFTD
 
bool _mydebugVXDHits
 
bool _mydebugSITHits
 
bool _mydebugTriplet
 
int _mydebugTripletMode
 
bool _mydebugTripletVXD
 
bool _mydebugTripletFTD
 
bool _mydebugTripletVXDFTD
 
bool _mydebugBuildTrack
 
int _mydebugBuildTrackMode
 
bool _mydebugAttachVXD
 
bool _mydebugPrintMCP
 
bool _stopwatch
 
class
FPCCDSiliconTracking_MarlinTrk::Timer 
_timer
 
TStopwatch _timer2Triplet
 
TStopwatch _timer2Build
 
bool _mydebugstopwatch2
 
float _currentPurity
 
std::map< MCParticle
*, SimTrackerHitVec > 
_mcpVXD
 
std::map< MCParticle
*, SimTrackerHitVec > 
_mcpVXDFTD
 
std::map< MCParticle
*, SimTrackerHitVec > 
_mcpVXDSIT
 
std::map< MCParticle
*, SimTrackerHitVec > 
_mcpVXDFTDSIT
 
std::map< MCParticle
*, SimTrackerHitVec > 
_mcpFTD
 
std::map< MCParticle
*, SimTrackerHitVec > 
_mcpFTDSIT
 
std::map< MCParticle
*, SimTrackerHitVec > 
_mcpSIT
 
Triplet_curtriplet
 
bool _availableInBuildedTrack
 
BuildedTrackVec _buildedTrackContainer
 
BTMap _mcpBuildedTrackContainer
 
std::vector< std::map
< MCParticle
*, MCP_BuildedTrack > > 
_mcpRemainingBTContainerA
 
std::vector< std::map
< MCParticle
*, MCP_BuildedTrack > > 
_mcpRemainingBTContainerB
 
std::vector< Triplet_tripletContainer
 
TripMap _mcpTripletContainer
 
std::vector< std::map
< MCParticle *, MCP_Triplet > > 
_mcpRemainingTRContainerA
 
std::vector< std::map
< MCParticle *, MCP_Triplet > > 
_mcpRemainingTRContainerB
 
MCPMap _mcpMap
 
std::vector
< LCRelationNavigator * > 
_naviVec
 

Static Protected Attributes

static const double TWOPI = 2*M_PI
 
static const int _output_track_col_quality_GOOD = 1
 
static const int _output_track_col_quality_FAIR = 2
 
static const int _output_track_col_quality_POOR = 3
 

Detailed Description

=== FPCCDSiliconTracking_MarlinTrk Processor ===
This processor is based on SiliconTracking_MarlinTrk Processor (author: Steve Apline).


The major differences between FPCCDSiliconTracking_MarlinTrk and SiliconTracking_MarlinTrk are
TestTriplet method and BuildTrack method, which is to say, making track seed process and extrapolation process.
In more detail, please see my talk slide in LCWS 13.
https://agenda.linearcollider.org/getFile.py/access?contribId=313&sessionId=37&resId=0&materialId=slides&confId=6000
This slide explains the major differences and shows improvement in tracking efficiency by using FPCCDSiliconTracking_MarlinTrk and
FPCCDFullLDCTracking_MarlinTrk.
In more detail than this slide, now I am preparing to submit proceedings of LCWS 13. In the future, I will write the address here.

This processor is named FPCCD~, but if you don't use FPCCD VXD Simulator but CMOS with VXDPlanarDigiProcessor or something like that,
abailable, and improves tracking efficiency and flavor tagging and reduces CPU time down to 1/10 if you include pair-BG into your analysis.
The performance evaluation study of this processor in the case including pair-BG is shown in
https://agenda.linearcollider.org/getFile.py/access?contribId=5&resId=0&materialId=slides&confId=6294

Author
Tatsuya Mori (Tohoku University)

The following sentence is the copy of SiliconTracking_MarlinTrk.

Processor performing stand-alone pattern recognition in the vertex detector (VXD), forward tracking disks and SIT.
The procedure consists of three steps :
1) Tracking in VXD and SIT ;
2) Tracking in FTD ;
3) Merging compatible track segments reconstructed in VXD and FTD
STEP 1 : TRACKING IN VXD and SIT
Algorithm starts with finding of hit triplets satisfying helix hypothesis
in three different layers. Two layers of SIT are effectively considered as outermost
layers of the vertex detector. To accelerate procedure, the 4-pi solid angle is divided in NDivisionsInTheta and NDivisionsInPhi sectors in cosQ and Phi, respectively. Triplets are looked for in 2x2 window of adjacent sectors. Once triplet is found, attempt is made to associate additional hits to track. Combinatin of hits is accepted for further analysis if the Chi2 of the fit is less than certain predefined threshold. All accepted combinations are sorted in ascending order of their Chi2. First track candidate in the sorted array is automatically accepted. The hits belonging to this track are marked as used, and track candidates sharing these hits are discarded. The procedure proceeds with increasing index of track candidate in the sorted array until all track candidate have been output or discarded.
STEP 2 : TRACKING IN FTD
In the next step tracking in FTD is performed. The strategy of tracking in the FTD is the same as used for tracking in the VXD+SIT.
STEP 3 : MERGING TRACK SEGMENTS FOUND IN FTD AND VXD+SIT
In the last step, track segments reconstructed in the FTD and VXD+SIT, belonging to the same track are identified and merged into one track. All possible pairings are tested for their compatibility. The number of pairings considered is Ntrk_VXD_SIT*Ntrk_FTD, where Ntrk_VXD_SIT is the number of track segments reconstructed in the first step in VXD+SIT (segments containing solely VXD and SIT hits) and Ntrk_FTD is the number of track segments reconstructed in the second step (segments containing solely FTD hits). Pair of segments is accepted for further examination if the angle between track segments and than certain specified threshold. Pairing satisfying this condition is subjected for addtitional test. The fit is performed on unified array of hits belonging to both segments. If the chi2 of the fit does not exceed predefined cut value two segments are unified into one track.

Input collections and prerequisites

Processor requires collection of digitized vertex, sit and ftd tracker hits.
If such a collections with the user specified names do not exist processor takes no action.

Output

Processor produces an LCIO collection of the Tracks. Each track is characterised by five parameters : Omega (signed curvuture), Tan(lambda) where lambda is the dip angle, Phi (azimuthal angle @ point of closest approach), D0 (signed impact parameter), Z0 (displacement along z axis at the point of closest approach to IP). Covariance matrix for these parameters is also provided. Only lower left corner of the covariance matrix is stored. The sequence of the covariance matrix elements assigned to track is the following:
(Omega,Omega)
(Omega,TanLambda), (TanLambda,TanLambda)
(Omega,Phi), (TanLamda,Phi), (Phi,Phi)
(Omega,D0), (TanLambda,D0), (Phi,D0), (D0,D0)
(Omega,Z0), (TanLambda,Z0), (Phi,Z0), (D0,Z0), (Z0,Z0)
The number of hits in the different subdetectors associated with each track can be accessed via method Track::getSubdetectorHitNumbers(). This method returns vector of integers :
number of VXD hits in track is the first element in this vector (Track::getSubdetectorHitNumbers()[0])
number of FTD hits in track is the second element in this vector (Track::getSubdetectorHitNumbers()[1])
number of SIT hits in track is the third element in this vector (Track::getSubdetectorHitNumbers()[2])
Output track collection has a name "SiTracks".

Parameters
VXDHitCollectionNamename of input VXD TrackerHit collection
(default parameter value : "VXDTrackerHits")
FTDHitCollectionNamename of input FTD TrackerHit collection
(default parameter value : "FTDTrackerHits")
SITHitCollectionNamename of input SIT TrackerHit collection
(default parameter value : "SITTrackerHits")
SiTrackCollectionNamename of the output Silicon track collection
(default parameter value : "SiTracks")
LayerCombinationscombinations of layers used to search for hit triplets in VXD+SIT
(default parameters : 6 4 3 6 4 2 6 3 2 5 4 3 5 4 2 5 3 2 4 3 2 4 3 1 4 2 1 3 2 1)
Note that in the VXD+SIT system the first and the second layers of SIT have indicies nLayerVXD and nLayerVXD+1. Combination given above means that triplets are looked first in layers 6 4 3, and then in 6 4 2; 5 4 3; 6 3 2 etc. NOTE THAT LAYER INDEXING STARTS FROM 0. LAYER 0 is the innermost layer
LayerCombinationsFTDcombinations of layers used to search for hit triplets in FTD
(default parameters 6 5 4 5 4 3 5 4 2 5 4 1 5 3 2 5 3 1 5 2 1 4 3 2 4 3 1 4 3 0 4 2 1 4 2 0 4 1 0 3 2 1 3 2 0 3 1 0 2 1 0). NOTE THAT TRACKS IN FTD ARE SEARCHED ONLY IN ONE HEMISPHERE. TRACK IS NOT ALLOWED TO HAVE HITS BOTH IN BACKWARD AND FORWARD PARTS OF FTD SIMULTANEOUSLY.
NDivisionsInPhiNumber of divisions in Phi for tracking in VXD+SIT
(default value is 40)
NDivisionsInThetaNumber of divisions in cosQ for tracking in VXD+SIT
(default value is 40)
NDivisionsInPhiFTDNumber of divisions in Phi for tracking in FTD
(default value is 3)
Chi2WRphiTripletweight on chi2 in R-Phi plane for track with 3 hits
(default value is 1)
Chi2WZTripletweight on chi2 in S-Z plane for track with 3 hits
(default value is 0.5)
Chi2WRphiQuartetweight on chi2 in R-Phi plane to accept track with 4 hits
(default value is 1)
Chi2WZQuartetweight on chi2 in S-Z plane for track with 4 hits
(default value is 0.5)
Chi2WRphiSeptetweight on chi2 in R-Phi plane for track with 5 and more hits
(default value is 1)
Chi2WZSeptetCut on chi2 in S-Z plane for track with 5 and more hits
(default value is 0.5)
Chi2FitCutCut on chi2/ndf to accept track candidate
(default value is 100.)
AngleCutForMergingcut on the angle between two track segments. If the angle is greater than this cut, segments are not allowed to be merged.
(default value is 0.1)
MinDistCutAttachcut on the distance (in mm) from hit to the helix. This parameter is used to decide whether hit can be attached to the track. If the distance is less than cut value. The track is refitted with a given hit being added to the list of hits already assigned for the track. Additional hit is assigned if chi2 of the new fit has good chi2.
(default value is 2 )
MinLayerToAttachthe minimal layer index to attach VXD hits to the found hit triplets
(default value is -1)
CutOnZ0cut on Z0 parameter of track (in mm). If abs(Z0) is greater than the cut value, track is discarded (used to suppress fake track rate in the presence of beam induced background hits)
(default value is 100)
CutOnD0cut on D0 parameter of track (in mm). If abs(D0) is greater than the cut value, track is discarded (used to suppress fake track rate in the presence of beam induced background hits)
(default value is 100)
CutOnPtcut on Pt (GeV/c). If Pt is less than this cut, track is discarded (used to suppress fake track rate in the presence of beam induced background hits)
(default value is 0.1)
MinimalHitsminimal number of hits in track required
(default value is 3)
NHitsChi2Maximal number of hits for which a track with n hits is aways better than one with n-1 hits. For tracks with equal or more than NHitsChi2 the track with the lower $\chi^2$ is better. (default value is 5)
FastAttachmentif this flag is set to 1, less accurate but fast procedure to merge additional hits to tracks is used
if set to 0, a more accurate, but slower procedure is invoked
(default value is 0)
UseSITWhen this flag is set to 1, SIT is included in pattern recognition. When this flag is set to 0, SIT is excluded from the procedure of pattern recognition
(default value is 1)

Author
A. Raspereza (MPI Munich)

Member Function Documentation

void FPCCDSiliconTracking_MarlinTrk::CreateTrack ( TrackExtended *  trackAR)
protected

Method which creates Track out of TrackExtended objects. Checks for possible track splitting (separate track segments in VXD and FTD).

Referenced by processEvent().

void FPCCDSiliconTracking_MarlinTrk::Sorting ( TrackExtendedVec &  trackVec)
protected

Sorting of Track Vector in ascending order of chi2/ndf

Referenced by processEvent().

Member Data Documentation

int FPCCDSiliconTracking_MarlinTrk::_safetyPhiRange_fix
protected

Extra range in addition to main range used for triplet construction process and needed to find triplet is calculated by getNeededPhiSectors, but safety range is not considered.

Value of _safetyRange is used such as Range = Range*(1 + _safetyRange);

Referenced by init().


The documentation for this class was generated from the following files: