use of org.dcm4che3.data.VR in project karnak by OsiriX-Foundation.
the class Profile method applyAction.
public void applyAction(Attributes dcm, Attributes dcmCopy, HMAC hmac, ProfileItem profilePassedInSequence, ActionItem actionPassedInSequence, AttributeEditorContext context) {
for (int tag : dcm.tags()) {
VR vr = dcm.getVR(tag);
final ExprCondition exprCondition = new ExprCondition(dcmCopy);
ActionItem currentAction = null;
ProfileItem currentProfile = null;
for (ProfileItem profileEntity : profiles.stream().filter(p -> !(p instanceof CleanPixelData)).collect(Collectors.toList())) {
currentProfile = profileEntity;
if (profileEntity.getCondition() == null || profileEntity.getCodeName().equals(ProfileItemType.DEFACING.getClassAlias()) || profileEntity.getCodeName().equals(ProfileItemType.CLEAN_PIXEL_DATA.getClassAlias())) {
currentAction = profileEntity.getAction(dcm, dcmCopy, tag, hmac);
} else {
boolean conditionIsOk = (Boolean) ExpressionResult.get(profileEntity.getCondition(), exprCondition, Boolean.class);
if (conditionIsOk) {
currentAction = profileEntity.getAction(dcm, dcmCopy, tag, hmac);
}
}
if (currentAction != null) {
break;
}
if (profileEntity.equals(profilePassedInSequence)) {
currentAction = actionPassedInSequence;
break;
}
}
if (!(currentAction instanceof Remove) && !(currentAction instanceof ReplaceNull) && vr == VR.SQ) {
final ProfileItem finalCurrentProfile = currentProfile;
final ActionItem finalCurrentAction = currentAction;
Sequence seq = dcm.getSequence(tag);
if (seq != null) {
for (Attributes d : seq) {
applyAction(d, dcmCopy, hmac, finalCurrentProfile, finalCurrentAction, context);
}
}
} else {
if (currentAction != null) {
try {
currentAction.execute(dcm, tag, hmac);
} catch (final Exception e) {
LOGGER.error("Cannot execute the currentAction {} for tag: {}", currentAction, TagUtils.toString(tag), e);
}
}
}
}
}
use of org.dcm4che3.data.VR in project dcm4che by dcm4che.
the class PlanarConfig method processFile.
private char processFile(File file) {
try {
Attributes dataset;
WritePlanarConfiguration writePlanarConfiguration = new WritePlanarConfiguration();
try (DicomInputStream is = new DicomInputStream(file)) {
is.setIncludeBulkData(DicomInputStream.IncludeBulkData.URI);
is.setDicomInputHandler(writePlanarConfiguration);
dataset = is.readDataset();
}
VR.Holder vr = new VR.Holder();
Object value = dataset.getValue(Tag.PixelData, vr);
if (value == null) {
skipped++;
return 'p';
}
ColorPMI colorPMI;
try {
colorPMI = ColorPMI.valueOf(dataset.getString(Tag.PhotometricInterpretation));
} catch (IllegalArgumentException e) {
skipped++;
return 'm';
}
if (!(value instanceof BulkData)) {
skipped++;
return 'c';
}
int pc;
try (RandomAccessFile raf = new RandomAccessFile(file, "rw")) {
pc = planarConfiguration(file, raf, (BulkData) value, dataset, colorPMI);
if (pc == dataset.getInt(Tag.PlanarConfiguration, 0)) {
correct[pc]++;
return CORRECT_CH[pc];
}
if (fix[pc]) {
writePlanarConfiguration.writeTo(raf, pc);
}
}
wrong[pc]++;
if (uids && (fix[pc] || !fix[1 - pc]))
uidslog().println(dataset.getString(Tag.SOPInstanceUID));
return WRONG_CH[pc];
} catch (IOException e) {
System.err.println("Failed to update " + file + ':');
e.printStackTrace(System.err);
failed++;
}
return 'E';
}
use of org.dcm4che3.data.VR in project dcm4che by dcm4che.
the class SAXWriter method writeValues.
private void writeValues(VR vr, Object val, boolean bigEndian, SpecificCharacterSet cs) throws SAXException {
if (vr.isStringType())
val = vr.toStrings(val, bigEndian, cs);
int vm = vr.vmOf(val);
for (int i = 0; i < vm; i++) {
String s = vr.toString(val, bigEndian, i, null);
addAttribute("number", Integer.toString(i + 1));
if (vr == VR.PN) {
PersonName pn = new PersonName(s, true);
startElement("PersonName");
writePNGroup("Alphabetic", pn, PersonName.Group.Alphabetic);
writePNGroup("Ideographic", pn, PersonName.Group.Ideographic);
writePNGroup("Phonetic", pn, PersonName.Group.Phonetic);
endElement("PersonName");
} else {
startElement("Value");
if (s != null)
writeText(s);
endElement("Value");
}
}
}
use of org.dcm4che3.data.VR in project dcm4che by dcm4che.
the class DicomFileDetector method isEVR.
private static boolean isEVR(byte[] b134, int rlen) {
int tagLE = ByteUtils.bytesToTagLE(b134, 0);
int tagBE = ByteUtils.bytesToTagBE(b134, 0);
VR vr = VR.valueOf(ByteUtils.bytesToVR(b134, 4));
return vr != null && vr == ElementDictionary.getStandardElementDictionary().vrOf(tagLE >= 0 && tagLE < tagBE ? tagLE : tagBE);
}
use of org.dcm4che3.data.VR in project dcm4che by dcm4che.
the class JSONWriter method readValue.
@Override
public void readValue(DicomInputStream dis, Attributes attrs) throws IOException {
int tag = dis.tag();
VR vr = dis.vr();
int len = dis.length();
if (TagUtils.isGroupLength(tag)) {
dis.readValue(dis, attrs);
} else if (dis.isExcludeBulkData()) {
dis.readValue(dis, attrs);
} else {
gen.writeStartObject(TagUtils.toHexString(tag));
gen.write("vr", vr.name());
if (vr == VR.SQ || len == -1) {
hasItems.addLast(false);
dis.readValue(dis, attrs);
if (hasItems.removeLast())
gen.writeEnd();
} else if (len > 0) {
if (dis.isIncludeBulkDataURI()) {
writeBulkData(dis.createBulkData(dis));
} else {
byte[] b = dis.readValue();
if (tag == Tag.TransferSyntaxUID || tag == Tag.SpecificCharacterSet || TagUtils.isPrivateCreator(tag))
attrs.setBytes(tag, vr, b);
writeValue(vr, b, dis.bigEndian(), attrs.getSpecificCharacterSet(vr), false);
}
}
gen.writeEnd();
}
}
Aggregations