use of java.nio.ByteOrder in project javacv by bytedeco.
the class FlyCaptureFrameGrabber method grab.
public Frame grab() throws Exception {
int error = flycaptureGrabImage2(context, raw_image);
if (error != FLYCAPTURE_OK) {
throw new Exception("flycaptureGrabImage2() Error " + error + " (Has start() been called?)");
}
int w = raw_image.iCols();
int h = raw_image.iRows();
int format = raw_image.pixelFormat();
int depth = getDepth(format);
int stride = raw_image.iRowInc();
int size = h * stride;
int numChannels = getNumChannels(format);
error = flycaptureGetCameraRegister(context, IMAGE_DATA_FORMAT, regOut);
if (error != FLYCAPTURE_OK) {
throw new Exception("flycaptureGetCameraRegister() Error " + error);
}
ByteOrder frameEndian = (regOut[0] & 0x1) != 0 ? ByteOrder.BIG_ENDIAN : ByteOrder.LITTLE_ENDIAN;
boolean alreadySwapped = false;
boolean colorbayer = raw_image.bStippled();
boolean colorrgb = format == FLYCAPTURE_RGB8 || format == FLYCAPTURE_RGB16 || format == FLYCAPTURE_BGR || format == FLYCAPTURE_BGRU;
boolean coloryuv = format == FLYCAPTURE_411YUV8 || format == FLYCAPTURE_422YUV8 || format == FLYCAPTURE_444YUV8;
BytePointer imageData = raw_image.pData();
if ((depth == IPL_DEPTH_8U || frameEndian.equals(ByteOrder.nativeOrder())) && (imageMode == ImageMode.RAW || (imageMode == ImageMode.COLOR && numChannels == 3) || (imageMode == ImageMode.GRAY && numChannels == 1 && !colorbayer))) {
if (return_image == null) {
return_image = IplImage.createHeader(w, h, depth, numChannels);
}
return_image.widthStep(stride);
return_image.imageSize(size);
return_image.imageData(imageData);
} else {
if (return_image == null) {
return_image = IplImage.create(w, h, depth, imageMode == ImageMode.COLOR ? 3 : 1);
}
if (temp_image == null) {
if (imageMode == ImageMode.COLOR && (numChannels > 1 || depth > 8) && !coloryuv && !colorbayer) {
temp_image = IplImage.create(w, h, depth, numChannels);
} else if (imageMode == ImageMode.GRAY && colorbayer) {
temp_image = IplImage.create(w, h, depth, 3);
} else if (imageMode == ImageMode.GRAY && colorrgb) {
temp_image = IplImage.createHeader(w, h, depth, 3);
} else if (imageMode == ImageMode.COLOR && numChannels == 1 && !coloryuv && !colorbayer) {
temp_image = IplImage.createHeader(w, h, depth, 1);
} else {
temp_image = return_image;
}
}
conv_image.iRowInc(temp_image.widthStep());
conv_image.pData(temp_image.imageData());
if (depth == IPL_DEPTH_8U) {
conv_image.pixelFormat(imageMode == ImageMode.RAW ? FLYCAPTURE_RAW8 : temp_image.nChannels() == 1 ? FLYCAPTURE_MONO8 : FLYCAPTURE_BGR);
} else {
conv_image.pixelFormat(imageMode == ImageMode.RAW ? FLYCAPTURE_RAW16 : temp_image.nChannels() == 1 ? FLYCAPTURE_MONO16 : FLYCAPTURE_RGB16);
}
if (depth != IPL_DEPTH_8U && conv_image.pixelFormat() == format && conv_image.iRowInc() == stride) {
// we just need a copy to swap bytes..
ShortBuffer in = raw_image.getByteBuffer().order(frameEndian).asShortBuffer();
ShortBuffer out = temp_image.getByteBuffer().order(ByteOrder.nativeOrder()).asShortBuffer();
out.put(in);
alreadySwapped = true;
} else if ((imageMode == ImageMode.GRAY && colorrgb) || (imageMode == ImageMode.COLOR && numChannels == 1 && !coloryuv && !colorbayer)) {
temp_image.widthStep(stride);
temp_image.imageSize(size);
temp_image.imageData(imageData);
} else if (!colorrgb && (colorbayer || coloryuv || numChannels > 1)) {
error = flycaptureConvertImage(context, raw_image, conv_image);
if (error != FLYCAPTURE_OK) {
throw new Exception("flycaptureConvertImage() Error " + error);
}
}
if (!alreadySwapped && depth != IPL_DEPTH_8U && !frameEndian.equals(ByteOrder.nativeOrder())) {
// ack, the camera's endianness doesn't correspond to our machine ...
// swap bytes of 16-bit images
ByteBuffer bb = temp_image.getByteBuffer();
ShortBuffer in = bb.order(frameEndian).asShortBuffer();
ShortBuffer out = bb.order(ByteOrder.nativeOrder()).asShortBuffer();
out.put(in);
}
if (imageMode == ImageMode.COLOR && numChannels == 1 && !coloryuv && !colorbayer) {
cvCvtColor(temp_image, return_image, CV_GRAY2BGR);
} else if (imageMode == ImageMode.GRAY && (colorbayer || colorrgb)) {
cvCvtColor(temp_image, return_image, CV_BGR2GRAY);
}
}
error = flycaptureGetColorTileFormat(context, regOut);
if (error != FLYCAPTURE_OK) {
sensorPattern = -1L;
} else
switch(regOut[0]) {
case FLYCAPTURE_STIPPLEDFORMAT_BGGR:
sensorPattern = SENSOR_PATTERN_BGGR;
break;
case FLYCAPTURE_STIPPLEDFORMAT_GBRG:
sensorPattern = SENSOR_PATTERN_GBRG;
break;
case FLYCAPTURE_STIPPLEDFORMAT_GRBG:
sensorPattern = SENSOR_PATTERN_GRBG;
break;
case FLYCAPTURE_STIPPLEDFORMAT_RGGB:
sensorPattern = SENSOR_PATTERN_RGGB;
break;
default:
sensorPattern = -1L;
}
FlyCaptureTimestamp timeStamp = raw_image.timeStamp();
timestamp = timeStamp.ulSeconds() * 1000000L + timeStamp.ulMicroSeconds();
return converter.convert(return_image);
}
use of java.nio.ByteOrder in project com.revolsys.open by revolsys.
the class GeoPackageGeometryJdbcFieldDefinition method parseGeometry.
private Geometry parseGeometry(GeometryFactory geometryFactory, final ByteBuffer buffer) {
ByteOrder byteOrder;
if (buffer.get() == 0) {
byteOrder = ByteOrder.BIG_ENDIAN;
} else {
byteOrder = ByteOrder.LITTLE_ENDIAN;
}
buffer.order(byteOrder);
final int flags = buffer.getInt();
final int geometryType = flags % 1000;
final int geometryTypeMode = flags / 1000;
boolean hasZ = false;
boolean hasM = false;
switch(geometryTypeMode) {
case 0:
break;
case 1:
hasZ = true;
break;
case 2:
hasM = true;
break;
case 3:
hasZ = true;
hasM = true;
break;
}
int axisCount;
if (hasM) {
axisCount = 4;
} else if (hasZ) {
axisCount = 3;
} else {
axisCount = 2;
}
if (axisCount != geometryFactory.getAxisCount()) {
geometryFactory = geometryFactory.convertAxisCount(axisCount);
}
Geometry geometry;
switch(geometryType) {
case 1:
geometry = parsePoint(geometryFactory, buffer, hasZ, hasM);
break;
case 2:
geometry = parseLineString(geometryFactory, buffer, hasZ, hasM);
break;
case 3:
geometry = parsePolygon(geometryFactory, buffer, hasZ, hasM);
break;
case 4:
geometry = parseMultiPoint(geometryFactory, buffer);
break;
case 5:
geometry = parseMultiLineString(geometryFactory, buffer);
break;
case 6:
geometry = parseMultiPolygon(geometryFactory, buffer);
break;
case 7:
geometry = parseCollection(geometryFactory, buffer);
break;
default:
throw new IllegalArgumentException("Unknown Geometry Type: " + geometryType);
}
return geometry;
}
use of java.nio.ByteOrder in project com.revolsys.open by revolsys.
the class GeoPackageGeometryJdbcFieldDefinition method parseWkb.
private Geometry parseWkb(GeometryFactory geometryFactory, final byte[] data) {
final ByteBuffer buffer = ByteBuffer.wrap(data);
if (buffer.get() == 'G') {
if (buffer.get() == 'P') {
final byte version = buffer.get();
final byte flags = buffer.get();
final boolean extended = (flags >> 5 & 1) == 1;
final boolean empty = (flags >> 4 & 1) == 1;
final int envelopeType = flags >> 1 & 7;
ByteOrder byteOrder;
if ((flags & 1) == 0) {
byteOrder = ByteOrder.BIG_ENDIAN;
} else {
byteOrder = ByteOrder.LITTLE_ENDIAN;
}
buffer.order(byteOrder);
final int coordinateSystemId = buffer.getInt();
geometryFactory = geometryFactory.convertSrid(coordinateSystemId);
int envelopeCoordinateCount = 0;
switch(envelopeType) {
case 1:
envelopeCoordinateCount = 4;
break;
case 2:
envelopeCoordinateCount = 6;
break;
case 3:
envelopeCoordinateCount = 6;
break;
case 4:
envelopeCoordinateCount = 8;
break;
default:
break;
}
for (int i = 0; i < envelopeCoordinateCount; i++) {
buffer.getDouble();
}
return parseGeometry(geometryFactory, buffer);
}
}
throw new IllegalArgumentException("Invalid Geometry header, expecting GP\n" + Arrays.toString(data));
}
use of java.nio.ByteOrder in project ffx by mjschnie.
the class MTZWriter method write.
/**
* <p>
* write</p>
*/
public void write() {
ByteOrder byteOrder = ByteOrder.nativeOrder();
FileOutputStream fileOutputStream;
DataOutputStream dataOutputStream;
try {
if (logger.isLoggable(Level.INFO)) {
StringBuilder sb = new StringBuilder();
sb.append(format("\n Writing MTZ HKL file: \"%s\"\n", fileName));
logger.info(sb.toString());
}
fileOutputStream = new FileOutputStream(fileName);
dataOutputStream = new DataOutputStream(fileOutputStream);
byte[] bytes = new byte[80];
int offset = 0;
int writeLen = 0;
int iMapData;
float fMapData;
// Header.
StringBuilder sb = new StringBuilder();
sb.append("MTZ ");
dataOutputStream.writeBytes(sb.toString());
// Header offset.
int headerOffset = n * nCol + 21;
ByteBuffer byteBuffer = ByteBuffer.wrap(bytes);
byteBuffer.order(byteOrder).putInt(headerOffset);
// 0x4441 for LE, 0x1111 for BE
if (ByteOrder.nativeOrder().equals(ByteOrder.LITTLE_ENDIAN)) {
iMapData = 0x4441;
} else {
iMapData = 0x1111;
}
byteBuffer.order(byteOrder).putInt(iMapData);
dataOutputStream.write(bytes, offset, 8);
sb = new StringBuilder();
sb.append(" ");
sb.setLength(68);
dataOutputStream.writeBytes(sb.toString());
// Data.
Vector<String> colname = new Vector<>(nCol);
char[] colType = new char[nCol];
double[] res = new double[2];
res[0] = Double.POSITIVE_INFINITY;
res[1] = Double.NEGATIVE_INFINITY;
float[][] colMinMax = new float[nCol][2];
for (int i = 0; i < nCol; i++) {
colMinMax[i][0] = Float.POSITIVE_INFINITY;
colMinMax[i][1] = Float.NEGATIVE_INFINITY;
}
ReflectionSpline sigmaASpline = new ReflectionSpline(reflectionList, refinementData.sigmaa.length);
int col = 0;
colname.add("H");
colType[col++] = 'H';
colname.add("K");
colType[col++] = 'H';
colname.add("L");
colType[col++] = 'H';
writeLen += 12;
if (mtzType != MTZType.FCONLY) {
colname.add("FO");
colType[col++] = 'F';
colname.add("SIGFO");
colType[col++] = 'Q';
colname.add("FreeR");
colType[col++] = 'I';
writeLen += 12;
}
if (mtzType != MTZType.DATAONLY) {
colname.add("Fs");
colType[col++] = 'F';
colname.add("PHIFs");
colType[col++] = 'P';
colname.add("Fc");
colType[col++] = 'F';
colname.add("PHIFc");
colType[col++] = 'P';
writeLen += 16;
}
if (mtzType == MTZType.ALL) {
colname.add("FOM");
colType[col++] = 'W';
colname.add("PHIW");
colType[col++] = 'P';
colname.add("SigmaAs");
colType[col++] = 'F';
colname.add("SigmaAw");
colType[col++] = 'Q';
colname.add("FWT");
colType[col++] = 'F';
colname.add("PHWT");
colType[col++] = 'P';
colname.add("DELFWT");
colType[col++] = 'F';
colname.add("PHDELWT");
colType[col++] = 'P';
writeLen += 32;
}
for (HKL ih : reflectionList.hkllist) {
col = 0;
int i = ih.index();
// Skip the 0 0 0 reflection.
if (ih.h() == 0 && ih.k() == 0 && ih.l() == 0) {
continue;
}
double ss = Crystal.invressq(crystal, ih);
res[0] = min(ss, res[0]);
res[1] = max(ss, res[1]);
// HKL first (3)
fMapData = ih.h();
colMinMax[col][0] = min(fMapData, colMinMax[0][0]);
colMinMax[col][1] = max(fMapData, colMinMax[0][1]);
byteBuffer.rewind();
byteBuffer.order(byteOrder).putFloat(fMapData);
col++;
fMapData = ih.k();
colMinMax[col][0] = min(fMapData, colMinMax[1][0]);
colMinMax[col][1] = max(fMapData, colMinMax[1][1]);
byteBuffer.order(byteOrder).putFloat(fMapData);
col++;
fMapData = ih.l();
colMinMax[col][0] = min(fMapData, colMinMax[2][0]);
colMinMax[col][1] = max(fMapData, colMinMax[2][1]);
byteBuffer.order(byteOrder).putFloat(fMapData);
col++;
if (mtzType != MTZType.FCONLY) {
// F/sigF (2)
fMapData = (float) refinementData.getF(i);
if (!isNaN(fMapData)) {
colMinMax[col][0] = min(fMapData, colMinMax[col][0]);
colMinMax[col][1] = max(fMapData, colMinMax[col][1]);
}
byteBuffer.order(byteOrder).putFloat(fMapData);
col++;
fMapData = (float) refinementData.getSigF(i);
if (!isNaN(fMapData)) {
colMinMax[col][0] = min(fMapData, colMinMax[col][0]);
colMinMax[col][1] = max(fMapData, colMinMax[col][1]);
}
byteBuffer.order(byteOrder).putFloat(fMapData);
col++;
// Free R (1)
fMapData = (float) refinementData.getFreeR(i);
if (!isNaN(fMapData)) {
colMinMax[col][0] = min(fMapData, colMinMax[col][0]);
colMinMax[col][1] = max(fMapData, colMinMax[col][1]);
}
byteBuffer.order(byteOrder).putFloat(fMapData);
col++;
}
if (mtzType == MTZType.FCONLY) {
// Fs (2)
fMapData = (float) refinementData.fsF(i);
colMinMax[col][0] = min(fMapData, colMinMax[col][0]);
colMinMax[col][1] = max(fMapData, colMinMax[col][1]);
byteBuffer.order(byteOrder).putFloat(fMapData);
col++;
fMapData = (float) toDegrees(refinementData.fsPhi(i));
colMinMax[col][0] = min(fMapData, colMinMax[col][0]);
colMinMax[col][1] = max(fMapData, colMinMax[col][1]);
byteBuffer.order(byteOrder).putFloat(fMapData);
col++;
// Fc (unscaled!) (2)
fMapData = (float) refinementData.fcF(i);
if (!isNaN(fMapData)) {
colMinMax[col][0] = min(fMapData, colMinMax[col][0]);
colMinMax[col][1] = max(fMapData, colMinMax[col][1]);
}
byteBuffer.order(byteOrder).putFloat(fMapData);
col++;
fMapData = (float) Math.toDegrees(refinementData.fcPhi(i));
if (!isNaN(fMapData)) {
colMinMax[col][0] = min(fMapData, colMinMax[col][0]);
colMinMax[col][1] = max(fMapData, colMinMax[col][1]);
}
byteBuffer.order(byteOrder).putFloat(fMapData);
col++;
}
if (mtzType == MTZType.ALL) {
// Fs (2)
fMapData = (float) refinementData.fsF(i);
colMinMax[col][0] = min(fMapData, colMinMax[col][0]);
colMinMax[col][1] = max(fMapData, colMinMax[col][1]);
byteBuffer.order(byteOrder).putFloat(fMapData);
col++;
fMapData = (float) toDegrees(refinementData.fsPhi(i));
colMinMax[col][0] = min(fMapData, colMinMax[col][0]);
colMinMax[col][1] = max(fMapData, colMinMax[col][1]);
byteBuffer.order(byteOrder).putFloat(fMapData);
col++;
// Fctot (2)
fMapData = (float) refinementData.fcTotF(i);
if (!isNaN(fMapData)) {
colMinMax[col][0] = min(fMapData, colMinMax[col][0]);
colMinMax[col][1] = max(fMapData, colMinMax[col][1]);
}
byteBuffer.order(byteOrder).putFloat(fMapData);
col++;
fMapData = (float) toDegrees(refinementData.fcTotPhi(i));
if (!isNaN(fMapData)) {
colMinMax[col][0] = Math.min(fMapData, colMinMax[col][0]);
colMinMax[col][1] = Math.max(fMapData, colMinMax[col][1]);
}
byteBuffer.order(byteOrder).putFloat(fMapData);
col++;
// FOM/phase (2)
fMapData = (float) refinementData.fomphi[i][0];
if (!isNaN(fMapData)) {
colMinMax[col][0] = Math.min(fMapData, colMinMax[col][0]);
colMinMax[col][1] = Math.max(fMapData, colMinMax[col][1]);
}
byteBuffer.order(byteOrder).putFloat(fMapData);
col++;
fMapData = (float) toDegrees(refinementData.fomphi[i][1]);
colMinMax[col][0] = min(fMapData, colMinMax[col][0]);
colMinMax[col][1] = max(fMapData, colMinMax[col][1]);
byteBuffer.order(byteOrder).putFloat(fMapData);
col++;
// Spline setup.
double fh = spline.f(ss, refinementData.spline);
double sa = sigmaASpline.f(ss, refinementData.sigmaa);
double wa = sigmaASpline.f(ss, refinementData.sigmaw);
// sigmaA/w (2)
fMapData = (float) sa;
if (!isNaN(fMapData)) {
colMinMax[col][0] = min(fMapData, colMinMax[col][0]);
colMinMax[col][1] = max(fMapData, colMinMax[col][1]);
}
byteBuffer.order(byteOrder).putFloat(fMapData);
col++;
fMapData = (float) wa;
if (!isNaN(fMapData)) {
colMinMax[col][0] = min(fMapData, colMinMax[col][0]);
colMinMax[col][1] = max(fMapData, colMinMax[col][1]);
}
byteBuffer.order(byteOrder).putFloat(fMapData);
col++;
// Map coeffs (4).
fMapData = (float) refinementData.FoFc2F(i);
colMinMax[col][0] = min(fMapData, colMinMax[col][0]);
colMinMax[col][1] = max(fMapData, colMinMax[col][1]);
byteBuffer.order(byteOrder).putFloat(fMapData);
col++;
fMapData = (float) toDegrees(refinementData.FoFc2Phi(i));
colMinMax[col][0] = min(fMapData, colMinMax[col][0]);
colMinMax[col][1] = max(fMapData, colMinMax[col][1]);
byteBuffer.order(byteOrder).putFloat(fMapData);
col++;
fMapData = (float) refinementData.foFc1F(i);
colMinMax[col][0] = min(fMapData, colMinMax[col][0]);
colMinMax[col][1] = max(fMapData, colMinMax[col][1]);
byteBuffer.order(byteOrder).putFloat(fMapData);
col++;
fMapData = (float) toDegrees(refinementData.foFc1Phi(i));
colMinMax[col][0] = min(fMapData, colMinMax[col][0]);
colMinMax[col][1] = max(fMapData, colMinMax[col][1]);
byteBuffer.order(byteOrder).putFloat(fMapData);
col++;
}
dataOutputStream.write(bytes, offset, writeLen);
}
// Header.
sb = new StringBuilder();
sb.append("VERS MTZ:V1.1 ");
while (sb.length() < 80) {
sb.append(" ");
}
dataOutputStream.writeBytes(sb.toString());
Date now = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss ");
sb = new StringBuilder();
sb.append("TITLE FFX output: " + sdf.format(now));
while (sb.length() < 80) {
sb.append(" ");
}
dataOutputStream.writeBytes(sb.toString());
sb = new StringBuilder();
sb.append(String.format("NCOL %8d %12d %8d", nCol, n, 0));
while (sb.length() < 80) {
sb.append(" ");
}
dataOutputStream.writeBytes(sb.toString());
sb = new StringBuilder();
sb.append("SORT 0 0 0 0 0 ");
while (sb.length() < 80) {
sb.append(" ");
}
dataOutputStream.writeBytes(sb.toString());
sb = new StringBuilder();
char cdata = spaceGroup.shortName.charAt(0);
if (cdata == 'H') {
cdata = 'R';
}
sb.append(String.format("SYMINF %3d %2d %c %5d %22s %5s", spaceGroup.getNumberOfSymOps(), spaceGroup.numPrimitiveSymEquiv, cdata, spaceGroup.number, "'" + spaceGroup.shortName + "'", spaceGroup.pointGroupName));
while (sb.length() < 80) {
sb.append(" ");
}
dataOutputStream.writeBytes(sb.toString());
for (int i = 0; i < spaceGroup.symOps.size(); i++) {
sb = new StringBuilder();
sb.append("SYMM ");
SymOp symop = spaceGroup.symOps.get(i);
sb.append(symop.toXYZString());
while (sb.length() < 80) {
sb.append(" ");
}
dataOutputStream.writeBytes(sb.toString());
}
sb = new StringBuilder();
sb.append(String.format("RESO %8.6f%13s%8.6f", res[0], " ", res[1]));
while (sb.length() < 80) {
sb.append(" ");
}
dataOutputStream.writeBytes(sb.toString());
sb = new StringBuilder();
sb.append("VALM NAN ");
while (sb.length() < 80) {
sb.append(" ");
}
dataOutputStream.writeBytes(sb.toString());
sb = new StringBuilder();
sb.append("NDIF 1 ");
while (sb.length() < 80) {
sb.append(" ");
}
dataOutputStream.writeBytes(sb.toString());
sb = new StringBuilder();
sb.append("PROJECT 1 project ");
while (sb.length() < 80) {
sb.append(" ");
}
dataOutputStream.writeBytes(sb.toString());
sb = new StringBuilder();
sb.append("CRYSTAL 1 crystal ");
while (sb.length() < 80) {
sb.append(" ");
}
dataOutputStream.writeBytes(sb.toString());
sb = new StringBuilder();
sb.append("DATASET 1 dataset ");
while (sb.length() < 80) {
sb.append(" ");
}
dataOutputStream.writeBytes(sb.toString());
for (int j = 0; j < nCol; j++) {
sb = new StringBuilder();
sb.append(String.format("COLUMN %-30s %c %17.4f %17.4f 1", colname.get(j), colType[j], colMinMax[j][0], colMinMax[j][1]));
dataOutputStream.writeBytes(sb.toString());
}
sb = new StringBuilder();
sb.append(String.format("CELL %10.4f %9.4f %9.4f %9.4f %9.4f %9.4f ", crystal.a, crystal.b, crystal.c, crystal.alpha, crystal.beta, crystal.gamma));
while (sb.length() < 80) {
sb.append(" ");
}
dataOutputStream.writeBytes(sb.toString());
sb = new StringBuilder();
sb.append(String.format("DCELL %9d %10.4f %9.4f %9.4f %9.4f %9.4f %9.4f ", 1, crystal.a, crystal.b, crystal.c, crystal.alpha, crystal.beta, crystal.gamma));
while (sb.length() < 80) {
sb.append(" ");
}
dataOutputStream.writeBytes(sb.toString());
sb = new StringBuilder();
sb.append("DWAVEL 1 1.00000 ");
while (sb.length() < 80) {
sb.append(" ");
}
dataOutputStream.writeBytes(sb.toString());
sb = new StringBuilder();
sb.append("END ");
while (sb.length() < 80) {
sb.append(" ");
}
dataOutputStream.writeBytes(sb.toString());
sb = new StringBuilder();
sb.append("MTZENDOFHEADERS ");
while (sb.length() < 80) {
sb.append(" ");
}
dataOutputStream.writeBytes(sb.toString());
dataOutputStream.close();
} catch (Exception e) {
String message = "Fatal exception evaluating structure factors.\n";
logger.log(Level.SEVERE, message, e);
}
}
use of java.nio.ByteOrder in project ffx by mjschnie.
the class CCP4MapFilter method readFile.
/**
* {@inheritDoc}
*/
@Override
public boolean readFile(String filename, RealSpaceRefinementData refinementdata, CompositeConfiguration properties) {
int imapData;
double cellA, cellB, cellC, cellAlpha, cellBeta, cellGamma;
String stampString;
ByteOrder byteOrder = ByteOrder.nativeOrder();
FileInputStream fileInputStream;
DataInputStream dataInputStream;
double min = Double.POSITIVE_INFINITY;
double max = Double.NEGATIVE_INFINITY;
double mean = 0.0;
double sd = 0.0;
double rmsd = 0.0;
// First determine byte order of file versus system
try {
fileInputStream = new FileInputStream(filename);
dataInputStream = new DataInputStream(fileInputStream);
dataInputStream.skipBytes(212);
byte[] bytes = new byte[4];
dataInputStream.read(bytes, 0, 4);
ByteBuffer byteBuffer = ByteBuffer.wrap(bytes);
imapData = byteBuffer.order(ByteOrder.BIG_ENDIAN).getInt();
stampString = Integer.toHexString(imapData);
switch(stampString.charAt(0)) {
case '1':
case '3':
if (byteOrder.equals(ByteOrder.LITTLE_ENDIAN)) {
byteOrder = ByteOrder.BIG_ENDIAN;
}
break;
case '4':
if (byteOrder.equals(ByteOrder.BIG_ENDIAN)) {
byteOrder = ByteOrder.LITTLE_ENDIAN;
}
break;
}
if (logger.isLoggable(Level.INFO)) {
StringBuilder sb = new StringBuilder();
sb.append(String.format("\n Opening CCP4 map: %s\n", filename));
// sb.append(String.format("file type (machine stamp): %s\n", stampString));
logger.info(sb.toString());
}
fileInputStream.close();
} catch (Exception e) {
String message = " Fatal exception reading CCP4 map.\n";
logger.log(Level.SEVERE, message, e);
}
try {
fileInputStream = new FileInputStream(filename);
dataInputStream = new DataInputStream(fileInputStream);
byte[] bytes = new byte[2048];
dataInputStream.read(bytes, 0, 1024);
ByteBuffer byteBuffer = ByteBuffer.wrap(bytes);
int[] ext = new int[3];
ext[0] = byteBuffer.order(byteOrder).getInt();
ext[1] = byteBuffer.order(byteOrder).getInt();
ext[2] = byteBuffer.order(byteOrder).getInt();
// mode (2 = reals, only one we accept)
int mode = byteBuffer.order(byteOrder).getInt();
int[] ori = new int[3];
ori[0] = byteBuffer.order(byteOrder).getInt();
ori[1] = byteBuffer.order(byteOrder).getInt();
ori[2] = byteBuffer.order(byteOrder).getInt();
int[] ni = new int[3];
ni[0] = byteBuffer.order(byteOrder).getInt();
ni[1] = byteBuffer.order(byteOrder).getInt();
ni[2] = byteBuffer.order(byteOrder).getInt();
cellA = byteBuffer.order(byteOrder).getFloat();
cellB = byteBuffer.order(byteOrder).getFloat();
cellC = byteBuffer.order(byteOrder).getFloat();
cellAlpha = byteBuffer.order(byteOrder).getFloat();
cellBeta = byteBuffer.order(byteOrder).getFloat();
cellGamma = byteBuffer.order(byteOrder).getFloat();
int[] axisi = new int[3];
for (int i = 0; i < 3; i++) {
int axis = byteBuffer.order(byteOrder).getInt();
switch(axis) {
case 1:
axisi[0] = i;
break;
case 2:
axisi[1] = i;
break;
case 3:
axisi[2] = i;
break;
}
}
min = byteBuffer.order(byteOrder).getFloat();
max = byteBuffer.order(byteOrder).getFloat();
mean = byteBuffer.order(byteOrder).getFloat();
int sg = byteBuffer.order(byteOrder).getInt();
int nsymb = byteBuffer.order(byteOrder).getInt();
int skew = byteBuffer.order(byteOrder).getInt();
for (int i = 0; i < 12; i++) {
byteBuffer.order(byteOrder).getFloat();
}
for (int i = 0; i < 15; i++) {
byteBuffer.order(byteOrder).getInt();
}
byte[] word = new byte[2048];
byteBuffer.order(byteOrder).get(word, 0, 4);
String mapString = new String(word);
sd = byteBuffer.order(byteOrder).getFloat();
rmsd = byteBuffer.order(byteOrder).getFloat();
if (logger.isLoggable(Level.INFO)) {
StringBuilder sb = new StringBuilder();
sb.append(String.format(" Column origin: %d\t Extent: %d\n", ori[0], ext[0]));
sb.append(String.format(" Row origin: %d\t Extent: %d\n", ori[1], ext[1]));
sb.append(String.format(" Section origin: %d\t Extent: %d\n", ori[2], ext[2]));
sb.append(String.format(" Axis order: %d %d %d\n", axisi[0], axisi[1], axisi[2]));
sb.append(String.format(" Number of X, Y, Z columns: %d %d %d\n", ni[0], ni[1], ni[2]));
sb.append(String.format(" Spacegroup: %d (%s)\n", sg, SpaceGroup.spaceGroupNames[sg - 1]));
sb.append(String.format(" Cell: %8.3f %8.3f %8.3f %8.3f %8.3f %8.3f\n", cellA, cellB, cellC, cellAlpha, cellBeta, cellGamma));
logger.info(sb.toString());
}
int nlabel = byteBuffer.order(byteOrder).getInt();
for (int i = 0; i < 10; i++) {
byteBuffer.order(byteOrder).get(word, 0, 80);
mapString = new String(word);
}
if (nsymb > 0) {
byteBuffer.rewind();
dataInputStream.read(bytes, 0, nsymb);
for (int i = 0; i < nsymb / 80; i += 80) {
byteBuffer.order(byteOrder).get(word, 0, 80);
mapString = new String(word);
}
}
byteBuffer.rewind();
dataInputStream.read(bytes, 0, 2048);
refinementdata.setData(new double[ext[0] * ext[1] * ext[2]]);
int[] ijk = new int[3];
int index, x, y, z;
refinementdata.setOrigin(ori[axisi[0]], ori[axisi[1]], ori[axisi[2]]);
int nx = ext[axisi[0]];
int ny = ext[axisi[1]];
int nz = ext[axisi[2]];
refinementdata.setExtent(nx, ny, nz);
refinementdata.setNI(ni[0], ni[1], ni[2]);
for (ijk[2] = 0; ijk[2] < ext[2]; ijk[2]++) {
for (ijk[1] = 0; ijk[1] < ext[1]; ijk[1]++) {
for (ijk[0] = 0; ijk[0] < ext[0]; ijk[0]++) {
x = ijk[axisi[0]];
y = ijk[axisi[1]];
z = ijk[axisi[2]];
index = x + nx * (y + ny * z);
refinementdata.getData()[index] = byteBuffer.order(byteOrder).getFloat();
if (!byteBuffer.hasRemaining()) {
byteBuffer.rewind();
dataInputStream.read(bytes, 0, 2048);
}
}
}
}
fileInputStream.close();
} catch (Exception e) {
String message = " Fatal exception reading CCP4 map.\n";
logger.log(Level.SEVERE, message, e);
}
return true;
}
Aggregations