// // Macro visualize the results of DA calculation. // Input parameter: file name with data produced by the SSD DA of rype root, // equipment identifier (DDL), // Slot number. // Author: Oleksandr.Borysov@cern.ch // #if !defined(__CINT__) || defined(__MAKECINT__) #include #include "TStyle.h" #include "TFile.h" #include "TPad.h" #include "TVirtualPad.h" #include "TGraph.h" #include "TAxis.h" #include "TCanvas.h" #include "TLegend.h" #include "TLegendEntry.h" #include "TString.h" #include "AliITSModuleDaSSD.h" #include "AliITSHandleDaSSD.h" #endif //_________________________________________________________// int viewSSDCalibrationLadData(const char *datafilename = 0, Int_t EqId = 0, Int_t ad = 0) { // Shows pedestal, noise with and without CM correcdtion for a modules with given DDL AD. if (!datafilename) { cerr << "Error, no data! Usage: viewCalibrationDat(.root, EqipmentId SlotId)\n"; return -1; } TFile *fileRun; AliITSHandleDaSSD *cl = 0; Int_t nm1, adci; const Int_t StrXModConst = AliITSModuleDaSSD::GetStripsPerModuleConst(); const Int_t NAdc = 12; fileRun = new TFile (datafilename, "READ"); fileRun->GetObject("AliITSHandleDaSSD;1", cl); if (!cl) { cerr << "Error reading file " << datafilename << ". Exit.\n"; return -1;} // cl->DumpModInfo(1.0); AliITSModuleDaSSD *md1 = 0; AliITSChannelDaSSD *str1 = 0; Float_t **tns, **tnscm, **tpd, **tstr; TString *grtitle; tns = new Float_t* [NAdc]; tnscm = new Float_t* [NAdc]; tpd = new Float_t* [NAdc]; tstr = new Float_t* [NAdc]; grtitle = new TString [NAdc]; for (int i = 0; i < NAdc; i++) { tns[i] = new Float_t [StrXModConst]; tnscm[i] = new Float_t [StrXModConst]; tpd[i] = new Float_t [StrXModConst]; tstr[i] = new Float_t [StrXModConst]; } nm1 = cl->GetNumberOfModules(); for (int j = 0; j < nm1; j++) { md1 = cl->GetModule(j); if (!md1) continue; if ((md1->GetModuleRorcEquipId() != EqId) || (md1->GetAD() != ad)) continue; cout << "Module " << md1->GetModuleRorcEquipId() << ":" << static_cast(md1->GetAD()) << ":" << static_cast(md1->GetADC()) << endl; adci = 7 < md1->GetADC() ? md1->GetADC() - 2 : md1->GetADC(); grtitle[adci].Form("Run%d_Eq%d_Slot%d_Adc%d", cl->GetRunId(), EqId, ad, static_cast(md1->GetADC())); for(int i = 0; i < StrXModConst; i++) { str1 = md1->GetStrip(i); tpd[adci][i] = str1->GetPedestal(); tns[adci][i] = str1->GetNoise(); tnscm[adci][i] = str1->GetNoiseCM(); tstr[adci][i] = (float)(i); } } if (!str1) { cerr << "No modules found!\n"; return 1; } TCanvas *c1; TGraph **ttp0, **ttp1, **ttp2, **ttp3; TLegend **lgnd; c1 = new TCanvas(); c1->Divide(4, 3); lgnd = new TLegend* [NAdc]; ttp0 = new TGraph* [NAdc]; ttp1 = new TGraph* [NAdc]; ttp2 = new TGraph* [NAdc]; ttp3 = new TGraph* [NAdc]; for (int i = 0; i < NAdc; i++) { ttp0[i] = new TGraph(StrXModConst, tstr[i], tnscm[i]); ttp1[i] = new TGraph(StrXModConst, tstr[i], tpd[i]); ttp2[i] = new TGraph(StrXModConst, tstr[i], tns[i]); ttp3[i] = new TGraph(StrXModConst, tstr[i], tnscm[i]); ttp0[i]->SetName(grtitle[i].Data()); ttp1[i]->SetName(Form("Pedestal_%s", grtitle[i].Data())); ttp2[i]->SetName(Form("Noise_%s", grtitle[i].Data())); ttp3[i]->SetName(Form("Noise_CM_corrected_%s", grtitle[i].Data())); ttp0[i]->SetTitle(grtitle[i].Data()); ttp1[i]->SetTitle("Pedestal"); ttp2[i]->SetTitle("Noise"); ttp3[i]->SetTitle("Noise CM corrected"); c1->cd(i+1); gPad->SetTitle(grtitle[i].Data()); gPad->SetName(grtitle[i].Data()); ttp0[i]->GetYaxis()->SetRangeUser(0.0, 60.0); ttp0[i]->SetLineColor(3); ttp0[i]->Draw("LA"); ttp1[i]->SetLineColor(1); ttp1[i]->Draw("L"); ttp2[i]->SetLineColor(2); ttp2[i]->Draw("L"); ttp3[i]->SetLineColor(3); ttp3[i]->Draw("L"); lgnd[i] = new TLegend(0.6, 0.7, 0.88, 0.88); lgnd[i]->AddEntry(ttp1[i], "Pedestal", "l"); lgnd[i]->AddEntry(ttp2[i], "Noise", "l"); lgnd[i]->AddEntry(ttp3[i], "Noise CM corrected", "l"); lgnd[i]->Draw(); } /* for (int i = 0; i < NAdc; i++) { delete ttp0[i]; delete ttp1[i]; delete ttp2[i]; delete ttp3[i]; } delete [] ttp0; delete [] ttp1; delete [] ttp2; delete [] ttp3; delete [] tns; delete [] tpd; delete [] tstr; fileRun->Close(); delete fileRun; delete cl; */ return 0; }