#format python """Sequencing plate well convertor 384 <--> 96 by yong27, 2005-05-12 """ import unittest class WellConvertor: def getPlate96(self, x,y): if x%2 and y%2: return 1 elif x%2 and not y%2: return 2 elif not x%2 and y%2: return 3 else: return 4 def getWell96(self, well384): downScale = lambda n: n%2 and n/2+1 or n/2 row=ord(well384[0])-64 col=int(well384[1:]) return (chr(downScale(row)+64)+str(downScale(col)).zfill(2), self.getPlate96(row,col)) def getWell384(self, well96, plate96): row=2*(ord(well96[0])-64) col=2*int(well96[1:]) if plate96 in (1, 2): row-=1 if plate96 in (1, 3): col-=1 return chr(row+64)+str(col).zfill(2) class DrJangsWellConvertor(WellConvertor): def convertTo96(self, aStr): words = aStr.split('_') plate = int(words[2]) well384 = words[4].replace('.abi','') well96, plate96 = self.getWell96(well384) new_plate = plate96 + (plate-1) return '_'.join([words[0], words[1], str(new_plate).zfill(4), well96+'.abi']) class TestWellConvertor(unittest.TestCase): def setUp(self): self.wc = WellConvertor() def testGetWell96(self): self.assertEquals(('A01',1),self.wc.getWell96('A01')) self.assertEquals(('C05',2),self.wc.getWell96('E10')) self.assertEquals(('G12',1),self.wc.getWell96('M23')) def testGetWell384(self): self.assertEquals('A01',self.wc.getWell384('A01',1)) self.assertEquals('E10',self.wc.getWell384('C05',2)) self.assertEquals('N20',self.wc.getWell384('G10',4)) class TestDrJangsWellConvertor(unittest.TestCase): def testJangsCvt(self): jwc = DrJangsWellConvertor() self.assertEquals('susfelck_BF_0001_A03.abi', jwc.convertTo96('susfelck_BF_0001_0004_A05.abi')) self.assertEquals('susfelck_BF_0008_C03.abi', jwc.convertTo96('susfelck_BF_0005_0008_F06.abi')) self.assertEquals('susfelck_BF_0005_A01.abi', jwc.convertTo96('susfelck_BF_0005_0008_A01.abi')) def main(iFile, oFile): jwc = DrJangsWellConvertor() for line in iFile: if line.strip(): oFile.write(jwc.convertTo96(line.strip())+'\n') if __name__=='__main__': unittest.main() #main(file('input.txt'),file('output.txt','w'))