1919import fr .jmmc .jmcs .util .NumberUtils ;
2020import fr .jmmc .jmcs .util .ObjectUtils ;
2121import fr .jmmc .jmcs .util .ToStringable ;
22- import fr .jmmc .oitools .OIFitsConstants ;
2322import fr .jmmc .oitools .fits .FitsTable ;
2423import fr .jmmc .oitools .model .Granule .GranuleField ;
2524import fr .jmmc .oitools .model .range .Range ;
2625import fr .jmmc .oitools .processing .Double1DFilter ;
2726import fr .jmmc .oitools .processing .FitsTableFilter ;
2827import fr .jmmc .oitools .processing .FitsTableFilter .FilterState ;
28+ import fr .jmmc .oitools .processing .NightIdFilter ;
2929import fr .jmmc .oitools .processing .Selector ;
3030import fr .jmmc .oitools .processing .SelectorResult ;
31+ import fr .jmmc .oitools .processing .TargetUIDFilter ;
3132import fr .jmmc .oitools .util .GranuleComparator ;
3233import fr .jmmc .oitools .util .OIFitsFileComparator ;
3334import fr .nom .tam .fits .FitsException ;
@@ -423,12 +424,40 @@ public SelectorResult findOIData(final Selector selector, final SelectorResult i
423424 result = (result != null ) ? result : new SelectorResult (this );
424425
425426 // Prepare filters (once) in selectorResult:
426- if ((selector != null ) && selector .hasWavelengthRanges ()) {
427- final List <FitsTableFilter <?>> wlFilters = result .getFiltersOIWavelength ();
428- wlFilters .clear ();
429- wlFilters .add (new Double1DFilter (
430- OIFitsConstants .COLUMN_EFF_WAVE , selector .getWavelengthRanges ())
431- );
427+ if (selector != null ) {
428+ // Create the filter chain:
429+ {
430+ // OIData filters:
431+ final List <FitsTableFilter <?>> filtersData1D = result .getFiltersOIData ();
432+ filtersData1D .clear ();
433+ // subset filters:
434+ if (selector .getTargetUID () != null ) {
435+ filtersData1D .add (new TargetUIDFilter (tm , selector .getTargetUID ()));
436+ }
437+ // insModeUID: useless as granule already handled this criteria
438+ if (selector .getNightID () != null ) {
439+ filtersData1D .add (new NightIdFilter (selector .getNightID ()));
440+ }
441+ // table refs: see OIData filtering below
442+
443+ // generic filters:
444+ if (selector .hasFilter (Selector .FILTER_MJD )) {
445+ filtersData1D .add (new Double1DFilter (Selector .FILTER_MJD ,
446+ selector .getFilter (Selector .FILTER_MJD )));
447+ }
448+ // TODO: copy generic filters from selector.filters (1D)
449+ }
450+ {
451+ // Wavelength filters:
452+ final List <FitsTableFilter <?>> filtersWL = result .getFiltersOIWavelength ();
453+ filtersWL .clear ();
454+
455+ if (selector .hasFilter (Selector .FILTER_WAVELENGTH )) {
456+ filtersWL .add (new Double1DFilter (Selector .FILTER_WAVELENGTH ,
457+ selector .getFilter (Selector .FILTER_WAVELENGTH )));
458+ }
459+ // TODO: copy generic filters from selector.filters (WLEN only)
460+ }
432461 }
433462
434463 for (Granule g : granules ) {
@@ -492,11 +521,10 @@ public SelectorResult findOIData(final Selector selector, final SelectorResult i
492521 * @param oiData the oiData to add, and to read its OIWavelength to compute the IndexMask
493522 */
494523 private void filterOIData (final SelectorResult result , final Granule g , final OIData oiData ) {
495-
496524 logger .log (Level .FINE , "filterOIData: oiData = {0}" , oiData );
497525
498526 // apply filters on OIData:
499- // OIWavelength filters:
527+ // 1. OIWavelength filters:
500528 final OIWavelength oiWavelength = oiData .getOiWavelength ();
501529
502530 if (result .hasFiltersOIWavelength ()) {
@@ -508,14 +536,18 @@ private void filterOIData(final SelectorResult result, final Granule g, final OI
508536 }
509537 // oiWavelength already processed ?
510538 if (result .getWavelengthMask (oiWavelength ) == null ) {
511- final IndexMask wavelengthMask = computeMask1D (
539+ final IndexMask maskWavelength = computeMask1D (
512540 result .getFiltersOIWavelength (), oiWavelength , result .getFiltersUsed ()
513541 );
514- if (wavelengthMask == null ) {
542+ if (maskWavelength == null ) {
515543 // skip OIData (no remaining row):
516544 return ;
517545 }
518- result .putWavelengthMask (oiWavelength , wavelengthMask );
546+ if (logger .isLoggable (Level .FINE )) {
547+ logger .log (Level .FINE , "wlen filters: {0}" , result .getFiltersOIWavelength ());
548+ logger .log (Level .FINE , "wlenMask: {0}" , maskWavelength );
549+ }
550+ result .putWavelengthMask (oiWavelength , maskWavelength );
519551 }
520552 } else if (oiWavelength != null ) {
521553 // oiWavelength already processed ?
@@ -524,6 +556,22 @@ private void filterOIData(final SelectorResult result, final Granule g, final OI
524556 result .putWavelengthMask (oiWavelength , IndexMask .FULL );
525557 }
526558 }
559+
560+ // 2. OIData filters:
561+ if (result .hasFiltersOIData ()) {
562+ final IndexMask maskRows = computeMask1D (
563+ result .getFiltersOIData (), oiData , result .getFiltersUsed ()
564+ );
565+ if (maskRows == null ) {
566+ // skip OIData (no remaining row):
567+ return ;
568+ }
569+ if (logger .isLoggable (Level .FINE )) {
570+ logger .log (Level .FINE , "oidata filters: {0}" , result .getFiltersOIData ());
571+ logger .log (Level .FINE , "maskRows: {0}" , maskRows );
572+ }
573+ result .putDataMask1D (oiData , maskRows );
574+ }
527575 result .addOIData (g , oiData );
528576 }
529577
@@ -661,14 +709,16 @@ private List<Granule> findGranules(final Selector selector) {
661709 final Granule pattern = new Granule (target , insMode , nightId );
662710
663711 // Baselines criteria:
664- if (selector .hasBaselines ( )) {
665- pattern .getDistinctStaNames ().addAll (selector .getBaselines ( ));
712+ if (selector .hasFilter ( Selector . FILTER_BASELINE )) {
713+ pattern .getDistinctStaNames ().addAll (selector .getFilter ( Selector . FILTER_BASELINE ));
666714 }
667715
668716 // MJD & Wavelength ranges criteria:
669717 final GranuleMatcher granuleMatcher = GranuleMatcher .getInstance (
670- (selector .hasMJDRanges ()) ? new LinkedHashSet <Range >(selector .getMJDRanges ()) : null ,
671- (selector .hasWavelengthRanges ()) ? new LinkedHashSet <Range >(selector .getWavelengthRanges ()) : null
718+ (selector .hasFilter (Selector .FILTER_MJD ))
719+ ? new LinkedHashSet <Range >(selector .getFilter (Selector .FILTER_MJD )) : null ,
720+ (selector .hasFilter (Selector .FILTER_WAVELENGTH ))
721+ ? new LinkedHashSet <Range >(selector .getFilter (Selector .FILTER_WAVELENGTH )) : null
672722 );
673723
674724 if (!pattern .isEmpty () || !granuleMatcher .isEmpty ()) {
0 commit comments