Attachment 'TArtCounter.cc'
Download#include <iostream> #include <string> #include <sys/stat.h> #include <TROOT.h> #include "TArtCore.hh" #include "TArtCounter.hh" TArtCounter* TArtCounter::fCounter = 0; //_____________________________________________________________________ TArtCounter* TArtCounter::Instance() { if (fCounter==0) fCounter = new TArtCounter(); return fCounter; } //_____________________________________________________________________ TArtCounter* TArtCounter::SetCounterFromRIDF(const char* ridfname) { if (fCounter==0) fCounter = new TArtCounter(); fCounter->Reset(); if (strlen(ridfname)!=0) fCounter->SetMaxNum(ridfname); return fCounter; } //_____________________________________________________________________ TArtCounter* TArtCounter::SetCounter(const unsigned int num) { if (fCounter==0) fCounter = new TArtCounter(); fCounter->Reset(); fCounter->SetMaxNum(num); return fCounter; } //_____________________________________________________________________ void TArtCounter::Draw() { if (fCurrentNum==0) fStartTime = time(NULL); if (fOldTime==0) fOldTime = time(NULL); time_t CurrentTime = time(NULL); double DiffTime = difftime(CurrentTime,fOldTime); if (DiffTime>=1) {// update every 1sec unsigned int DiffNum = fCurrentNum - fOldNum; Double_t PassedTime = difftime(CurrentTime, fStartTime); Double_t RemainingTime; if (fMaxNum==0) RemainingTime = 0; else RemainingTime = DiffTime/DiffNum * (fMaxNum-fCurrentNum); char unit_p = Unit(PassedTime); char unit_r = Unit(RemainingTime); DispWithRestTime(fCurrentNum, fMaxNum, PassedTime,unit_p, RemainingTime, unit_r); fOldNum = fCurrentNum; fOldTime = CurrentTime; } if (fCurrentNum==fMaxNum) { // the last event Double_t PassedTime = difftime(CurrentTime, fStartTime); char unit_p = Unit(PassedTime); DispWithRestTime(fCurrentNum, fCurrentNum, PassedTime,unit_p, 0, 's'); printf("/n"); } ++fCurrentNum; } //_____________________________________________________________________ void TArtCounter::DispWithRestTime(const unsigned int n_curr, const unsigned int n_tot, const double t_pas, const char unit_p, const double t_rem , const char unit_r) { std::string bar=""; if (n_tot!=0){ int MAX_len=30; int len=MAX_len*n_curr/n_tot; int i=0; while (i<MAX_len){ if (i<len) bar+="="; else if (i==len) bar+=">"; else bar+=" "; i++; } } std::string bar_end; bar_end = changeRotstring(); bar=bar+bar_end; printf("\r"); fprintf(stdout,"%s %10d (%5.1f%c passed, remaining is %5.1f%c)", bar.c_str(),n_curr,t_pas,unit_p,t_rem,unit_r); fflush(stdout); } //_____________________________________________________________________________ std::string TArtCounter::changeRotstring(){ std::string str; switch(fDispIndex){ case 0: str="|"; break; case 1: str="/"; break; case 2: str="-"; break; case 3: str="\\"; break; } fDispIndex++; if (fDispIndex>3) fDispIndex=0; else if (fDispIndex<0) fDispIndex=0; return str; } //_____________________________________________________________________________ char TArtCounter::Unit(double& t){ char unit; if (t>60) { t = t / 60.; unit = 'm'; }else unit = 's'; if (t>60) { t = t / 60.; unit = 'h'; } if (t>60) { t = t / 24.; unit = 'd'; } if (t>365) { t = t / 365.; unit = 'y'; } return unit; } //_____________________________________________________________________________ unsigned int TArtCounter::SetMaxNum(const char* ridfname) { struct stat st; if(stat(ridfname, &st)){ // std::cout << "Can't open " << ridfname << std::endl; // return 0; TArtCore::Warning(__FILE__,"Can't open ridf file, set MaxNum to 0."); return 0; } FILE *fd; if(!(fd = fopen(ridfname, "r"))){ // std::cout << "Can't open " << ridfname << std::endl; // return 0; TArtCore::Warning(__FILE__,"Can't open ridf file, set MaxNum to 0."); return 0; } ridf_hdst chd; char buff[1024]; fread(buff, 1, sizeof(chd), fd); fread(buff, 1, sizeof(buff), fd); unsigned int lenum=0; int ci=0; int ebsz=0; int total_ebsz=0; int sz=0; fseeko(fd,0,SEEK_END); while(st.st_size>=total_ebsz){ fseeko(fd,-4,SEEK_CUR); fread(&ebsz, 1, sizeof(int), fd); fseeko(fd,-2*ebsz,SEEK_CUR); total_ebsz+=2*ebsz; ridf_hdst xhd; fread(&xhd, 1, sizeof(xhd), fd); ci=ridf_ci(xhd); sz=ridf_sz(xhd); if(ci != 0 && ci != 1 && ci != 2) break; if(ridf_sz(xhd) != ebsz) break; while(ci!=9){ fread(&xhd, 1, sizeof(xhd), fd); ci=ridf_ci(xhd); sz=ridf_sz(xhd); if(ci==3||ci==6){ fread(&lenum, 1, sizeof(int), fd); fseeko(fd,2*sz-sizeof(xhd)-sizeof(int),SEEK_CUR); } else{ fseeko(fd,2*sz-sizeof(xhd),SEEK_CUR); } } if(lenum != 0) break; fread(&ebsz,1, sizeof(int), fd); fseeko(fd,-2*ebsz,SEEK_CUR); ci = 0; } fclose(fd); fMaxNum = lenum; return lenum; } //______________________________________________________________________ int TArtCounter::ridf_ci(struct ridf_hdst hd){ return (hd.hd1 & 0x0fc00000) >> 22; } //______________________________________________________________________ int TArtCounter::ridf_sz(struct ridf_hdst hd){ return hd.hd1 & 0x003fffff; } //______________________________________________________________________
Attached Files
To refer to attachments on a page, use attachment:filename, as shown below in the list of files. Do NOT use the URL of the [get] link, since this is subject to change and can break easily.- [get | view] (2012-10-17 06:59:08, 278.1 KB) [[attachment:ANAROOT講習会資料.pdf]]
- [get | view] (2013-06-25 06:26:53, 0.5 KB) [[attachment:CounterExample.cc]]
- [get | view] (2012-10-17 06:53:24, 1.6 KB) [[attachment:MakePlaHist.C]]
- [get | view] (2012-08-20 06:37:41, 6.2 KB) [[attachment:TArtCSVParameter.cc]]
- [get | view] (2012-08-20 06:37:53, 1.0 KB) [[attachment:TArtCSVParameter.hh]]
- [get | view] (2013-06-25 06:26:20, 5.3 KB) [[attachment:TArtCounter.cc]]
- [get | view] (2013-06-25 06:26:40, 1.2 KB) [[attachment:TArtCounter.hh]]
- [get | view] (2012-11-29 12:05:55, 4.8 KB) [[attachment:TArtParameters.cc]]
- [get | view] (2012-11-29 12:05:35, 1.0 KB) [[attachment:TArtParameters.hh]]
- [get | view] (2012-12-04 15:34:16, 6.3 KB) [[attachment:TArtUserParameters.cc]]
- [get | view] (2012-12-04 15:34:00, 1.6 KB) [[attachment:TArtUserParameters.hh]]
- [get | view] (2012-12-04 15:34:38, 1.6 KB) [[attachment:UserParameters.xml]]
- [get | view] (2012-04-19 08:38:22, 3.0 KB) [[attachment:ana-mode.el]]
- [get | view] (2012-04-20 03:38:36, 2.7 KB) [[attachment:anaroot_filter.ver1.00.jar]]
- [get | view] (2012-06-04 04:07:52, 2.6 KB) [[attachment:anaroot_filter.ver1.01.jar]]
- [get | view] (2012-06-01 17:27:17, 4.7 KB) [[attachment:calc2xml.v2.xsl]]
- [get | view] (2012-04-20 03:33:51, 6.3 KB) [[attachment:calc2xml.xsl]]
- [get | view] (2012-10-17 07:32:11, 1.0 KB) [[attachment:install-example.txt]]
- [get | view] (2012-11-29 12:06:11, 1.0 KB) [[attachment:parameters.xml]]
- [get | view] (2012-04-20 03:33:17, 3.1 KB) [[attachment:xml2calc.xsl]]
You are not allowed to attach a file to this page.