void appendExperiments(struct hash *bedHash, struct affyAtlas *aaList, struct expRecord **erList) /** loop through the altas file creating new experiments and appending them to the beds in the bed hash */ { struct affyAtlas *aa=NULL; struct expRecord *er = NULL; assert(aaList); er = expRecordFromAffyAtlas(aaList); for(aa = aaList; aa != NULL; aa = aa->next) { if(differentExperiment(er, aa)) { slAddHead(erList, er); er = expRecordFromAffyAtlas(aa); } appendNewExperiment(bedHash, aa, er); } /* add last experiment */ slAddHead(erList,er); }
int main(int argc, char *argv[]) { struct hash *pslHash = newHash(5); struct hash *bedHash = newHash(5); struct expRecord *erList = NULL, *er=NULL; int i; FILE *erOut = NULL; if(argc <4) usage(); warn("Reading in psls..."); readInPslHash(pslHash, argv[1]); warn("Creating beds..."); createBeds(bedHash, pslHash, argv[4], (argc-4)); warn("Appending Experiements..."); for(i=4; i < argc; i++) { printf("%d,",i-4); fflush(stdout); appendNewExperiment(argv[i], bedHash, pslHash,&erList, (i-4)); } warn("\tDone."); warn("Writing to files..."); erOut = mustOpen(argv[2],"w"); bedOut= mustOpen(argv[3],"w"); for(er = erList; er != NULL; er = er->next) { expRecordTabOut(er, erOut); } hashTraverseVals(bedHash, averageValues); hashTraverseVals(bedHash, bedHashOutput); carefulClose(&erOut); carefulClose(&bedOut); freeHash(&pslHash); freeHash(&bedHash); warn("Finished."); return 0; }