3.2. Artificial Differential Phosphorylation To generate synthesized arrays with known differentially phosphorylated peptides, we need a procedure to artificially phosphorylate or dephosphorylate a predetermined subset of peptides on an array. Here we propose a procedure to do this to array Y, which is an inter-array technical replicate of X, producing Y′. The procedure is described in technical detail in Algorithm 2 as the basis for rapid implementation. Algorithm 2 Artificial Phosphorylation/Dephosphorylation  Input:A={A1,⋯,An}, X, Y, peptideIndex, phosphorylated, T, α  Output: Y′  Create measurement repository set R R=ri,j∣1≤i≤n,1≤j≤mri,j={pi,j,k∣1≤k≤l}  where ri,j is the set of all intra-array replicates of the jth peptide of Ai  Y′← a copy of Y  q←1  while (q≤ length(peptideIndex)) do   t←peptideIndex[q]   abct←∑k=1lFxt,k−Bxt,kl   if abct≤0 then    v=abctT    w=abct×T   else    v=T×abct    w=abctT   end if   if (phosphorylated[t] =1) then    if (there is a ri,j∈R where the mean of ri,j is statistically bigger than v, considering a significance level of α) then     yt′←ri,j    else     Report tth peptide as a non-differentially phosphorylated peptide    end if   else    if (there is a ri,j∈R where the mean of ri,j is statistically less than w, considering a significance level of α) then     yt′←ri,j    else     Report tth peptide as a non-differentially phosphorylated peptide    end if   end if   q←q+1  end while  return Y′ In the Algorithm, {A1,⋯,An} is a set of n kinome arrays, each containing m peptides and l within-array technical replicates for each peptide; X and Y are two inter-array technical replicates and are denoted by X={xi∣1≤i≤m} and Y={yi∣1≤i≤m}, respectively; peptideIndex is a vector containing the indices of candidate peptides on Y to be (de)phosphorylated; phosphorylated is a binary vector with the same length as peptideIndex that shows the type of phosphorylation; T is a threshold value for significant fold-change; and finally α is a preferred significant level. In vector phosphorylated a value of 1 indicates phosphorylation while a value of 0 signifies dephosphorylation. It should be noted that Y′ is not a technical replicate of X or of Y. Algorithm 2 takes X and Y as input parameters and returns Y′, which is a modified version of Y. Like Algorithm 1, Algorithm 2 creates a repository of kinome array measurements. For all t (1≤t≤m), if t∉peptideIndex , then yt′ must not be differentially phosphorylated and therefore yt′=yt. For each t∈peptideIndex, to phosphorylate a peptide Algorithm 2 tries to select a ri,j∈R where ri,j has an upward fold-change bigger than T in comparison to xt, and to dephosphorylate a peptide, tries to select a ri,j∈R where ri,j has a downward fold-change less than 1T in comparison to xt. The entire set of the l replicates, i.e., xt, is replaced by the set of l replicates of the chosen replacement peptide, ri,j, which includes raw foreground and background intensity values. It should be noted that in some cases it may not be possible to find an ri,j∈R that is differentially phosphorylated in comparison to xt. This may happen because of a small and incomprehensive repository or because of an attempt to (de)phosphorylate a peptide that is highly (de)phosphorylated and further (de)phosphorylation is not possible. In this case, Algorithm 2 reports the peptide as not differentially phosphorylated and the value for yt′ remains unchanged. Real kinome data tends to have approximately 10% to 15% of probes differentially phosphorylated [13,24,25]. Thus users should not specify a parameter peptideIndex with cardinality that is more than about 15% of the number of probes on template array X.