/* * Concept profile generation tool suite * Copyright (C) 2015 Biosemantics Group, Erasmus University Medical Center, * Rotterdam, The Netherlands * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published * by the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/> */ package org.erasmusmc.groundhog; import java.util.HashMap; import java.util.List; import java.util.Map; import org.erasmusmc.math.vector.VectorCursor; import org.erasmusmc.ontology.ConceptVectorRecord; public class ProcessingThread implements Runnable { public ConceptVectorRecordBuffer recordBuffer; public ProcessedConceptVectorRecordsBuffer processedRecordsBuffer; public boolean terminated = false; public Thread thread; public ProcessingThread(ConceptVectorRecordBuffer recordbuffer,ProcessedConceptVectorRecordsBuffer processedRecordsBuffer){ thread = new Thread(this, "processingThread"); this.recordBuffer = recordbuffer; this.processedRecordsBuffer = processedRecordsBuffer; thread.start(); } public void run() { while (!terminated){ List<ConceptVectorRecord> records = recordBuffer.getRecords(); // System.out.println("Got Records!"); if (records.size()<recordBuffer.batchSize){ terminated = true; System.out.println("processingThread Terminates!"); } processedRecordsBuffer.updateBuffer( process(records),terminated); } } protected Map<Integer,ConceptToConceptVectorRecordIndexEntry> process(List<ConceptVectorRecord> records){ Map<Integer,ConceptToConceptVectorRecordIndexEntry> index = new HashMap<Integer, ConceptToConceptVectorRecordIndexEntry>(); for(ConceptVectorRecord record: records){ VectorCursor<Integer> cursor = record.getConceptVector().getNonzeroCursor(); while (cursor.isValid()) { ConceptToConceptVectorRecordIndexEntry entry = index.get(cursor.dimension()); if (entry == null) { entry = new ConceptToConceptVectorRecordIndexEntry(record.getID(),cursor.get()); } else { entry.addRecordData(record.getID(),cursor.get()); } index.put(cursor.dimension(),entry); cursor.next(); } } return index; } }