def SimInt_ID1(FITPAR): TPARs=np.zeros([Trapnumber+1,2]) TPARs[:,0:2]=np.reshape(FITPAR[0:(Trapnumber+1)*2],(Trapnumber+1,2)) SPAR=FITPAR[Trapnumber*2+2:Trapnumber*2+5] (Coord)= CD.ID1CoordAssign(TPARs,SLD,Trapnumber,Pitch) F1 = CD.FreeFormTrapezoid(Coord[:,:,0],Qx,Qz,Trapnumber) M=np.power(np.exp(-1*(np.power(Qx,2)+np.power(Qz,2))*np.power(SPAR[0],2)),0.5) Formfactor=F1*M Formfactor=abs(Formfactor) SimInt = np.power(Formfactor,2)*SPAR[1]+SPAR[2] return (SimInt,Formfactor)
def Uncertainty1T(ReSampledMatrix): Xi = np.zeros([101, 2, len(ReSampledMatrix[:, 0])]) Yi = np.zeros([101, 1, len(ReSampledMatrix[:, 0])]) PopWidth = np.zeros([len(ReSampledMatrix[:, 0])]) PopHeight = np.zeros([len(ReSampledMatrix[:, 0])]) TrapHeight = np.zeros([Trapnumber + 1, len(ReSampledMatrix[:, 0])]) for PopNumber in range(len(ReSampledMatrix[:, 0])): TPARU = np.zeros([Trapnumber + 1, 2]) TPARU[:, 0:2] = np.reshape( ReSampledMatrix[PopNumber, 0:(Trapnumber + 1) * 2], (Trapnumber + 1, 2)) (CoordUnc) = CD.ID1CoordAssign(TPARU, SLD, Trapnumber, Pitch) for i in np.arange(1, Trapnumber + 1, 1): TrapHeight[i, PopNumber] = TrapHeight[i - 1, PopNumber] + TPARU[i - 1, 1] for LineNumber in range(1): EffTrapnumber = 0 #LeftSide X1L = CoordUnc[EffTrapnumber, 0, LineNumber] X2L = CoordUnc[EffTrapnumber + 1, 0, LineNumber] X1R = CoordUnc[EffTrapnumber, 1, LineNumber] X2R = CoordUnc[EffTrapnumber + 1, 1, LineNumber] Y1 = TrapHeight[EffTrapnumber, PopNumber] Y2 = TrapHeight[EffTrapnumber + 1, PopNumber] Disc = 0 for c in np.arange(0, 101, 1): if Disc > Y2 and Disc < TrapHeight[Trapnumber, PopNumber]: EffTrapnumber = EffTrapnumber + 1 X1L = CoordUnc[EffTrapnumber, 0, LineNumber] X2L = CoordUnc[EffTrapnumber + 1, 0, LineNumber] X1R = CoordUnc[EffTrapnumber, 1, LineNumber] X2R = CoordUnc[EffTrapnumber + 1, 1, LineNumber] Y1 = TrapHeight[EffTrapnumber, PopNumber] Y2 = TrapHeight[EffTrapnumber + 1, PopNumber] ML = (Y2 - Y1) / (X2L - X1L) MR = (Y2 - Y1) / (X2R - X1R) BL = Y1 - ML * X1L BR = Y1 - MR * X1R Xi[c, 0, PopNumber] = (Disc - BL) / ML Xi[c, 1, PopNumber] = (Disc - BR) / MR Yi[c, 0, PopNumber] = Disc Disc = Disc + TrapHeight[Trapnumber, PopNumber] / 100 Xi[:, :, PopNumber] = Xi[:, :, PopNumber] - (Xi[0, 1, PopNumber] - Xi[0, 0, PopNumber]) / 2 PopWidth[PopNumber] = Xi[50, 1, PopNumber] - Xi[50, 0, PopNumber] PopHeight[PopNumber] = Yi[100, 0, PopNumber] S = np.std(Xi, 2) * 1.96 Center = np.average(Xi, 2) Sy = np.std(Yi, 2) * 1.96 YC = np.average(Yi, 2) OuterEdge = Center YInner = YC - Sy YOuter = YC + Sy OuterEdge[:, 0] = OuterEdge[:, 0] - S[:, 0] OuterEdge[:, 1] = OuterEdge[:, 1] + S[:, 1] InnerEdge = Center InnerEdge[:, 0] = InnerEdge[:, 0] + S[:, 0] InnerEdge[:, 1] = InnerEdge[:, 1] - S[:, 1] LinePlot = np.zeros([2 * 101, 2]) InnerPlot = np.zeros([2 * 101, 2]) OuterPlot = np.zeros([2 * 101, 2]) LinePlot[0:101, 0] = Center[:, 0] LinePlot[101:202, 0] = np.flipud(Center[:, 1]) LinePlot[0:101, 1] = YC[:, 0] LinePlot[101:202, 1] = np.flipud(YC[:, 0]) InnerPlot[0:101, 0] = InnerEdge[:, 0] InnerPlot[101:202, 0] = np.flipud(InnerEdge[:, 1]) InnerPlot[0:101, 1] = YInner[:, 0] InnerPlot[101:202, 1] = np.flipud(YInner[:, 0]) OuterPlot[0:101, 0] = OuterEdge[:, 0] OuterPlot[101:202, 0] = np.flipud(OuterEdge[:, 1]) OuterPlot[0:101, 1] = YOuter[:, 0] OuterPlot[101:202, 1] = np.flipud(YOuter[:, 0]) vi = np.zeros([100, 1]) vo = np.zeros([100, 1]) vc = np.zeros([100, 1]) for l in np.arange(1, 1 + 0.0001, 2): for h in np.arange(1, 101, 1): vi[h - 1, l / 2] = 0.5 * (YInner[h, l - 1] - YInner[h - 1, l - 1]) * ( (InnerEdge[h - 1, l] - InnerEdge[h - 1, l - 1]) + (InnerEdge[h, l] - InnerEdge[h, l - 1])) vo[h - 1, l / 2] = 0.5 * (YOuter[h, l - 1] - YOuter[h - 1, l - 1]) * ( (OuterEdge[h - 1, l] - OuterEdge[h - 1, l - 1]) + (OuterEdge[h, l] - OuterEdge[h, l - 1])) vc[h - 1, l / 2] = 0.5 * (YC[h, l - 1] - YC[h - 1, l - 1]) * ( (Center[h - 1, l] - Center[h - 1, l - 1]) + (Center[h, l] - Center[h, l - 1])) vd = vo - vi vt = np.sum(vd) vct = np.sum(vc) WidthAvg = np.average(PopWidth) HeightAvg = np.average(PopHeight) WidthStd = np.std(PopWidth) HeightStd = np.std(PopHeight) viLower = np.zeros([10, 1]) voLower = np.zeros([10, 1]) vcLower = np.zeros([10, 1]) for l in np.arange(1, 1 + 0.0001, 2): for h in np.arange(1, 11, 1): viLower[h - 1, l / 2] = 0.5 * (YInner[h, l - 1] - YInner[h - 1, l - 1]) * ( (InnerEdge[h - 1, l] - InnerEdge[h - 1, l - 1]) + (InnerEdge[h, l] - InnerEdge[h, l - 1])) voLower[h - 1, l / 2] = 0.5 * (YOuter[h, l - 1] - YOuter[h - 1, l - 1]) * ( (OuterEdge[h - 1, l] - OuterEdge[h - 1, l - 1]) + (OuterEdge[h, l] - OuterEdge[h, l - 1])) vcLower[h - 1, l / 2] = 0.5 * (YC[h, l - 1] - YC[h - 1, l - 1]) * ( (Center[h - 1, l] - Center[h - 1, l - 1]) + (Center[h, l] - Center[h, l - 1])) vdLower = voLower - viLower vtLower = np.sum(vdLower) vctLower = np.sum(vcLower) viUpper = np.zeros([10, 1]) voUpper = np.zeros([10, 1]) vcUpper = np.zeros([10, 1]) for l in np.arange(1, 1 + 0.0001, 2): for h in np.arange(91, 101, 1): viUpper[h - 91, l / 2] = 0.5 * (YInner[h, l - 1] - YInner[h - 1, l - 1]) * ( (InnerEdge[h - 1, l] - InnerEdge[h - 1, l - 1]) + (InnerEdge[h, l] - InnerEdge[h, l - 1])) voUpper[h - 91, l / 2] = 0.5 * (YOuter[h, l - 1] - YOuter[h - 1, l - 1]) * ( (OuterEdge[h - 1, l] - OuterEdge[h - 1, l - 1]) + (OuterEdge[h, l] - OuterEdge[h, l - 1])) vcUpper[h - 91, l / 2] = 0.5 * (YC[h, l - 1] - YC[h - 1, l - 1]) * ( (Center[h - 1, l] - Center[h - 1, l - 1]) + (Center[h, l] - Center[h, l - 1])) vdUpper = voUpper - viUpper vtUpper = np.sum(vdUpper) vctUpper = np.sum(vcUpper) RA = vt / vct RAL = vtLower / vctLower RAU = vtUpper / vctUpper return (vt, vct, RA, vtLower, vctLower, RAL, vtUpper, vctUpper, RAU, WidthAvg, HeightAvg, WidthStd, HeightStd, LinePlot, InnerPlot, OuterPlot)
SPAR[2] = Bk W = Param[SampleNumber, 0] H = Param[SampleNumber, 1] WidthLoad = 'W' + str(int(W)) + '.txt' HeightLoad = 'H' + str(int(H)) + '.txt' Width = np.loadtxt(WidthLoad) Height = np.loadtxt(HeightLoad) TPAR[:, 0] = Width TPAR[:, 1] = Height SLD[0, 0] = SLD1 SLD[1, 0] = SLD1 SLD[2, 0] = SLD1 SLD[3, 0] = SLD1 Coord = CD.ID1CoordAssign(TPAR, SLD, Trapnumber, Pitch) #CDp.plotID1(Coord,Trapnumber,Pitch) (FITPAR, FITPARLB, FITPARUB) = CD.PBA_ID1(TPAR, SPAR, Trapnumber) R = np.random.normal(0, 0.225, [len(Qx[:, 0]), len(Qx[0, :])]) (Intensity, Amplitude) = SimInt_ID1(FITPAR) N = (1 / (np.power(Intensity, 0.5))) * Intensity # Generates noise N = N * R Intensity2 = Intensity + R # Applies Noise C = CD.Misfit(Intensity, Intensity2) Chi2 = np.sum((C)) MCPAR = np.zeros([7])