[neutron-mc] Error in component Source_simple.comp ?
Frederik Zilly
zilly at hmi.de
Wed Feb 15 16:01:04 CET 2006
Hello Peter !
Thank you very much for your quick answer.
Indeed, I must have been blind not seeing the square root.
With this square root everything is alright as your jpg shows.
Sorry for this "false alarm".
Cheers,
Frederik.
Peter Willendrup wrote:
> Hello Frederik,
>
> On Tue, 2006-02-14 at 16:12 +0100, Frederik Zilly wrote:
>
>>Points near the center have greater probility than points with a higher
>>radius.
>
>
> Actually, this is not the case. The square root actually gives zero
> probability for points exactly at the origin; more events must be
> distributed over a circular area element at the circle perimeter than
> at the center to achieve a uniform distribution.
>
> I wrote up a few lines of matlab code to show this in graphics (you need
> the attached hist2d code to reproduce the attached graphics):
>
> chi=2*pi*rand(1e6,1);
> r=sqrt(rand(1e6,1)); % Source radius assumed one metre
> x=r.*cos(chi);
> y=r.*sin(chi);
> mXY=[x y];
> vXEdge = linspace(-1,1,128);
> vYEdge = linspace(-1,1,128);
> img=hist2d(mXY,vXEdge,vYEdge);
> imagesc(img);
>
> As you can see in the jpg graphic, the result of the above code (which
> is equvalent to the c-code in Source_simple) is completely uniform
> across the source area.
>
> Hope this helps?
>
>
> Cheers,
>
> Peter
>
>
> ------------------------------------------------------------------------
>
> %function mHist = hist2d ([vY, vX], vYEdge, vXEdge)
> %2 Dimensional Histogram
> %Counts number of points in the bins defined by vYEdge, vXEdge.
> %size(vX) == size(vY) == [n,1]
> %size(mHist) == [length(vYEdge) -1, length(vXEdge) -1]
> %
> %EXAMPLE
> % mYX = rand(100,2);
> % vXEdge = linspace(0,1,10);
> % vYEdge = linspace(0,1,20);
> % mHist2d = hist2d(mYX,vYEdge,vXEdge);
> %
> % nXBins = length(vXEdge);
> % nYBins = length(vYEdge);
> % vXLabel = 0.5*(vXEdge(1:(nXBins-1))+vXEdge(2:nXBins));
> % vYLabel = 0.5*(vYEdge(1:(nYBins-1))+vYEdge(2:nYBins));
> % pcolor(vXLabel, vYLabel,mHist2d); colorbar
> function mHist = hist2d (mX, vYEdge, vXEdge)
> [nRow, nCol] = size(mX);
> if nCol < 2
> error ('mX has less than two columns')
> end
>
> nRow = length (vYEdge)-1;
> nCol = length (vXEdge)-1;
>
> vRow = mX(:,1);
> vCol = mX(:,2);
>
> mHist = zeros(nRow,nCol);
>
> for iRow = 1:nRow
> rRowLB = vYEdge(iRow);
> rRowUB = vYEdge(iRow+1);
>
> [mIdxRow] = find (vRow > rRowLB & vRow <= rRowUB);
> vColFound = vCol(mIdxRow);
>
> if (~isempty(vColFound))
>
>
> vFound = histc (vColFound, vXEdge);
>
> nFound = (length(vFound)-1);
>
> if (nFound ~= nCol)
> [nFound nCol]
> error ('hist2d error: Size Error')
> end
>
> [nRowFound, nColFound] = size (vFound);
>
> nRowFound = nRowFound - 1;
> nColFound = nColFound - 1;
>
> if nRowFound == nCol
> mHist(iRow, :)= vFound(1:nFound)';
> elseif nColFound == nCol
> mHist(iRow, :)= vFound(1:nFound);
> else
> error ('hist2d error: Size Error')
> end
> end
>
> end
>
>
>
>
> ------------------------------------------------------------------------
>
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> neutron-mc mailing list
> neutron-mc at risoe.dk
> http://mailman.risoe.dk/mailman/listinfo/neutron-mc
More information about the mcstas-users
mailing list