Skip to content

Commit 9eb3acf

Browse files
committed
minor DataModel API changes to get all columns (num 1d or 2d, other)
1 parent f5f80f6 commit 9eb3acf

3 files changed

Lines changed: 171 additions & 38 deletions

File tree

src/main/java/fr/jmmc/oitools/OIFitsConstants.java

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,9 @@ public interface OIFitsConstants {
5454
/** Table OI_INSPOL */
5555
public final static String TABLE_OI_INSPOL = "OI_INSPOL";
5656

57+
/** Column CORRINDX_... prefix */
58+
public final static String PREFIX_CORRINDX = "CORRINDX_";
59+
5760
/* Main header keyword */
5861
/** PROG_ID = Program ID */
5962
public final static String KEYWORD_PROG_ID = "PROG_ID";
@@ -278,23 +281,23 @@ NS_MODEL_T3PHIERR D(NWAVE) Model of the error in triple-product phase in degrees
278281
public final static String COLUMN_VISPHIERR = "VISPHIERR";
279282
/* OIFits standard 2.0 */
280283
/** CORRINDX_VISAMP column */
281-
public final static String COLUMN_CORRINDX_VISAMP = "CORRINDX_VISAMP";
284+
public final static String COLUMN_CORRINDX_VISAMP = PREFIX_CORRINDX + "VISAMP";
282285
/** CORRINDX_VISPHI column */
283-
public final static String COLUMN_CORRINDX_VISPHI = "CORRINDX_VISPHI";
286+
public final static String COLUMN_CORRINDX_VISPHI = PREFIX_CORRINDX + "VISPHI";
284287
/** VISREFMAP column */
285288
public final static String COLUMN_VISREFMAP = "VISREFMAP";
286289
/** RVIS column */
287290
public final static String COLUMN_RVIS = "RVIS";
288291
/** RVISERR column */
289292
public final static String COLUMN_RVISERR = "RVISERR";
290293
/** CORRINDX_RVIS column */
291-
public final static String COLUMN_CORRINDX_RVIS = "CORRINDX_RVIS";
294+
public final static String COLUMN_CORRINDX_RVIS = PREFIX_CORRINDX + "RVIS";
292295
/** IVIS column */
293296
public final static String COLUMN_IVIS = "IVIS";
294297
/** IVISERR column */
295298
public final static String COLUMN_IVISERR = "IVISERR";
296299
/** CORRINDX_IVIS column */
297-
public final static String COLUMN_CORRINDX_IVIS = "CORRINDX_IVIS";
300+
public final static String COLUMN_CORRINDX_IVIS = PREFIX_CORRINDX + "IVIS";
298301

299302
/* Aspro Extension with complex visibilities (like AMBER OIFits) */
300303
/** VISDATA column */
@@ -315,7 +318,7 @@ NS_MODEL_T3PHIERR D(NWAVE) Model of the error in triple-product phase in degrees
315318
public final static String COLUMN_NS_MODEL_VIS2ERR = COLUMN_PREFIX_NS_MODEL + COLUMN_VIS2ERR;
316319
/* OIFits standard 2.0 */
317320
/** CORRINDX_VIS2DATA column */
318-
public final static String COLUMN_CORRINDX_VIS2DATA = "CORRINDX_VIS2DATA";
321+
public final static String COLUMN_CORRINDX_VIS2DATA = PREFIX_CORRINDX + "VIS2DATA";
319322

320323
/* Aspro Extension with square correlated flux and photometry */
321324
/** NS_CORRSQ column */
@@ -350,9 +353,9 @@ NS_MODEL_T3PHIERR D(NWAVE) Model of the error in triple-product phase in degrees
350353
public final static String COLUMN_V2COORD = "V2COORD";
351354
/* OIFits standard 2.0 */
352355
/** CORRINDX_T3AMP column */
353-
public final static String COLUMN_CORRINDX_T3AMP = "CORRINDX_T3AMP";
356+
public final static String COLUMN_CORRINDX_T3AMP = PREFIX_CORRINDX + "T3AMP";
354357
/** CORRINDX_T3PHI column */
355-
public final static String COLUMN_CORRINDX_T3PHI = "CORRINDX_T3PHI";
358+
public final static String COLUMN_CORRINDX_T3PHI = PREFIX_CORRINDX + "T3PHI";
356359

357360
/* OI_FLUX table */
358361
/** FOV keyword */
@@ -370,7 +373,7 @@ NS_MODEL_T3PHIERR D(NWAVE) Model of the error in triple-product phase in degrees
370373
/** FLUXERR column */
371374
public final static String COLUMN_FLUXERR = "FLUXERR";
372375
/** CORRINDX_FLUXDATA column */
373-
public final static String COLUMN_CORRINDX_FLUXDATA = "CORRINDX_FLUXDATA";
376+
public final static String COLUMN_CORRINDX_FLUXDATA = PREFIX_CORRINDX + "FLUXDATA";
374377
/* OI_FLUX table */
375378
/** FLUX column */
376379
public final static String COLUMN_FLUX = "FLUX";

src/main/java/fr/jmmc/oitools/fits/FitsTable.java

Lines changed: 46 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
******************************************************************************/
2020
package fr.jmmc.oitools.fits;
2121

22+
import fr.jmmc.oitools.OIFitsConstants;
2223
import fr.jmmc.oitools.meta.ColumnMeta;
2324
import fr.jmmc.oitools.meta.KeywordMeta;
2425
import fr.jmmc.oitools.meta.Types;
@@ -563,10 +564,9 @@ public final Collection<ColumnMeta> getAllColumnDescCollection() {
563564
* @param columnNames set to be filled with numerical column names
564565
*/
565566
public final void getNumericalColumnsNames(final Set<String> columnNames) {
566-
ColumnMeta meta;
567567
// Standard columns:
568568
for (Map.Entry<String, ColumnMeta> entry : getColumnsDesc().entrySet()) {
569-
meta = entry.getValue();
569+
final ColumnMeta meta = entry.getValue();
570570
switch (meta.getDataType()) {
571571
case TYPE_DBL:
572572
columnNames.add(entry.getKey());
@@ -576,7 +576,7 @@ public final void getNumericalColumnsNames(final Set<String> columnNames) {
576576
}
577577
// Derived columns:
578578
for (Map.Entry<String, ColumnMeta> entry : getColumnsDerivedDesc().entrySet()) {
579-
meta = entry.getValue();
579+
final ColumnMeta meta = entry.getValue();
580580
switch (meta.getDataType()) {
581581
case TYPE_DBL:
582582
columnNames.add(entry.getKey());
@@ -594,30 +594,68 @@ public final void getNumericalColumnsNames(final Set<String> columnNames) {
594594
*/
595595
public final List<ColumnMeta> getNumericalColumnsDescs() {
596596
final ArrayList<ColumnMeta> columnDescList = new ArrayList<ColumnMeta>();
597-
ColumnMeta meta;
598597
// Standard columns:
599598
for (Map.Entry<String, ColumnMeta> entry : getColumnsDesc().entrySet()) {
600-
meta = entry.getValue();
599+
final ColumnMeta meta = entry.getValue();
601600
switch (meta.getDataType()) {
602601
case TYPE_DBL:
603-
columnDescList.add(entry.getValue());
602+
columnDescList.add(meta);
604603
break;
605604
default:
606605
}
607606
}
608607
// Derived columns:
609608
for (Map.Entry<String, ColumnMeta> entry : getColumnsDerivedDesc().entrySet()) {
610-
meta = entry.getValue();
609+
final ColumnMeta meta = entry.getValue();
611610
switch (meta.getDataType()) {
612611
case TYPE_DBL:
613-
columnDescList.add(entry.getValue());
612+
columnDescList.add(meta);
614613
break;
615614
default:
616615
}
617616
}
618617
return columnDescList;
619618
}
620619

620+
/**
621+
* Return the column descriptors (standard then derived) representing
622+
* CHAR/SHORT/INT values (arrays) except "CORRINDX_..." columns
623+
*
624+
* @return list of other column descriptors
625+
*/
626+
public final List<ColumnMeta> getOtherColumnsDescs() {
627+
final ArrayList<ColumnMeta> columnDescList = new ArrayList<ColumnMeta>();
628+
// Standard columns:
629+
for (Map.Entry<String, ColumnMeta> entry : getColumnsDesc().entrySet()) {
630+
final ColumnMeta meta = entry.getValue();
631+
if (!meta.getName().startsWith(OIFitsConstants.PREFIX_CORRINDX)) {
632+
switch (meta.getDataType()) {
633+
case TYPE_CHAR:
634+
case TYPE_SHORT:
635+
case TYPE_INT:
636+
columnDescList.add(meta);
637+
break;
638+
default:
639+
}
640+
}
641+
}
642+
// Derived columns:
643+
for (Map.Entry<String, ColumnMeta> entry : getColumnsDerivedDesc().entrySet()) {
644+
final ColumnMeta meta = entry.getValue();
645+
if (!meta.getName().startsWith(OIFitsConstants.PREFIX_CORRINDX)) {
646+
switch (meta.getDataType()) {
647+
case TYPE_CHAR:
648+
case TYPE_SHORT:
649+
case TYPE_INT:
650+
columnDescList.add(meta);
651+
break;
652+
default:
653+
}
654+
}
655+
}
656+
return columnDescList;
657+
}
658+
621659
/*
622660
* --- Column values -------------------------------------------------------
623661
*/

src/main/java/fr/jmmc/oitools/model/DataModel.java

Lines changed: 114 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -340,7 +340,7 @@ private static void writeFailures(final OIFitsChecker checker) throws IOExceptio
340340
final Set<Rule> usedRules = checker.getRulesUsedByFailures();
341341

342342
if (Rule.values().length != usedRules.size()) {
343-
final Set<Rule> missing = new HashSet<Rule>();
343+
final Set<Rule> missing = new HashSet<Rule>(16);
344344
missing.addAll(Arrays.asList(Rule.values()));
345345
missing.removeAll(usedRules);
346346

@@ -582,8 +582,10 @@ private static OIFitsFile createOIFitsFile(final OIFitsStandard version) {
582582
private final Collection<OIData> oiDatas;
583583
/* cached values */
584584
private Set<String> allColumnNames = null;
585-
private Set<String> allColumnNames1D = null;
586-
private Set<String> allColumnNames2D = null;
585+
private Set<String> allNumColumnNames = null;
586+
private Set<String> allNumColumnNames1D = null;
587+
private Set<String> allNumColumnNames2D = null;
588+
private Set<String> allOtherColumnNames = null;
587589

588590
private DataModel(final OIFitsStandard version) {
589591
this(createOIFitsFile(version).getOiDataList(), true);
@@ -595,9 +597,9 @@ private DataModel(final Collection<OIData> oiDatas, final boolean shared) {
595597
}
596598

597599
private void reset() {
598-
allColumnNames = null;
599-
allColumnNames1D = null;
600-
allColumnNames2D = null;
600+
allNumColumnNames = null;
601+
allNumColumnNames1D = null;
602+
allNumColumnNames2D = null;
601603
}
602604

603605
public void refresh() {
@@ -611,30 +613,81 @@ private Collection<OIData> getOiDatas() {
611613
return oiDatas;
612614
}
613615

614-
public Set<String> getNumericalColumnNames() {
616+
public boolean isColumn(final String name) {
617+
return getNumericalColumnNames().contains(name);
618+
}
619+
620+
public Set<String> getAllColumnNames() {
615621
if (allColumnNames == null) {
616-
allColumnNames = getAllNumericalColumnNames(getOiDatas(), true, false);
622+
allColumnNames = getAllColumnNames(getOiDatas());
617623
}
618624
return allColumnNames;
619625
}
620626

627+
public boolean isNumericalColumn(final String name) {
628+
return getNumericalColumnNames().contains(name);
629+
}
630+
631+
public Set<String> getNumericalColumnNames() {
632+
if (allNumColumnNames == null) {
633+
allNumColumnNames = getAllNumericalColumnNames(getOiDatas(), true, false);
634+
}
635+
return allNumColumnNames;
636+
}
637+
638+
public boolean isNumericalColumn1D(final String name) {
639+
return getNumericalColumnNames1D().contains(name);
640+
}
641+
621642
public Set<String> getNumericalColumnNames1D() {
622-
if (allColumnNames1D == null) {
623-
allColumnNames1D = getAllNumericalColumnNames(getOiDatas(), false, false);
643+
if (allNumColumnNames1D == null) {
644+
allNumColumnNames1D = getAllNumericalColumnNames(getOiDatas(), false, false);
624645
}
625-
return allColumnNames1D;
646+
return allNumColumnNames1D;
647+
}
648+
649+
public boolean isNumericalColumn2D(final String name) {
650+
return getNumericalColumnNames2D().contains(name);
626651
}
627652

628653
public Set<String> getNumericalColumnNames2D() {
629-
if (allColumnNames2D == null) {
630-
allColumnNames2D = getAllNumericalColumnNames(getOiDatas(), false, true);
654+
if (allNumColumnNames2D == null) {
655+
allNumColumnNames2D = getAllNumericalColumnNames(getOiDatas(), false, true);
656+
}
657+
return allNumColumnNames2D;
658+
}
659+
660+
public boolean isOtherColumn(final String name) {
661+
return getOtherColumnNames().contains(name);
662+
}
663+
664+
public Set<String> getOtherColumnNames() {
665+
if (allOtherColumnNames == null) {
666+
allOtherColumnNames = getOtherColumnNames(getOiDatas());
631667
}
632-
return allColumnNames2D;
668+
return allOtherColumnNames;
669+
}
670+
671+
private static Set<String> getAllColumnNames(final Collection<OIData> oiDatas) {
672+
final Set<String> columnNames = new LinkedHashSet<String>();
673+
674+
getAllNumericalColumnNames(oiDatas, OIFitsConstants.TABLE_OI_VIS2, true, false, columnNames);
675+
getOtherColumnNames(oiDatas, OIFitsConstants.TABLE_OI_VIS2, columnNames);
676+
677+
getAllNumericalColumnNames(oiDatas, OIFitsConstants.TABLE_OI_VIS, true, false, columnNames);
678+
getOtherColumnNames(oiDatas, OIFitsConstants.TABLE_OI_VIS, columnNames);
679+
680+
getAllNumericalColumnNames(oiDatas, OIFitsConstants.TABLE_OI_T3, true, false, columnNames);
681+
getOtherColumnNames(oiDatas, OIFitsConstants.TABLE_OI_T3, columnNames);
682+
683+
getAllNumericalColumnNames(oiDatas, OIFitsConstants.TABLE_OI_FLUX, true, false, columnNames);
684+
getOtherColumnNames(oiDatas, OIFitsConstants.TABLE_OI_FLUX, columnNames);
685+
686+
return columnNames;
633687
}
634688

635689
private static Set<String> getAllNumericalColumnNames(final Collection<OIData> oiDatas,
636690
final boolean all, final boolean is2D) {
637-
638691
final Set<String> columnNames = new LinkedHashSet<String>();
639692

640693
getAllNumericalColumnNames(oiDatas, OIFitsConstants.TABLE_OI_VIS2, all, is2D, columnNames);
@@ -645,14 +698,23 @@ private static Set<String> getAllNumericalColumnNames(final Collection<OIData> o
645698
return columnNames;
646699
}
647700

701+
private static Set<String> getOtherColumnNames(final Collection<OIData> oiDatas) {
702+
final Set<String> columnNames = new LinkedHashSet<String>();
703+
704+
getOtherColumnNames(oiDatas, OIFitsConstants.TABLE_OI_VIS2, columnNames);
705+
getOtherColumnNames(oiDatas, OIFitsConstants.TABLE_OI_VIS, columnNames);
706+
getOtherColumnNames(oiDatas, OIFitsConstants.TABLE_OI_T3, columnNames);
707+
getOtherColumnNames(oiDatas, OIFitsConstants.TABLE_OI_FLUX, columnNames);
708+
709+
return columnNames;
710+
}
711+
648712
private static void getAllNumericalColumnNames(final Collection<OIData> oiDatas, final String extName,
649713
final boolean all, final boolean is2D,
650714
final Set<String> columnNames) {
651715
for (final OIData oiData : oiDatas) {
652716
if (extName.equals(oiData.getExtName())) {
653-
final List<ColumnMeta> columnsDescCollection = oiData.getNumericalColumnsDescs();
654-
655-
for (final ColumnMeta colMeta : columnsDescCollection) {
717+
for (final ColumnMeta colMeta : oiData.getNumericalColumnsDescs()) {
656718
if (colMeta != null) {
657719
if (colMeta instanceof WaveColumnMeta) {
658720
if (all || is2D) {
@@ -669,6 +731,23 @@ private static void getAllNumericalColumnNames(final Collection<OIData> oiDatas,
669731
}
670732
}
671733

734+
private static void getOtherColumnNames(final Collection<OIData> oiDatas, final String extName,
735+
final Set<String> columnNames) {
736+
for (final OIData oiData : oiDatas) {
737+
if (extName.equals(oiData.getExtName())) {
738+
for (final ColumnMeta meta : oiData.getOtherColumnsDescs()) {
739+
if (meta != null) {
740+
if (logger.isLoggable(Level.FINE)) {
741+
logger.log(Level.FINE, "Column[{0}] type = {1}",
742+
new Object[]{meta.getName(), meta.getDataType()});
743+
}
744+
columnNames.add(meta.getName());
745+
}
746+
}
747+
}
748+
}
749+
}
750+
672751
/**
673752
* Main function to create files.
674753
* @param unused
@@ -677,12 +756,25 @@ public static void main(String[] unused) {
677756
dump(false);
678757
dump(true);
679758

680-
final DataModel dm = getInstance();
759+
final DataModel dm = getInstance(OIFitsStandard.VERSION_2);
760+
761+
logger.log(Level.WARNING, "allColumnNames: {0}", dm.getAllColumnNames());
681762

682-
logger.log(Level.WARNING, "columnNames: {0}", dm.getNumericalColumnNames());
763+
logger.log(Level.WARNING, "allNumColumnNames: {0}", dm.getNumericalColumnNames());
764+
logger.log(Level.WARNING, "allNumColumnNames1D: {0}", dm.getNumericalColumnNames1D());
765+
logger.log(Level.WARNING, "allNumColumnNames2D: {0}", dm.getNumericalColumnNames2D());
683766

684-
logger.log(Level.WARNING, "columnNames1D: {0}", dm.getNumericalColumnNames1D());
685-
logger.log(Level.WARNING, "columnNames2D: {0}", dm.getNumericalColumnNames2D());
767+
logger.log(Level.WARNING, "allOtherColumnNames: {0}", dm.getOtherColumnNames());
768+
769+
for (String name : dm.getAllColumnNames()) {
770+
final boolean isNumeric = dm.isNumericalColumn(name);
771+
final boolean isNumeric1D = dm.isNumericalColumn1D(name);
772+
final boolean isNumeric2D = dm.isNumericalColumn2D(name);
773+
final boolean isOther = dm.isOtherColumn(name);
774+
775+
logger.log(Level.WARNING, "column[{0}] : isNumeric={1} isNumeric1D={2} isNumeric2D={3} isOther={4}",
776+
new Object[]{name, isNumeric, isNumeric1D, isNumeric2D, isOther});
777+
}
686778
}
687779

688780
}

0 commit comments

Comments
 (0)