552331b42c93f88781b16183d733f9f48d07802f
kent
  Fri Sep 6 14:05:56 2019 -0700
dealing with change of project_role to be a foreign key into contributorType.  Removing contact from lab until I figure out how to do it right.  Fixed a lab_contributor mixup.

diff --git src/hca/hcat/hcatTabUpdate/hcatTabUpdate.c src/hca/hcat/hcatTabUpdate/hcatTabUpdate.c
index 94ee53b..86325d9 100644
--- src/hca/hcat/hcatTabUpdate/hcatTabUpdate.c
+++ src/hca/hcat/hcatTabUpdate/hcatTabUpdate.c
@@ -123,31 +123,31 @@
 // required field, and also we need to decorate it's name
 contactFields[0] = "?name";
 contactIx[0] = fieldedTableMustFindFieldIx(inProject, "contact_name");
 int realFieldCount = 1;
 
 // The rest of the contact pieces are added just conditionally
 addIfReal(contact_email, oldFields, contactFields, contactIx, maxContacts, &realFieldCount);
 addIfReal(contact_phone, oldFields, contactFields, contactIx, maxContacts, &realFieldCount);
 addIfReal(contact_department, oldFields, contactFields, contactIx, maxContacts, &realFieldCount);
 addIfReal(contact_institute, oldFields, contactFields, contactIx, maxContacts, &realFieldCount);
 addIfReal(contact_address, oldFields, contactFields, contactIx, maxContacts, &realFieldCount);
 addIfReal(contact_city, oldFields, contactFields, contactIx, maxContacts, &realFieldCount);
 addIfReal(contact_country, oldFields, contactFields, contactIx, maxContacts, &realFieldCount);
 addIfReal(contact_zip_postal_code, oldFields, 
     contactFields, contactIx, maxContacts, &realFieldCount);
-contactFields[realFieldCount] = "project_role";
+contactFields[realFieldCount] = "@type_id@hcat_contributortype@short_name@id";
 realFieldCount += 1;
 
 /* Make contributor output table.  The first row of it will be seeded with the contact.
  * We can fill out names, but not other info on the other contributors, who will make
  * up the rest of the rows. */
 struct fieldedTable *contributors = fieldedTableNew("contributor", contactFields, 
     realFieldCount);
 contributors->startsSharp = inProject->startsSharp;
 
 /* Make up first row from contacts */
 char *outVals[realFieldCount];
 int outIx;
 struct dyString *scratch = dyStringNew(0);
 for (outIx=0; outIx<realFieldCount-1; ++outIx)
     {
@@ -349,37 +349,44 @@
 
     /* Output all the ones we haven't dealt with already or will deal with later */
     if (!startsWith("contact_", inName) && !sameString("contributors", inName))
         {
 	outFields[outFieldCount] = inName;
 	outRow[outFieldCount] = inVal;
 	++outFieldCount;
 	}
     }
 
 /* Add in contributors as a multi to multi field */
 outFields[outFieldCount] = "@@contributors@id@hcat_project_contributors@project_id@contributor_id@hcat_contributor@name@id";
 outRow[outFieldCount] = fieldedTableLookupNamedFieldInRow(inProject, "contributors", inRow);
 outFieldCount += 1;
 
+/* Add in contacts as a multi to multi field too */
+outFields[outFieldCount] = "@@contacts@id@hcat_project_contacts@project_id@contributor_id@hcat_contributor@name@id";
+outRow[outFieldCount] = fieldedTableLookupNamedFieldInRow(inProject, "contact_name", inRow);
+outFieldCount += 1;
+
 /* Add the fields we scan and merge from sample at end */
 projectVocabField(inProject, inSample, "organ", outDir, 
     outFields, outRow, outFieldMax, &outFieldCount);
 projectVocabField(inProject, inSample, "organ_part", outDir, 
     outFields, outRow, outFieldMax, &outFieldCount);
 projectVocabField(inProject, inSample, "assay_type", outDir, 
     outFields, outRow, outFieldMax, &outFieldCount);
+projectVocabField(inProject, inSample, "assay_tech", outDir, 
+    outFields, outRow, outFieldMax, &outFieldCount);
 projectVocabField(inProject, inSample, "disease", outDir, 
     outFields, outRow, outFieldMax, &outFieldCount);
 
 uglyf("making project table with %d fields\n", outFieldCount);
 struct fieldedTable *outTable = fieldedTableNew("project", outFields, outFieldCount);
 outTable->startsSharp = inProject->startsSharp;
 fieldedTableAdd(outTable, outRow, outFieldCount, 2);
 dyStringFree(&scratch);
 return outTable;
 }
 
 
 struct fieldedTable *makePublication(struct fieldedTable *inProject)
 /* If there's a publication field we make a publication table and seed it with the pmid 
  * and stuff. */
@@ -407,45 +414,44 @@
     dyStringFree(&csvScratch);
     return pubTable;
     }
 else
     return NULL;
 }
 
 struct fieldedTable *makeLab(struct fieldedTable *inProject)
 /* If there's a lab field we make a lab table and seed it with the contacts. */
 {
 int labIx = fieldedTableFindFieldIx(inProject, "lab");
 if (labIx >= 0)
     {
     char **inRow = inProject->rowList->row;
     char *short_name = inRow[labIx];
-    char *contact = fieldedTableLookupNamedFieldInRow(inProject, "contact_name", inRow);
     char *contributors = fieldedTableLookupNamedFieldInRow(inProject, "contributors", inRow);
     char *institute = fieldedTableLookupNamedFieldInRow(inProject, "contact_institute", inRow);
     char labName[256];
     if (strlen(short_name) < 20)  // Unlikely to be unique, may cause trouble
 	safef(labName, sizeof(labName), "%s %s", short_name, emptyForNull(institute));
     else
         safef(labName, sizeof(labName), "%s", short_name);
     labName[50] = 0;  // not too long
     inRow[labIx] = cloneString(labName);  /* Other people need to know about this too. */
 
-    char *outFields[4] = {"?short_name", "institution", "@contact_id@hcat_contributor@name@id", 
+    char *outFields[3] = {"?short_name", "institution", 
 	"@@contributors@id@hcat_lab_contributors@lab_id@contributor_id@hcat_contributor@name@id"};
     struct fieldedTable *labTable = fieldedTableNew("lab", outFields, ArraySize(outFields));
-    char *outRow[4] = {labName, institute, contact, contributors};
+    char *outRow[3] = {labName, institute, contributors};
     fieldedTableAdd(labTable, outRow, ArraySize(outRow), 1);
     return labTable;
     }
 else
     return NULL;
 }
 
 void hcatTabUpdate(char *inDir, char *outDir)
 /* hcatTabUpdate - take the tabToTabDir result of the geo/sra import.
  * Put results in an output dir in a format sqlUpdateRelated understands. */
 {
 // We are actually just looking for specific files in inDir. */
 
 /* Load up input projects table */
 char *projectFile = "hcat_project.tsv";