#include #include #include #include "hadexitcodes.h" #include "hgeomedia.h" #include "hnamedlistfc.h" template class HNamedList; int HGeoMedia::readFileMedia(HGeoInfo & geoInfo) { HString eleName(' ',120); HGeoMedium medium; int i, k, autoflag=1; while(!geoInfo.fin.eof()) { geoInfo.fin >> eleName; if (eleName.empty() || eleName(0)=='/') geoInfo.fin.getline(eleName,120); else { if (eleName!="AUTONULL") { geoInfo.fin >> medium.ncomp; k=(int)fabs(medium.ncomp); if (k>=MAXCOMP) { cerr << "too many components in material " << eleName << endl; return HFAILURE; } for(i=0;i> medium.aw[i++]); for(i=0;i> medium.an[i++]); geoInfo.fin >> medium.dens; if (k<2) geoInfo.fin >> medium.radleng; else for(i=0;i> medium.wm[i++]); geoInfo.fin >> medium.sensflag >> medium.fldflag >> medium.fld >> medium.epsil; if (autoflag<1) { geoInfo.fin >> medium.madfld >> medium.maxstep >> medium.maxde >> medium.minstep; } append(eleName,medium); } else autoflag=0; } } return HSUCCESS; } // *************************************************************************** int HGeoMedia::readDbMedium(HString & medName, HGeoInfo & geoInfo) { #ifdef WITHORACLE if (find(medName.upper())) return HSUCCESS; HGeoMedium medium; char *mName=medName; if (geoInfo.geoDb->getMedium(mName,&medium)==HSUCCESS) { append(medName.upper(),medium); return HSUCCESS; } #endif return HFAILURE; } // *************************************************************************** int HGeoMedia::showAll() { HGeoMedium medium; HString bl=" "; int i, k; if(reset()) do { HString eleName=name(); medium=element(); cout << eleName << '\n' << medium.ncomp << bl; k=(int)fabs(medium.ncomp); for(i=0;isensflag > 0) currentSensFlag=1; else currentSensFlag=0; if (pm->medno > 0) return pm->medno; int k=(int)fabs(pm->ncomp); ++noDefMed; #ifdef WITHGEANT char* mN=medName; if (k<2) { GSMATE(noDefMed,mN,pm->aw[0],pm->an[0], pm->dens,pm->radleng,-1.,0,0); } else { GSMIXT(noDefMed,mN,&(pm->aw[0]),&(pm->an[0]), pm->dens,pm->ncomp,&(pm->wm[0])); } GSTMED(noDefMed,mN,noDefMed,pm->sensflag, pm->fldflag,pm->fld,pm->madfld, pm->maxstep,pm->maxde,pm->epsil, pm->minstep,0,0); #endif pm->medno=noDefMed; return noDefMed; } cerr << "material " << medName << "not found in list of media" << endl; return 0; }