static void zMol2FileWriteContainer( MOL2WRITEt *pwPFile, CONTAINER cCont, int choice ) { //const char C_TERMINAL_PREFIX = 'C'; //const char N_TERMINAL_PREFIX = 'N'; const int RESIDUE_NAME_LENGTH = 4; LOOP lContents; ATOM aAtom; char *cPTemp; cPTemp = sContainerName(cCont); strncpy( pwPFile->sResidueName, cPTemp, RESIDUE_NAME_LENGTH ); pwPFile->sResidueName[ RESIDUE_NAME_LENGTH ] = '\0'; if ( strlen(cPTemp) > RESIDUE_NAME_LENGTH ) { VP0(( " Truncating residue name for PDB format: %s -> %s\n", sContainerName(cCont), pwPFile->sResidueName )); } /* } */ if ( iObjectType(cCont) == ATOMid ) { zMol2FileWriteAtomRecord( pwPFile, (ATOM)cCont, choice); pwPFile->iResidueSeq++; } else if ( iObjectType(cCont) == RESIDUEid ) { RESIDUE rRes = (RESIDUE) cCont; pwPFile->iResidueSeq = rRes->iTemp; if ( pwPFile->iResidueSeq == 0 ) pwPFile->iResidueSeq = 1; lContents = lLoop( (OBJEKT)cCont, DIRECTCONTENTSBYSEQNUM ); while ( (aAtom = (ATOM)oNext(&lContents)) ) { zMol2FileWriteAtomRecord( pwPFile, aAtom, choice); } } else if ( iObjectType(cCont) == MOLECULEid ) { lContents = lLoop( (OBJEKT)cCont, ATOMS ); while ( (aAtom = (ATOM)oNext(&lContents)) ) { zMol2FileWriteAtomRecord( pwPFile, aAtom, choice ); } pwPFile->iResidueSeq++; } }
OBJEKT AMBER_Combine(OBJEKT objProt, OBJEKT objLig) { // version of function oCmd_combine UNIT uCombined, uCurrent; LOOP lTemp; RESIDUE rRes = NULL; OBJEKT oObj; /* add only one uCurrent unit (Ligand) to uCombined unit (Protein) */ uCombined = (UNIT)objProt; oObj = objLig; if ( iObjectType( oObj ) != UNITid ) { printf( "%s: is type %s\n", "Ligand", sObjectType(oObj) ); } uCurrent = (UNIT)objLig; printf( " Ligand: %s\n", sContainerName((CONTAINER) uCurrent) ); if ( uCombined == NULL ) { printf( "--- no Protein unit \n" ); } else { printf( "Joining Protein and Ligand \n" ); UnitJoin( uCombined, uCurrent ); } if ( uCombined == NULL ) { printf( "No UNITS, so no combine performed\n" ); return(NULL); } /* Define PDB sequence */ lTemp = lLoop( (OBJEKT)uCombined, RESIDUES ); while ( rRes == (RESIDUE)oNext(&lTemp) ) { ResidueSetPdbSequence( rRes, iContainerSequence((CONTAINER) rRes) ); } return((OBJEKT)uCombined); }
OBJEKT AMBER_Combine(OBJEKT objProt, OBJEKT objLig) { UNIT uCombined, uCurrent; LOOP lTemp; RESIDUE rRes = NULL; OBJEKT oObj; uCombined = (UNIT)objProt; oObj = objLig; if ( iObjectType( oObj ) != UNITid ) { PrintInfo(( "%s: is type %s", "Ligand", sObjectType(oObj) )); } uCurrent = (UNIT)oCopy(oObj ); PrintInfo(( " Sequence: %s", sContainerName((CONTAINER) uCurrent) )); if ( uCombined == NULL ) { printf( "Copying the first UNIT\n" ); uCombined = uCurrent; } else { printf( "Copied a subsequent UNIT\n" ); printf( "Joining two UNITS \n" ); UnitJoin( uCombined, uCurrent ); } if ( uCombined == NULL ) { printf( "No UNITS, so no combine performed\n" ); return(NULL); } lTemp = lLoop( (OBJEKT)uCombined, RESIDUES ); while ( rRes == (RESIDUE)oNext(&lTemp) ) { ResidueSetPdbSequence( rRes, iContainerSequence((CONTAINER) rRes) ); } return((OBJEKT)uCombined); }