/* https://root.cern.ch/doc/master/classTAttLine.html */ // compile with: // g++ -o plotudp.exe plotudp.cpp `root-config --cflags --glibs` // #include "TH1F.h" #include "TProfile.h" #include "TMath.h" #include "TF1.h" #include "TLegend.h" #include "TCanvas.h" // #include "TROOT.h" //#include "TStyle.h" #include "TTree.h" #include "TFile.h" #include "TGraphErrors.h" #include "TStyle.h" #include #include #include #include #include #include // #include #include #include using namespace std; int plotudp(const char *dir = "", const char *filename = "") { char csvname[256]; char name[256]; TH1F* hUdpTriggerDiff; TH1F* hUdpElapsedTime[25]; TH1F* hUdpLength[25]; TLegend *leg,*legL; TCanvas *c1 = new TCanvas("c1","Single cluster",600,600); sprintf(csvname, "%s/%s",dir,filename); int col; printf("FILE %s\n",csvname); sprintf(name, "UdphTriggerDiff"); hUdpTriggerDiff = ((TH1F *)(gROOT->FindObject(name))); hUdpTriggerDiff = new TH1F(name, "",200,0.0,100.0); sprintf(name, "hUdpElapsedTime_%d",0); hUdpElapsedTime[0] = ((TH1F *)(gROOT->FindObject(name))); if (hUdpElapsedTime[0]) delete hUdpElapsedTime[0]; hUdpElapsedTime[0] = new TH1F(name, "",1000,0.0,100.0); hUdpElapsedTime[0]->SetMinimum(0); hUdpElapsedTime[1] = new TH1F(name, "",1000,0.0,1.0); hUdpElapsedTime[1]->SetMinimum(0); hUdpElapsedTime[2] = new TH1F(name, "",1000,0.0,50.0); hUdpElapsedTime[2]->SetMinimum(0); sprintf(name, "hUdpLength_%d",0); hUdpLength[0] = ((TH1F *)(gROOT->FindObject(name))); if (hUdpLength[0]) delete hUdpLength[0]; hUdpLength[0] = new TH1F(name, "",500,0.0,10000.0); hUdpLength[0]->SetMinimum(0); FILE *csvfile; csvfile = fopen(csvname,"r"); char buffer[512]; int line = 0; int Packet; int TriggerNb,PacketNb,PacketLength; float PacketTime,TrigTime,PrevTrigger,PrevTime,ElapsedTime; char Source[32],Destination[32],Protocol[32],Info[32]; char PacketNb1[32],PacketTime1[32],PacketLength1[32]; TriggerNb = 0; while (fgets(buffer,sizeof(buffer),csvfile) != NULL) { if (line != 0) { // sscanf(buffer,"%d,%f,%s,%s,%s,%d,%s", // &PacketNb,&PacketTime,Source,Destination,Protocol,&PacketLength,Info); sscanf(buffer,"%[^,],%[^,],%[^,],%[^,],%[^,],%[^,],%[^\n]", PacketNb1,PacketTime1,Source,Destination,Protocol,PacketLength1,Info); puts(buffer); sscanf(PacketNb1,"%d",&PacketNb); sscanf(PacketLength1,"%d",&PacketLength); sscanf(PacketTime1,"%f",&PacketTime); if (strcmp(Protocol,"UDP") == 0) { if (strcmp(Source,"192.168.4.11") == 0) { // Trigger TrigTime = PacketTime; Packet = 0; PrevTime = PacketTime; if (TriggerNb > 0) { float TriggerDiff; TriggerDiff = 1000.0 * (TrigTime - PrevTrigger); hUdpTriggerDiff->Fill(TriggerDiff); if (TriggerDiff > 100.0) printf("TDIFF %f\n",TriggerDiff); } PrevTrigger = TrigTime; TriggerNb++; } if (strcmp(Source,"192.168.4.5") == 0) { // Data ElapsedTime = 1000.0 * (PacketTime - PrevTime); PrevTime = PacketTime; if (Packet == 0) hUdpElapsedTime[0]->Fill(ElapsedTime); else if (Packet > 0) { hUdpElapsedTime[1]->Fill(ElapsedTime); if (ElapsedTime > 1.0) { printf("PDIFF %f\n",ElapsedTime); hUdpElapsedTime[2]->Fill(ElapsedTime); } } hUdpLength[0]->Fill(PacketLength); Packet++; } } } line++; } gErrorIgnoreLevel = kWarning; gStyle->SetOptStat(111111); sprintf(name, "Trigger diff time"); hUdpTriggerDiff->SetTitle(name); hUdpTriggerDiff->GetXaxis()->SetTitle("Time (ms)"); sprintf(name, "Packet %d time",1); hUdpElapsedTime[0]->SetTitle(name); hUdpElapsedTime[0]->GetXaxis()->SetTitle("Time (ms)"); sprintf(name, "Packet >= %d time",2); hUdpElapsedTime[1]->SetTitle(name); hUdpElapsedTime[1]->GetXaxis()->SetTitle("Time (ms)"); sprintf(name, "Packet >= %d time > 1ms",2); hUdpElapsedTime[2]->SetTitle(name); hUdpElapsedTime[2]->GetXaxis()->SetTitle("Time (ms)"); // hUdpElapsedTime[i]->GetYaxis()->SetTitle("Pedestal"); sprintf(name, "Packet %d length",0); hUdpLength[0]->SetTitle(name); hUdpLength[0]->GetXaxis()->SetTitle("Bytes"); sprintf(name,"%s/%s.pdf(",dir,filename); hUdpTriggerDiff->Draw(); c1->SaveAs(name,"pdf"); sprintf(name,"%s/%s.pdf",dir,filename); hUdpElapsedTime[0]->Draw(); c1->SaveAs(name,"pdf"); hUdpElapsedTime[1]->Draw(); c1->SaveAs(name,"pdf"); hUdpElapsedTime[2]->Draw(); c1->SaveAs(name,"pdf"); hUdpLength[0]->Draw(); sprintf(name,"%s/%s.pdf)",dir,filename); c1->SaveAs(name,"pdf"); return 0; } int main (int argc, char *argv[]) { int iret = 0; printf("%s %s\n",argv[1],argv[2]); if (argc != 3) { printf("Wrong number of arguments: argc = %d\nSyntax should be:\n./plotmcmrefvped.exe dir filename\n",argc); return -1; } iret = plotudp(argv[1],argv[2]); return iret; }