Exemple #1
0
def DefineVertexD3PDObject(object,
                           trackTarget='trk',
                           trackPrefix='trk_',
                           trackType='Rec::TrackParticleContainer',
                           flags=TrackD3PDFlags):

    if trackType == 'Rec::TrackParticleContainer':
        vxTrackAtVertexTrackAssociationTool = TrackD3PDMaker.VxTrackAtVertexTrackParticleAssociationTool
    if trackType == 'TrackCollection':
        vxTrackAtVertexTrackAssociationTool = TrackD3PDMaker.VxTrackAtVertexTrkTrackAssociationTool

    # Position
    object.defineBlock(flagTestLOD('vertexPositionLevelOfDetails>=1', flags),
                       'Position', TrackD3PDMaker.VertexPositionFillerTool)

    # Covariance Matrix
    CovarianceAssoc = SimpleAssociation \
                      (object,
                       TrackD3PDMaker.VertexCovarianceAssociationTool,
                       level = flagTestLOD('vertexPositionLevelOfDetails>=2', flags))

    CovarianceAssoc.defineBlock(
        flagTestLOD('vertexPositionLevelOfDetails>=2', flags),
        'Error',
        TrackD3PDMaker.CovarianceFillerTool,
        Error=deferFlag('storeDiagonalCovarianceAsErrors', flags),
        DiagCovariance=deferFlag('not storeDiagonalCovarianceAsErrors', flags),
        OffDiagCovariance=False,
        IsPosition=True)

    CovarianceAssoc.defineBlock(flagTestLOD('vertexPositionLevelOfDetails>=3',
                                            flags),
                                'Covariance',
                                TrackD3PDMaker.CovarianceFillerTool,
                                Error=False,
                                DiagCovariance=False,
                                OffDiagCovariance=True,
                                IsPosition=True)

    # Type
    object.defineBlock(flagTestLOD('storeVertexType', flags), 'Type',
                       TrackD3PDMaker.VertexTypeFillerTool)

    # Fit Quality
    FitQualityAssoc = SimpleAssociation \
                      (object,
                       TrackD3PDMaker.VertexFitQualityAssociationTool,
                       level = flagTestLOD('storeVertexFitQuality', flags))

    FitQualityAssoc.defineBlock(flagTestLOD('storeVertexFitQuality',
                                            flags), 'FitQuality',
                                TrackD3PDMaker.TrackFitQualityFillerTool)

    # Kine
    object.defineBlock(flagTestLOD('storeVertexKinematics', flags), 'Kine',
                       TrackD3PDMaker.VertexKineFillerTool)

    # Purity
    if rec.doTruth():
        object.defineBlock(
            flagTestLOD('doTruth and storeVertexPurity', flags, _get_purity),
            'Purity', TrackD3PDMaker.VertexPurityFillerTool)

    # Track association
    TrackAssoc = ContainedVectorMultiAssociation\
                 (object,
                  TrackD3PDMaker.VertexTrackAssociationTool,
                  trackPrefix,
                  FillUnbiasedIP = deferFlag ('storeVertexTrackAssociation',
                                              flags),
                  level = flagTestLOD ('storeVertexTrackAssociation or storeVertexTrackIndexAssociation',
                                       flags))

    TrackAssoc.defineBlock(flagTestLOD('storeVertexTrackAssociation',
                                       flags), 'TrackAtVertex',
                           TrackD3PDMaker.VertexTrackAssociationFillerTool)

    TrackParticleAssoc = IndexAssociation(
        TrackAssoc,
        vxTrackAtVertexTrackAssociationTool,
        trackTarget,
        level=flagTestLOD('storeVertexTrackIndexAssociation', flags))
def TrackStateOnSurfaceAssociation(parent,
                                   associator,
                                   _prefix='',
                                   _blocknameprefix='',
                                   _level=0,
                                   getBLayerMeasurements=False,
                                   getPixelMeasurements=False,
                                   getSCTMeasurements=False,
                                   getTRTMeasurements=False,
                                   getMDTMeasurements=False,
                                   getCSCMeasurements=False,
                                   getRPCMeasurements=False,
                                   getTGCMeasurements=False,
                                   getBLayerOutliers=False,
                                   getPixelOutliers=False,
                                   getSCTOutliers=False,
                                   getTRTOutliers=False,
                                   getMDTOutliers=False,
                                   getCSCOutliers=False,
                                   getRPCOutliers=False,
                                   getTGCOutliers=False,
                                   getBLayerHoles=False,
                                   getPixelHoles=False,
                                   getSCTHoles=False,
                                   getTRTHoles=False,
                                   getMDTHoles=False,
                                   getCSCHoles=False,
                                   getRPCHoles=False,
                                   getTGCHoles=False,
                                   fillPullsName='False',
                                   flags=TrackD3PDFlags):

    assoc = ContainedVectorMultiAssociation\
            (parent, associator,
             prefix = _prefix, level = _level,
             blockname = _blocknameprefix+'HitsOnTrackAssoc',
             GetBLayerMeasurements = getBLayerMeasurements,
             GetPixelMeasurements = getPixelMeasurements,
             GetSCTMeasurements = getSCTMeasurements,
             GetTRTMeasurements = getTRTMeasurements,
             GetMDTMeasurements = getMDTMeasurements,
             GetCSCMeasurements = getCSCMeasurements,
             GetRPCMeasurements = getRPCMeasurements,
             GetTGCMeasurements = getTGCMeasurements,
             GetBLayerOutliers = getBLayerOutliers,
             GetPixelOutliers = getPixelOutliers,
             GetSCTOutliers = getSCTOutliers,
             GetTRTOutliers = getTRTOutliers,
             GetMDTOutliers = getMDTOutliers,
             GetCSCOutliers = getCSCOutliers,
             GetRPCOutliers = getRPCOutliers,
             GetTGCOutliers = getTGCOutliers,
             GetBLayerHoles = getBLayerHoles,
             GetPixelHoles = getPixelHoles,
             GetSCTHoles = getSCTHoles,
             GetTRTHoles = getTRTHoles,
             GetMDTHoles = getMDTHoles,
             GetCSCHoles = getCSCHoles,
             GetRPCHoles = getRPCHoles,
             GetTGCHoles = getTGCHoles)

    assoc.defineBlock(0,
                      _blocknameprefix + 'HitsOnTrack',
                      TrackD3PDMaker.TrackStateOnSurfaceFillerTool,
                      FillPixelHits=getPixelMeasurements or getPixelOutliers
                      or getBLayerMeasurements or getBLayerOutliers,
                      FillSCTHits=getSCTMeasurements or getSCTOutliers,
                      FillTRTHits=getTRTMeasurements or getTRTOutliers,
                      FillMDTHits=getMDTMeasurements or getMDTOutliers,
                      FillCSCHits=getCSCMeasurements or getCSCOutliers,
                      FillRPCHits=getRPCMeasurements or getRPCOutliers,
                      FillTGCHits=getTGCMeasurements or getTGCOutliers,
                      FillPixelHoles=getPixelHoles or getBLayerHoles,
                      FillSCTHoles=getSCTHoles,
                      FillTRTHoles=getTRTHoles,
                      FillMDTHoles=getMDTHoles,
                      FillCSCHoles=getCSCHoles,
                      FillRPCHoles=getRPCHoles,
                      FillTGCHoles=getTGCHoles,
                      FillPulls=deferFlag(fillPullsName, flags),
                      ResidualPullCalculator=deferFlag(
                          '_get_res() if %s else None' % fillPullsName, flags,
                          {'_get_res': _get_res}))

    ## TODO - add Muon holes
    if not (getPixelHoles or getBLayerHoles or getSCTHoles or getTRTHoles):
        fqassoc = SimpleAssociation\
                  (assoc,
                   TrackD3PDMaker.TSOFitQualityAssociationTool,
                   prefix = '', level = 0, blockname = _blocknameprefix+'HitsOnTrack_FitQualityAssoc')

        fqassoc.defineBlock(0, _blocknameprefix + 'HitsOnTrack_FitQuality',
                            TrackD3PDMaker.TrackFitQualityFillerTool)

    return assoc
def DefinexAODVertexD3PDObject(object,
                               trackTarget='trk',
                               trackPrefix='trk_',
                               flags=TrackD3PDFlags):

    # Position
    object.defineBlock(flagTestLOD('vertexPositionLevelOfDetails>=1', flags),
                       'Position',
                       D3PDMakerCoreComps.AuxDataFillerTool,
                       Vars=['x', 'y', 'z'])

    # Covariance Matrix
    CovarianceAssoc = SimpleAssociation \
                      (object,
                       TrackD3PDMaker.VertexCovarianceAssociationTool,
                       level = flagTestLOD('vertexPositionLevelOfDetails>=2', flags))

    CovarianceAssoc.defineBlock(
        flagTestLOD('vertexPositionLevelOfDetails>=2', flags),
        'Error',
        TrackD3PDMaker.CovarianceFillerTool,
        Error=deferFlag('storeDiagonalCovarianceAsErrors', flags),
        DiagCovariance=deferFlag('not storeDiagonalCovarianceAsErrors', flags),
        OffDiagCovariance=False,
        IsPosition=True)

    CovarianceAssoc.defineBlock(flagTestLOD('vertexPositionLevelOfDetails>=3',
                                            flags),
                                'Covariance',
                                TrackD3PDMaker.CovarianceFillerTool,
                                Error=False,
                                DiagCovariance=False,
                                OffDiagCovariance=True,
                                IsPosition=True)

    # Type
    object.defineBlock(flagTestLOD('storeVertexType', flags),
                       'Type',
                       D3PDMakerCoreComps.AuxDataFillerTool,
                       Vars=['type = vertexType'])

    # Fit Quality
    object.defineBlock(flagTestLOD('storeVertexFitQuality', flags),
                       'FitQuality',
                       D3PDMakerCoreComps.AuxDataFillerTool,
                       Vars=['chi2 = chiSquared', 'ndof = numberDoF'])

    # Kine
    object.defineBlock(flagTestLOD('storeVertexKinematics', flags), 'Kine',
                       TrackD3PDMaker.VertexKineFillerTool)

    # Track Association
    TrackAssoc = ContainedVectorMultiAssociation \
                 (object,
                  TrackD3PDMaker.VertexTrackParticleAssociationTool,
                  trackPrefix,
                  level = flagTestLOD ('storeVertexTrackAssociation or storeVertexTrackIndexAssociation',
                                       flags))

    TrackAssoc.defineBlock(flagTestLOD(
        'storeVertexTrackAssociation or storeVertexTrackIndexAssociation',
        flags),
                           'TrkFitQuality',
                           D3PDMakerCoreComps.AuxDataFillerTool,
                           Vars=['chi2 = chiSquared'])

    PerigeeAssoc = SimpleAssociation \
                   (TrackAssoc,
                    TrackD3PDMaker.TrackParticlePerigeeAtPVAssociationTool)
    PerigeeAssoc.defineBlock(
        flagTestLOD(
            'storeVertexTrackAssociation or storeVertexTrackIndexAssociation',
            flags), 'Trk', TrackD3PDMaker.PerigeeFillerTool)

    TrackAssoc.defineBlock(flagTestLOD('storeVertexTrackIndexAssociation',
                                       flags),
                           'TrackAssocIndex',
                           D3PDMakerCoreComps.IndexFillerTool,
                           Target=trackTarget)