00001
00002
00003
00004 #include "cddefines.h"
00005 #include "cddrive.h"
00006 #include "radius.h"
00007 #include "lines.h"
00008 #include "input.h"
00009 #include "parser.h"
00010
00011 #define NRDSUM 300L
00012 #include "prt.h"
00013
00014 static char **chSMLab;
00015 static long int *ipLine;
00016 static bool lgFirst=true;
00017 static long nlsum;
00018 static realnum *wavelength;
00019
00020 void ParsePrtLineSum(Parser &p)
00021 {
00022
00023 bool lgEND;
00024 long int i;
00025
00026
00027
00028 DEBUG_ENTRY( "ParsePrtLineSum()" );
00029
00030 # if 0
00031 if( !lgFirst )
00032 {
00033
00034 fprintf(ioQQQ," more than one print line sum has appeared - only first one is used.\n");
00035 fprintf(ioQQQ," Sorry.\n");
00036 cdEXIT(EXIT_FAILURE);
00037 }
00038 else
00039 # endif
00040
00041
00042
00043 if( lgFirst )
00044 {
00045
00046 lgFirst = false;
00047 wavelength = ((realnum *)MALLOC( sizeof(realnum )*NRDSUM ));
00048
00049
00050 ipLine = ((long int *)MALLOC(NRDSUM*sizeof(long)));
00051
00052
00053 chSMLab = ((char **)MALLOC(NRDSUM*sizeof(char *)));
00054
00055 for( i=0; i<NRDSUM; ++i )
00056 {
00057 chSMLab[i] = ((char *)MALLOC(5*sizeof(char )));
00058 }
00059 }
00060
00061
00062 nlsum = 0;
00063 lgEND = false;
00064 while( !lgEND )
00065 {
00066 p.getline();
00067 if( p.m_lgEOF )
00068 {
00069 fprintf( ioQQQ, " Hit EOF while reading line list; use END to end list.\n" );
00070 cdEXIT(EXIT_FAILURE);
00071 }
00072
00073 if( p.strcmp("END" ) != 0 )
00074 {
00075 if( nlsum >= NRDSUM )
00076 {
00077 fprintf( ioQQQ,
00078 " Too many lines have been entered; the limit is %li. Increase NRDSUM in PrtLineSum.\n",
00079 NRDSUM );
00080 cdEXIT(EXIT_FAILURE);
00081 }
00082
00083
00084 strncpy( chSMLab[nlsum], p.getCommand(4).c_str() , 4 );
00085 chSMLab[nlsum][4] = 0;
00086 wavelength[nlsum] = (realnum)p.getWaveOpt();
00087 ++nlsum;
00088 }
00089 else
00090 {
00091 lgEND = true;
00092 }
00093 }
00094 }
00095 double PrtLineSum(void)
00096 {
00097 long int i;
00098
00099
00100
00101 double absint,
00102 relint ,
00103 sum=-1.;
00104
00105 DEBUG_ENTRY( "PrtLineSum()" );
00106
00107 sum = 0.;
00108
00109 if( LineSave.ipass <= 0 )
00110 {
00111 return sum;
00112 }
00113
00114 if( nzone == 1 )
00115 {
00116 for( i=0; i < nlsum; i++ )
00117 {
00118
00119 if( (ipLine[i] = cdLine((char*)chSMLab[i],wavelength[i],&relint,&absint) ) <=0 )
00120 {
00121 fprintf( ioQQQ, " PrtLineSum could not fine line %4.4s %5f\n",
00122 chSMLab[i], wavelength[i] );
00123 cdEXIT(EXIT_FAILURE);
00124 }
00125 }
00126 }
00127
00128
00129 for( i=0; i < nlsum; i++ )
00130 {
00131
00132 cdLine_ip(ipLine[i],&relint,&absint);
00133 absint = pow(10.,absint - radius.Conv2PrtInten);
00134 sum += absint;
00135 }
00136 return sum;
00137 }
00138