From: Dennis Doering Date: Wed, 18 Sep 2013 10:31:51 +0000 (+0200) Subject: Singlerun X-Git-Url: https://jspc29.x-matter.uni-frankfurt.de/git/?a=commitdiff_plain;h=592e600caa9f7c6aad4d3263435357ed1fd137f8;p=radhard.git Singlerun --- diff --git a/newCOMBI/ChargeSpektrum.c b/newCOMBI/ChargeSpektrum.c old mode 100644 new mode 100755 index 09d4c16..aafb0a9 --- a/newCOMBI/ChargeSpektrum.c +++ b/newCOMBI/ChargeSpektrum.c @@ -3,7 +3,9 @@ #include #include #include - +#include "CSVRow.h" +//#ifdef __CINT__ +#include "CSVRow.C" // bad C-style... but root wants it this way... no correct separation of declaration and implementation possible. #include "TFile.h" #include "TTree.h" @@ -16,8 +18,17 @@ #include "TF1.h" #include "TMath.h" +#define COLRUNNO 4 +#define COLSYSTEM 0 +#define COLTEMP 5 +#define COLTEMPSENS 14 +#define COLCHIP 7 +#define COLSOURCE 11 +#define COLMATRIX 10 +#define COLRADDOSE 12 + + #define NUMPIXELS 25 -#define RIGHT_BOUNDARY 7000 #define VETO_THRESHOLD 20 #define FIT_FUNC "gaus" @@ -29,46 +40,78 @@ struct histogram TH1F* Seed; TH1F* Sum; TH1F* Veto; - int zahl; + Int_t inputRun; + Float_t posSeed; + Float_t posSum; + Float_t posVeto; +}; +struct laborbook +{ + Int_t inputRun; + TString system; + Float_t temp; + Float_t tempSens; + TString chip; + TString source; + TString matrix; + TString radDose; }; - struct histogram GenerateHisto(Int_t inputRun); -void FitPerform(TH1F*, Int_t); +Float_t FitPerform(TH1F*, Int_t); +struct laborbook LaborBuch(Int_t inputRun); void ChargeSpektrum() { - Int_t inputRun=34009; +Int_t inputRun=34009; //Int_t inputRun=341270; struct histogram arrayHisto; arrayHisto=GenerateHisto(inputRun); inputRun=341270; struct histogram arrayHisto2; arrayHisto2=GenerateHisto(inputRun); - TCanvas* c1 = new TCanvas(); + Double_t w = 600; + Double_t h = 600; + TCanvas * c1 = new TCanvas("c", "c", w, h); + c1->SetWindowSize(w + (w - c1->GetWw()), h + (h - c1->GetWh())); arrayHisto.Seed->Draw(""); double xmin = arrayHisto.Seed->GetXaxis()->GetXmin(); double xmax = arrayHisto.Seed->GetXaxis()->GetXmax(); -double factor = 1640./400.; +double factor = 1640./406.; arrayHisto.Seed->GetXaxis()->SetLimits(xmin*factor,xmax*factor); arrayHisto2.Seed->Draw("same"); double xmin2 = arrayHisto2.Seed->GetXaxis()->GetXmin(); double xmax2 = arrayHisto2.Seed->GetXaxis()->GetXmax(); //double factor = 1640./400.; -double factor2 = 1640./7000.; +double factor2 = 1640./6352.; arrayHisto2.Seed->GetXaxis()->SetLimits(xmin2*factor2,xmax2*factor2); //arrayHisto.Sum->Draw("same"); //arrayHisto.Veto->Draw("same"); - cout<Get("hit"); - TNtuple* hitsNtuple = (TNtuple*) f->Get("hits"); + //TNtuple* hitsNtuple = (TNtuple*) f->Get("hits"); // one array element and one branch for each pixel Float_t pixel[NUMPIXELS]; @@ -99,8 +142,6 @@ cout<GetEntries(); - // Double_t meanNotSeedSum=0; - // Int_t nhits=0; for (Int_t cnt=0; cntFill(pixel[12]); // histogram with the single pixel } - FitPerform(histNtuple, inputRun); + TCanvas* c1 = new TCanvas(); + c1->SetTitle(Form("Seed%i",inputRun)); + c1->Divide(2,2); + c1->cd(1); + histNtuple->Draw(""); + Float_t posSeed=FitPerform(histNtuple, inputRun); + c1->cd(2); + histNtupleSum->Draw(""); + Float_t posSum=FitPerform(histNtupleSum, inputRun); + c1->cd(3); + histNtupleVeto->Draw(""); + Float_t posVeto=FitPerform(histNtupleVeto, inputRun); + c1->cd(4); + //Evaluate the histogram with the largest y to plot all complete in one histogram + Float_t maxY = 0; + Int_t thismax; + thismax = histNtuple->GetMaximum(); + if (thismax > maxY) + { + maxY = thismax; + } + thismax = histNtupleSum->GetMaximum(); + if (thismax > maxY) + { + maxY = thismax; + } + thismax = histNtupleVeto->GetMaximum(); + if (thismax > maxY) + { + maxY = thismax; + } + TH1F* histNtupleSame= (TH1F*)histNtuple->Clone(Form("Samehist%i",inputRun)); + TH1F* histNtupleSumSame= (TH1F*)histNtupleSum->Clone(Form("SamehistSum%i",inputRun)); + TH1F* histNtupleVetoSame= (TH1F*)histNtupleVeto->Clone(Form("SamehistVeto%i",inputRun)); + histNtupleSame->Draw(""); + histNtupleSame->SetMaximum(1.05*maxY); + histNtupleSumSame->Draw("same"); + histNtupleVetoSame->Draw("same"); + histNtupleSumSame->SetLineColor(1); + histNtupleVetoSame->SetLineColor(2); + + + struct histogram arrayHisto; - arrayHisto.Seed=histNtuple; - arrayHisto.Sum=histNtupleSum; - arrayHisto.Veto=histNtupleVeto; - arrayHisto.zahl=3; + arrayHisto.Seed=(TH1F*)histNtuple->Clone(Form("hist%i",inputRun)); + arrayHisto.Sum=(TH1F*)histNtupleSum->Clone(Form("histSum%i",inputRun)); + arrayHisto.Veto=(TH1F*)histNtupleVeto->Clone(Form("histVeto%i",inputRun)); + arrayHisto.inputRun=inputRun; + arrayHisto.posSeed=posSeed; + arrayHisto.posSum=posSum; + arrayHisto.posVeto=posVeto; return arrayHisto;} -void FitPerform(TH1F* histNtuple, Int_t inputRun) +Float_t FitPerform(TH1F* histNtuple, Int_t inputRun) { + Float_t posMax = 0; + // Read Laborbook, save it in the struct laborbookdata + struct laborbook laborbookdata; + laborbookdata=LaborBuch(inputRun); + + Int_t maxBin; + + if(laborbookdata.system=="USB") + { + maxBin=800; + + } + else + { + maxBin=8000; + + } histNtuple->Draw(""); if (DRAW_FITS) { - Float_t posMax = 0; - histNtuple->GetXaxis()->SetRange(histNtuple->GetXaxis()->FindBin(50),histNtuple->GetXaxis()->FindBin(RIGHT_BOUNDARY)); // look only for maxima with x greater than 20 + + histNtuple->GetXaxis()->SetRange(histNtuple->GetXaxis()->FindBin(maxBin/10),histNtuple->GetXaxis()->FindBin(maxBin)); // look only for maxima with x greater than 20 Int_t xValMax = histNtuple->GetBinCenter(histNtuple->GetMaximumBin()); - TF1* fitFunc = new TF1("fitFunc",FIT_FUNC,0,RIGHT_BOUNDARY); + TF1* fitFunc = new TF1("fitFunc",FIT_FUNC,0,maxBin); if (TString(FIT_FUNC)=="gaus") { - histNtuple->Fit(fitFunc, "N,Q,W", "", xValMax-10, xValMax+10); + histNtuple->Fit(fitFunc, "N,Q,W", "", xValMax-100, xValMax+100); posMax = fitFunc->GetParameter(1); fitFunc->DrawCopy("same"); + TString legendEntry = TString(Form("Run %i: %.1f ",inputRun,posMax)); + TLegend* leg = new TLegend(0.5,0.5,0.89,0.89);//(0.6,0.7,0.89,0.89); +// leg->SetHeader();//"Legend Title"); + leg->SetFillStyle(0); + leg->AddEntry((TObject*) 0, legendEntry, ""); + leg->SetTextSize(0.05); + leg->Draw(); + } else if (TString(FIT_FUNC)=="landau") { @@ -168,7 +279,7 @@ if (DRAW_FITS) Float_t minFitMax = 1000; Float_t maxFitMax = 1000; - histNtuple->Fit(fitFunc, "N,Q,W", "", 20, RIGHT_BOUNDARY); + histNtuple->Fit(fitFunc, "N,Q,W", "", 20, maxBin); fitMax1 = fitFunc->GetParameter(1); fitFunc->DrawCopy("same"); histNtuple->Fit(fitFunc, "N,Q,W", "", 20, fitMax1); @@ -176,7 +287,7 @@ if (DRAW_FITS) fitFunc->SetLineColor(kBlue); fitFunc->SetLineStyle(2); // dashed fitFunc->DrawCopy("same"); - histNtuple->Fit(fitFunc, "N,Q,W", "", fitMax1, RIGHT_BOUNDARY); + histNtuple->Fit(fitFunc, "N,Q,W", "", fitMax1, maxBin); fitMax3 = fitFunc->GetParameter(1); fitFunc->SetLineColor(kGreen); fitFunc->DrawCopy("same"); @@ -194,8 +305,62 @@ if (DRAW_FITS) // leg->SetHeader();//"Legend Title"); leg->SetFillStyle(0); leg->AddEntry((TObject*) 0, legendEntry, ""); - leg->SetTextSize(0.02); + leg->SetTextSize(0.05); leg->Draw(); + } } + +return posMax; +} +struct laborbook LaborBuch(Int_t inputRun) +{ + std::string system; + Float_t temperature; // desired temperature + Float_t tempSens; // actual temperature + std::string chip; // chip number (eg. 1-6) + std::string source; + std::string matrix; + std::string radDose; + + std::ifstream file("LaborbuchMi34Test.txt"); + CSVRow row; + file >> row; + while (file >> row) + { + + try + { + Int_t runLabor; + runLabor=atoi(row[COLRUNNO].c_str()); + + if (runLabor == inputRun) + { + + system = row[COLSYSTEM]; + temperature = atof(row[COLTEMP].c_str()); // temperature + tempSens = atof(row[COLTEMPSENS].c_str()); // temperature + chip = row[COLCHIP]; + source = row[COLSOURCE]; + matrix = row[COLMATRIX]; + radDose = row[COLRADDOSE]; + } + } + catch(...) + { + cout << "Error while reading laboratory book (run number " << inputRun << ")!\n"; + } + } + + //cout<<"Run:"<