def read(self, transport, max_particles = 9000000, ):

		print ( "Reading binary boxes from " + transport.address )
		
		containers = {}
		if self.elemets_description:
			for element in self.elemets_description:
				containers[element] = ParticlesContainer(element, self.elemets_description[element]["atom_d"], self.elemets_description[element]["atom_mass"])
		else:
			containers = ParticlesContainer("Unknown", 1, 1)
		
		if self.elemets_description:
			print ("Created {} containers".format(len(containers)))
		particles_count = max_particles;
		
		raw_particles  = self.data_parser(transport).raw_particles(max_particles)
		
		n = raw_particles["n"]
		t = raw_particles["t"]
		x = raw_particles["x"]
		y = raw_particles["y"]
		z = raw_particles["z"]
		vx = raw_particles["vx"]
		vy = raw_particles["vy"]
		vz = raw_particles["vz"]
		particles_count = raw_particles["count"]

		if self.elemets_description:
			for element in self.elemets_description:
				print "Filtering by type ", element
				containers[element].set_particles(n[t == self.elemets_description[element]["id"]], 
												 x[t == self.elemets_description[element]["id"]],
												 y[t == self.elemets_description[element]["id"]],
												 z[t == self.elemets_description[element]["id"]], 
												 vx[t == self.elemets_description[element]["id"]],
												 vy[t == self.elemets_description[element]["id"]],
												 vz[t == self.elemets_description[element]["id"]])

				print "Finalizing ", element
				containers[element].finalize()
				print ("Readed [{}] {} particles".format(len(containers[element].n),element))
		
		else:
			print "Finalizing"
			containers.set_particles(n, x, y, z, vx, vy, vz)
			containers.finalize()
			print ("Readed [{}] particles".format(len(containers.n)))
			
		print "returning"
		return containers