.. _PhysiCell_java_CancerImmune_CancerImmunityVisualizer_java: CancerImmunityVisualizer.java ============================= .. role:: raw-html(raw) :format: html .. raw:: html .. code-block:: console import java.awt.Color; import ru.biosoft.physicell.core.Cell; import ru.biosoft.physicell.core.PhysiCellConstants; import ru.biosoft.physicell.ui.AgentColorer; public class CancerImmunityVisualizer implements AgentColorer { @Override public Color[] findColors(Cell cell) { int oncoproteinIndex = cell.customData.findVariableIndex( "oncoprotein" ); Color[] output = new Color[] {Color.black, Color.black, Color.black, Color.black}; // immune are black if( cell.type == 1 ) { Color lime = new Color( 50, 205, 50 ); return new Color[] {lime, lime, Color.green, Color.green}; } // if I'm under attack, color me if( cell.state.attachedCells.size() > 0 ) { output[0] = Color.cyan.darker(); // orangered // "purple"; // 128,0,128 output[2] = Color.cyan; // "magenta"; //255,0 } // live cells are green, but shaded by oncoprotein value if( !cell.phenotype.death.dead ) { int oncoprotein = (int)Math.round( 0.5 * cell.customData.get( oncoproteinIndex ) * 255.0 ); Color c = new Color( oncoprotein, oncoprotein, 255 - oncoprotein ); output[0] = c; output[1] = c; output[2] = new Color( oncoprotein / 2, oncoprotein / 2, ( 255 - oncoprotein ) / 2 ); return output; } // if not, dead colors if( cell.phenotype.cycle.currentPhase().code == PhysiCellConstants.apoptotic ) // Apoptotic - Red { output[0] = new Color( 255, 0, 0 ); output[2] = new Color( 125, 0, 0 ); return output; } // Necrotic - Brown if( cell.phenotype.cycle.currentPhase().code == PhysiCellConstants.necrotic_swelling || cell.phenotype.cycle.currentPhase().code == PhysiCellConstants.necrotic_lysed || cell.phenotype.cycle.currentPhase().code == PhysiCellConstants.necrotic ) { output[0] = new Color( 250, 138, 38 ); output[0] = new Color( 139, 69, 19 ); return output; } return output; } }