예제 #1
0
    def __init__(self, *args, **kwargs):

        # Setup target acquisition inclusion
        constraint_acqs = Constraint([
            DMSAttrConstraint(name='acq_exp',
                              sources=['exp_type'],
                              value='|'.join(ACQ_EXP_TYPES),
                              force_unique=False),
            DMSAttrConstraint(
                name='acq_obsnum',
                sources=['obs_num'],
                value=lambda: '(' + '|'.join(self.constraints['obs_num'].
                                             found_values) + ')',
                force_unique=False,
            )
        ],
                                     name='acq_constraint',
                                     work_over=ProcessList.EXISTING)

        # Put all constraints together.
        self.constraints = Constraint([
            Constraint_Base(),
            DMSAttrConstraint(sources=['is_imprt'], force_undefined=True),
            Constraint([
                Constraint(
                    [self.constraints, Constraint_Obsnum()], name='rule'),
                constraint_acqs
            ],
                       name='acq_check',
                       reduce=Constraint.any),
        ],
                                      name='dmsbase_bkg')

        super(AsnMixin_BkgScience, self).__init__(*args, **kwargs)
예제 #2
0
 def __init__(self):
     super(Constraint_Image_Nonscience, self).__init__(
         [
             Constraint_TargetAcq(),
             DMSAttrConstraint(
                 name='non_science',
                 sources=['exp_type'],
                 value='|'.join(IMAGE2_NONSCIENCE_EXP_TYPES),
             ),
             Constraint(
                 [
                     DMSAttrConstraint(
                         name='exp_type',
                         sources=['exp_type'],
                         value='nrs_msaspec'
                     ),
                     DMSAttrConstraint(
                         sources=['msastate'],
                         value='primarypark_allopen'
                     ),
                     DMSAttrConstraint(
                         sources=['grating'],
                         value='mirror'
                     )
                 ]
             )
         ],
         reduce=Constraint.any
     )
예제 #3
0
 def __init__(self):
     super(Constraint_Mode, self).__init__([
         DMSAttrConstraint(
             name='instrument',
             sources=['instrume']
         ),
         DMSAttrConstraint(
             name='detector',
             sources=['detector']
         ),
         DMSAttrConstraint(
             name='opt_elem',
             sources=['filter', 'band']
         ),
         DMSAttrConstraint(
             name='opt_elem2',
             sources=['pupil', 'grating'],
             required=False,
         ),
         DMSAttrConstraint(
             name='subarray',
             sources=['subarray'],
             required=False,
         ),
         DMSAttrConstraint(
             name='channel',
             sources=['channel'],
             required=False,
         ),
         Constraint(
             [
                 DMSAttrConstraint(
                     sources=['detector'],
                     value='nirspec'
                 ),
                 DMSAttrConstraint(
                     sources=['filter'],
                     value='opaque'
                 ),
             ],
             reduce=Constraint.notany
         ),
         Constraint(
             [
                 DMSAttrConstraint(
                     sources=['visitype'],
                     value='.+wfsc.+',
                 ),
             ],
             reduce=Constraint.notany
         ),
         DMSAttrConstraint(
             name='slit',
             sources=['fxd_slit'],
             required=False,
         )
     ])
예제 #4
0
 def __init__(self):
     super(Constraint_Base, self).__init__([
         DMSAttrConstraint(name='program', sources=['program']),
         DMSAttrConstraint(
             name='is_tso',
             sources=['tsovisit'],
             required=False,
             force_unique=True,
         )
     ])
예제 #5
0
 def __init__(self):
     super(Constraint_Base, self).__init__([
         DMSAttrConstraint(
             name='program',
             sources=['program'],
         ),
         DMSAttrConstraint(
             name='instrument',
             sources=['instrume'],
         ),
     ],
                                           name='base')
예제 #6
0
 def __init__(self):
     super(Constraint_MSA, self).__init__([
         DMSAttrConstraint(name='exp_type',
                           sources=['exp_type'],
                           value=('nrs_msaspec'),
                           force_unique=False),
         DMSAttrConstraint(
             name='is_msa',
             sources=['msametfl'],
             force_unique=False,
         )
     ],
                                          name='msa_spectral')
예제 #7
0
 def __init__(self):
     super(Constraint_Optical_Path, self).__init__([
         DMSAttrConstraint(
             name='opt_elem',
             sources=['filter'],
         ),
         DMSAttrConstraint(
             name='opt_elem2',
             sources=['pupil', 'grating'],
             required=False,
         ),
         DMSAttrConstraint(name='subarray', sources=['subarray'])
     ])
예제 #8
0
def global_constraints():
    constraint = DMSAttrConstraint(
        name='asn_candidate',
        value=['.+o002.+'],
        sources=['asn_candidate'],
        force_unique=True,
        is_acid=True,
        evaluate=True,
    )
    return constraint
예제 #9
0
 def __init__(self):
     super(Constraint_ExtCal, self).__init__(
         [
             DMSAttrConstraint(
                 name='exp_type',
                 sources=['exp_type'],
                 value='nis_extcal'
             )
         ],
         reduce=Constraint.notany
     )
예제 #10
0
 def __init__(self):
     super(Constraint_Mode, self).__init__([
         DMSAttrConstraint(
             name='program',
             sources=['program']
         ),
         DMSAttrConstraint(
             name='target',
             sources=['targetid'],
         ),
         DMSAttrConstraint(
             name='instrument',
             sources=['instrume']
         ),
         DMSAttrConstraint(
             name='detector',
             sources=['detector']
         ),
         DMSAttrConstraint(
             name='opt_elem',
             sources=['filter', 'band']
         ),
         DMSAttrConstraint(
             name='opt_elem2',
             sources=['pupil', 'grating'],
             required=False,
         ),
         DMSAttrConstraint(
             name='subarray',
             sources=['subarray'],
             required=False,
         ),
         DMSAttrConstraint(
             name='channel',
             sources=['channel'],
             required=False,
         ),
         DMSAttrConstraint(
             name='slit',
             sources=['fxd_slit'],
             required=False,
         )
     ])
예제 #11
0
    def __init__(self, exclude_exp_types=None):
        if exclude_exp_types is None:
            general_science = SPEC2_SCIENCE_EXP_TYPES
        else:
            general_science = set(SPEC2_SCIENCE_EXP_TYPES
                                  ).symmetric_difference(exclude_exp_types)

        super(Constraint_Spectral_Science,
              self).__init__([
                  DMSAttrConstraint(name='exp_type',
                                    sources=['exp_type'],
                                    value='|'.join(general_science))
              ],
                             reduce=Constraint.any)
예제 #12
0
def test_level3_productname_components_acid():
    global_constraints = DMSAttrConstraint(
        name='asn_candidate_ids',
        value='.+o001.+',
        sources=['asn_candidate'],
        force_unique=True,
        is_acid=True,
        evaluate=True,
    )
    rules = registry_level3_only(global_constraints=global_constraints)
    pool = combine_pools(t_path('data/pool_002_image_miri.csv'))
    asns = generate(pool, rules)
    asn = asns[0]
    match = re.match(LEVEL3_PRODUCT_NAME_REGEX, asn['products'][0]['name'])
    assert match is not None
    matches = match.groupdict()
    assert matches['program'] == '99009'
    assert matches['acid'] == 'o001'
    assert matches['target'] == 't001'
    assert matches['instrument'] == 'miri'
    assert matches['opt_elem'] == 'f560w'
예제 #13
0
def constrain_on_candidates(candidates):
    """Create a constraint based on a list of candidates

    Parameters
    ----------
    candidates: (str, ...) or None
        List of candidate id's.
        If None, then all candidates are matched.
    """
    if candidates is not None and len(candidates):
        c_list = '|'.join(candidates)
        values = ''.join(['.+(', c_list, ').+'])
    else:
        values = None
    constraint = DMSAttrConstraint(
        name='asn_candidate',
        sources=['asn_candidate'],
        value=values,
        force_unique=True,
        is_acid=True,
        evaluate=True,
    )

    return constraint
예제 #14
0
# Null values
EMPTY = (None, '', 'NULL', 'Null', 'null', 'F', 'f', 'N', 'n')

pool_file = func_fixture(generate_params,
                         scope='module',
                         params=[
                             t_path('data/mega_pool.csv'),
                         ])

global_constraints = func_fixture(generate_params,
                                  scope='module',
                                  params=[
                                      DMSAttrConstraint(
                                          name='asn_candidate',
                                          value=['.+o002.+'],
                                          sources=['asn_candidate'],
                                          force_unique=True,
                                          is_acid=True,
                                          evaluate=True,
                                      ),
                                  ])


@pytest.mark.slow
def test_level35_names(pool_file):
    rules = registry_level3_only()
    pool = AssociationPool.read(pool_file)
    asns = generate(pool, rules)
    for asn in asns:
        product_name = asn['products'][0]['name']
        if asn['asn_rule'] == 'Asn_IFU':
            m = re.match(LEVEL3_PRODUCT_NAME_NO_OPTELEM_REGEX, product_name)
예제 #15
0
        'Asn_Dither_Set1', 'Asn_Dither_Set2', 'Asn_WFS_Set1', 'Asn_WFS_Set2'
    ]

    for rule in valid_rules:
        assert rule in rule_names


def test_base_instatiation():
    """Create an association without any initialization"""
    assert Association()


@pytest.mark.parametrize('constraints, pool, n_asns', [
    (
        DMSAttrConstraint(name='obs_id',
                          value='V99009001001P0000000002101',
                          sources=['obs_id']),
        helpers.t_path('data/pool_018_all_exptypes.csv'),
        1,
    ),
    (
        DMSAttrConstraint(name='obs_id', value='junk', sources=['obs_id']),
        helpers.t_path('data/pool_001_candidates.csv'),
        0,
    ),
    (
        DMSAttrConstraint(
            name='asn_candidate_id',
            value='.+(o001|o002).+',
            sources=['asn_candidate'],
            force_unique=False,