• fullscreen
  • NEUTRINO_SIMULATION_SHVARTSMAN_RON.pde
  • PARTICLE_CLASS.pde
  • //Data obtained from: R. Abbasi et al., Phys. Rev. D 79, 062001 (2009).
    //Drawing created by Ron F. Shvartsman in the Generative Design Processes Course at SCI-Arc.
    //Instructed by Jeremy Rotsztain.
    
    //This drawing is a study of Neutrino Data and and its behavorial relationships through a course
    //undertaken at SCI-Arc Post-Graduate MediaSCAPES Program.
    
    //import processing.video.*;
    import peasy.test.*;
    import peasy.org.apache.commons.math.*;
    import peasy.*;
    import peasy.org.apache.commons.math.geometry.*;
    
    //MovieMaker mm;
    PeasyCam cam;
    
    Particle particleSystem;
    float numFrames = 5000;
    float lon;
    float lat;
    int energy;
    float direction;
    
    //declare data arrays
    float[] dataDEC;
    float[] dataRA;
    int[] dataNRG;
    float[] dataDIR;
    
    void setup() {
      size(900,900,P3D);
      //mm = new MovieMaker(this, 900, 900, "neutrino_cloud.mov", 24, MovieMaker.JPEG, MovieMaker.LOSSLESS);
      smooth();
      cam = new PeasyCam(this, 100);
      cam.setMinimumDistance(10);
      cam.setMaximumDistance(5000);
    
    
      //strokeWeight(0);
      noFill();
      stroke(255);
      strokeWeight(1);
    
      particleSystem = new Particle(lon,lat,energy,direction);
    
      //Load text file as a String
      String[] DEC = loadStrings("DEC.txt");
      String[] RA = loadStrings("RA.txt");
      String[] NRG = loadStrings("NRG.txt");
      String[] DIR = loadStrings("DIR.TXT");
    
      //Convert string into an array of integers
      //using ',' as a delimiter
      dataDEC = float(split(DEC[0],','));
      dataRA = float(split(RA[0],','));
      dataNRG = int(split(NRG[0],','));
      dataDIR = float(split(DIR[0],','));
    
      //println(DEC);
      //println(RA);
      //println(NRG);
    }
    
    void draw() {
      rotateX(-.5);
      rotateY(-.5);
      background(0);
      fill(255,0,0);
      pushMatrix();
      fill(0,0,255);
      popMatrix();
      background(0);
      particleSystem.drawData();
      //if (frameCount <= numFrames) {
      //saveFrame("dataStills=####.png");
      //}
      //mm.addFrame();
    }
    
    
    
    class Particle {
    
      float lat;
      float lon;
      int energy;
      float direction;
    
      Particle(float latp, float lonp, int energyp, float directionp) {
        latp = lat;
        lonp = lon;
        energyp = energy;
        directionp = direction;
      }
    
      void drawData() {
    
    
        //loop through data elements
        for (int i = 0; i<6595; i+=1) {
          float lon = dataDEC[i]*8;
          float lat = dataRA[i]*8;
          int energy = dataNRG[i]*8;
          float dir = dataDIR[i]*8;
    
          //convert degrees to radians
          float radLon = radians(lon);
          float radLat = radians(lat);
          float radDir = radians(dir);
          //println(radLat);
    
          //convert to spherical coordinates
          float x = (energy) * cos(radLat) * sin(radLon);
          float y = (energy) * sin(radLat) * sin(radLon);
          float z = (energy) * cos(radLon);
    
          //create points based on new spherical data coordinates
          stroke(255,255,255,20);
          beginShape(POINTS);
          vertex(x,y,z);
          endShape();
    
          //move poimts based on their angular resolution if they have energy
          if (energy > 0) {
            dataDEC[i]=dataDEC[i]+dataDIR[i]/20;
            dataRA[i]=dataRA[i]+dataDIR[i]/20;
          }
    
          //measure the distance between original data and spherical points
          float d = dist(dataDEC[i],dataRA[i],dataDIR[i],x,y,z);
          stroke(160,0,0,100);
    
          //if the distance is less than 1000 draw a line and alter angular resolution
          if (d>1000) {
            line(dataDEC[i],dataRA[i],dataDIR[i],x,y,z);
            x=x*-1;
            y=y*-2;
            z=z*-3;
          }
    
          //if the distance is less than 2000 draw a line and alter angular resolution
          if (d>2000) {
            dataDEC[i]*=-1;
          }
    
          //if the distance is less than 2000 draw a line and alter angular resolution
          if (d>3000) {
            dataDIR[i]*=-1;
          }
        }
      }
    }
    
    

    code

    tweaks (0)

    about this sketch

    This sketch is running as Java applet, exported from Processing.

    license

    advertisement

    Ron Shvartsman

    Neutrino Simulation

    Add to Faves Me Likey@! 2
    You must login/register to add this sketch to your favorites.

    //Data obtained from: R. Abbasi et al., Phys. Rev. D 79, 062001 (2009).
    //Drawing created by Ron F. Shvartsman in the Generative Design Processes Course at SCI-Arc.
    //Instructed by Jeremy Rotsztain.

    //This drawing is a study of Neutrino Data and and its behavorial relationships through a course
    //undertaken at SCI-Arc Post-Graduate MediaSCAPES Program.

    You need to login/register to comment.