Example #1
0
void VictoryWindow::draw() {
	m_height = 134 + 32 * m_itemsNb;
	
	m_y = 319 / 2 - m_height / 2; // GameWindow::main->height() - 319 = ActorStatsWindow->height()
	
	Window::draw();
	
	Interface::defaultFont->printCentered(_t("Victory").c_str(), m_x, m_y + 20, m_width, 21, FONT_LARGE);
	printStat(20, 52, _t("EXP"), m_battle->exp(), 60, 180);
	printStat(20, 84, _t("Gold"), m_battle->gold(), 60, 180);
	
	u16 i = 0;
	for(u16 j = 0 ; j < m_inventory.nbItems() ; j++) {
		printItem(m_inventory.getItem(j), m_inventory.getItemCount(j), 20, 116 + i * 32, 175);
		i++;
	}
	for(u16 j = 0 ; j < m_inventory.nbArmors() ; j++) {
		printItem(m_inventory.getArmor(j), m_inventory.getArmorCount(j), 20, 116 + i * 32, 175);
		i++;
	}
	for(u16 j = 0 ; j < m_inventory.nbWeapons() ; j++) {
		printItem(m_inventory.getWeapon(j), m_inventory.getWeaponCount(j), 20, 116 + i * 32, 175);
		i++;
	}
}
Example #2
0
File: jumble.c Project: wfei/hw
int main(int argc, char *argv[]){
    int (*hashFun)(ElemType *words, int size);
    HT hashTable;
    if (argc == 2) {
	hashFun = h_One;
	hashTable = createHashTable(argv[1], h_One);
    } else if (argc == 3) {
	if (strcmp(argv[2], "0") == 0) {
	    hashFun = h_Zero;
	    hashTable = createHashTable(argv[1], hashFun);
	} else {
	    hashFun = h_One;
	    hashTable = createHashTable(argv[1], hashFun);

	}
    }
    printStat(hashTable);
    char word[32];
    
    while (1) {
	printf("Please input a word: ");
	scanf("%s", word);
	if (strcmp(word, ".") == 0) {
	    break;
	}
	hashLookup(hashTable, word, hashFun);
    }

   

}
void GColor::selectNextColor(int vertexnumber){

	int i;

	printStat(vertexnumber);

	while(1){

		colorofvertex[vertexnumber] = (colorofvertex[vertexnumber]+1) % (colorcount+1);

		/*
			another method to solve the problem can be
			initializing colorvertex[i]=0 before u call recgcolor for it
			and not using the % operator here....& checking

			colorofvertex[i] > colorcount instead of checking colorofvertex[i]=0
			since we have used % op to set it to zero ..that's why we check for 0
			& the hidden advantage is that color get initialized to 0...i.e null as well

			I know I am talking weird but ya that is the next best solution
		*/
		if(colorofvertex[vertexnumber]==NOCOLOR)
			break;

		for(i=0;i<vertexcount;i++){

			if(graph[i][vertexnumber]==EDGE && colorofvertex[i]==colorofvertex[vertexnumber])
				break;
		}

		if(i==vertexcount) //all vertices have been checked and the selected color does not conflict
			break;
	}

}
Example #4
0
  virtual void TearDown() {
	  // shutdown the cache
	  cacheShutdown();
	  // clean the cache:
	  boost::system::error_code ec;
	  boost::filesystem::remove_all(m_cache_path, ec);
	  ASSERT_TRUE(!ec);

	  // print some statistics:
      printStat();
  }
void manageStatLine(Unit* ptChar, statsInterfaceBIN* statLine, int currentPage, LPWSTR lpText)
{
	if (!statLine->enabled)
		return;

	if (statLine->page != currentPage)
		return;

	if (statLine->font)
		D2SetFont(statLine->font);

	printStat(ptChar, statLine->statsID, RX(statLine->x), RY(statLine->y), statLine->color, lpText);
}
void GColor::NonRecGcolor(){

	struct stack *s1 = (struct stack*) (malloc(sizeof(struct stack)));
	int vertexnumber;

	s1->colorno = NOCOLOR;
	s1->vertexno = 0;

	push(s1);

	while(top!=-1){

		s1 = pop();

		vertexnumber = s1->vertexno;
		colorofvertex[vertexnumber] = s1->colorno;

		while(1){

			selectNextColor(vertexnumber);

			if(colorofvertex[vertexnumber]==NOCOLOR)
				break;

			if(vertexnumber==vertexcount-1){

				textcolor(BLUE);
				printStat(vertexnumber);
				getch();
				textcolor(WHITE);

			}
			else{

				s1->vertexno = vertexnumber;
				s1->colorno = colorofvertex[vertexnumber];
				push(s1);

				s1->vertexno = vertexnumber + 1;
				s1->colorno = colorofvertex[vertexnumber + 1];
				push(s1);

				break;

			}
		}
	}

}
Example #7
0
bool ZeroMQPublisher::test(uint32_t datasize)
{
	m_times.clear();
	zmq::message_t command(1);
	*(char*)(command.data())='S'; //READY
	mp_commandpub->send(command);
	mp_commandsub->recv(&command);
	if(*(char*)command.data()!=2)
		return false;
	//cout << endl;
	//BEGIN THE TEST:
	uint32_t result;
	m_clock.setTimeNow(&m_t1);
	for(uint32_t i = 0;i<(uint32_t)n_samples;++i)
	{
		zmq::message_t latency_out(datasize+4);
		zmq::message_t latency_in;
		memset(latency_out.data(),65,datasize+4);
#if defined(_WIN32)
		sprintf_s((char*)(latency_out.data()),datasize+4, "%d", i);
#else
		sprintf((char*)(latency_out.data()),"%d",i);
#endif
		mp_datapub->send(latency_out);
		mp_datasub->recv(&latency_in);
		//		std::istringstream iss(static_cast<char*>(latency_in.data()));
		//		cout << "RECEIVED DATA: "<< iss.str()<< endl;

		sscanf_s((char*)latency_in.data(),"%d",&result);
		//	cout << "recevied result: "<< result << " and i is: "<<i << endl;
		//  cout << "SENT/REC: "<< *(uint32_t*)latency_out.data() <<" / "<<*(uint32_t*)latency_in.data()<<endl;
		if(result != i)
		{
			cout << "RECEIVED BAD MESSAGE, STOPPING TEST"<<endl;
			*(char*)(command.data()) = 10;
			mp_commandpub->send(command);
			return false;
		}


	}
	m_clock.setTimeNow(&m_t2);
	m_times.push_back(TimeConv::Time_t2MicroSecondsDouble(m_t2)
	-TimeConv::Time_t2MicroSecondsDouble(m_t1)-m_overhead);
	analizeTimes(datasize);
	printStat(m_stats.back());

	return true;
}
Example #8
0
void MainWindow::addThread(QDir dirPath)
{
    wrapper = new Wrapper(dirPath);
    QThread* thread = new QThread;

    wrapper->moveToThread(thread);

    connect(thread,SIGNAL(started()),wrapper,SLOT(process()));
    connect(wrapper,SIGNAL(done()), thread, SLOT(quit()));
    connect(wrapper,SIGNAL(done()),this,SLOT(printStat()));
    connect(thread,SIGNAL(finished()),thread,SLOT(deleteLater()));
    connect(wrapper,SIGNAL(timerValue(int)),progressBar,SLOT(setValue(int)));

    thread->start();

    return;

}
int main() {
  initBuffer();
  MY_TYPE **grids = NULL;
  MY_TYPE number = loadAllGrids(&grids);
  allocateStat(number);
  int i;

  for (i=0; i<number; ++i) {
    solveGrid(grids[i]);
  }

  LOG_WARN myprint("Global stats :\n");
  LOG_ERROR printStat(calculateGlobalStat());
  LOG_INFO myprint("Done !! \n");

  clearAllGrids(&grids);
  flush();
  return 0;
}
Example #10
0
static int tgetInit(rpmtget tget, size_t nbuf)
{
    int rc;
    int xx;

    if (_rpmsw_stats) {
	tget->sop = xcalloc(1, sizeof(*tget->sop));
	tget->gop = xcalloc(1, sizeof(*tget->gop));
    }

fprintf(stderr, "===== %s\n", tget->uri);
    xx = rpmswEnter(tget->sop, 0);
    rc = Stat(tget->uri, &tget->sb);
    xx = rpmswExit(tget->sop, 1);
    if (rc < 0)
	goto exit;

    printStat(tget);

    if (nbuf == 0 && tget->sb.st_size > 0)
	nbuf = tget->sb.st_size;

    tget->fd = Fopen(tget->uri, "r.ufdio");
    if (tget->fd == NULL || Ferror(tget->fd)) {
	rc = -1;
	goto exit;
    }
    tget->nbuf = nbuf;
    tget->buf = xmalloc(tget->nbuf + 2);
    tget->buf[0] = '\0';

    tget->b = NULL;
    tget->nb = 0;

    rc = 0;

exit:
    if (rc)
	(void) tgetFini(tget);
    return rc;
}
void GColor::RecGcolor(int vertexnumber){

	while(1){
		selectNextColor(vertexnumber);

		if(colorofvertex[vertexnumber]==NOCOLOR)
			break;

		if(vertexnumber==vertexcount-1){

			textcolor(BLUE);
			printStat(vertexnumber);
			getch();
			textcolor(WHITE);

		}

		else
			RecGcolor(vertexnumber+1);
	}

}
Example #12
0
DynStack::~DynStack(){
	printStat();
}
void TCPFlowStat::addPacket(struct ip* ip, struct tcphdr* tcphdr, double ts){
    if (!isNewFlow(ip,tcphdr) && isMyPacket(ip, tcphdr)!=1) return;
    int pktdir=getPacketDirection(ip->ip_src.s_addr, ip->ip_dst.s_addr, tcphdr->source, tcphdr->dest);
    int tcpdatalen=ip->ip_len-ip->ip_hl*4-tcphdr->doff*4;

    pktcnt++;
    //packet inter-arrival time
    if (lastpacketarrivaltime!=-1){
        double iat=ts-lastpacketarrivaltime;
        avepacketinterarrivaltime=(avepacketinterarrivaltime*(pktcnt-2)+iat)/(pktcnt-1);
    }
    lastpacketarrivaltime=ts;

    switch (tcpconnstate){
        case TCPCONSTATE_CLOSED: {
            if (tcphdr->syn==1 && tcphdr->ack!=1){
                syntime=ts;
                cltip=ip->ip_src.s_addr;
                svrip=ip->ip_dst.s_addr;
                cltport=tcphdr->source;
                svrport=tcphdr->dest;
                cltseq=tcphdr->seq;
                svrackseq=tcphdr->seq+1; cltinitseq=tcphdr->seq+1;
                flowinitby=FLOWINITBYCLT;


                printStat();

                tcpconnstate=TCPCONSTATE_SYN_SEND;
            }
            else {
                printf("Unknown TCP packet.\n");
            };
        };break;
        case TCPCONSTATE_SYN_SEND:{
            if (tcphdr->syn==1 && tcphdr->ack==1 && tcphdr->ack_seq==svrackseq){
                synacktime=ts;
                syntosynacktime=synacktime-syntime;
                svrseq=tcphdr->seq;
                cltackseq=tcphdr->seq+1; svrinitseq=tcphdr->seq+1;
                cltseq=tcphdr->ack_seq;

                tcpconnstate=TCPCONSTATE_SYN_RECEIVED;
                printStat();
            }
            else if (tcphdr->syn==1 && tcphdr->ack!=1 && pktdir==PKTSENDER_SVR){
                //simultanous syn sent from both side
                simulsyn=1;
                svrseq=tcphdr->seq;
                cltackseq=tcphdr->seq+1; svrinitseq=tcphdr->seq+1;

                tcpconnstate=TCPCONSTATE_SYN_RECEIVED;
                printStat();
            }
            else{
                printf("Unknown TCP packet.\n");
            };

        };break;
        case TCPCONSTATE_SYN_RECEIVED: {
            if (tcphdr->syn!=1 &&tcphdr->ack==1 && tcphdr->seq==cltseq && tcphdr->ack_seq==cltackseq){
                acktime=ts;
                synacktoacktime=acktime-synacktime;
                if (synacktoacktime>syntosynacktime){
                //the server side is the local device
                    swapcltsvr();
                    flowinitby=FLOWINITBYSVR;
                }
                tcpconnsetuptime=acktime-syntime;

                pktdir=getPacketDirection(ip->ip_src.s_addr, ip->ip_dst.s_addr, tcphdr->source, tcphdr->dest);

                if (pktdir==PKTSENDER_CLT){
                    cltseq=tcphdr->seq+tcpdatalen;
                    cltackseq=tcphdr->ack_seq;
                    svrseq=tcphdr->ack_seq;
                }
                if (pktdir==PKTSENDER_SVR){
                    svrseq=tcphdr->seq+tcpdatalen;
                    svrackseq=tcphdr->ack_seq;
                    cltseq=tcphdr->ack_seq;
                }
                printStat();

                tcpconnstate=TCPCONSTATE_ESTABLISHED;
            }
            else
            if (tcphdr->syn==1 && tcphdr->ack==1 && simulsyn==1){
            //simultanous syn sent from both side
                if (pktdir==PKTSENDER_CLT && tcphdr->seq==cltseq && tcphdr->ack_seq==cltackseq){
                    if (simulsynackstate==SIMUL_SYNACK_NOT_RECEIVED)
                      simulsynackstate==SIMUL_SYNACK_NOT_RECEIVED;
                    if (simulsynackstate==SIMUL_SYNACK_RECEIVED)
                      tcpconnstate=TCPCONSTATE_ESTABLISHED;

                }
                if (pktdir==PKTSENDER_SVR && tcphdr->seq==svrseq && tcphdr->ack_seq==svrackseq){

                    if (simulsynackstate==SIMUL_SYNACK_NOT_RECEIVED)
                      simulsynackstate==SIMUL_SYNACK_NOT_RECEIVED;
                    if (simulsynackstate==SIMUL_SYNACK_RECEIVED)
                      tcpconnstate=TCPCONSTATE_ESTABLISHED;
                }

                if (tcpconnstate==TCPCONSTATE_ESTABLISHED){
                    tcpconnsetuptime=ts-syntime;
                    cltseq=svrackseq;
                    svrseq=cltackseq;
                }

            }
            else {
                printf("Unknown TCP packet.\n");
            };
        };break;
        case TCPCONSTATE_ESTABLISHED: {
            if (tcphdr->syn!=1) {
                if (pktdir==PKTSENDER_CLT){
                    //calc metrics first
                    if (tcphdr->seq > cltseq){
                        printf("client seq is greater than expected, may be pcap's fault.\n");
                    }

                    if (tcphdr->seq < cltseq){
                    //has re-transmission
                        int retxb=cltseq-tcphdr->seq;
                        if (tcpdatalen<retxb)
                          retxb=tcpdatalen;

                        cltretxbytes+=retxb;
                        cltretxnum+=1;
                  //      printf("client retx %d bytes.\n", retxb);
                    };

                    //the last thing: update seq
                    if (tcphdr->seq+tcpdatalen > cltseq) {
                        cltseq=tcphdr->seq+tcpdatalen;
                    }

                    if (tcphdr->ack_seq >= cltackseq) {
                        cltackseq=tcphdr->ack_seq;
                    };

                    printStat();
                };

                if (pktdir==PKTSENDER_SVR){

                    if (tcphdr->seq > svrseq){
                 //       printf("svr seq is greater than expected, some server data are delayed or lost.\n");
                    }

                    if (tcphdr->seq < svrseq) {
                        int retxb=svrseq-tcphdr->seq;
                        if (tcpdatalen<retxb)
                          retxb=tcpdatalen;

                        svrretxbytes+=retxb;
                        svrretxnum+=1;
                   //     printf("server retx %d bytes.\n", retxb);
                    };

                    //the last thing: update seq

                    if (tcphdr->seq+tcpdatalen > svrseq) {
                        svrseq=tcphdr->seq+tcpdatalen;
                    }


                    if (tcphdr->ack_seq >= svrackseq) {
                        svrackseq=tcphdr->ack_seq;
                    };
                    printStat();

                };

                if (tcphdr->fin==1 || tcphdr->rst==1){
                    tcpconnstate=TCPCONSTATE_FIN;
                }
            }

        };break;
        case TCPCONSTATE_FIN:{

        };break;
        default: {
            printf("Unknown TCP connection state.\n");
        };break;
    };

}
Example #14
0
bool KClient::Poll()
{
    switch(state){
    case TEST_INIT:
        if( GetState() == vce::VCE_STATE_ESTABLISHED ){
            std::cerr << "send ping" << std::endl;
            send_ping( vce::GetTime());
            state = TEST_PING_SENT;            
            break;
        } else {
            std::cerr << GetState() << ">" ;
            if( GetState() == vce::VCE_STATE_UNKNOWN ){
                return false;
            }
        }
        break;
    case TEST_PING_SENT:
        std::cerr << ">";
        break;
    case TEST_PING_RECEIVED:
        {
            
            // 新しいIDを生成して登録(sign up)する

            std::ostringstream idss;
            idss << "ringo" << time(NULL) << "." << g_id_generator;
            localAccountName = idss.str();
            localPassword = std::string("testpass");

            g_id_generator ++;
            send_signup( localAccountName.c_str(), localPassword.c_str());
            std::cerr << "signup" << std::endl;
            state = TEST_SIGNUP_SENT;

        }
        break;
    case TEST_SIGNUP_SENT:
        std::cerr << ">";
        break;
    case TEST_SIGNUP_RECEIVED:
        send_authentication( localAccountName.c_str(), localPassword.c_str());
        state = TEST_AUTHENTICATION_SENT;
        std::cerr << "auth" << std::endl;
        break;
        
    case TEST_AUTHENTICATION_SENT:
        std::cerr << ">";        
        break;
    case TEST_AUTHENTICATION_RECEIVED:
        send_createCharacter( "ringo" );
        state = TEST_CREATECHARACTER_SENT;
        std::cerr << "createchar" << std::endl;
        break;

    case TEST_CREATECHARACTER_SENT:
        std::cerr << ">";                
        break;
    case TEST_CREATECHARACTER_RECEIVED:
        std::cerr << "createchar ok." << std::endl;
        
        send_listCharacter();
        state = TEST_LISTCHARACTER_SENT;
        std::cerr << "listchar." << std::endl;
        break;
        
    case TEST_LISTCHARACTER_SENT:
        std::cerr << ">";                
        break;
    case TEST_LISTCHARACTER_RECEIVED:
        std::cerr << "listchar ok." << std::endl;
        send_login( "ringo" );        
        state = TEST_LOGIN_SENT;
        std::cerr << "login." << std::endl;        
        break;

    case TEST_LOGIN_SENT:
        std::cerr << ">";
        break;
    case TEST_LOGIN_RECEIVED:
        state = TEST_INGAME;
        break;
    case TEST_INGAME:
        {
            vce::VUint64 nowtimer = vce::GetTime();
            if( nowtimer > (vtimer+500) ){
                vtimer = nowtimer;
                std::cerr << ">";
                ingameSender();
                printStat();
            }
        }
        break;
    case TEST_LOGOUT_SENT:
        std::cerr << ">";
        break;
    case TEST_SESSION_CLOSED:
        break;
    case TEST_FINISHED:
        // do nothing
        std::cerr << ".";
        break;
    default:
        std::cerr << "invalid test state" << std::endl;        
        assert(0);
    }
    return true;    
}
Example #15
0
void Engine::cmd_stat(StrLen)
 {
  printStat();
 }
Example #16
0
void Engine::cmd_exit(StrLen)
 {
  printStat();
  
  run_flag=false;
 }
Example #17
0
int main(int argc, char** argv) 
{
    engine engn;
//    engn.makeBookBody();
    engn.getBooksIRBIS64();
//    engn.getBookDataFromSite("www.ozon.ru");

    printStat(engn.books);
    //map<string, vector<string>>::iterator it = engn.books.begin();
    vector <books_record>::iterator it = engn.books.begin();
//    for (int i = 0; i < 7; i++)
//        it++;
    size_t counter = 1;
    fOper flinks("links.txt", WRITE);
    flinks.fClose();
    while (it != engn.books.end())
    {
        cout << counter++ << ".\t" << (it->bookname != "" ? it->bookname : " ") << " : " << (it->fio != "" ? it->fio : " ") << endl;
        
        
        flinks.reopen("links.txt", APPEND);
        engn.book.annotation.clear();
        engn.book.coverPath.clear();
        engn.book.qrcode.clear();
        cout << it->bookrecord << endl;
        if (it->isbn != "")
//            if (it->isbn == "5-7020-0807-3")
        {
//            cout << "************************************** " << it->isbn << endl;
//            cout << endl;
        
            engn.prepareServerMap(it->isbn);
            engn.allFound = false;      
//            cout << "make conn" << endl;
            engn.getBookDataFromSite("www.ozon.ru");
            if (engn.neededReloadPagebyNewPath())
            {
//                cout << "here reload page by new path" << endl;
                engn.allFound = false;      
                engn.getBookDataFromSite("www.ozon.ru");
                engn.getBookFromSite(it->isbn);            
            }            
//            cout << "get books from site" << endl;
            engn.getBookFromSite(it->isbn);
            
            if (engn.needSearchByBookName() && !engn.neededReloadPagebyNewPath())
            {
//                cout << "will search by name" << endl;
                engn.getBookByISBN_IRBIS64();
                engn.allFound = false;      
                engn.getBookDataFromSite("www.ozon.ru");
                engn.getBookFromSite(it->isbn);
 //               cout << "getted name and FIO" << endl;
                if (engn.neededReloadPagebyNewPath())
                {
//                    cout << "ищем по новому пути" << endl;
                    engn.allFound = false;      
                    engn.getBookDataFromSite("www.ozon.ru");
                    engn.getBookFromSite(it->isbn);
//                    cout << "finished" << endl;
                }
            }
            else
            if (engn.neededReloadPagebyNewPath())
            {
 //               cout << "here reload page by new path" << endl;
                engn.allFound = false;      
                engn.getBookDataFromSite("www.ozon.ru");
                engn.getBookFromSite(it->isbn);            
            }
            // конец сбора информации, пора заносить в базу и на сайт
            
            
            
//            break;
        }
        else
        {
//            cout << "************************************** " << it->bookname << "+" << it->fio << endl;
//            cout << endl;            
//            cout << "will search by name" << endl;
            engn.allFound = false;      
            engn.prepareServerMap(it->bookname + "+" + it->fio);
            engn.getBookDataFromSite("www.ozon.ru");
            if (engn.neededReloadPagebyNewPath())
            {
//                cout << "here reload page by new path" << endl;
                engn.allFound = false;      
                engn.getBookDataFromSite("www.ozon.ru");
                engn.getBookFromSite(boost::lexical_cast<string>(counter) + ".txt");            
            }            
            else 
                engn.getBookFromSite(boost::lexical_cast<string>(counter) + ".txt");
//            cout << "getted name and FIO" << endl;
            if (engn.neededReloadPagebyNewPath())
            {
//                cout << "ищем по новому пути" << endl;
                engn.allFound = false;      
                engn.getBookDataFromSite("www.ozon.ru");
                engn.getBookFromSite(boost::lexical_cast<string>(counter) + ".txt");
//                cout << "finished" << endl;
            }
//            counter++;
            // конец сбора информации, пора заносить в базу и на сайт
            
            
        }
        
//        engn.book.qrcode   = engn.generateQRcodes(engn.book.pagename);
        if (engn.book.coverPath != "")
        {
            cout << "genering full page" << endl;
            flinks.fWrite("http://murmanlib.ru/" + engn.book.pagename);
            engn.book.pagename = engn.generatePagesNames(1);
            engn.generateQRcodes(engn.book.pagename);        
            engn.updateBookRecord(it->bookrecord  + "11#http://murmanlib.ru/" + engn.book.pagename + "\x1F" + "10#\\\\cgb-centr\\qrcodes\\"+ engn.book.pagename + ".png\x1F\x0D\x0A");
            engn.makeConn("murmanlib.ru");
        }
        else
        {
            cout << "genering template page" << endl;
            engn.book.pagename = engn.generatePagesNames(1);
            engn.generateQRcodes(engn.book.pagename);        
            engn.updateBookRecord(it->bookrecord  + "11#http://murmanlib.ru/" + engn.book.pagename + "\x1F" + "10#\\\\cgb-centr\\qrcodes\\"+ engn.book.pagename + ".png\x1F\x0D\x0A");
            engn.book.coverPath = "www.vsedlyainformatikov.net/_ph/3/433388687.jpg";
            engn.book.annotation = "<pre>        <b>" + it->fio + "</b><br><i>                \"" + it->bookname + "</i>\"</pre>";
            engn.makeConn("murmanlib.ru");            
        }
                
        cout << "Аннотация: " << engn.book.annotation << endl;
        cout << "Обложка:  "  << engn.book.coverPath << endl;
            


        
        it++;
        flinks.fClose();
    }    
    
    
    return 0;
}
Example #18
0
//==============================================
//==============================================
//==============================================
void  fitPedBT( int itp,int run,TH2F *h2, int id1, int id2) {
  if(id2>18000) id2=18000;
    char txt[1000], txt2[1000];
    
    sprintf(txt,"ped%s",cTile4[itp]);
    sprintf(txt2,"ped %s R%d; %s soft ID; pedestal +/- fit err (ADC)",cTile4[itp],run,cTile4[itp]);
    hPed=new TH1F(txt,txt2,mxBTiles,0.5,mxBTiles+0.5);
    hPed->Sumw2();
    hPed->GetXaxis()->SetLabelSize(0.08);
    hPed->GetYaxis()->SetLabelSize(0.08);

    sprintf(txt,"stat%s",cTile4[itp]);
    sprintf(txt2,"status %s R%d; %s soft ID; jan status",cTile4[itp],run,cTile4[itp]);
    hStat=new TH1I(txt,txt2,mxBTiles,0.5,mxBTiles+0.5); hStat->Reset(-1); // default is bad
    hStat->GetXaxis()->SetLabelSize(0.08);
    hStat->GetYaxis()->SetLabelSize(0.08);

    sprintf(txt,"chi%s",cTile4[itp]);
    sprintf(txt2,"chi2/DOF %s R%d; %s soft ID; ped Chi2/DOF",cTile4[itp],run,cTile4[itp]);
    hChi=new TH1F(txt,txt2,mxBTiles,0.5,mxBTiles+0.5); hStat->Reset(-1); // default is bad
    hChi->GetXaxis()->SetLabelSize(0.08);
    hChi->GetYaxis()->SetLabelSize(0.08);
    hChi->GetYaxis()->SetTitleSize(0.2);

    sprintf(txt,"sigPed%s",cTile4[itp]);
    sprintf(txt2,"sigma(ped) %s R%d; %s soft ID; sig(ped) ADC",cTile4[itp],run,cTile4[itp]);
    hSig=new TH1F(txt,txt2,mxBTiles,0.5,mxBTiles+0.5); hStat->Reset(-1); // default is bad
    hSig->GetXaxis()->SetLabelSize(0.08);
    hSig->GetYaxis()->SetLabelSize(0.08);

    hPeak=new TH1F("hpedPeak", "integral of pedestal peak;soft ID", mxBTiles,0.5,mxBTiles+0.5);
    hPeak->GetXaxis()->SetLabelSize(0.08);
    hPeak->GetYaxis()->SetLabelSize(0.08);

  
  float par_nsig=3; // integration range for QA
  float par_rms=2; // to approximate fit range
  float cut_yield0=100; 
  float cut_yieldR1=0.7;
  float cut_ch2min=0.1; 
  float cut_ch2ndf=200.; 
  float cut_pedL=105;
  float cut_pedH=295;
  float cut_pedH=295;
  float cut_sigPed=2.7;

  //  float cut_minYiled=50;

  axX=h2->GetXaxis();
  float x1=axX->GetXmin();
  float x2=axX->GetXmax();
  int nbX=axX->GetNbins();
  printf("X-axis range  --> [%.1f, %.1f], nb=%d %s\n",x1,x2,nbX,axX->GetTitle());

  axY=h2->GetYaxis();
  float y1=axY->GetXmin();
  float y2=axY->GetXmax();
  int nbY=axY->GetNbins();
  printf("Y-axis range  --> [%.1f, %.1f], nb=%d\n",y1,y2,nbY);

  TH1F*h=new TH1F("h1","h1",nbY,y1,y2); // working histo for 1-D spectrum
  // do projections
  int ih;
  for(ih=id1; ih<=id2; ih++) {
    char txt1[100], txt2[1000];
    sprintf(txt1,"id%d",ih);
    sprintf(txt2,"%s soft id=%d;%s ",cTile4[itp],ih,axY->GetTitle());
    h->SetTitle(txt2);
    h->Reset();  h->SetAxisRange(y1,y2);
    int i;
    int kBad=1;
    for(i=1;i<=nbY;i++) h->SetBinContent(i,h2->GetBinContent(ih,i));
    //for(i=1;i<=nbY;i++) printf("%d %f \n",i,h2->GetBinContent(ih,i));
    float mean=h->GetMean();
    float yield=h->Integral();
    h->SetEntries(yield);
    printf("******** work on %s  mean=%.1f rms=%.1f yield=%.1f\n",txt1,mean,h->GetRMS(),yield);

    if(yield<cut_yield0) {  hStat->SetBinContent(ih,kBad); continue; }
    kBad<<=1;

    if(isSticky(h,mean)) {  hStat->SetBinContent(ih,kBad); continue; }
    kBad<<=1;

    // if(ih>=12367) return;
    float adc1=mean-par_rms*par_nsig;
    float adc2=mean+par_rms*par_nsig-1;
    h->SetAxisRange( adc1,adc2);
    float yield2=h->Integral();
    float r1=yield2/yield;
    printf(" range=%d,%d  r1=%.3f yield2=%.1f\n",adc1,adc2,r1,yield2);
    
    if(r1< cut_yieldR1) {  hStat->SetBinContent(ih,kBad); continue; }
    kBad<<=1;

    h->Fit("gaus","Q","Rh", adc1, adc2);
    TF1 *ff=h->GetFunction("gaus"); assert(ff);
    ff->SetLineColor(kRed);
    ff->SetLineWidth(1.);
    h->Draw();
    
    float ped=ff->GetParameter(1);
    float pedErr=ff->GetParError(1);
    float sig=ff->GetParameter(2);
    float chi2=ff->GetChisquare();
    float ndf=ff->GetNDF();
  
    printf("chi2=%f ndf=%f\n", chi2,ndf);
    if(chi2<cut_ch2min)  {  hStat->SetBinContent(ih,kBad); continue; }
    // keep the same flag
    hChi->SetBinContent(ih, chi2/ndf);
    if(chi2/ndf> cut_ch2ndf)  {  hStat->SetBinContent(ih,kBad); continue; }
    kBad<<=1;
 
    adc1=ped-sig*par_nsig;
    adc2=ped+sig*par_nsig;
    h->SetAxisRange( adc1,adc2);
    float yield3=h->Integral();
    float r2=yield2/yield;
    printf("ped=%f sig=%f range=%d,%d r2=%.3f\n",ped,sig,adc1,adc2,r2);

    hSig->SetBinContent(ih,sig);
    if(sig>cut_sigPed || sig<0) {  hStat->SetBinContent(ih,kBad); continue; }
    kBad<<=1;

    if(isRawAdc){
      if(ped< cut_pedL)  {  hStat->SetBinContent(ih,kBad); continue; }
      if(ped> cut_pedH)  {  hStat->SetBinContent(ih,kBad); continue; }
      kBad<<=1;
    }
     
    hPed->SetBinContent(ih,ped);
    hPed->SetBinError(ih,pedErr);

    int np=grP->GetN();
    grP->SetPoint(np,ih,ped);
    grP->SetPointError(np,0,pedErr);
    
    hPeak->SetBinContent(ih,r2);
    hStat->SetBinContent(ih,0); // good  
  }
  h->SetAxisRange(y1,y2);
  
  printStat(id1,id2);
  fd2->cd();
  h->Write();
}