ROOT logo
/*
 *  menuQA.C
 *  
 *
 *  Created by schutz on 01/08/08.
 *  Copyright 2008 CERN. All rights reserved.
 *fQA
 */
gROOT->Reset("a") ; 

TControlBar * fQA   = NULL ; 
TControlBar * fDet  = NULL ; 
TControlBar * fHist = NULL ; 
const Int_t fRun = atoi(gSystem->Getenv("RUNNUM")) ; 
AliQA * fQAResult = NULL ; 
TCanvas * fCa = NULL ; 

void menuQA()
{
	cout << AliQA::GetQAResultFileName()  << endl ; 
	TFile * qaResultFile = TFile::Open("QA.root") ; //AliQA::GetQAResultFileName() ) ; 
	if ( ! qaResultFile ) {
		printf("File %s not found in current directory\n", AliQA::GetQAResultFileName() ) ; 
		return ; 
	}
	fQAResult = (AliQA *)qaResultFile->Get("QA") ; 
	if ( ! fQAResult ) {
		printf("QA object not found in %s\n", AliQA::GetQAResultFileName() ) ; 
		return ; 
	}

	TFile * qaDataFile = TFile::Open(Form("Merged.QA.%d.root", fRun)) ; 
	if ( ! qaDataFile ) {
		printf("File Merged.QA.%d.root not found in current directory\n", fRun) ; 
		return ; 
	}
	if (fQA)
		delete fQA ; 
	fQA = new TControlBar("vertical", Form("Active detectors in Run %d", fRun), 40, 20);
	fQA->SetButtonWidth(400) ;
	fQA->AddButton("Clean Screen", "Cls()", "Clean the screen");	
	// search active detectors
	TList * listOfDetectors = qaDataFile->GetListOfKeys() ; 
	for (Int_t det = 0 ; det < listOfDetectors->GetEntries() ; det++) {
		char * detName = listOfDetectors->At(det)->GetName() ; 
		if (fQAResult->IsSetAny(AliQA::GetDetIndex(detName)))
			char * buttonName = Form("QA SIGNALS ERROR !! : %s", detName) ; 
		else 
			char * buttonName = Form("QA OK : %s", detName) ; 
	  fQA->AddButton(buttonName, Form("MakeDetMenu(\"%s\")", detName), Form("Display the QA histograms for %s", detName));	
	}
	fQA->Show();
}

void MakeDetMenu(char * detName)
{
	if (fDet) 
		delete fDet ;  
	if (fHist) 
		delete fHist ; 
	if (fCa) 
		delete fCa ; 
	fDet = new TControlBar("vertical", detName, 9000, 8000);
	fDet->SetButtonWidth(300) ; 
	// serach all the QA tasks
	TDirectory * save = gDirectory ; 
	gDirectory->cd(detName) ; 
	TList * listOfTasks = gDirectory->GetListOfKeys() ; 
	for (Int_t task = 0 ; task < listOfTasks->GetEntries() ; task++) {
		TString taskName = listOfTasks->At(task)->GetName() ; 
		AliQA::ALITASK_t tt = AliQA::kNULLTASK ; 
		if (taskName.Contains(AliQA::GetTaskName(AliQA::kRAWS)) )
			tt = AliQA::kRAW ; 
		else if (taskName.Contains(AliQA::GetTaskName(AliQA::kRECPOINTS)) ||
				taskName.Contains(AliQA::GetTaskName(AliQA::kESDS)) )
			tt = AliQA::kREC ; 
		else if (taskName.Contains(AliQA::GetTaskName(AliQA::kHITS)) ||
						 taskName.Contains(AliQA::GetTaskName(AliQA::kSDIGITS)) ||
						 taskName.Contains(AliQA::GetTaskName(AliQA::kDIGITS)) )
			tt = AliQA::kSIM ;
		if (fQAResult->IsSetAny(AliQA::GetDetIndex(detName), tt))
			char * buttonName = Form("QA SIGNALS ERROR!! : %s", taskName.Data()) ; 
		else 
			char * buttonName = Form("QA OK : %s", taskName.Data()) ; 
			fDet->AddButton(buttonName, Form("MakeTaskMenu(\"%s\", \"%s\")", detName, taskName.Data()), Form("Display the QA histograms for %s", taskName.Data()));	
	}
	fDet->Show() ; 
	gDirectory = save ; 
}

void MakeTaskMenu(char * detName, char * taskName )
{
	if (fHist) 
		delete fHist ; 
	if (fCa)
		delete fCa ; 
	TDirectory * save = gDirectory ; 
	gDirectory->cd(Form("%s/%s", detName, taskName)) ; 
	TList * listOfHistos = gDirectory->GetListOfKeys() ; 
	if ( listOfHistos->GetEntries()  == 0 ) { 
		printf(" no histograms found for %s/%s\n", detName, taskName) ; 
	} else {			
		fHist = new TControlBar("vertical", Form("QA histos for %s/%s", detName, taskName), 900, 300);
		fHist->SetButtonWidth(300) ; 
		fHist->AddButton("ALL", Form("DisplayAll(\"%s\", \"%s\")", detName, taskName), Form("Display the QA histograms for %s", detName));
		for (Int_t h = 0 ; h < listOfHistos->GetEntries() ; h++) {
			char * hName = listOfHistos->At(h)->GetName() ; 
			fHist->AddButton(hName, Form("Display(\"%s\")", hName), Form("Display the QA histograms %s", hName));
		}
		fHist->Show() ;
	} 
	gDirectory = save ; 
}


void Display(char * hName)
{
	if (fCa)
		delete fCa ; 
	cout << Display << " " << hName << endl ; 
	fCa = new TCanvas(hName, "test", 800, 600) ;
	fCa->SetLogy() ; 
	TH1 * hh = dynamic_cast<TH1*>(gDirectory->FindObjectAny(hName));
	if (hh) {
		hh->Draw() ; 
		fCa->Modified() ; 
		fCa->Update() ;		
	}
}

void DisplayAll(char * detName, char * taskName)
{
	cout << Display << " " << detName << endl ; 
	TDirectory * save = gDirectory ; 
	gDirectory->cd(Form("%s/%s", detName, taskName)) ; 
	TList * listOfHistos = gDirectory->GetListOfKeys() ; 
	Int_t nHisto = listOfHistos->GetEntries() ; 
	if ( nHisto == 0 ) {
		printf(" no histograms found for %s/%s\n", detName, taskName) ; 
	} else {		
		Int_t ny = TMath::Sqrt(nHisto) ; 
		Int_t nx = 1 ; 
		if ( ny > 0 ) 
			nx = nHisto / ny + 1 ;
		if (fCa) 
			delete fCa ; 
		fCa = new TCanvas(Form("QA %s in %s", taskName, detName), Form("QA %s in %s", taskName, detName), nx*300, ny*300) ;
		fCa->Divide(nx, ny) ;
		for (Int_t h = 0 ; h < listOfHistos->GetEntries() ; h++) {
			char * hName = listOfHistos->At(h)->GetName() ; 
			TH1 * hh = dynamic_cast<TH1*>(gDirectory->FindObjectAny(hName));
			TPad * pad = fCa->cd(h+1) ;
			if (hh) {
				if ( hh->GetEntries()) 
					pad->SetLogy() ; 
				hh->Draw() ; 
				fCa->Modified() ; 
				fCa->Update() ;			
			}
		}
		fCa->Modified() ; 
		fCa->Update() ;
	}
	gDirectory = save ; 
}

void Cls()
{
	if (fDet) 
		delete fDet ;  
	if (fHist) 
		delete fHist ; 
	if (fCa) 
		delete fCa ; 
}
 menuQA.C:1
 menuQA.C:2
 menuQA.C:3
 menuQA.C:4
 menuQA.C:5
 menuQA.C:6
 menuQA.C:7
 menuQA.C:8
 menuQA.C:9
 menuQA.C:10
 menuQA.C:11
 menuQA.C:12
 menuQA.C:13
 menuQA.C:14
 menuQA.C:15
 menuQA.C:16
 menuQA.C:17
 menuQA.C:18
 menuQA.C:19
 menuQA.C:20
 menuQA.C:21
 menuQA.C:22
 menuQA.C:23
 menuQA.C:24
 menuQA.C:25
 menuQA.C:26
 menuQA.C:27
 menuQA.C:28
 menuQA.C:29
 menuQA.C:30
 menuQA.C:31
 menuQA.C:32
 menuQA.C:33
 menuQA.C:34
 menuQA.C:35
 menuQA.C:36
 menuQA.C:37
 menuQA.C:38
 menuQA.C:39
 menuQA.C:40
 menuQA.C:41
 menuQA.C:42
 menuQA.C:43
 menuQA.C:44
 menuQA.C:45
 menuQA.C:46
 menuQA.C:47
 menuQA.C:48
 menuQA.C:49
 menuQA.C:50
 menuQA.C:51
 menuQA.C:52
 menuQA.C:53
 menuQA.C:54
 menuQA.C:55
 menuQA.C:56
 menuQA.C:57
 menuQA.C:58
 menuQA.C:59
 menuQA.C:60
 menuQA.C:61
 menuQA.C:62
 menuQA.C:63
 menuQA.C:64
 menuQA.C:65
 menuQA.C:66
 menuQA.C:67
 menuQA.C:68
 menuQA.C:69
 menuQA.C:70
 menuQA.C:71
 menuQA.C:72
 menuQA.C:73
 menuQA.C:74
 menuQA.C:75
 menuQA.C:76
 menuQA.C:77
 menuQA.C:78
 menuQA.C:79
 menuQA.C:80
 menuQA.C:81
 menuQA.C:82
 menuQA.C:83
 menuQA.C:84
 menuQA.C:85
 menuQA.C:86
 menuQA.C:87
 menuQA.C:88
 menuQA.C:89
 menuQA.C:90
 menuQA.C:91
 menuQA.C:92
 menuQA.C:93
 menuQA.C:94
 menuQA.C:95
 menuQA.C:96
 menuQA.C:97
 menuQA.C:98
 menuQA.C:99
 menuQA.C:100
 menuQA.C:101
 menuQA.C:102
 menuQA.C:103
 menuQA.C:104
 menuQA.C:105
 menuQA.C:106
 menuQA.C:107
 menuQA.C:108
 menuQA.C:109
 menuQA.C:110
 menuQA.C:111
 menuQA.C:112
 menuQA.C:113
 menuQA.C:114
 menuQA.C:115
 menuQA.C:116
 menuQA.C:117
 menuQA.C:118
 menuQA.C:119
 menuQA.C:120
 menuQA.C:121
 menuQA.C:122
 menuQA.C:123
 menuQA.C:124
 menuQA.C:125
 menuQA.C:126
 menuQA.C:127
 menuQA.C:128
 menuQA.C:129
 menuQA.C:130
 menuQA.C:131
 menuQA.C:132
 menuQA.C:133
 menuQA.C:134
 menuQA.C:135
 menuQA.C:136
 menuQA.C:137
 menuQA.C:138
 menuQA.C:139
 menuQA.C:140
 menuQA.C:141
 menuQA.C:142
 menuQA.C:143
 menuQA.C:144
 menuQA.C:145
 menuQA.C:146
 menuQA.C:147
 menuQA.C:148
 menuQA.C:149
 menuQA.C:150
 menuQA.C:151
 menuQA.C:152
 menuQA.C:153
 menuQA.C:154
 menuQA.C:155
 menuQA.C:156
 menuQA.C:157
 menuQA.C:158
 menuQA.C:159
 menuQA.C:160
 menuQA.C:161
 menuQA.C:162
 menuQA.C:163
 menuQA.C:164
 menuQA.C:165
 menuQA.C:166
 menuQA.C:167
 menuQA.C:168
 menuQA.C:169
 menuQA.C:170
 menuQA.C:171
 menuQA.C:172
 menuQA.C:173
 menuQA.C:174
 menuQA.C:175
 menuQA.C:176