Skip to content

Commit

Permalink
Fix converting bitmask to patient id bug
Browse files Browse the repository at this point in the history
  • Loading branch information
ramari16 committed Mar 25, 2024
1 parent 0ac2ce0 commit 2194943
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -271,10 +271,10 @@ private static VariantMask append(VariantMaskSparseImpl variantMask1, VariantMas
public static Set<Integer> patientMaskToPatientIdSet(VariantMask patientMask, List<String> patientIds) {
if (patientMask instanceof VariantMaskBitmaskImpl) {
Set<Integer> ids = new HashSet<>();
String bitmaskString = ((VariantMaskBitmaskImpl) patientMask).getBitmask().toString(2);
for(int x = 2;x < bitmaskString.length()-2;x++) {
if('1'==bitmaskString.charAt(x)) {
String patientId = patientIds.get(x-2).trim();
BigInteger bigInteger = ((VariantMaskBitmaskImpl) patientMask).getBitmask();
for(int x = 0;x < bigInteger.bitLength()-4;x++) {
if(patientMask.testBit(x)) {
String patientId = patientIds.get(x).trim();
ids.add(Integer.parseInt(patientId));
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package edu.harvard.hms.dbmi.avillach.hpds.data.genotype;

import org.junit.jupiter.api.Test;

import java.math.BigInteger;

import static org.junit.jupiter.api.Assertions.*;

class VariableVariantMasksTest {

@Test
void appendMask() {
BigInteger bitmask1 = new BigInteger("141128266537977664750676276621047930360647583370951385898970922432171641921591683601425661017874251620531446414001258481539117879583763813143907296662202568713257464719895142475222938754588184582833582945368733841208297077207159012919514593576142503835920156756519924916168242089239884330492690734761017788145472426679068150988914755013607752960816306592042734726724967292489382922774340753414934719473579642086577795740766564256929075326123036793589965882761953873677505969126336030099232419417531157749845223962002657158936982730111297974575206081858525359109608528262092083167977823315667519770531233235502931655993522963196732342798609807510543882273123542784003837220002062547832711681922161218010724226003150184777238854967623299970205873235909960398972219305810619458430315886318451687126866584390511424196256376003247717440484524668930504599413091194844245946142655802347109092922312106655798606759916931458730259588797621736772069847398957694392864416289605234581063232645315000563794292589544477569850783743632035729362609737922579552116678396740867191143283379987783383546964540333832022555110531730782339840166704631278663393147496643156685747417468473443887224102514355150110201463928311558935840684668441340082266117306282514075566574248767903320202249460451453420775463375086967869642395460246215345716051454824012618762098616749770441010729935100690497726813080659572063353154599964806728241328892738034442472863741591198849392657539785115946383059858121434147389809099727185407701653069953116828987459279642700621389676861517273949473071786975738343769782464350475716221573322857987917669867491560145456280976454077958400126376423873081869441464609193216436634914151839730185428390533788824490041131307997850622739795832813220163889874229711053167483400593799762457890098932032534121358716659875839129363445294836150352418351095797845291006220927734160887236196809213101473795");
VariantMask mask1 = new VariantMaskBitmaskImpl(bitmask1);
BigInteger bitmask2 = new BigInteger("30986998537042903080350519548408047200882037374471443267447678987916097706689940814664693588471382927433911322922595655683");
VariantMask mask2 = new VariantMaskBitmaskImpl(bitmask2);
BigInteger expected = new BigInteger("364428449062309565827240887371711117987574656019257508470944944605332301145049360947562613021825062352285550919581217473685332023988542714833984833584283993391279871691386067405572061472644828810015780133411925154335939452908415258964249206427971383684062861395477403040282307619178797392994855011010859741065713642937722555386553472167057412349499978682577859360114784650082282703011601887907648540462571623667509259030122346885116531561265495702316349933315144109402391832141090339015610768872781857606433548246400953322494469603219947770538558126916689855755477351331412849701993441724311536424509298383050084506206211767917732037267909332303742403672014600658318302593423194411973298402659688783532220840192809967726287753517722498547930875524876017589557370530361981799944335286739781131150443454009586308444310074980028948209472950776329093810066130759876455221806685349198404676070598652587630369814761497643023695920944554335463560556407863991874650393356359742532476840044738380631950001000889884841365536456755318891308758448828432322546827241786950989285280451703830359048521243704376576346418597615317052525572950500220422542100551941365526524572447973251506942320379483402120949518538372004537133062107782710822000749441206410146350956094013529342546401955361956752745578930129151472060056501664176391306323733630924234020572479814310832686356211870629168524382442619274880885230138170761194502147197237097179031772802871639774718532255582374871483153552524216278948609829889298505566944209429410943844015411379772232511986448333683276938151761604643176820833900087800015896793760190738573447504231241253241247411492029282990960833205840126804844971397564707229362865231720213379844987578324282466174232636950775929742330163059024377711272017786328444659381735736216404131832568759328992585474109193095809959345744181054394252160618715444166335074662636279289524790651946664188322635565248044921668500523867959008028963420119948417112017996816651287475428019005246560397815063629879127215220996440067");
VariantMask merged = VariableVariantMasks.appendMask(mask1, mask2, 0, 0);

assertEquals(expected, ((VariantMaskBitmaskImpl)merged).getBitmask());
}
}

0 comments on commit 2194943

Please sign in to comment.