| 1 | /** | /** | 
| 2 | * FTrkQLook_EXPERT | * FTrkQLook_EXPERT.cxx | 
| 3 | * | * | 
| 4 | * autor: D.Fedele | * autor: D.Fedele | 
| 5 | * version 3.0 | * version v1r04 | 
| 6 | * Parameters: | * Parameters: | 
| 7 | *      file - the data file to analyze | *      file - the data file to analyze | 
| 8 | *      fromevent - first event to analyze | *      fromevent - first event to analyze | 
| 19 | #include <TLatex.h> | #include <TLatex.h> | 
| 20 | #include <TCanvas.h> | #include <TCanvas.h> | 
| 21 | #include <TGraph.h> | #include <TGraph.h> | 
| 22 |  | #include <TFile.h> | 
| 23 | #include <TTree.h> | #include <TTree.h> | 
| 24 | #include <TStyle.h> | #include <TStyle.h> | 
| 25 | // | // | 
| 35 | // | // | 
| 36 | #define MAXSTORAGE 50000 | #define MAXSTORAGE 50000 | 
| 37 |  |  | 
|  | void stringcopy(TString& s1, const TString& s2, Int_t from=0, Int_t to=0){ |  | 
|  | if ( to == 0 ){ |  | 
|  | Int_t t2length = s2.Length(); |  | 
|  | s1 = ""; |  | 
|  | to = t2length; |  | 
|  | }; |  | 
|  | for (Int_t i = from; i<to; i++){ |  | 
|  | s1.Append(s2[i],1); |  | 
|  | }; |  | 
|  | }; |  | 
|  |  |  | 
|  |  |  | 
| 38 | void FTrkQLook_EXPERT(TString file,Int_t fromevent,Int_t toevent, TString outdir, TString outfile) | void FTrkQLook_EXPERT(TString file,Int_t fromevent,Int_t toevent, TString outdir, TString outfile) | 
| 39 | { | { | 
| 40 | // | // | 
| 41 | //   obtain information about the data file and select the output dir | //   obtain information about the data file and select the output dir | 
| 42 | const string filepath=file.Data(); | const string filepath=file.Data(); | 
| 43 | Int_t dwpos = filepath.rfind("/"); | Int_t dwpos = file.Last('/'); | 
| 44 | Int_t dwpos1 = filepath.find(".root"); | Int_t dwpos1 = file.Last('.'); | 
|  | TString fpath=(filepath.c_str()); |  | 
| 45 | TString base,ffile ; | TString base,ffile ; | 
| 46 | stringcopy(ffile,fpath,dwpos+1,dwpos1); | ffile=file(dwpos+1,dwpos1-(dwpos+1)); | 
| 47 | stringcopy(base,fpath,0,dwpos); | if(dwpos>0) base=file(0,dwpos); | 
|  | if(dwpos>0) base+="/"; |  | 
| 48 |  |  | 
| 49 | TString out; | TString out; | 
| 50 | if(outdir.Length()==0){ | if(outdir.Length()==0){ | 
| 52 | }else{ | }else{ | 
| 53 | out = outdir; | out = outdir; | 
| 54 | } | } | 
| 55 |  | if(out.Last('/')+1<out.Length()) out+="/"; | 
| 56 |  |  | 
| 57 | // | // | 
| 58 | // inizialise the variables and open the file | // inizialise the variables and open the file | 
| 422 | // | // | 
| 423 | // Fill compressiontime and eventnumber graphs and DSP warnings | // Fill compressiontime and eventnumber graphs and DSP warnings | 
| 424 | for(Int_t ii=0; ii<countnboot;ii++){ | for(Int_t ii=0; ii<countnboot;ii++){ | 
| 425 | TPaveText *pt1; | TPad *pt;         //pad for histos | 
|  | TPad *pt,*pt0;         //pad for histos |  | 
| 426 |  |  | 
|  | ofstream warning(out + "warning.txt",ios::out); |  | 
|  |  |  | 
| 427 | //**************************************************************************************** | //**************************************************************************************** | 
| 428 | //COMPRESSIONTIME vs. OBT Output Pages | //COMPRESSIONTIME vs. OBT Output Pages | 
| 429 | //**************************************************************************************** | //**************************************************************************************** | 
| 449 | //DSP EVENT NUMBER Output Pages | //DSP EVENT NUMBER Output Pages | 
| 450 | //**************************************************************************************** | //**************************************************************************************** | 
| 451 |  |  | 
| 452 | isfile<<"WARNINGS on DSP EVENT NUMBER   pag"<<ii+1; | isfile<<"DSP EVENT NUMBER vs. OBT   pag"<<ii+1; | 
| 453 | EventNumCanv[ii]=new TCanvas(isfile.str().c_str(),isfile.str().c_str(),900,1200); | EventNumCanv[ii]=new TCanvas(isfile.str().c_str(),isfile.str().c_str(),900,1200); | 
| 454 | EventNumCanv[ii]->SetFillColor(10); | EventNumCanv[ii]->SetFillColor(10); | 
| 455 | EventNumCanv[ii]->Range(0,0,100,100); | EventNumCanv[ii]->Range(0,0,100,100); | 
| 462 | t1->SetTextColor(1); | t1->SetTextColor(1); | 
| 463 | t1->SetTextAlign(12); | t1->SetTextAlign(12); | 
| 464 | t1->SetTextSize(0.02); | t1->SetTextSize(0.02); | 
| 465 | t1->DrawLatex(65.,98.7,isfile.str().c_str()); | t1->DrawLatex(62.,98.7,isfile.str().c_str()); | 
| 466 | isfile.str(""); | isfile.str(""); | 
| 467 |  |  | 
| 468 | Float_t posy = 0.95;    // up y-coord - top pads | Float_t posy = 0.95;    // up y-coord - top pads | 
| 498 | // | // | 
| 499 | // Obtain information about the tracker data | // Obtain information about the tracker data | 
| 500 | // and fill graphs and histos | // and fill graphs and histos | 
| 501 | Int_t warning_dspnumber=0,al=0; |  | 
| 502 |  | Int_t al=0; | 
| 503 | Float_t x[MAXSTORAGE]; | Float_t x[MAXSTORAGE]; | 
| 504 | Float_t yc[MAXSTORAGE][12]; | Float_t yc[MAXSTORAGE][12]; | 
| 505 | Float_t eventint[MAXSTORAGE]; | Float_t eventint[MAXSTORAGE]; | 
| 561 | //************************************************************************************** | //************************************************************************************** | 
| 562 | // warning for internal number | // warning for internal number | 
| 563 | //************************************************************************************** | //************************************************************************************** | 
| 564 | if(i<=10){ | if(i<=10 && te->eventn[i]!=te->eventn[i+1]) ALARM=1; | 
|  | if(te->eventn[i]!=te->eventn[i+1]){ |  | 
|  | warning_dspnumber++; |  | 
|  | warning<< "==> WARNING!!    Check entry "<< ev<<" (DSP "<<dsp<<")" <<endl<< |  | 
|  | "eventn["<<i<<"]= "<<te->eventn[i]<<"!= eventn["<<i+1<<"]= "<< te->eventn[i+1]<<endl; |  | 
|  | } |  | 
|  | else |  | 
|  | eventint[(ev-minev)]=te->eventn[0]; |  | 
|  | } |  | 
| 565 | } | } | 
| 566 |  | eventint[(ev-minev)]=te->eventn[0]; | 
| 567 | if(ev<=maxevent-1){ | if((ev-minev)>=1 && eventint[(ev-minev)]!=eventint[(ev-minev)-1]+1 && eventint[(ev-minev)]!=1) | 
| 568 |  | ALARM=1; | 
| 569 | if((ev-minev)>=1 && eventint[(ev-minev)]!=eventint[(ev-minev)-1]+1 && eventint[(ev-minev)]!=1){ |  | 
|  | warning_dspnumber++; |  | 
|  | warning<< "==> WARNING!!    Check entry "<< ev<<endl<< |  | 
|  | " DSP event num.= "<< eventint[(ev-minev)]<< |  | 
|  | " is different from (previus+1) ="<<eventint[(ev-minev)-1]+1 <<"\n"<<endl; |  | 
|  | } |  | 
|  | } |  | 
|  |  |  | 
| 570 | //******************************************************************************************** | //******************************************************************************************** | 
| 571 | // file DSP warning | // file DSP warning | 
| 572 | //******************************************************************************************** | //******************************************************************************************** | 
| 575 | alarm <<endl<< "================================================="<< endl; | alarm <<endl<< "================================================="<< endl; | 
| 576 | alarm << "PSCU-Pkt N. "<< ph->GetCounter() ; | alarm << "PSCU-Pkt N. "<< ph->GetCounter() ; | 
| 577 | alarm << " - OBT "<< ph->GetOrbitalTime() << " ms"<<endl; | alarm << " - OBT "<< ph->GetOrbitalTime() << " ms"<<endl; | 
| 578 |  | alarm << "Total events "<<nevent<<endl; | 
| 579 | alarm << "(ROOT-tree entry "<<ev<<" in page "<<ii+1<<" )"<<endl; | alarm << "(ROOT-tree entry "<<ev<<" in page "<<ii+1<<" )"<<endl; | 
| 580 | alarm << "================================================="<< endl; | alarm << "================================================="<< endl; | 
| 581 |  |  | 
| 582 | alarm << " DSPn"; | alarm << " DSPn"; | 
| 583 | alarm << " Event"; | alarm << " Counter"; | 
| 584 |  | alarm << " previous"; | 
| 585 | alarm << " Words"; | alarm << " Words"; | 
| 586 | alarm << " crc"; | alarm << " crc"; | 
| 587 | alarm << "  FC"; | alarm << "  FC"; | 
| 594 |  |  | 
| 595 | for(Int_t i=0; i<12 ; i++){ | for(Int_t i=0; i<12 ; i++){ | 
| 596 | alarm.width(5); alarm << te->DSPnumber[i]; | alarm.width(5); alarm << te->DSPnumber[i]; | 
| 597 | alarm.width(6); alarm << te->eventn[i]; | alarm.width(8); alarm << te->eventn[i]; | 
| 598 |  | alarm.width(8); alarm << eventint[(ev-minev)-1]; | 
| 599 | alarm.width(6); alarm << te->DATAlength[i]; | alarm.width(6); alarm << te->DATAlength[i]; | 
| 600 | alarm.width(4); alarm << te->crc[i]; | alarm.width(4); alarm << te->crc[i]; | 
| 601 | alarm.width(4); alarm << te->fc[i]; | alarm.width(4); alarm << te->fc[i]; | 
| 613 | } | } | 
| 614 | } | } | 
| 615 | if(al==0) alarm << endl<< "Page "<<ii+1<< ": ------>  NO ALARM!!! <-------"<<endl; | if(al==0) alarm << endl<< "Page "<<ii+1<< ": ------>  NO ALARM!!! <-------"<<endl; | 
|  | if(warning_dspnumber==0) warning<<"NONE"<<endl; |  | 
| 616 |  |  | 
| 617 | // | // | 
| 618 | // Draw the graphs | // Draw the graphs | 
| 634 | comprtime[i][ii]->GetXaxis()->CenterTitle(); | comprtime[i][ii]->GetXaxis()->CenterTitle(); | 
| 635 | comprtime[i][ii]->GetYaxis()->SetTitle("compressiontime (ms)"); | comprtime[i][ii]->GetYaxis()->SetTitle("compressiontime (ms)"); | 
| 636 | comprtime[i][ii]->GetYaxis()->CenterTitle(); | comprtime[i][ii]->GetYaxis()->CenterTitle(); | 
| 637 | comprtime[i][ii]->GetYaxis()->SetRangeUser(0,2); | comprtime[i][ii]->GetYaxis()->SetRangeUser(0,3); | 
| 638 | comprtime[i][ii]->Draw("ap"); | comprtime[i][ii]->Draw("ap"); | 
| 639 | oss1.str(""); | oss1.str(""); | 
| 640 | CompTimeCanv[ii]->Update(); | CompTimeCanv[ii]->Update(); | 
| 641 | } | } | 
| 642 |  |  | 
| 643 | EventNumCanv[ii]->cd(); | EventNumCanv[ii]->cd(); | 
| 644 | pt0=new TPad("pt0"," ",0.704,0.004,0.996,0.98); | pt = new TPad("pt"," ",0.02,0.01,1.,0.98,18,0,0); | 
|  | pt1 = new TPaveText(0.004,0.004,0.986,0.996); |  | 
|  | pt = new TPad("pt"," ",0.004,0.004,0.7,0.98,18,0,0); |  | 
|  | pt1->SetFillColor(10); |  | 
|  | pt1->ReadFile(out + "warning.txt"); |  | 
|  | pt1->SetTextAlign(22); |  | 
|  | pt1->SetTextSize(0.035); |  | 
|  | pt0->SetFillColor(10); |  | 
|  | pt0->SetFrameFillColor(10); |  | 
|  | pt0->Draw(); |  | 
|  | pt0->cd(); |  | 
|  | pt1->Draw(); |  | 
|  | EventNumCanv[ii]->cd(); |  | 
| 645 | pt->SetFillColor(10); | pt->SetFillColor(10); | 
| 646 | pt->SetFrameFillColor(10); | pt->SetFrameFillColor(10); | 
| 647 | pt->Draw(); | pt->Draw(); | 
| 648 | pt->cd(); | pt->cd(); | 
| 649 | eventnumb[ii]=new TGraph(maxev-minev,x,eventint); | eventnumb[ii]=new TGraph(maxev-minev,x,eventint); | 
| 650 | eventnumb[ii]->SetTitle(""); | eventnumb[ii]->SetTitle(""); | 
| 651 | eventnumb[ii]->GetXaxis()->SetLabelSize(0.03); | eventnumb[ii]->GetXaxis()->SetLabelSize(0.02); | 
| 652 | eventnumb[ii]->GetXaxis()->SetTitleSize(0.04); | eventnumb[ii]->GetXaxis()->SetTitleSize(0.03); | 
| 653 | eventnumb[ii]->GetXaxis()->SetTitle("OBT (ms)"); | eventnumb[ii]->GetXaxis()->SetTitle("OBT (ms)"); | 
| 654 | eventnumb[ii]->GetXaxis()->CenterTitle(); | eventnumb[ii]->GetXaxis()->CenterTitle(); | 
| 655 | eventnumb[ii]->GetXaxis()->SetTickLength(0.01); | eventnumb[ii]->GetXaxis()->SetTickLength(0.01); | 
| 656 | eventnumb[ii]->GetXaxis()->SetTitleOffset(1.2); | eventnumb[ii]->GetXaxis()->SetTitleOffset(1.1); | 
| 657 | eventnumb[ii]->GetYaxis()->SetLabelSize(0.03); | eventnumb[ii]->GetYaxis()->SetLabelSize(0.02); | 
| 658 | eventnumb[ii]->GetYaxis()->SetTitleSize(0.04); | eventnumb[ii]->GetYaxis()->SetTitleSize(0.03); | 
| 659 | eventnumb[ii]->GetYaxis()->SetTitle("DSP event-number"); | eventnumb[ii]->GetYaxis()->SetTitle("DSP event-number"); | 
| 660 | eventnumb[ii]->GetYaxis()->CenterTitle(); | eventnumb[ii]->GetYaxis()->CenterTitle(); | 
| 661 | eventnumb[ii]->GetYaxis()->SetTitleOffset(1.5); | eventnumb[ii]->GetYaxis()->SetTitleOffset(2.); | 
| 662 | eventnumb[ii]->SetMarkerStyle(21); | eventnumb[ii]->SetMarkerStyle(21); | 
| 663 | eventnumb[ii]->SetMarkerColor(kBlue); | eventnumb[ii]->SetMarkerColor(kBlue); | 
| 664 | eventnumb[ii]->SetMarkerSize(0.3); | eventnumb[ii]->SetMarkerSize(0.2); | 
| 665 | eventnumb[ii]->Draw("ap"); | eventnumb[ii]->Draw("ap"); | 
| 666 | EventNumCanv[ii]->Update(); | EventNumCanv[ii]->Update(); | 
| 667 |  |  | 
| 668 |  |  | 
|  | warning.close(); |  | 
| 669 | minev=maxev; | minev=maxev; | 
| 670 | if(maxev==maxevent-1) { | if(maxev==maxevent-1) { | 
| 671 | cntpgdat=ii+1; | cntpgdat=ii+1; | 
| 908 | com.str(""); | com.str(""); | 
| 909 | } | } | 
| 910 |  |  | 
|  | command.str(""); |  | 
|  | command<<"rm -f "<<out<<"warning.txt"; |  | 
|  | system(command.str().c_str()); |  | 
|  |  |  | 
| 911 | gROOT->Reset(); | gROOT->Reset(); | 
| 912 | return; | return; | 
| 913 | } | } |