void plotCurr(const int iwaferlot=29, const int nbinsX = 100, const int nbinsY = 100, const char *fname="result.root" ) { TFile *inFile = TFile::Open(fname); const int debug = 0; // constants for arrays const int kNChan = 32; const int kNQR = 26; const int kNVRef = 6; const int kNACurr = 5; const int kNSync = 8; TTree *tree = (TTree*) inFile->Get("tree"); //Declaration of leaves types //Declaration of leaves types Char_t filename[200]; Char_t datetime[100]; Char_t cQR[kNQR]; Int_t iChip; Int_t iSta; Float_t fVRef[kNVRef]; Float_t fVCurr[kNACurr]; Float_t fACurr[kNACurr]; Float_t fGain20mV[32]; Float_t fGain30mV[32]; Float_t fGainRT20mV[32]; Float_t fGainRT30mV[32]; Float_t fRT20mV[32]; Float_t fRT30mV[32]; Float_t fPed20mV[32]; Float_t fPed30mV[32]; Float_t fRms20mV[32]; Float_t fRms30mV[32]; Float_t fPedAna20mV[32]; Float_t fPedAna30mV[32]; Float_t fRmsAna20mV[32]; Float_t fRmsAna30mV[32]; Float_t fX20mVeven; Float_t fX20mVodd; Float_t fX30mVeven; Float_t fX30mVodd; Int_t iSync[kNSync]; Int_t iDFT; Int_t iJtag; Int_t iMem; Float_t fRingOsc; Int_t i2cErr; Int_t iErrCode; Int_t iRCode; // Set branch addresses. tree->SetBranchAddress("filename",filename); tree->SetBranchAddress("datetime",datetime); tree->SetBranchAddress("cQR",&cQR); tree->SetBranchAddress("iChip",&iChip); tree->SetBranchAddress("iSta",&iSta); tree->SetBranchAddress("fVRef",fVRef); tree->SetBranchAddress("fVCurr",fVCurr); tree->SetBranchAddress("fACurr",fACurr); tree->SetBranchAddress("fGain20mV",fGain20mV); tree->SetBranchAddress("fGain30mV",fGain30mV); tree->SetBranchAddress("fGainRT20mV",fGainRT20mV); tree->SetBranchAddress("fGainRT30mV",fGainRT30mV); tree->SetBranchAddress("fRT20mV",fRT20mV); tree->SetBranchAddress("fRT30mV",fRT30mV); tree->SetBranchAddress("fPed20mV",fPed20mV); tree->SetBranchAddress("fPed30mV",fPed30mV); tree->SetBranchAddress("fRms20mV",fRms20mV); tree->SetBranchAddress("fRms30mV",fRms30mV); tree->SetBranchAddress("fPedAna20mV",fPedAna20mV); tree->SetBranchAddress("fPedAna30mV",fPedAna30mV); tree->SetBranchAddress("fRmsAna20mV",fRmsAna20mV); tree->SetBranchAddress("fRmsAna30mV",fRmsAna30mV); tree->SetBranchAddress("fX20mVeven",&fX20mVeven); tree->SetBranchAddress("fX20mVodd",&fX20mVodd); tree->SetBranchAddress("fX30mVeven",&fX30mVeven); tree->SetBranchAddress("fX30mVodd",&fX30mVodd); tree->SetBranchAddress("iSync",iSync); tree->SetBranchAddress("iDFT",&iDFT); tree->SetBranchAddress("iJtag",&iJtag); tree->SetBranchAddress("iMem",&iMem); tree->SetBranchAddress("fRingOsc",&fRingOsc); tree->SetBranchAddress("i2cErr",&i2cErr); tree->SetBranchAddress("iErrCode",&iErrCode); tree->SetBranchAddress("iRCode",&iRCode); // This is the loop skeleton // To read only selected branches, Insert statements like: // tree->SetBranchStatus("*",0); // disable all branches // TTreePlayer->SetBranchStatus("branchname",1); // activate branchname Long64_t nentries = tree->GetEntries(); // histos: const int kNHistMax = kNACurr; TH1F *h1[kNHistMax]; TProfile *hp[kNHistMax]; TH2F *h2[kNHistMax]; const char *strCurrTitle[] = { "FE1_CURR (mA)", "FE2_CURR (mA)", "AD_CURR (mA)", "DR_CURR (mA)", "DG_CURR (mA)" }; const char *strCurr[] = { "FE1_CURR", "FE2_CURR", "AD_CURR", "DR_CURR", "DG_CURR" }; int j = 0; char id[100]; int nbinsXY = nbinsX * nbinsY; int nbinsProf = nbinsY; // one per row // first, create all histos for (j = 0; j1) cout << " nentries " << nentries << endl; for (Long64_t i=0; i1) cout << " get entry i " << i << endl; nbytes += tree->GetEntry(i); if (debug>1) cout << " entry i " << i << " iSta " << iSta << endl; int iwafer = (iChip / 10000); int inWafer = (iChip % 10000); if (iwafer == iwaferlot) { // selected waferlot int icol = inWafer % nbinsX; int irow = inWafer / nbinsX; int irowRev = nbinsY - irow; // reverse row index to agree with DB plots Int_t binx = h2[0]->GetXaxis()->FindBin(icol); Int_t biny = h2[0]->GetYaxis()->FindBin(irowRev); for (j = 0; jSetBinContent(inWafer, fACurr[j]); hp[j]->Fill(irowRev, fACurr[j]); h2[j]->SetBinContent(binx,biny, fACurr[j]); } } } gStyle->SetOptStat(0); // third, create all plots, and check cut info if (debug>1) cout << " create canvas " << endl; TCanvas *c1 = new TCanvas("c1","c1"); // c1->SetLogz(1); if (debug>1) cout << " canvas created " << endl; for (j = 0; j1) cout << " line " << __LINE__ << " j " << j << endl; c1->cd(1); h1[j]->Draw(); c1->Modified(); sprintf(id, "png/curr/wafer%d_h1_%s.png", iwaferlot, strCurr[j]); c1->SaveAs(id); hp[j]->Draw(); c1->Modified(); sprintf(id, "png/curr/wafer%d_hp_%s.png", iwaferlot, strCurr[j]); c1->SaveAs(id); h2[j]->Draw("colz"); c1->Modified(); sprintf(id, "png/curr/wafer%d_h2_%s.png", iwaferlot, strCurr[j]); c1->SaveAs(id); } }