#include "geantdef.h" #include #include #include #include #include "hadesstd.h" #include "hgeomedia.h" #include "hnamedlistfc.h" #include "geafuncdec.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=abs(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; } geoInfo.fin >> medium.npckov; if (medium.npckov>0) { medium.ppckov.assign(0.F,medium.npckov); medium.absco.assign(0.F,medium.npckov); medium.effic.assign(0.F,medium.npckov); medium.rindex.assign(0.F,medium.npckov); for(i=0;i> medium.ppckov[i] >> medium.absco[i] >> medium.effic[i] >> medium.rindex[i]; } } append(eleName,medium); } else autoflag=0; } } return HSUCCESS; } // *************************************************************************** int HGeoMedia::readMediumDb(HGeoInfo & geoInfo, HString & medName) { #ifdef WITHORACLE if (find(medName)) return HSUCCESS; HGeoMedium medium; if (geoInfo.geoDb->getMedium(medName,medium)==HSUCCESS) { append(medName,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=abs(medium.ncomp); for(i=0;i0) { for(i=0;isensflag > 0) currentSensFlag=1; else currentSensFlag=0; if (pm->medno > 0) return pm->medno; int k=abs(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); //cout<radleng<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); if (pm->npckov>0) { pm->ppckov=pm->ppckov*1.e-9; GSCKOV(noDefMed,pm->npckov,&(pm->ppckov[0]),&(pm->absco[0]), &(pm->effic[0]),&(pm->rindex[0])); } #endif pm->medno=noDefMed; return noDefMed; } cerr << "material " << medName << "not found in list of media" << endl; return 0; } // *************************************************************************** int HGeoMedia::writeToFile(HGeoInfo & geoInfo) { ifstream ftest; ofstream fout; HString outputName, tmp(' ',120); HString day, month, sdate; HString newchoice="exi"; HString outDir=geoInfo.getOutputDir(); int writeFlag=0; struct tm *newtime; time_t t; time(&t); newtime=localtime(&t); if (newtime->tm_mday<10) day="0" + HString(newtime->tm_mday); else day=HString(newtime->tm_mday); if (newtime->tm_mon<9) month="0" + HString((newtime->tm_mon)+1); else month=HString((newtime->tm_mon)+1); sdate=day + month + HString(newtime->tm_year); if (outDir.empty()) outputName="mediadb" + sdate +".txt"; else { outDir=outDir + "/"; outputName=outDir + "mediadb" + sdate +".txt"; } do { ftest.open(outputName,ios::in); if(ftest.fail()) writeFlag=1; else { cout << "file " << outputName << " exists already" << '\n'; cout << "do you want to enter a new file name? (y or n, e=exit) >"; cin >> tmp; newchoice=tmp.lower(); if (newchoice(0,1)=="n") writeFlag=1; else { if (newchoice(0,1)=="y") { cout << "enter file name > "; cin >> tmp; if (tmp.find("/")>=0) outputName=tmp; else outputName=outDir + tmp; } else { ftest.close(); exit(1); } } } ftest.close(); ftest.clear(); } while (writeFlag==0); cout << "output file name for media: " << outputName << '\n'; fout.open(outputName,ios::out); if(fout.fail()) { cerr << "cannot open " << outputName << endl; fout.close(); exit(1); } fout<<"// ***********************************************************"<<'\n'; fout<<"// file for media extracted from database"<<'\n'; fout<<"// Date: " << asctime(newtime); fout<<"// ***********************************************************"<<'\n'; HGeoMedium medium; HString bl=" "; int i, k; if(reset()) do { HString medName=name(); medium=element(); fout << medName << '\n'; fout << medium.ncomp << bl; k=abs(medium.ncomp); for(i=0;i