bool cutFlowHandler::mask() { for(TMapiP2cc::iterator ii=list->begin() ; ii!=list->end() ; ++ii) { int num = ii->first; string str = (string)ii->second; _INFO("["+tostring(num)+"]="+str); if(str=="obj") { if(Next(ii)=="NAME") name = Next(ii); else {_ERROR("obj: failed to read NAME->"+PreviousStay(ii)); return false;} if(Next(ii)=="FLAG") flag = Next(ii); else {_ERROR("obj NAME:"+name+" -> failed to read FLAG->"+PreviousStay(ii)); return false;} if(Next(ii)=="order") order = Next(ii); else {_ERROR("obj NAME:"+name+" -> failed to read order->"+PreviousStay(ii)); return false;} if(Next(ii)=="phase") phase = Next(ii); else {_ERROR("obj NAME:"+name+" -> failed to read phase->"+PreviousStay(ii)); return false;} if(Next(ii)=="skip") skip = Next(ii); else {_ERROR("obj NAME:"+name+" -> failed to read skip->"+PreviousStay(ii)); return false;} if(Next(ii)=="nparameters") nparameters = Next(ii); else {_ERROR("obj NAME:"+name+" -> failed to read nparameters->"+PreviousStay(ii)); return false;} _INFO("NAME="+name+", FLAG="+flag+", order="+order+", phase="+phase+", skip="+skip+", nparameters="+nparameters); if(Next(ii)=="parameters") { vdtmp.clear(); for(int v=1 ; v<=validate_int(nparameters) ; ++v) { if(Next(ii)=="parameter") /* do nothing*/ if(Next(ii)=="NAME") attrname = Next(ii); else {_ERROR("obj NAME:"+name+" -> failed to read NAME->"+PreviousStay(ii)); return false;} if(Next(ii)=="ORDER") attrorder = Next(ii); else {_ERROR("obj NAME:"+name+" -> failed to read ORDER->"+PreviousStay(ii)); return false;} if(Next(ii)=="TYPE") attrtype = Next(ii); else {_ERROR("obj NAME:"+name+" -> failed to read TYPE->"+PreviousStay(ii)); return false;} val = Next(ii); _INFO("\tparameter["+tostring(v)+"] NAME="+attrname+", ORDER="+attrorder+", TYPE="+attrtype+", val="+val); // HAVE TO CHECK THE TYPE !!!!! vdtmp.push_back(validate_double(val)); } if((int)vdtmp.size() != validate_int(nparameters)) {_ERROR("vector size doesn't match nparameters"); return false;} } else {_ERROR("obj NAME:"+name+" -> failed to read parameters->"+PreviousStay(ii)); return false;} if(Next(ii)=="description") description = Next(ii); else {_ERROR("obj NAME:"+name+" -> failed to read description->"+PreviousStay(ii)); return false;} _INFO("description="+description); m_cutFlowOrdered->insert( make_pair(validate_double(order),name) ); m_cutFlowTypeOrdered->insert( make_pair(validate_double(order),phase) ); m_cutFlowNumbers->insert( make_pair(name,0) ); m_cutFlowMapSVD->insert( make_pair(name,vdtmp) ); m_cutsFlowSkipMap->insert( make_pair(name,validate_bool(skip)) ); } } return true; }
// verify lossless compression or measure loss static int validate(const void* data, const void* copy, size_t count, int type, int lossless) { if (lossless) { if (!(type == FPZIP_TYPE_FLOAT ? validate_float((const float*)data, (const float*)copy, count) : validate_double((const double*)data, (const double*)copy, count))) return 0; } else fprintf(stderr, "rmse=%g\n", (type == FPZIP_TYPE_FLOAT ? error_float((const float*)data, (const float*)copy, count) : error_double((const double*)data, (const double*)copy, count))); return 1; }