package edu.sc.seis.seisFile.segd;
import org.apache.log4j.Logger;
import java.io.DataInput;
import java.io.IOException;
public class AdditionalGeneralHeader {
private static final Logger logger = Logger.getLogger(AdditionalGeneralHeader.class);
public enum PhaseControl {
NOT_RECORDED, BASEPLATE_ACCELEROMETER, REACTION_MASS, WEIGHTED_SUM, DIRECT_FORCE_MEASUREMENT
};
public enum VibratorType {
NOT_RECORDED, P_WAVE, SHEAR_WAVE, MARINE
};
int fileNumber = -1;
int sourceLineNumberInteger = -1;
int sourceLineNumberFraction = -1;
int sourcePointNumberInteger = -1;
int sourcePointNumberFraction = -1;
short sourcePointIndex = -1;
PhaseControl phaseControl = null;
VibratorType vibratorType = null;
short phaseAngle = 0;
int generalHeaderBlock_number = -1;
int sourceSet_number = -1;
public AdditionalGeneralHeader(){
}
public void read(DataInput inStream) throws IOException{
try {
fileNumber = SegdRecord.getDataValue(SegdRecord.getSections(SegdRecord.readBytes(inStream, 3, null), 1), 2);
sourceLineNumberInteger = SegdRecord.readSignedTriple(inStream);
sourceLineNumberFraction = SegdRecord.readShorts(inStream, 1)[0];
sourcePointNumberInteger = SegdRecord.readSignedTriple(inStream);
sourcePointNumberFraction = SegdRecord.readShorts(inStream, 1)[0];
sourcePointIndex = SegdRecord.readBytes(inStream, 1, null)[0];
short byte15 = SegdRecord.readBytes(inStream, 1, null)[0];
switch (byte15) {
case 0:
phaseControl = PhaseControl.NOT_RECORDED;
break;
case 1:
phaseControl = PhaseControl.BASEPLATE_ACCELEROMETER;
break;
case 2:
phaseControl = PhaseControl.REACTION_MASS;
break;
case 3:
phaseControl = PhaseControl.WEIGHTED_SUM;
break;
case 4:
phaseControl = PhaseControl.DIRECT_FORCE_MEASUREMENT;
break;
default:
phaseControl = null;
}
short byte16 = SegdRecord.readBytes(inStream, 1, null)[0];
switch (byte16) {
case 0:
vibratorType = VibratorType.NOT_RECORDED;
break;
case 1:
vibratorType = VibratorType.P_WAVE;
break;
case 2:
vibratorType = VibratorType.SHEAR_WAVE;
break;
case 3:
vibratorType = VibratorType.MARINE;
break;
default:
vibratorType = null;
}
phaseAngle = inStream.readShort();
generalHeaderBlock_number = SegdRecord.readBytes(inStream, 1, null)[0];
sourceSet_number = SegdRecord.readBytes(inStream, 1, null)[0];
inStream.skipBytes(12); //not used
} catch (CheckFailedException e) {
// TODO Auto-generated catch block
logger.error("CheckFailedException:", e);
} catch (SegdException e) {
logger.error("SegdException:", e);
}
}
public String toString(){
return "\nAdditional General Header # " + generalHeaderBlock_number
+"\n\tFile number: " + fileNumber
+"\n\tSource line number: " + sourceLineNumberInteger + "." + sourceLineNumberFraction
+"\n\tSource point number: " + sourcePointNumberInteger + "." + sourcePointNumberFraction
+"\n\tSource point index: " + sourcePointIndex
+"\n\tPhase control: " + phaseControl
+"\n\tVibrator type: " + vibratorType
+"\n\tPhase angle: " + phaseAngle
+"\n\tSource set number: " + sourceSet_number;
}
}