private static SixJSymbol[] GenerateRandomSixJSymbols(double j_max, int n) { int tj_max = (int)Math.Truncate(2.0 * j_max); SixJSymbol[] symbols = new SixJSymbol[n]; Random rng = new Random(1); int i = 0; while (i < n) { //for (int i = 0; i < n; i++) { // pick 1, 4, and 2 randomly int tj1 = rng.Next(tj_max + 1); int tj4 = rng.Next(tj_max + 1); int tj2 = rng.Next(tj_max + 1); // make sure 5 has appropriate wholess so that 1+2 has same wholeness as 4+5 int tj5 = rng.Next(tj_max + 1); if (((tj1 + tj2) % 2) != ((tj4 + tj5) % 2)) { tj5++; } // make sure 3 can be formed from 1+2 or 4+5 int tj12_min = Math.Abs(tj1 - tj2); int tj45_min = Math.Abs(tj4 - tj5); int tj3_min; if (tj12_min > tj45_min) { tj3_min = tj12_min; } else { tj3_min = tj45_min; } int tj12_max = tj1 + tj2; int tj45_max = tj4 + tj5; int tj3_max; if (tj12_max < tj45_max) { tj3_max = tj12_max; } else { tj3_max = tj45_max; } if (tj3_min > tj3_max) { continue; } int tj3 = tj3_min + 2 * rng.Next((tj3_max - tj3_min) / 2 + 1); // make sure 6 can be formed from 1+5 or 4+2 int tj15_min = Math.Abs(tj1 - tj5); int tj42_min = Math.Abs(tj4 - tj2); int tj6_min; if (tj15_min > tj42_min) { tj6_min = tj15_min; } else { tj6_min = tj42_min; } int tj15_max = tj1 + tj5; int tj42_max = tj4 + tj2; int tj6_max; if (tj15_max < tj42_max) { tj6_max = tj15_max; } else { tj6_max = tj42_max; } if (tj6_min > tj6_max) { continue; } int tj6 = tj6_min + 2 * rng.Next((tj6_max - tj6_min) / 2 + 1); // make the symbol SixJSymbol symbol = new SixJSymbol(); symbol.J1 = new Spin(tj1 / 2.0); symbol.J2 = new Spin(tj2 / 2.0); symbol.J3 = new Spin(tj3 / 2.0); symbol.J4 = new Spin(tj4 / 2.0); symbol.J5 = new Spin(tj5 / 2.0); symbol.J6 = new Spin(tj6 / 2.0); symbols[i] = symbol; i++; } return(symbols); }
private static SixJSymbol[] GenerateRandomSixJSymbols(double j_max, int n) { int tj_max = (int) Math.Truncate(2.0 * j_max); SixJSymbol[] symbols = new SixJSymbol[n]; Random rng = new Random(1); int i = 0; while (i < n) { //for (int i = 0; i < n; i++) { // pick 1, 4, and 2 randomly int tj1 = rng.Next(tj_max + 1); int tj4 = rng.Next(tj_max + 1); int tj2 = rng.Next(tj_max + 1); // make sure 5 has appropriate wholess so that 1+2 has same wholeness as 4+5 int tj5 = rng.Next(tj_max + 1); if (((tj1 + tj2) % 2) != ((tj4 + tj5) % 2)) tj5++; // make sure 3 can be formed from 1+2 or 4+5 int tj12_min = Math.Abs(tj1 - tj2); int tj45_min = Math.Abs(tj4 - tj5); int tj3_min; if (tj12_min > tj45_min) { tj3_min = tj12_min; } else { tj3_min = tj45_min; } int tj12_max = tj1 + tj2; int tj45_max = tj4 + tj5; int tj3_max; if (tj12_max < tj45_max) { tj3_max = tj12_max; } else { tj3_max = tj45_max; } if (tj3_min > tj3_max) continue; int tj3 = tj3_min + 2 * rng.Next((tj3_max - tj3_min) / 2 + 1); // make sure 6 can be formed from 1+5 or 4+2 int tj15_min = Math.Abs(tj1 - tj5); int tj42_min = Math.Abs(tj4 - tj2); int tj6_min; if (tj15_min > tj42_min) { tj6_min = tj15_min; } else { tj6_min = tj42_min; } int tj15_max = tj1 + tj5; int tj42_max = tj4 + tj2; int tj6_max; if (tj15_max < tj42_max) { tj6_max = tj15_max; } else { tj6_max = tj42_max; } if (tj6_min > tj6_max) continue; int tj6 = tj6_min + 2 * rng.Next((tj6_max - tj6_min) / 2 + 1); // make the symbol SixJSymbol symbol = new SixJSymbol(); symbol.J1 = new Spin(tj1 / 2.0); symbol.J2 = new Spin(tj2 / 2.0); symbol.J3 = new Spin(tj3 / 2.0); symbol.J4 = new Spin(tj4 / 2.0); symbol.J5 = new Spin(tj5 / 2.0); symbol.J6 = new Spin(tj6 / 2.0); symbols[i] = symbol; i++; } return (symbols); }