--- quicklook/QLflightTmtc_Header/HeaderScan.cpp 2006/07/11 14:27:33 1.4 +++ quicklook/QLflightTmtc_Header/HeaderScan.cpp 2006/08/31 14:28:32 1.8 @@ -54,6 +54,11 @@ * Fixed bugs: for a large namber of events is not possible to have vectors, so I have subsituted graphs with histograms * or divided the graphs in more than one canvas. * +* Version 1.8 +* Date 8 August 2006 - Malvezzi +* +* Description: changed the scale in the second and third graph of the first canvas; added a pad of text in the second canvas +* */ @@ -77,18 +82,21 @@ #include "TGaxis.h" #include "EventHeader.h" #include "PscuHeader.h" +#include "RunHeaderEvent.h" +#include "TPaveText.h" using namespace std; void HeaderScan(TString base, TString outDir, TString format) { + //------------------- Variables initilization -------------------------// - Long64_t nevents=0; - ULong_t lastime, firstime,obt;// offset, lastoffset, firstoffset; - double obmin=0.; + Long64_t nevents=0, runnevents; + ULong_t lastime, firstime, primotempo, ultimotempo, primoffset=500000000, ultimoffset; + double obmin=0., time=0.; double obmax=0.; - stringstream oss, oss1, oss2, oss3, noentries; + stringstream oss, oss1, oss2, oss3, noentries, stringa; //------- load root file -------------- TFile *file = new TFile(base.Data()); if (!file){ @@ -103,8 +111,16 @@ pamela::PscuHeader *ph = 0; PhysicsTr->SetBranchAddress("Header", &eh); - nevents = headBr->GetEntries(); + + TTree *RunHeadTr = (TTree*)file->Get("RunHeader"); ///run header tree + pamela::EventHeader *eH=0; + pamela::RunHeaderEvent *reh=0; + + RunHeadTr->SetBranchAddress("Header",&eH); + RunHeadTr->SetBranchAddress("RunHeader",&reh); + runnevents = RunHeadTr->GetEntries(); + TString filename = ((TObjString*)base.Tokenize('/')->Last())->GetString(); filename = ((TObjString*)filename.Tokenize('.')->First())->GetString(); @@ -144,179 +160,355 @@ } //-------------- to know the max and min OBT ----------------------------// - for (Int_t i = 0; i < nevents; i++){ - headBr->GetEntry(i); - ph = eh->GetPscuHeader(); - obt = ph->GetOrbitalTime(); - //if(obt <= firstime) firstime=obt; - if(obt >= lastime) lastime=obt; - } - - //------------------------ First histogram -----------------------------------// headBr->GetEntry(0); ph = eh->GetPscuHeader(); firstime = ph->GetOrbitalTime(); - obmin=firstime; - obmax=lastime; + + int iii =0; + while(iii < nevents){ + headBr->GetEntry(iii); + ph = eh->GetPscuHeader(); + if((ph->GetOrbitalTime()) <= firstime) firstime=ph->GetOrbitalTime(); + if((ph->GetOrbitalTime()) >= lastime) lastime=ph->GetOrbitalTime(); + iii++; + } + + //------------------------ First histogram -----------------------------------// + + obmin=firstime; + obmax=lastime; oss1.str(""); - oss1 <<"File name= "<< filename.Data() <<". Start time= " << obmin << ", end time= "<< obmax <<" ms"<<". Physics Packet per minute"; + oss1 << filename.Data() <<": Physics Packet per minute. Start time = " << obmin << ", End time = "<< obmax <<" ms"; Int_t nbin = (lastime-firstime)/60000; - TH1F *h1 = new TH1F ("histo1", oss1.str().c_str(), nbin, obmin, obmax); + //TH1F *h1 = new TH1F ("histo1", oss1.str().c_str(), nbin, obmin, obmax); + TH1F *h1 = new TH1F ("histo1", "" , nbin, obmin, obmax); - //------------- Graph PscuCounter vs FileOffset --------------------------------- - const Int_t size = 10000; - Int_t ev=0; - Double_t PscuCounter[size], FileOffset[size], tempo[size], PcktLenght[size]; - Int_t m=0; - Int_t pag= (nevents/10000)+1; - - TMultiGraph *mg1 = new TMultiGraph(); - oss1.str(""); - oss1 << filename.Data() <<": PscuCounter vs FileOffset."; - mg1->SetTitle(oss1.str().c_str()); - - TMultiGraph *mg2 = new TMultiGraph(); - oss1.str(""); - oss1 << filename.Data() <<": OBT vs FileOffset."; - mg2->SetTitle(oss1.str().c_str()); - - TMultiGraph *mg3 = new TMultiGraph(); oss2.str(""); oss2 << filename.Data() <<": Lenght of Physic packets"; - mg3->SetTitle(oss2.str().c_str()); + Int_t nbin2 =(lastime-firstime); + //TH1F *packetLength = new TH1F ("packetLength", oss2.str().c_str(), nbin2, obmin, obmax); + TH1F *packetLength = new TH1F ("packetLength", "", nbin2, obmin, obmax); - TMultiGraph *mg4 = new TMultiGraph(); oss3.str(""); - oss3 << filename.Data() <<": Physics Counter"; - mg4->SetTitle(oss3.str().c_str()); + oss3 << filename.Data() <<": Physics Counter vs. OBT"; + // TH1F *packeCounter = new TH1F ("packeCounter", oss3.str().c_str(), nbin2, obmin, obmax); + TH1F *packeCounter = new TH1F ("packeCounter", "", nbin2, obmin, obmax); + //---------------------------------------------------- + TCanvas *finalCanv = new TCanvas("Header", base, 1200, 1600); + finalCanv->Divide(1,5); + finalCanv->SetFillColor(10); + + TPad *all2= new TPad ("","", 0, 0, 1, 1); + all2->SetFillColor(10); + TPad *all3= new TPad ("","", 0, 0, 1, 1); + all3->SetFillColor(10); + TPad *all4= new TPad ("","", 0, 0, 1, 1); + all4->SetFillColor(10); + TPad *all= new TPad ("","", 0, 0, 1, 1); + all->SetFillColor(10); + TPad *all1= new TPad ("","", 0, 0, 1, 1); + all1->SetFillColor(10); + TPad *pad = new TPad("pad","pad", .80,.50,.90,.80); + pad->SetFillColor(10); + //---------------------------------------------------- - TCanvas *finalCanv1 = new TCanvas("Header_1", base, 1280, 1024); - finalCanv1->Divide(1,3); - finalCanv1->SetFillColor(10); - - TCanvas *finalCanv2 = new TCanvas("Header_2", base, 1280, 1024); - finalCanv2->Divide(1,2); - finalCanv2->SetFillColor(10); + TMultiGraph *mg1 = new TMultiGraph(); + - /////ciclo sulle pagine//////////////////// - for (Int_t interval=0; intervalGetEntry(ev+l); + + //-------------------------------------------------------------------------- + for (Int_t l = 0; l < nevents; l++){ + headBr->GetEntry(l); ph = eh->GetPscuHeader(); - PscuCounter[l]= ph->GetCounter(); // = PcktCounter[l] - FileOffset[l]=ph->GetFileOffset(); - tempo[l]=ph->GetOrbitalTime(); - PcktLenght[l]=ph->GetPacketLenght(); - h1->Fill(ph->GetOrbitalTime()); - m=l; - } - - TGraph *graph1= new TGraph(m, tempo, PcktLenght); - graph1->SetMarkerColor(2); - graph1->SetMarkerSize(.5); - graph1->SetMarkerStyle(21); - mg3->Add(graph1); - - TGraph *graph2= new TGraph(m, tempo, PscuCounter); - graph2->SetMarkerColor(4); - graph2->SetMarkerSize(.5); - graph2->SetMarkerStyle(21); - mg4->Add(graph2); - - TGraph *graph3= new TGraph(m, FileOffset, PscuCounter); - graph3->SetMarkerColor(3); - graph3->SetMarkerSize(.5); - graph3->SetMarkerStyle(21); - mg1->Add(graph3); - - TGraph *graph4= new TGraph(m, FileOffset, tempo); - graph4->SetMarkerColor(kBlue); - graph4->SetMarkerSize(.5); - graph4->SetMarkerStyle(21); - mg2->Add(graph4); + h1->Fill(ph->GetOrbitalTime()); + packetLength->Fill(ph->GetOrbitalTime(),ph->GetPacketLenght()); + packeCounter->Fill(ph->GetOrbitalTime(),ph->GetCounter()); + } - ev=ev+10000; - } //------------ First Canvas ---------------------// + TLine li; + li.SetLineStyle(4); + li.SetLineWidth(2); + + finalCanv->cd(1); + all2->Draw(); + all2->cd(); - finalCanv1->cd(1); h1->SetStats(kFALSE); h1->GetXaxis()->SetTitle("OBT (ms)"); h1->GetXaxis()->CenterTitle(); h1->GetXaxis()->SetLabelSize(0.04); h1->GetYaxis()->SetTitle("Number of events "); h1->GetYaxis()->CenterTitle(); + h1->GetYaxis()->SetLabelSize(0.06); h1->GetYaxis()->SetTitleSize(0.06); - h1->GetYaxis()->SetTitleOffset(0.8); + h1->GetYaxis()->SetTitleOffset(0.6); h1->Draw(); + for (Int_t l = 0; l < runnevents; l++){ + RunHeadTr->GetEntry(l); + ph = eH->GetPscuHeader(); + int ws= reh->RM_ACQ_SETTING_MODE; + int id = ph->GetPacketId1(); + Int_t obt = ph->GetOrbitalTime(); + if (ws==1){ + li.SetLineColor(3); + li.DrawLine(obt,0,obt,h1->GetMaximum()); + } + else if (ws==2){ + li.SetLineColor(4); + li.DrawLine(obt,0,obt,h1->GetMaximum()); + } + } + + finalCanv->cd(1); + stringstream ws1, ws2; + ws1.str(""); + ws2.str(""); + ws1<<"ACQ_SETTING_MODE = 1"; + ws2<<"ACQ_SETTING_MODE = 2"; + TPaveText *pt=0; + pt = new TPaveText (.60,.92,.76,.98); + pt->AddText(ws1.str().c_str()); + pt->SetTextColor(3); + pt->SetFillColor(10); + pt->SetBorderSize(0); + pt->Draw(); + TPaveText *pt1=0; + pt1 = new TPaveText (.76,.92,.92,.98); + pt1->AddText(ws2.str().c_str()); + pt1->SetTextColor(4); + pt1->SetFillColor(10); + pt1->SetBorderSize(0); + pt1->Draw(); + // TPaveText *pt1=0; + pt1 = new TPaveText (.05,.91,.6,1); + pt1->AddText(oss1.str().c_str()); + pt1->SetTextColor(1); + pt1->SetFillColor(10); + pt1->SetBorderSize(0); + pt1->Draw(); + + finalCanv->cd(2); + all3->Draw(); + all3->cd(); + packetLength->SetStats(kFALSE); + packetLength->SetMarkerColor(2); + packetLength->SetMarkerSize(.5); + packetLength->SetMarkerStyle(21); + packetLength->GetXaxis()->SetTitle("OBT (ms)"); + packetLength->GetXaxis()->CenterTitle(); + packetLength->GetXaxis()->SetLabelSize(0.05); + packetLength->GetYaxis()->SetTitle("Lenght (byte)"); + packetLength->GetYaxis()->CenterTitle(); + packetLength->GetYaxis()->SetLabelSize(0.05); + packetLength->GetYaxis()->SetTitleSize(0.06); + packetLength->GetYaxis()->SetTitleOffset(0.6); + packetLength->Draw("9p"); + finalCanv->cd(2); + //TPaveText *pt=0; + pt = new TPaveText (.6,.91,.90,1); + pt->AddText(oss2.str().c_str()); + pt->SetTextColor(2); + pt->SetFillColor(10); + pt->SetBorderSize(0); + pt->Draw(); + + finalCanv->cd(3); + all4->Draw(); + all4->cd(); + packeCounter->GetTitle(); + packeCounter->SetStats(kFALSE); + packeCounter->SetMarkerColor(4); + packeCounter->SetMarkerSize(.2); + packeCounter->SetMarkerStyle(21); + packeCounter->GetXaxis()->SetTitle("OBT (ms)"); + packeCounter->GetXaxis()->SetTitleSize(0.05); + packeCounter->GetXaxis()->CenterTitle(); + packeCounter->GetXaxis()->SetLabelSize(0.05); + packeCounter->GetYaxis()->SetTitle("Counter"); + packeCounter->GetYaxis()->SetTitleSize(0.05); + packeCounter->GetYaxis()->CenterTitle(); + packeCounter->GetYaxis()->SetLabelSize(0.05); + packeCounter->GetYaxis()->SetTitleSize(0.06); + packeCounter->GetYaxis()->SetTitleOffset(0.6); + Double_t min = 500000000.; + for (Int_t l = 0; l < nevents; l++){ + if((packeCounter->GetBinContent(l))<= min && (packeCounter->GetBinContent(l))!= 0) min = packeCounter->GetBinContent(l); + } + packeCounter->SetMinimum(min); + packeCounter->Draw("9p"); + finalCanv->cd(3); + TPaveText *pt2=0; + pt2 = new TPaveText (.6,.91,.90,1); + pt2->AddText(oss3.str().c_str()); + pt2->SetTextColor(4); + pt2->SetFillColor(10); + pt2->SetBorderSize(0); + pt2->Draw(); - finalCanv1->cd(2); - mg3->Draw("AP"); - mg3->GetXaxis()->SetTitle("OBT (ms)"); - mg3->GetXaxis()->CenterTitle(); - mg3->GetXaxis()->SetLabelSize(0.04); - mg3->GetYaxis()->SetTitle("Lenght (byte)"); - mg3->GetYaxis()->CenterTitle(); - mg3->GetYaxis()->SetLabelSize(0.04); - mg3->GetYaxis()->SetTitleSize(0.06); - mg3->GetYaxis()->SetTitleOffset(0.8); - - - finalCanv1->cd(3); - mg4->Draw("AP"); - mg4->GetXaxis()->SetTitle("OBT (ms)"); - mg4->GetXaxis()->SetTitleSize(0.05); - mg4->GetXaxis()->CenterTitle(); - mg4->GetXaxis()->SetLabelSize(0.04); - mg4->GetYaxis()->SetTitle("Counter"); - mg4->GetYaxis()->SetTitleSize(0.05); - mg4->GetYaxis()->CenterTitle(); - mg4->GetYaxis()->SetLabelSize(0.04); - mg4->GetYaxis()->SetTitleSize(0.06); - mg4->GetYaxis()->SetTitleOffset(0.8); - - finalCanv1->Update(); - - oss.str(""); - oss << outDir.Data() << filename.Data(); - oss << "_HeaderScan_1." << format.Data(); - finalCanv1->SaveAs(oss.str().c_str()); + //------------------------------------------------- + TList *list = new TList; + Int_t numkey; + TObject *key = new TObject; + const char *name; + TTree* tr = new TTree; + Long64_t nevntskey=0; + list = file->GetListOfKeys(); + numkey = file->GetNkeys(); + int ll=0; + int kk=0; + + for (Int_t i=0; iAt(i); + name=(char *)(key->GetName()); + tr = (TTree*)file->Get(name); + if (tr->IsZombie()) continue; + tr->SetBranchAddress("Header", &eh); + TBranch *Br = tr->GetBranch("Header"); + nevntskey = tr->GetEntries(); + + if(nevntskey !=0){ + Int_t size1=nevntskey; + Double_t *PscuCounter1 = new Double_t[size1]; + Double_t *FileOffset1 = new Double_t[size1]; + Double_t *tempo1 = new Double_t[size1]; + //Double_t *salto= new Double_t[100]; + //Double_t *salto1= new Double_t[100]; + + int l=0; + while(lGetEntry(l); + ph = eh->GetPscuHeader(); + PscuCounter1[l]= ph->GetCounter(); + FileOffset1[l]=ph->GetFileOffset(); + tempo1[l]=ph->GetOrbitalTime(); + if(ph->GetFileOffset()<= primoffset){ + primoffset =ph->GetFileOffset(); + primotempo=ph->GetOrbitalTime(); + } + if(ph->GetFileOffset()>= ultimoffset){ + ultimoffset = ph->GetFileOffset(); + ultimotempo = ph->GetOrbitalTime(); + } + /*if(l>0){ + if(tempo1[l] < tempo1[l-1]){ + salto1[kk] =(const Double_t*)tempo1[l-1]; + salto[ll]= ph->GetOrbitalTime(); + ll=ll+1; + kk=kk+1; + } + }*/ + l++; + } + + TGraph *graph3= new TGraph(nevntskey, (const Double_t*)FileOffset1, (const Double_t*)PscuCounter1); + graph3->SetMarkerColor(3); + graph3->SetMarkerSize(.2); + graph3->SetMarkerStyle(21); + mg1->Add(graph3); + + TGraph *graph4= new TGraph(nevntskey, (const Double_t*)FileOffset1, (const Double_t*)tempo1); + graph4->SetMarkerColor(kBlue); + graph4->SetMarkerSize(.2); + graph4->SetMarkerStyle(21); + mg2->Add(graph4); + } + } + + kk=kk-1; + ll=ll-1; + + TLatex *lat = new TLatex(); + lat->SetTextAlign(12); + lat->SetTextSize(0.15); + lat->SetTextColor(kBlue); + //------------ Second Canvas ---------------------// + finalCanv->cd(4); + all1->Draw(); + all1->cd(); - - //------------ Second Canvas ---------------------// - finalCanv2->cd(1); + oss1.str(""); + oss1 << filename.Data() <<": PscuCounter vs FileOffset."; + //mg1->SetTitle(oss1.str().c_str()); mg1->Draw("AP"); mg1->GetXaxis()->SetTitle("File Offset"); mg1->GetXaxis()->CenterTitle(); - mg1->GetXaxis()->SetTitleSize(0.05); - mg1->GetXaxis()->SetLabelSize(0.04); + mg1->GetXaxis()->SetTitleSize(0.045); + mg1->GetXaxis()->SetLabelSize(0.05); mg1->GetYaxis()->SetTitle("Counter"); mg1->GetYaxis()->CenterTitle(); mg1->GetYaxis()->SetTitleSize(0.05); - mg1->GetYaxis()->SetLabelSize(0.04); - - finalCanv2->cd(2); + mg1->GetYaxis()->SetLabelSize(0.06); + mg1->GetYaxis()->SetTitleOffset(0.7); + finalCanv->cd(4); + TPaveText *pt3=0; + pt3 = new TPaveText (.60,.91,.90,1); + pt3->AddText(oss1.str().c_str()); + pt3->SetTextColor(3); + pt3->SetFillColor(10); + pt3->SetBorderSize(0); + pt3->Draw(); + + + finalCanv->cd(5); + all->Draw(); + all->cd(); + + oss3.str(""); + oss3 << filename.Data() <<" OBT vs FileOffset. First packet = "<SetTitle(oss3.str().c_str()); mg2->Draw("AP"); mg2->GetXaxis()->SetTitle("File Offset"); mg2->GetXaxis()->CenterTitle(); - mg2->GetXaxis()->SetTitleSize(0.05); - mg2->GetXaxis()->SetLabelSize(0.04); + mg2->GetXaxis()->SetTitleSize(0.045); + mg2->GetXaxis()->SetLabelSize(0.05); mg2->GetYaxis()->SetTitle("OBT"); mg2->GetYaxis()->CenterTitle(); mg2->GetYaxis()->SetTitleSize(0.05); - mg2->GetYaxis()->SetLabelSize(0.04); + mg2->GetYaxis()->SetLabelSize(0.055); + mg2->GetYaxis()->SetTitleOffset(0.6); + /*pad->Draw(); + pad->cd(); + stringa.str(""); + stringa << "new data from "<< primotempo;//<<" to "<< salto1; + lat->DrawLatex(0.08, 0.8, stringa.str().c_str()); + double min2 = 0.8; + if(ll > 0){ + pad->Draw(); + pad->cd(); + for(Int_t k=0; k <(kk); k++){ + stringa.str(""); + stringa << "old data from "<< salto[kk]<< " to "<DrawLatex(0.08, min2,stringa.str().c_str()); + //cout<Update(); + finalCanv->cd(5); + TPaveText *pt4=0; + pt4 = new TPaveText (.38 ,.91,.92,1); + pt4->AddText(oss3.str().c_str()); + pt4->SetTextColor(kBlue); + pt4->SetFillColor(10); + pt4->SetBorderSize(0); + pt4->Draw(); + + // finalCanv->Draw(); + finalCanv->Update(); oss1.str(""); oss1 << outDir.Data() << filename.Data(); - oss1 << "_HeaderScan_2"<<"." << format.Data(); + oss1 << "_HeaderScan"<<"." << format.Data(); + + finalCanv->SaveAs(oss1.str().c_str()); - finalCanv2->SaveAs(oss1.str().c_str()); + file->Close(); } @@ -364,3 +556,4 @@ } HeaderScan(argv[1], outDir, format); } +