/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package Paparamborde.Sample; import Paparamborde.Layer.Layer; import Paparamborde.STIMspectra.STIMspectra; import java.util.ArrayList; /** * * @author deves, CENBG */ public class Sample extends Layer{ //declaration ArrayList <Layer> sample = new ArrayList <Layer>(); ArrayList <Integer> counts=new ArrayList <Integer>(); float [] layerMass=new float[6]; //constructor public Sample(){ } public Sample (int nLayers){ for (int i=0;i<nLayers;i++) { sample.add(new Layer()); } counts.add(new Integer(0)); } //Setters public void setLayers(Layer layer1,Layer layer2){ sample.add(layer1); sample.add(layer2); } public void setLayer (int nLayer, Layer layer){ sample.set(nLayer, layer); } public void setCounts(STIMspectra spectra){ this.counts=(ArrayList<Integer>)spectra.getCountsArray().clone(); } public void setLayerMPC(int nLayer, ArrayList <Float> MPC){ sample.get(nLayer).setMPCArray(MPC); } //Getters public Layer getLayer(int nLayer){ return sample.get(nLayer); } public int getNLayers(){ return sample.size(); } public float getChannelMass(int layer, int channel){ return sample.get(layer).getMPC(channel); } public float getMass(int nLayer){ float t=0; for (int i=1;i<sample.get(nLayer).getMPCArray().size();i++){ t+=sample.get(nLayer).getMPC(i)*counts.get(i); } return (t/getNCounts()); } public float getShiftedMass(ArrayList <Float> MPC, int shift){ float t=0; for (int i=0;i<MPC.size()-shift;i++) t+=MPC.get(i+shift)*counts.get(i); return t/getNCounts(); } public float getCorrectedMass(ArrayList <Float> MPC, int shift){ float t=0; for (int i=shift;i<MPC.size();i++) t+=MPC.get(i)*counts.get(i-shift); return t/getNCounts(); } public float [] getMass(int nLayer, float limit){ layerMass[1]=0; layerMass[2]=0; ArrayList <Float> t0=(ArrayList<Float>)(sample.get(0).getMPCArray()).clone(); ArrayList <Float> t1=(ArrayList<Float>)(sample.get(1).getMPCArray()).clone(); ArrayList <Float> dt0= new ArrayList<Float>(); ArrayList <Float> dt1= new ArrayList<Float>(); //initialize for (int i=0;i<t0.size()-1;i++) { if (t0.get(i)>0) dt0.add(t0.get(i)-t0.get(i+1)); else dt0.add((float)0); } dt0.add((float)0); for (int i=0;i<t1.size()-1;i++) { if (t1.get(i)>0) dt1.add(t1.get(i)-t1.get(i+1)); else dt1.add((float)0); } dt1.add((float)0); //starting mass with only support for (int i=0;i<t1.size();i++) layerMass[2]=layerMass[2]+t1.get(i)*counts.get(i); layerMass[2]/=getNCounts(); int start=1; while (layerMass[2]>limit){ for (int i=t1.size()-1;i>0;i--){ if (i>(t1.size()-1-start)) t1.set(i, t0.get(i)); else if (t1.get(i)>0) t1.set(i, t1.get(i+1)+dt1.get(i)); } for (int i=0;i<t1.size();i++) layerMass[2]=layerMass[2]+t1.get(i)*counts.get(i); layerMass[2]/=getNCounts(); layerMass[1]=t0.get(t1.size()-start); layerMass[2]-=layerMass[1]; start+=1; } layerMass[0]=start; //******************************************************************** //second way to calculate //******************************************************************** /* layerMass[5]=0; t0=(ArrayList<Float>)(sample.get(0).getMPCArray()).clone(); //starting mass with only support for (int i=0;i<t1.size();i++) layerMass[4]=layerMass[4]+t0.get(i)*counts.get(i); layerMass[4]/=getNCounts(); start=1; while ((layerMass[5]<limit)&&(layerMass[4]>0)){ layerMass[5]=getCorrectedMass(sample.get(0).getMPCArray(),0)-getCorrectedMass(sample.get(0).getMPCArray(),start); layerMass[4]=getCorrectedMass(sample.get(0).getMPCArray(),start); start+=1; } layerMass[3]=start; */ return layerMass; } public float getNCounts(){ float t=0; for (int i=1;i<counts.size();i++) t+=counts.get(i); return t; } //Methods public void clear(){ sample.clear(); counts.clear(); } public int addNLayers(int nLayer){ for (int i=0;i<nLayer;i++) sample.add(new Layer()); if (counts.isEmpty()) counts.add(new Integer(0)); return sample.size(); } public void addLayer(Layer layer){ sample.add(layer); if (counts.isEmpty()) counts.add(new Integer(0)); //return sample.size(); } public int addLayer(int nLayer,Layer layer){ if (sample.size()<=nLayer) sample.add(layer); else sample.set(nLayer, layer); if (counts.isEmpty()) counts.add(new Integer(0)); return sample.size(); } }