changeset 0:ae030e6e838c draft

Uploaded
author greg
date Wed, 14 Nov 2018 14:47:32 -0500
parents
children 613186952d42
files .shed.yml test-data/affy_metadata.csv validate_affy_metadata.py validate_affy_metadata.xml
diffstat 4 files changed, 298 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/.shed.yml	Wed Nov 14 14:47:32 2018 -0500
@@ -0,0 +1,11 @@
+name: validate_affy_metadata
+owner: greg
+description: |
+  Contains a tool that validates an Affymetrix metadata file for 96 well plate data.
+homepage_url: https://github.com/gregvonkuster/galaxy_tools/tree/master/tools/corals/validate_affy_metadata
+long_description: |
+  Contains a tool that validates an Affymetrix metadata file for 96 well plate data.
+remote_repository_url: https://github.com/gregvonkuster/galaxy_tools/tree/master/tools/corals/validate_affy_metadata
+type: unrestricted
+categories:
+  - Micro-array Analysis
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/affy_metadata.csv	Wed Nov 14 14:47:32 2018 -0500
@@ -0,0 +1,97 @@
+sample_id,date_entered_db,user_specimen_id,duplicate_sample,matching_samples,field_call,bcoral_genet_id,bsym_genet_id,reef,region,latitude,longitude,geographic_origin,sample_location,latitude_outplant,longitude_outplant,depth,dist_shore,disease_resist,bleach_resist,mortality,tle,spawning,collector,org,collection_date,contact_email,seq_facility,array_version,data_sharing,data_hold
+167,18/11/08,test_002,No,,prolifera,,,JohnsonsReef,Bahamas,18.361733,-64.7743,Reef,,,,5,,,,,,yes,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,Yes
+168,18/11/08,test_003,No,,prolifera,,,JohnsonsReef,Bahamas,18.361733,-64.7743,Reef,,,,6,,,,,,No,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,Yes
+169,18/11/08,test_005,No,,prolifera,,,JohnsonsReef,Bahamas,18.361733,-64.7743,Reef,,,,7,,,,,,No,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,Yes
+170,18/11/08,test_006,No,,prolifera,,,JohnsonsReef,Bahamas,18.361733,-64.7743,Reef,,,,3,,,,,,No,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,Yes
+171,18/11/08,test_007,No,,prolifera,,,JohnsonsReef,Bahamas,18.361733,-64.7743,Reef,,,,2,,,,,,No,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,Yes
+172,18/11/08,test_008,No,,prolifera,,,JohnsonsReef,Bahamas,18.361733,-64.7743,Reef,,,,1,,,,,,No,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,Yes
+173,18/11/08,test_010,No,,cervicornis,,,LittleGrecian,Florida,25.11844009,-80.3171895,Reef,,,,10,,,,,,No,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,Yes
+174,18/11/08,test_011,No,,cervicornis,,,LittleGrecian,Florida,25.11844009,-80.3171895,Reef,,,,12,,,,,,No,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,Yes
+175,18/11/08,test_012,No,,cervicornis,,,LittleGrecian,Florida,25.11844009,-80.3171895,Reef,,,,24,,,,,,No,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,Yes
+176,18/11/08,test_013,No,,cervicornis,,,LittleGrecian,Florida,25.11844009,-80.3171895,Reef,,,,6,,,,,,yes,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,Yes
+177,18/11/08,test_014,No,,cervicornis,,,LittleGrecian,Florida,25.11844009,-80.3171895,Reef,,,,15,,,,,,No,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,Yes
+178,18/11/08,test_015,No,,cervicornis,,,LittleGrecian,Florida,25.11844009,-80.3171895,Reef,,,,4,,,,,,No,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,Yes
+179,18/11/08,test_016,No,,cervicornis,,,LittleGrecian,Florida,25.11844009,-80.3171895,Reef,,,,13,,,,,,No,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,Yes
+180,18/11/08,test_017,No,,cervicornis,,,LittleGrecian,Florida,25.11844009,-80.3171895,Reef,,,,10,,,,,,No,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,Yes
+181,18/11/08,test_018,No,,cervicornis,,,LittleGrecian,Florida,25.11844009,-80.3171895,Reef,,,,6,,,,,,No,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,Yes
+182,18/11/08,test_019,No,,cervicornis,,,LittleGrecian,Florida,25.11844009,-80.3171895,Reef,,,,15,,,,,,No,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,Yes
+183,18/11/08,test_020,No,,cervicornis,,,LittleGrecian,Florida,25.11844009,-80.3171895,Reef,,,,4,,,,,,No,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,Yes
+184,18/11/08,test_021,No,,cervicornis,,,LittleGrecian,Florida,25.11844009,-80.3171895,Reef,,,,13,,,,,,No,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,Yes
+185,18/11/08,test_022,No,,cervicornis,,,LittleGrecian,Florida,25.11844009,-80.3171895,Reef,,,,13,,,,,,yes,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,Yes
+186,18/11/08,test_023,No,,prolifera,,,Curlew,Belize,16.7909389,-88.0830056,Reef,,,,5,,,,,,No,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,Yes
+187,18/11/08,test_024,No,,prolifera,,,Curlew,Belize,16.7909389,-88.0830056,Reef,,,,6,,,,,,No,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,Yes
+188,18/11/08,test_025,No,,prolifera,,,Curlew,Belize,16.7909389,-88.0830056,Reef,,,,7,,,,,,No,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,Yes
+189,18/11/08,test_026,No,,prolifera,,,Curlew,Belize,16.7909389,-88.0830056,Reef,,,,3,,,,,,No,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,Yes
+190,18/11/08,test_027,No,,prolifera,,,Curlew,Belize,16.7909389,-88.0830056,Reef,,,,2,,,,,,No,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,Yes
+191,18/11/08,test_028,No,,prolifera,,,Curlew,Belize,16.7909389,-88.0830056,Reef,,,,1,,,,,,No,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,Yes
+192,18/11/08,test_029,No,,prolifera,,,Curlew,Belize,16.7909389,-88.0830056,Reef,,,,2,,,,,,No,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,Yes
+193,18/11/08,test_030,No,,prolifera,,,Curlew,Belize,16.7909389,-88.0830056,Reef,,,,6,,,,,,No,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,Yes
+194,18/11/08,test_031,No,,prolifera,,,Curlew,Belize,16.7909389,-88.0830056,Reef,,,,6,,,,,,No,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,Yes
+195,18/11/08,test_032,No,,prolifera,,,Curlew,Belize,16.7909389,-88.0830056,Reef,,,,6,,,,,,No,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,Yes
+196,18/11/08,test_033,No,,prolifera,,,Curlew,Belize,16.7909389,-88.0830056,Reef,,,,6,,,,,,No,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,Yes
+197,18/11/08,test_034,No,,palmata,,,Curlew,Belize,16.7909389,-88.0830056,Reef,,,,17,,,,,,No,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,Yes
+198,18/11/08,test_035,No,,palmata,,,Curlew,Belize,16.7909389,-88.0830056,Reef,,,,17,,,,,,No,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,Yes
+199,18/11/08,test_036,No,,palmata,,,Curlew,Belize,16.7909389,-88.0830056,Reef,,,,23,,,,,,No,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,Yes
+200,18/11/08,test_037,No,,palmata,,,Curlew,Belize,16.7909389,-88.0830056,Reef,,,,7,,,,,,No,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,Yes
+201,18/11/08,test_038,No,,palmata,,,Curlew,Belize,16.7909389,-88.0830056,Reef,,,,9,,,,,,No,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,Yes
+202,18/11/08,test_039,No,,palmata,,,Curlew,Belize,16.7909389,-88.0830056,Reef,,,,6,,,,,,No,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,Yes
+203,18/11/08,test_040,No,,palmata,,,Curlew,Belize,16.7909389,-88.0830056,Reef,,,,3,,,,,,yes,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,Yes
+204,18/11/08,test_041,No,,palmata,,,Curlew,Belize,16.7909389,-88.0830056,Reef,,,,11,,,,,,No,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,Yes
+205,18/11/08,test_042,No,,palmata,,,Curlew,Belize,16.7909389,-88.0830056,Reef,,,,10,,,,,,No,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,Yes
+206,18/11/08,test_043,No,,palmata,,,Curlew,Belize,16.7909389,-88.0830056,Reef,,,,4,,,,,,No,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,Yes
+207,18/11/08,test_044,No,,palmata,,,Curlew,Belize,16.7909389,-88.0830056,Reef,,,,17,,,,,,No,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,Yes
+208,18/11/08,test_045,No,,palmata,,,Curlew,Belize,16.7909389,-88.0830056,Reef,,,,4,,,,,,No,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,Yes
+209,18/11/08,test_046,No,,palmata,,,Curlew,Belize,16.7909389,-88.0830056,Reef,,,,7,,,,,,No,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,Yes
+210,18/11/08,test_047,No,,palmata,,,Curlew,Belize,16.7909389,-88.0830056,Reef,,,,3,,,,,,No,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,Yes
+211,18/11/08,test_048,No,,palmata,,,Curlew,Belize,16.7909389,-88.0830056,Reef,,,,3,,,,,,No,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,Yes
+212,18/11/08,test_049,No,,palmata,,,Curlew,Belize,16.7909389,-88.0830056,Reef,,,,3,,,,,,No,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,Yes
+213,18/11/08,test_050,No,,palmata,,,Curlew,Belize,16.7909389,-88.0830056,Reef,,,,4,,,,,,No,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,Yes
+214,18/11/08,test_051,No,,palmata,,,Curlew,Belize,16.7909389,-88.0830056,Reef,,,,6,,,,,,yes,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,Yes
+215,18/11/08,test_052,No,,palmata,,,Curlew,Belize,16.7909389,-88.0830056,Reef,,,,5,,,,,,No,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,Yes
+216,18/11/08,test_053,No,,palmata,,,Curlew,Belize,16.7909389,-88.0830056,Reef,,,,4,,,,,,No,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,Yes
+217,18/11/08,test_054,No,,palmata,,,Curlew,Belize,16.7909389,-88.0830056,Reef,,,,4,,,,,,No,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,Yes
+218,18/11/08,test_055,No,,palmata,,,Curlew,Belize,16.7909389,-88.0830056,Reef,,,,4,,,,,,No,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,Yes
+219,18/11/08,test_056,No,,palmata,,,Curlew,Belize,16.7909389,-88.0830056,Reef,,,,1,,,,,,No,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,Yes
+220,18/11/08,test_057,No,,palmata,,,Curlew,Belize,16.7909389,-88.0830056,Reef,,,,4,,,,,,No,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,Yes
+221,18/11/08,test_058,No,,palmata,,,Curlew,Belize,16.7909389,-88.0830056,Reef,,,,1,,,,,,No,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,No
+222,18/11/08,test_059,No,,palmata,,,Curlew,Belize,16.7909389,-88.0830056,Reef,,,,3,,,,,,No,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,No
+223,18/11/08,test_060,No,,cervicornis,,,SeaAquarium2,Curacao,12.0842,-68.8966,Reef,,,,3,,,,,,No,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,No
+224,18/11/08,test_061,No,,cervicornis,,,SeaAquarium2,Curacao,12.0842,-68.8966,Reef,,,,4,,,,,,yes,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,No
+225,18/11/08,test_062,No,,cervicornis,,,SeaAquarium2,Curacao,12.0842,-68.8966,Reef,,,,2,,,,,,No,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,No
+226,18/11/08,test_063,No,,cervicornis,,,SeaAquarium2,Curacao,12.0842,-68.8966,Reef,,,,5,,,,,,No,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,No
+227,18/11/08,test_064,No,,cervicornis,,,SeaAquarium2,Curacao,12.0842,-68.8966,Reef,,,,4,,,,,,No,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,No
+228,18/11/08,test_065,No,,cervicornis,,,SeaAquarium2,Curacao,12.0842,-68.8966,Reef,,,,27,,,,,,No,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,No
+229,18/11/08,test_066,No,,cervicornis,,,SeaAquarium2,Curacao,12.0842,-68.8966,Reef,,,,25,,,,,,No,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,No
+230,18/11/08,test_067,No,,cervicornis,,,SeaAquarium2,Curacao,12.0842,-68.8966,Reef,,,,13,,,,,,No,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,No
+231,18/11/08,test_068,No,,palmata,,,SeaAquarium2,Curacao,12.0842,-68.8966,Reef,,,,3,,,,,,No,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,No
+232,18/11/08,test_069,No,,palmata,,,SeaAquarium2,Curacao,12.0842,-68.8966,Reef,,,,9,,,,,,No,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,No
+233,18/11/08,test_070,No,,palmata,,,SeaAquarium2,Curacao,12.0842,-68.8966,Reef,,,,6,,,,,,No,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,No
+234,18/11/08,test_072,No,,palmata,,,SeaAquarium2,Curacao,12.0842,-68.8966,Reef,,,,16,,,,,,yes,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,No
+235,18/11/08,test_073,No,,palmata,,,SeaAquarium2,Curacao,12.0842,-68.8966,Reef,,,,3,,,,,,No,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,No
+236,18/11/08,test_074,No,,palmata,,,SeaAquarium2,Curacao,12.0842,-68.8966,Reef,,,,11,,,,,,No,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,No
+237,18/11/08,test_075,No,,palmata,,,SeaAquarium2,Curacao,12.0842,-68.8966,Reef,,,,3,,,,,,No,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,No
+238,18/11/08,test_076,No,,palmata,,,SeaAquarium2,Curacao,12.0842,-68.8966,Reef,,,,5,,,,,,No,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,No
+239,18/11/08,test_077,No,,palmata,,,SeaAquarium2,Curacao,12.0842,-68.8966,Reef,,,,6,,,,,,No,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,No
+240,18/11/08,test_078,No,,palmata,,,SeaAquarium2,Curacao,12.0842,-68.8966,Reef,,,,16,,,,,,No,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,No
+241,18/11/08,test_079,No,,palmata,,,SeaAquarium2,Curacao,12.0842,-68.8966,Reef,,,,3,,,,,,No,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,No
+242,18/11/08,test_080,No,,palmata,,,SeaAquarium2,Curacao,12.0842,-68.8966,Reef,,,,11,,,,,,No,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,No
+243,18/11/08,test_081,No,,palmata,,,SeaAquarium2,Curacao,12.0842,-68.8966,Reef,,,,3,,,,,,No,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,No
+244,18/11/08,test_083,No,,palmata,,,SeaAquarium2,Curacao,12.0842,-68.8966,Reef,,,,5,,,,,,No,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,No
+245,18/11/08,test_084,No,,prolifera,,,SeaAquarium2,Curacao,12.0842,-68.8966,Reef,,,,2,,,,,,No,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,No
+246,18/11/08,test_085,No,,prolifera,,,SeaAquarium2,Curacao,12.0842,-68.8966,Reef,,,,1,,,,,,No,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,No
+247,18/11/08,test_086,No,,prolifera,,,SeaAquarium2,Curacao,12.0842,-68.8966,Reef,,,,4,,,,,,No,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,No
+248,18/11/08,test_087,No,,prolifera,,,SeaAquarium2,Curacao,12.0842,-68.8966,Reef,,,,5,,,,,,No,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,No
+249,18/11/08,test_088,No,,palmata,,,Margara,PuertoRico,17.949552,-66.727433,Reef,,,,6,,,,,,yes,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,No
+250,18/11/08,test_089,Yes,,palmata,,,Margara,PuertoRico,17.949552,-66.727433,Reef,,,,7,,,,,,No,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,No
+251,18/11/08,test_090,Yes,,palmata,,,Margara,PuertoRico,17.949552,-66.727433,Reef,,,,3,,,,,,No,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,No
+252,18/11/08,test_091,Yes,,palmata,,,Margara,PuertoRico,17.949552,-66.727433,Reef,,,,4,,,,,,No,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,No
+253,18/11/08,test_092,Yes,,palmata,,,Margara,PuertoRico,17.949552,-66.727433,Reef,,,,2,,,,,,No,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,No
+254,18/11/08,test_093,No,,palmata,,,Margara,PuertoRico,17.949552,-66.727433,Reef,,,,1,,,,,,No,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,No
+255,18/11/08,test_094,Yes,,palmata,,,Margara,PuertoRico,17.949552,-66.727433,Reef,,,,2,,,,,,No,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,No
+256,18/11/08,test_095,Yes,,cervicornis,,,Margara,PuertoRico,17.949552,-66.727433,Reef,,,,10,,,,,,No,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,No
+257,18/11/08,test_096,Yes,,cervicornis,,,Margara,PuertoRico,17.949552,-66.727433,Reef,,,,8,,,,,,No,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,No
+258,18/11/08,test_001,Yes,,cervicornis,,,Margara,PuertoRico,17.949552,-66.727433,Reef,,,,7,,,,,,No,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,No
+259,18/11/08,test_004,Yes,,cervicornis,,,Margara,PuertoRico,17.949552,-66.727433,Reef,,,,6,,,,,,No,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,No
+260,18/11/08,test_009,Yes,,cervicornis,,,Margara,PuertoRico,17.949552,-66.727433,Reef,,,,10,,,,,,No,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,No
+261,18/11/08,test_071,Yes,,cervicornis,,,Margara,PuertoRico,17.949552,-66.727433,Reef,,,,3,,,,,,No,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,No
+262,18/11/08,test_082,Yes,,cervicornis,,,Margara,PuertoRico,17.949552,-66.727433,Reef,,,,5,,,,,,No,Sheila Kitchen,Penn State,18/11/08,sak89@psu.edu,Affymetrix,1,Yes,No
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/validate_affy_metadata.py	Wed Nov 14 14:47:32 2018 -0500
@@ -0,0 +1,158 @@
+#!/usr/bin/env python
+"""
+Validate the metadata file associated with Affymetrix 96 well plate data.
+"""
+import argparse
+import datetime
+import decimal
+import re
+import shutil
+import sys
+
+parser = argparse.ArgumentParser()
+parser.add_argument('--input', dest='input', help='Metadata file for Affymetrix 96 well plate data')
+parser.add_argument('--output', dest='output', help='Output dataset'),
+args = parser.parse_args()
+
+EMAIL_MAX_LEN = 255
+VALID_EMAIL_RE = re.compile("[^@]+@[^@]+\.[^@]+")
+
+
+def add_error_msg(accumulated_msgs, msg):
+    return "%s\n%s" % (accumulated_msgs, msg)
+
+
+def empty_value(line_no, label, accumulated_msgs):
+    return add_error_msg(accumulated_msgs, "The required %s value is missing on line %d." % (label, line_no))
+
+
+def stop_error(msg):
+    sys.exit(msg)
+
+
+def validate_date_string(line_no, date_string, accumulated_msgs):
+    try:
+        datetime.datetime.strptime(date_string, '%Y/%m/%d')
+        return accumulated_msgs
+    except ValueError:
+        return add_error_msg(accumulated_msgs, "Line %d contains an incorrect date format (must be YY/MM/DD)." % line_no)
+
+
+def validate_decimal(line_no, decimal_string, accumulated_msgs):
+    try:
+        decimal.Decimal(decimal_string)
+        return accumulated_msgs
+    except Exception:
+        return add_error_msg(accumulated_msgs, "Line %d contains an incorrect decimal value (%s)." % (line_no, decimal_string))
+
+
+def validate_email(line_no, email, accumulated_msgs):
+    if not (VALID_EMAIL_RE.match(email)):
+        return add_error_msg(accumulated_msgs, "Line %d contains an invalid email address (%s).  " % (line_no, email))
+    elif len(email) > EMAIL_MAX_LEN:
+        return add_error_msg(accumulated_msgs, "Line %d contains an email address (%) that is longer than the maximum length, %d characters." % (line_no, email))
+    return accumulated_msgs
+
+
+accumulated_msgs = ""
+# Parse the input file, skipping the header, and validating
+# that each data line consists of 31 comma-separated items.
+with open(args.input, "r") as ih:
+    for i, line in ih:
+        if i == 0:
+            # Skip the header.
+            continue
+        line = line.rstrip("\r\n")
+        if i > 97:
+            accumulated_msgs = add_error_msg(accumulated_msgs, "The input file contains more than 96 data lines.")
+            stop_error(accumulated_msgs)
+        items = line.split("\t")
+        if len(items) != 31:
+            accumulated_msgs = add_error_msg(accumulated_msgs, "Line %d contains %s columns, (must be 31)." % (i, len(items)))
+            stop_error()
+        # Required.
+        sample_id = items[0]
+        if len(sample_id) == 0:
+            accumulated_msgs = empty_value(i, "sample_id", accumulated_msgs)
+        # Required and validated.
+        date_entered_db = items[1]
+        accumulated_msgs = validate_date_string(date_entered_db, accumulated_msgs)
+        # Required.
+        user_specimen_id = items[2]
+        if len(user_specimen_id) == 0:
+            accumulated_msgs = empty_value(i, "user_specimen_id", accumulated_msgs)
+        # Optional.
+        duplicate_sample = items[3]
+        # Optional.
+        matching_samples = items[4]
+        # Optional.
+        field_call = items[5]
+        # Optional.
+        bcoral_genet_id = items[6]
+        # Optional.
+        bsym_genet_id = items[7]
+        # Required.
+        reef = items[8]
+        if len(reef) == 0:
+            accumulated_msgs = empty_value(i, "reef", accumulated_msgs)
+        # Required.
+        region = items[9]
+        if len(region) == 0:
+            accumulated_msgs = empty_value(i, "region", accumulated_msgs)
+        # Required and validated.
+        latitude = items[10]
+        accumulated_msgs = validate_decimal(i, latitude, accumulated_msgs)
+        # Required and validated.
+        longitude = items[11]
+        accumulated_msgs = validate_decimal(i, longitude, accumulated_msgs)
+        # Optional.
+        geographic_origin = items[12]
+        # Optional.
+        sample_location = items[13]
+        # Optional.
+        latitude_outplant = items[14]
+        # Optional.
+        longitude_outplant = items[15]
+        # Optional.
+        depth = items[16]
+        # Optional.
+        dist_shore = items[17]
+        # Optional.
+        disease_resist = items[18]
+        # Optional.
+        bleach_resist = items[19]
+        # Optional.
+        mortality = items[20]
+        # Optional.
+        tle = items[21]
+        # Optional.
+        spawning = items[22]
+        # Required.
+        collector = items[23]
+        if len(collector) == 0:
+            accumulated_msgs = empty_value(i, "collector", accumulated_msgs)
+        # Required.
+        org = items[24]
+        if len(org) == 0:
+            accumulated_msgs = empty_value(i, "org", accumulated_msgs)
+        # Required and validated.
+        collection_date = items[25]
+        accumulated_msgs = validate_date_string(date_entered_db, accumulated_msgs)
+        # Required and validated.
+        contact_email = items[26]
+        accumulated_msgs = validate_email(contact_email, accumulated_msgs)
+        # Required.
+        seq_facility = items[27]
+        if len(seq_facility) == 0:
+            accumulated_msgs = empty_value(i, "seq_facility", accumulated_msgs)
+        # Optional.
+        array_version = items[28]
+        # Optional.
+        data_sharing = items[29]
+        # Optional.
+        data_hold = items[30]
+
+if len(accumulated_msgs > 0):
+    stop_error(accumulated_msgs)
+
+shutil.copy_file(args.input, args.output)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/validate_affy_metadata.xml	Wed Nov 14 14:47:32 2018 -0500
@@ -0,0 +1,32 @@
+<tool id="validate_affy_metadata" name="Validate Affymetrix metadata" version="1.0.0">
+    <description>for 96 well plate</description>
+    <command detect_errors="exit_code"><![CDATA[
+python '$__tool_directory__/validate_affy_metadata.py'
+--input '$input'
+--output '$output']]></command>
+    <inputs>
+        <param name="input" type="data" format="csv" label="Affymetrix 96 well plate metadata file">
+            <validator type="expression" message="96 well plate data must have 31 columns and no more than 96 lines of data"><![CDATA[value is not None and value.metadata.columns==31 and value.metadata.data_lines<=96]]></validator>
+        </param>
+    </inputs>
+    <outputs>
+        <data name="output" format="csv"/>
+    </outputs>
+    <tests>
+        <test>
+            <param name="input" value="affy_metadata.csv" ftype="csv"/>
+            <output name="output" file="affy_metadata.csv" ftype="csv"/>
+        </test>
+    </tests>
+    <help>
+**What it does**
+
+Validates an Affymetrix metadata file for 96 well plate data.  These files consist of 31 columns and no more than 96 data lines.
+The tool will output the input file if it is valid.
+-----
+
+**Required options**
+    </help>
+    <citations>
+    </citations>
+</tool>