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