general particle class