@@ -167,12 +167,14 @@ public void notifyParameterChanged(Parameter source) {
167167 }
168168
169169 double truncationFactor = 0.01 ;
170+ double log_truncation = Math .log (truncationFactor );
170171 int convolutionStep = MaudPreferences .getInteger ("asymmetry.convolutionStep" , 1 );
171172
172173 public void updateStringtoDoubleBuffering (boolean firstLoading ) {
173174 super .updateStringtoDoubleBuffering (false );
174175 int banks = banknumbers ();
175176 truncationFactor = Double .parseDouble (getTruncationField ());
177+ log_truncation = Math .log (truncationFactor );
176178 typeNumber = new int [banks ];
177179 for (int bank = 0 ; bank < banks ; bank ++)
178180 typeNumber [bank ] = getTypeNumber (bank );
@@ -555,9 +557,10 @@ public double getSecondInstrumentalAsymmetry(double d, DiffrDataFile diffrDataFi
555557 public void computeAsymmetry (DiffrDataFile diffrDataFile , Sample asample , double [] afit , int min , int max ) {
556558
557559
558- Instrument ainstrument = (Instrument ) getParent ();
560+ // Instrument ainstrument = (Instrument) getParent();
559561
560- double newFit [];
562+ double [] newFit = null ;
563+ double [] cal = null ;
561564
562565 double total_asymmetrymin = getInstrumentalAsymmetry (diffrDataFile .getXData (min ), diffrDataFile );
563566 total_asymmetrymin = Math .abs (total_asymmetrymin );
@@ -566,10 +569,13 @@ public void computeAsymmetry(DiffrDataFile diffrDataFile, Sample asample, double
566569// System.out.println(total_asymmetrymax + " " + total_asymmetrymin);
567570 if (Math .min (total_asymmetrymax , total_asymmetrymin ) < 1 && max > min ) {
568571 newFit = new double [max - min ];
572+ cal = new double [max - min ];
573+ for (int j = min ; j < max ; j ++)
574+ cal [j - min ] = diffrDataFile .getXDataForCalibration (j );
569575
570576 for (int j = min ; j < max ; j ++) {
571577 int absdirection = convolutionStep ; // increasing step
572- double x = diffrDataFile . getXDataForCalibration ( j ) ;
578+ double x = cal [ j - min ] ;
573579 double total_asymmetry = getInstrumentalAsymmetry (diffrDataFile .getXData (j ), diffrDataFile );
574580// System.out.println(total_asymmetry);
575581 if (total_asymmetry == 0.0 )
@@ -583,13 +589,13 @@ public void computeAsymmetry(DiffrDataFile diffrDataFile, Sample asample, double
583589 double function = afit [j ];
584590 double normalization = 1.0 ;
585591 int ij = j + direction ;
586- if (diffrDataFile .insiderange (ij )) {
587- double difference = Math .abs (diffrDataFile . getXDataForCalibration ( ij ) - x );
592+ if (ij < max && ij >= min ) { // diffrDataFile.insiderange(ij)) {
593+ double difference = Math .abs (cal [ ij - min ] - x );
588594 double expasymmetry = 1.0 ;
589- double truncation_angle = Math .abs (-Math . log ( truncationFactor ) / total_asymmetry );
595+ double truncation_angle = Math .abs (-log_truncation / total_asymmetry );
590596// System.out.println(total_asymmetry + " " + truncation_angle + " " + difference);
591- for (; difference < truncation_angle && diffrDataFile .insiderange (ij ); ij += direction ) {
592- difference = Math .abs (diffrDataFile . getXDataForCalibration ( ij ) - x );
597+ for (; difference < truncation_angle && ij < max && ij >= min ; ij += direction ) { // diffrDataFile.insiderange(ij); ij += direction) {
598+ difference = Math .abs (cal [ ij - min ] - x );
593599 expasymmetry = Math .exp (-difference * total_asymmetry );
594600 function += afit [ij ] * expasymmetry ;
595601 normalization += expasymmetry ;
@@ -612,11 +618,17 @@ public void computeAsymmetry(DiffrDataFile diffrDataFile, Sample asample, double
612618 total_asymmetrymax = Math .abs (total_asymmetrymax );
613619// System.out.println("alpha " + total_asymmetrymax + " " + total_asymmetrymin);
614620 if (Math .min (total_asymmetrymax , total_asymmetrymin ) < 1 ) {
615- newFit = new double [max - min ];
621+ if (newFit == null )
622+ newFit = new double [max - min ];
623+ if (cal == null ) {
624+ cal = new double [max - min ];
625+ for (int j = min ; j < max ; j ++)
626+ cal [j - min ] = diffrDataFile .getXDataForCalibration (j );
627+ }
616628
617629 for (int j = min ; j < max ; j ++) {
618630 int absdirection = -1 ; // increasing step
619- double x = diffrDataFile . getXDataForCalibration ( j ) ;
631+ double x = cal [ j - min ] ;
620632 double total_asymmetry = getSecondInstrumentalAsymmetry (diffrDataFile .getXData (j ), diffrDataFile );
621633// System.out.println(total_asymmetry);
622634 if (total_asymmetry == 0.0 )
@@ -630,13 +642,13 @@ public void computeAsymmetry(DiffrDataFile diffrDataFile, Sample asample, double
630642 double function = afit [j ];
631643 double normalization = 1.0 ;
632644 int ij = j + direction ;
633- if (diffrDataFile . insiderange ( ij ) ) {
634- double difference = Math .abs (diffrDataFile . getXDataForCalibration ( ij ) - x );
645+ if (ij < max && ij >= min ) {
646+ double difference = Math .abs (cal [ ij - min ] - x );
635647 double expasymmetry = 1.0 ;
636- double truncation_angle = Math .abs (-Math . log ( truncationFactor ) / total_asymmetry );
648+ double truncation_angle = Math .abs (-log_truncation / total_asymmetry );
637649// System.out.println(total_asymmetry + " " + truncation_angle + " " + difference);
638- for (; difference < truncation_angle && diffrDataFile . insiderange ( ij ) ; ij += direction ) {
639- difference = Math .abs (diffrDataFile . getXDataForCalibration ( ij ) - x );
650+ for (; difference < truncation_angle && ij < max && ij >= min ; ij += direction ) {
651+ difference = Math .abs (cal [ ij - min ] - x );
640652 expasymmetry = Math .exp (-difference * total_asymmetry );
641653 function += afit [ij ] * expasymmetry ;
642654 normalization += expasymmetry ;
0 commit comments