package experimental.igel;
import java.util.ArrayList;
import java.util.List;
public class SegmentVariable extends Measure {
private String segment;
private int startPos;
private int endPos;
private List<Factor> neighbors;
private List<Integer> messageIds;
private List<Message> messages;
private Belief belief;
public SegmentVariable(String segment, int startPos, int endPos) {
super(2);
this.setSegment(segment);
this.setStartPos(startPos);
this.setEndPos(endPos);
this.setNeighbors(new ArrayList<Factor>());
this.setMessageIds(new ArrayList<Integer>());
this.setMessages(new ArrayList<Message>());
this.setBelief(new Belief(2));
}
public void computeBelief() {
this.belief.toOnes();
for (int index = 0; index < this.messageIds.size(); ++index) {
Factor f = neighbors.get(index);
int messageId = this.messageIds.get(index);
Message m = f.getMessages().get(messageId);
for (int i = 0; i < 2; ++i) {
this.belief.measure[i] *= m.measure[i];
}
}
}
public void passMessages() {
this.computeBelief();
for (int index = 0; index < this.messageIds.size(); ++index) {
Factor f = neighbors.get(index);
int messageId = this.messageIds.get(index);
Message m = f.getMessages().get(messageId);
messages.get(index).toZeros();
for (int i = 0; i < 2; ++i) {
messages.get(index).measure[i] = this.belief.measure[i] / m.measure[i];
}
}
}
public String getSegment() {
return segment;
}
public void setSegment(String segment) {
this.segment = segment;
}
public int getStartPos() {
return startPos;
}
public void setStartPos(int startPos) {
this.startPos = startPos;
}
public int getEndPos() {
return endPos;
}
public void setEndPos(int endPos) {
this.endPos = endPos;
}
public List<Factor> getNeighbors() {
return neighbors;
}
public void setNeighbors(List<Factor> neighbors) {
this.neighbors = neighbors;
}
public List<Integer> getMessageIds() {
return messageIds;
}
public void setMessageIds(List<Integer> messageIds) {
this.messageIds = messageIds;
}
public List<Message> getMessages() {
return messages;
}
public void setMessages(List<Message> messages) {
this.messages = messages;
}
public Belief getBelief() {
return belief;
}
public void setBelief(Belief belief) {
this.belief = belief;
}
}