void gainuni(Char_t *chamberi = "1958"){ gROOT->Reset(); int chamber = 1955; int logy = 0; // sql connection const char *dba = "oracle://orarac.gsi.de:1521/db-alice-test"; TSQLServer *db=TSQLServer::Connect(dba,"alis_app","dbalice"); if(chamberi[0]=='0'||chamberi[0]=='1'||chamberi[0]=='2'||chamberi[0]=='3'||chamberi[0]=='4'||chamberi[0]=='5'||chamberi[0]=='6'||chamberi[0]=='7'||chamberi[0]=='8'||chamberi[0]=='9'){ chamber = atoi(chamberi); } else{ const char *ff3 = "DETECTOR_CODE, COMPONENT_ID, TYPE_CODE, LOCAL_ID"; Char_t sql3[200] = ""; sprintf(sql3, "SELECT component_id FROM components WHERE detector_code='TRD' AND type_code='ROC' AND local_id='%s'", chamberi); TSQLResult *res3 = db->Query(Form(sql3, ff3)); int result = res3->GetRowCount(); TSQLRow * row3 = 0; row3 = res3->Next(); if(result > 0){ chamber = atoi(row3->GetField(0)); } else{ chamber = 0; cout << "Can't find " << chamberi << " in database" << endl; break; } delete row3; delete res3; } gStyle->SetPadGridY(1); gStyle->SetPadGridX(1); gStyle->SetPalette(1); int Ab = GetNCol(db, "GAINUNI"); Char_t sqlb[200] = ""; sprintf(sqlb, "SELECT * FROM process_values WHERE component_id=%d AND process_code='%s'", chamber, "GAINUNI"); TSQLResult *resb = db->Query(sqlb); int Nb = resb->GetFieldCount(); int Rb = resb->GetRowCount()/Ab; TSQLRow * rowb = 0; double *xb = new double[Rb]; double *yb = new double[Rb]; double *xc = new double[Rb]; double *yc = new double[Rb]; double *zc = new double[Rb]; double average = 0; double max = 0; double min = 10000; int counter = 0; int counter1 = 0; int counter2 = 0; int counter3 = 0; int counter4 = 0; while((rowb = resb->Next())) { double rb = atof(rowb->GetField(6)); //konvertiert einen String in ein int int cb = atoi(rowb->GetField(5)); double vb = atof(rowb->GetField(7)); if(cb == 1){ if(vb != 0){ xc[counter1] = vb; counter1++; } } if(cb == 2){ if(vb != 0){ yc[counter2] = vb; counter2++; } } if(cb == 3){ if(vb != 0){ zc[counter3] = vb; average = average + zc[counter3]; if(zc[counter3] > max){ max = zc[counter3]; } if(zc[counter3] < min){ min = zc[counter3]; } counter3++; } if(vb == 0){ counter4++; } } if (cb == 5){ xb[counter] = rb; yb[counter] = vb; counter++; } } delete resb; delete rowb; average = average/counter3; /*************** Berechnung der Stansardabweichung *********************************/ double sigma = 0; counter3 = 0; for(counter3 = 0; counter3 < 100; counter3++){ sigma = sigma + pow((zc[counter3] - average),2); } sigma = sigma/(counter3-1); // Ausgabe cout<<"average: "< Query(Form(sql6, ff6)); TSQLRow *row6 = 0; row6 = res6 -> Next(); Char_t local1[100] = row6 -> GetField(0); delete row6; delete res6; /***********************************************************************************/ TCanvas *c3 = new TCanvas("c3","Gain Uniformity 2D"); // c3 -> Divide(2); // c3 -> cd(1); TGraph2D *gra = new TGraph2D(Rb-counter4, xc, yc, zc); c3 -> SetLogy(logy); c3 -> SetFillColor(0); // weisser Hintergrund c3 -> SetFrameBorderMode(0); gra -> SetMarkerStyle(20); Char_t title5[100]; sprintf(title5, "Gain Uniformity 2D, local_id='%s'", local1); gra -> SetTitle(title5); gra -> GetXaxis() -> SetTitle("z-Axis(cm)"); gra -> GetYaxis() -> SetTitle("phi-Axis(cm)"); gra -> GetZaxis() -> SetTitle("current(mA)"); gra -> GetXaxis() -> SetTitleOffset(1.8); gra -> GetYaxis() -> SetTitleOffset(1.8); gra -> GetZaxis() -> SetTitleOffset(1.2); gra -> GetXaxis() -> CenterTitle(); // TLegend *myLegend = new TLegend(0.17,0.68,0.32,0.8); // myLegend -> AddEntry(gra,"Graph 1","P"); // myLegend -> AddEntry(gra,"Graph 2","P"); // myLegend -> AddEntry(gra,"Graph 3","P"); // myLegend -> Draw(); gra -> Draw("surf1Z"); /***********************************************************************************/ TCanvas *c2 = new TCanvas("c2","Gain Uniformity 1D"); // c3 -> cd(2); TGraph *grb = new TGraph(Rb, xb, yb); c2 -> SetLogy(logy); c2 -> SetFillColor(0); // weisser Hintergrund c2 -> SetFrameBorderMode(0); grb -> SetMarkerStyle(20); Char_t title4[100]; sprintf(title4, "Gain Uniformity 1D, local_id='%s'", local1); grb -> SetTitle(title4); grb -> GetXaxis() -> SetTitle("z-Axis(cm)"); grb -> GetYaxis() -> SetTitle("current(mA)"); grb -> Draw("ALP"); delete[] xc; delete[] yc; delete[] zc; delete[] xb; delete[] yb; db->Close(); } Char_t GetLocal(TSQLServer *db, int chamber){ const char *ff4 = "DETECTOR_CODE, COMPONENT_ID, TYPE_CODE, LOCAL_ID"; Char_t sql4[100]; sprintf(sql4, "SELECT local_id FROM components WHERE detector_code='TRD' AND type_code='ROC' AND component_id=%d", chamber); TSQLResult *res4 = db->Query(Form(sql4, ff4)); TSQLRow * row4 = 0; row4 = res4->Next(); Char_t local[100] = row4->GetField(0); delete row4; delete res4; cout<Query(Form(sql, process)); TSQLRow *row = res->Next(); int v = atoi(row->GetField(0)); delete res; delete row; return v; }