diff --git a/c_tools/stacking/pruneVoids.cpp b/c_tools/stacking/pruneVoids.cpp index 08212d5..ddaae9a 100644 --- a/c_tools/stacking/pruneVoids.cpp +++ b/c_tools/stacking/pruneVoids.cpp @@ -1102,12 +1102,11 @@ void outputVoids(string outputDir, string sampleName, string prefix, outCenter[1] = outVoid.barycenter[1]; outCenter[2] = outVoid.barycenter[2]; - if (isObservation) { - outCenter[0] = (outVoid.barycenter[0]-boxLen[0]/2.)*100.; - outCenter[1] = (outVoid.barycenter[1]-boxLen[1]/2.)*100.; - outCenter[2] = (outVoid.barycenter[2]-boxLen[2]/2.)*100.; - } - + //if (isObservation) { + // outCenter[0] = (outVoid.barycenter[0]-boxLen[0]/2.)*100.; + // outCenter[1] = (outVoid.barycenter[1]-boxLen[1]/2.)*100.; + // outCenter[2] = (outVoid.barycenter[2]-boxLen[2]/2.)*100.; + //} fprintf(fpZobov, "%d %d %d %f %f %d %d %f %d %f %f\n", iVoid, diff --git a/python_tools/void_python_tools/__init__.py b/python_tools/void_python_tools/__init__.py index 5dd3665..fd37450 100644 --- a/python_tools/void_python_tools/__init__.py +++ b/python_tools/void_python_tools/__init__.py @@ -21,3 +21,4 @@ from void_python_tools.backend import * from void_python_tools.apTools import * from void_python_tools.plotting import * from void_python_tools.xcor import * +from void_python_tools.partUtil import * diff --git a/python_tools/void_python_tools/partUtil/__init__.py b/python_tools/void_python_tools/partUtil/__init__.py new file mode 100644 index 0000000..7e0c1f8 --- /dev/null +++ b/python_tools/void_python_tools/partUtil/__init__.py @@ -0,0 +1,20 @@ +#+ +# VIDE -- Void IDentification and Examination -- ./python_tools/void_python_tools/plotting/__init__.py +# Copyright (C) 2010-2013 Guilhem Lavaux +# Copyright (C) 2011-2013 P. M. Sutter +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +#+ +from partUtil import * diff --git a/python_tools/void_python_tools/partUtil/partUtil.py b/python_tools/void_python_tools/partUtil/partUtil.py new file mode 100644 index 0000000..7444939 --- /dev/null +++ b/python_tools/void_python_tools/partUtil/partUtil.py @@ -0,0 +1,127 @@ +#+ +# VIDE -- Void IDentification and Examination -- ./python_tools/void_python_tools/plotting/__init__.py +# Copyright (C) 2010-2013 Guilhem Lavaux +# Copyright (C) 2011-2013 P. M. Sutter +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +#+ + +# Various utilities for loading and modifying particle datasets + +import numpy as np +from netCDF4 import Dataset +import sys +from void_python_tools.backend import * +import void_python_tools.apTools as vp + +NetCDFFile = Dataset +ncFloat = 'f8' + +# ----------------------------------------------------------------------------- +def loadPart(workDir, sampleDir, sample): + #print " Loading particle data..." + sys.stdout.flush() + + infoFile = workDir+"/"+sampleDir+"/zobov_slice_"+sample.fullName+".par" + File = NetCDFFile(infoFile, 'r') + ranges = np.zeros((3,2)) + ranges[0][0] = getattr(File, 'range_x_min') + ranges[0][1] = getattr(File, 'range_x_max') + ranges[1][0] = getattr(File, 'range_y_min') + ranges[1][1] = getattr(File, 'range_y_max') + ranges[2][0] = getattr(File, 'range_z_min') + ranges[2][1] = getattr(File, 'range_z_max') + isObservation = getattr(File, 'is_observation') + maskIndex = getattr(File, 'mask_index') + File.close() + mul = np.zeros((3)) + mul[:] = ranges[:,1] - ranges[:,0] + + partFile = workDir+"/"+sampleDir+"/zobov_slice_"+sample.fullName + iLine = 0 + partData = [] + part = np.zeros((3)) + File = file(partFile) + chk = np.fromfile(File, dtype=np.int32,count=1) + Np = np.fromfile(File, dtype=np.int32,count=1) + chk = np.fromfile(File, dtype=np.int32,count=1) + + chk = np.fromfile(File, dtype=np.int32,count=1) + x = np.fromfile(File, dtype=np.float32,count=Np) + x *= mul[0] + if isObservation != 1: + x += ranges[0][0] + chk = np.fromfile(File, dtype=np.int32,count=1) + + chk = np.fromfile(File, dtype=np.int32,count=1) + y = np.fromfile(File, dtype=np.float32,count=Np) + y *= mul[1] + if isObservation != 1: + y += ranges[1][0] + chk = np.fromfile(File, dtype=np.int32,count=1) + + chk = np.fromfile(File, dtype=np.int32,count=1) + z = np.fromfile(File, dtype=np.float32,count=Np) + z *= mul[2] + if isObservation != 1: + z += ranges[2][0] + chk = np.fromfile(File, dtype=np.int32,count=1) + File.close() + + if isObservation == 1: + x = x[0:maskIndex]# * 100/300000 + y = y[0:maskIndex]# * 100/300000 + z = z[0:maskIndex]# * 100/300000 + + partData = np.column_stack((x,y,z)) + + boxLen = mul + + if isObservation == 1: + props = vp.getSurveyProps(sample.maskFile, sample.zBoundary[0], + sample.zBoundary[1], + sample.zBoundary[0], + sample.zBoundary[1], "all", + useLCDM=sample.useLCDM) + boxVol = props[0] + volNorm = maskIndex/boxVol + else: + boxVol = np.prod(boxLen) + volNorm = len(x)/boxVol + + isObservationData = isObservation == 1 + + return partData, boxLen, volNorm, isObservationData + +# ----------------------------------------------------------------------------- +def shiftPart(inPart, newCenter, periodicLine, boxLen): + + part = inPart.copy() + + part[:,0] -= newCenter[0] + part[:,1] -= newCenter[1] + part[:,2] -= newCenter[2] + + shiftUs = np.abs(part[:,0]) > boxLen[0]/2. + if ("x" in periodicLine): part[shiftUs,0] -= \ + np.copysign(boxLen[0], part[shiftUs,0]) + shiftUs = np.abs(part[:,1]) > boxLen[1]/2. + if ("y" in periodicLine): part[shiftUs,1] -= \ + np.copysign(boxLen[1], part[shiftUs,1]) + shiftUs = np.abs(part[:,2]) > boxLen[2]/2. + if ("z" in periodicLine): part[shiftUs,2] -= \ + np.copysign(boxLen[2], part[shiftUs,2]) + + return part