package gdsc.smlm.engine;
/*-----------------------------------------------------------------------------
* GDSC SMLM Software
*
* Copyright (C) 2015 Alex Herbert
* Genome Damage and Stability Centre
* University of Sussex, UK
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*---------------------------------------------------------------------------*/
/**
* Define the type of fit that was performed
*/
public class FitType implements Cloneable
{
public static final int MULTI = 1;
public static final int MULTI_OK = 2;
public static final int DOUBLET = 4;
public static final int DOUBLET_OK = 8;
public static final int MULTI_DOUBLET = 16;
public static final int MULTI_DOUBLET_OK = 32;
public static final int OK = 64;
public static final int NO_OF_FLAGS = 7;
private int flags;
public FitType()
{
}
public FitType(int flags)
{
this.flags = flags;
}
public int getFlags()
{
return flags;
}
public void setFlag(int flag, boolean enabled)
{
if (enabled)
flags |= flag;
else
// TODO - check this
flags &= flag;
}
public boolean getFlag(int flag)
{
return (flags & flag) == flag;
}
public void setMulti(boolean enabled)
{
setFlag(MULTI, enabled);
}
public void setMultiOK(boolean enabled)
{
setFlag(MULTI_OK, enabled);
}
public void setMultiDoublet(boolean enabled)
{
setFlag(MULTI_DOUBLET, enabled);
}
public void setMultiDoubletOK(boolean enabled)
{
setFlag(MULTI_DOUBLET_OK, enabled);
}
public void setDoublet(boolean enabled)
{
setFlag(DOUBLET, enabled);
}
public void setDoubletOK(boolean enabled)
{
setFlag(DOUBLET_OK, enabled);
}
public void setOK(boolean enabled)
{
setFlag(OK, enabled);
}
public boolean getMulti()
{
return getFlag(MULTI);
}
public boolean getMultiOK()
{
return getFlag(MULTI_OK);
}
public boolean getMultiDoublet()
{
return getFlag(MULTI_DOUBLET);
}
public boolean getMultiDoubletOK()
{
return getFlag(MULTI_DOUBLET_OK);
}
public boolean getDoublet()
{
return getFlag(DOUBLET);
}
public boolean getDoubletOK()
{
return getFlag(DOUBLET_OK);
}
public boolean getOK()
{
return getFlag(OK);
}
@Override
public String toString()
{
if (flags == 0)
return "None";
StringBuilder sb = new StringBuilder();
append(sb, getMulti(), "Multi");
append(sb, getMultiOK(), "MultiOK");
append(sb, getMultiDoublet(), "MultiDoublet");
append(sb, getMultiDoubletOK(), "MultiDoubletOK");
append(sb, getDoublet(), "Doublet");
append(sb, getDoubletOK(), "DoubletOK");
append(sb, getOK(), "OK");
if (sb.length() == 0)
return "None";
return sb.toString();
}
private void append(StringBuilder sb, boolean enabled, String name)
{
if (enabled)
{
if (sb.length() != 0)
sb.append("; ");
sb.append(name);
}
}
/*
* (non-Javadoc)
*
* @see java.lang.Object#clone()
*/
@Override
public FitType clone()
{
try
{
return (FitType) super.clone();
}
catch (CloneNotSupportedException e)
{
return null;
}
}
}