private void read(FileInput fin){
        this.nAnalyteConcns = fin.numberOfLines()-1;
        this.titleZero = fin.readLine();
        this.nResponses = this.nAnalyteConcns;
        this.analyteConcns = new double[this.nAnalyteConcns];
        this.responses = new double[this.nAnalyteConcns];
        this.weights = new double[this.nAnalyteConcns];
        int weightCheck = 0;
        String line = null;
        String word = null;
        int wL = 0;
        int pos1 = -1;
        int pos2 = -1;
        int pos3 = -1;
        for(int i=0; i<this.nAnalyteConcns; i++){
            line = (fin.readLine()).trim();
            // analyte concn
            pos1 = this.separatorPosition(line);
            if(pos1==-1){
                throw new IllegalArgumentException("Input file line " + (i+1) + ": analyte concentration and response value required for all data points");
            }
            else{
                word = line.substring(0, pos1);
                this.analyteConcns[i] = Double.parseDouble(word);
                line = (line.substring(pos1+1)).trim();;
                wL = line.length();
                if(wL<1)throw new IllegalArgumentException("Input file line " + (i+1) + ": response value required for all data points");

                // response
                pos2 = this.separatorPosition(line);
                if(pos2==-1){
                    word = line;
                }
                else{
                    word = line.substring(0, pos2);
                }
                this.responses[i] = Double.parseDouble(word);
                if(pos2!=-1){
                    line = (line.substring(pos2+1)).trim();
                    wL = line.length();

                    // weight
                    if(wL>0){
                        pos3 = this.separatorPosition(line);
                        if(pos3==-1){
                            word = line.trim();
                        }
                        else{
                            word = (line.substring(0, pos3)).trim();
                        }
                        this.weights[i] = Double.parseDouble(word);
                        if(this.weights[i]==1.0)weightCheck++;
                     }
                }
            }
        }
        this.analyteConcnFlag = 0;
        this.analyteEntered = true;
        this.responsesEntered = true;
        if(weightCheck!=this.nAnalyteConcns){
            this.nWeights = this.nAnalyteConcns;
            this.weights = this.checkWeights(Conv.copy(this.weights));
            this.weightsEntered = true;
        }
        this.dataRead = true;
    }