--- /dev/null
+/**
+ * @file ChargeSpektrumFunctions.c
+ * @brief Use brief, otherwise the index won't have a brief explanation.
+ *
+ * Detailed explanation.
+ *
+ */
+#include <fstream>
+
+Int_t* ReadRunList();
+Int_t ReadRunList(std::vector<int>*);
+Bool_t plotAllRuns();
+Bool_t plotAllRuns(TString);
+Bool_t writeObservableToFile(TString);
+Bool_t writeObservableToFile();
+void writeObservableToFileHistSelect(TString);
+
+const TString colorwhite = "\033[1;29m";
+const TString colorred = "\033[1;31m";
+const TString coloryellow = "\033[1;33m";
+const TString colorreset = "\033[0m";
+const TString endlr = "\033[0m\n";
+
+void ChargeSpektrum(Int_t runnumber)
+{
+ cout << endl << colorred << "Given parameters have wrong format, please enter integer run numbers devided by '" << colorreset << colorwhite << "," << colorreset << colorred << "' and surrounded by '" << colorreset << colorwhite << "\"" << colorreset << colorred << "'." << endlr;
+ cout << "For example run: root -l 'ChargeSpektrum.c+(\"342815,342816\")'" << endl;
+ exit(1);
+}
+
+void ChargeSpektrum(Int_t runnumber, Int_t runnumber2)
+{
+ cout << endl << colorred << "Given parameters have wrong format, please enter integer run numbers devided by '" << colorreset << colorwhite << "," << colorreset << colorred << "' and surrounded by '" << colorreset << colorwhite << "\"" << colorreset << colorred << "'." << endlr;
+ cout << "For example run: " << colorwhite << "root -l 'ChargeSpektrum.c+(\"342815,342816\")'" << endl;
+ exit(1);
+}
+
+Int_t ReadRunList(std::vector<int>* runlist)
+{
+ std::ifstream file("runlist.txt");
+ Int_t row;
+ while (file >> row)
+ {
+ try
+ {
+ if (row > 0)
+ {
+ runlist->push_back(row);
+ numberRuns++;
+ }
+ }
+ catch(...)
+ {
+ cout << "File ended";
+ }
+ }
+ return numberRuns;
+}
+
+
+// void plotNoiseComparison()
+// {
+//
+// }
+
+Bool_t writeObservableToFile(TString histogramtype)
+{
+ if (histogramtype.Contains("threshold"))
+ {
+ if (histogramtype.Contains("calibrated"))
+ {
+ for(Int_t runi=0;runi<numberRuns;runi++)/* loop over runs read from file */
+ {
+ if (runs[runi]->histogramthresholdCalibrated.calibrated)
+ runs[runi]->plothistogramstructpointer = &runs[runi]->histogramthresholdCalibrated;
+ else
+ return 1;
+ }
+ }
+ else
+ {
+ for(Int_t runi=0;runi<numberRuns;runi++)/* loop over runs read from file */
+ runs[runi]->plothistogramstructpointer = &runs[runi]->histogramthreshold;
+ }
+
+ }
+ else if (histogramtype.Contains("calibrated") || histogramtype.Contains("electron")) {
+ for(Int_t runi=0;runi<numberRuns;runi++) /* loop over runs read from file */ {
+ if (runs[runi]->histogramCalibrated.calibrated)
+ runs[runi]->plothistogramstructpointer = &runs[runi]->histogramCalibrated;
+ else return 1; } }
+ else {
+ for(Int_t runi=0;runi<numberRuns;runi++) /* loop over runs read from file */ {
+ runs[runi]->plothistogramstructpointer = &runs[runi]->histogram; } }
+ writeObservableToFileHistSelect(histogramtype);
+ return 0;
+}
+void writeObservableToFileHistSelect(TString histogramtype)
+{
+ if (histogramtype.Contains("Seed") || histogramtype.Contains("seed")) {
+ for(Int_t runi=0;runi<numberRuns;runi++)/* loop over runs read from file */ {
+ runs[runi]->plothistogrampointer = &runs[runi]->plothistogramstructpointer->Seed; } }
+ else if (histogramtype.Contains("Sum") || histogramtype.Contains("sum")) {
+ for(Int_t runi=0;runi<numberRuns;runi++)/* loop over runs read from file */ {
+ runs[runi]->plothistogrampointer = &runs[runi]->plothistogramstructpointer->Sum; } }
+ else if (histogramtype.Contains("Veto") || histogramtype.Contains("veto")) {
+ for(Int_t runi=0;runi<numberRuns;runi++) /* loop over runs read from file */ {
+ runs[runi]->plothistogrampointer = &runs[runi]->plothistogramstructpointer->Veto; } }
+ else {
+ for(Int_t runi=0;runi<numberRuns;runi++) /* loop over runs read from file */ {
+ runs[runi]->plothistogrampointer = &runs[runi]->plothistogramstructpointer->Seed; } }
+ writeObservableToFile();
+}
+
+Bool_t writeObservableToFile()
+{
+ system("mkdir "+ runs[0]->savepathresults + " -p");
+ TString headerInfo = "";
+ for(Int_t runi=0;runi<numberRuns;runi++) // loop over runs read from file
+ {
+ headerInfo+=runs[runi]->runcode+"\t\t\t";
+ }
+ TH1F* plothistogrampointer = *runs[0]->plothistogrampointer;
+ TString runnumberListe=Form("%s_",plothistogrampointer->GetName());
+ TString header="";
+ for(Int_t runi=0;runi<numberRuns;runi++) // loop over runs read from file
+ {
+ if (runs[runi] != nullptr)
+ {
+ if (!runs[runi]->error)
+ {
+ plothistogrampointer = *runs[runi]->plothistogrampointer;
+ runnumberListe+=Form("%d_",runs[runi]->labbook.runnumber);
+ header+=Form("%d\t%s\t", runs[runi]->labbook.runnumber, plothistogrampointer->GetName());
+ }
+ }
+ }
+ TString filename= runs[0]->savepathresults + "/" + runnumberListe + "histograms.dat";
+ fstream* fout = new fstream(filename,ios::out);
+ *fout << headerInfo << endl;
+ *fout << header << endl;
+ for(Int_t bini=0;bini<plothistogrampointer->GetNbinsX();bini++)
+ {
+ for(Int_t runi=0;runi<numberRuns;runi++) // loop over runs read from file
+ {
+ if (runs[runi] != nullptr)
+ {
+ if (!runs[runi]->error)
+ {
+ plothistogrampointer = *runs[runi]->plothistogrampointer;
+ TString outline;
+ outline=Form("%.1f\t%.1f\t",plothistogrampointer->GetBinCenter(bini),plothistogrampointer->GetBinContent(bini));
+ *fout<<outline;
+ }
+ }
+ }
+ *fout<<endl;
+ }
+ fout->close();
+
+ return 0;
+}
+
+Bool_t plotAllRuns(TString histogramtype)
+{
+ if (histogramtype.Contains("threshold"))
+ {
+ if (histogramtype.Contains("calibrated"))
+ {
+ for(Int_t runi=0;runi<numberRuns;runi++)/* loop over runs read from file */
+ if (runs[runi]->histogramthresholdCalibrated.calibrated)
+ runs[runi]->plothistogramstructpointer = &runs[runi]->histogramthresholdCalibrated;
+ else
+ return 1;
+ }
+ else
+ {
+ for(Int_t runi=0;runi<numberRuns;runi++)/* loop over runs read from file */
+ runs[runi]->plothistogramstructpointer = &runs[runi]->histogramthreshold;
+ }
+
+ }
+ else if (histogramtype.Contains("calibrated") || histogramtype.Contains("electron")) {
+ for(Int_t runi=0;runi<numberRuns;runi++) /* loop over runs read from file */ {
+ if (runs[runi]->histogramCalibrated.calibrated)
+ runs[runi]->plothistogramstructpointer = &runs[runi]->histogramCalibrated;
+ else
+ return 1; } }
+ else {
+ for(Int_t runi=0;runi<numberRuns;runi++) /* loop over runs read from file */ {
+ runs[runi]->plothistogramstructpointer = &runs[runi]->histogram; } }
+ plotAllRuns();
+ return 0;
+}
+
+Bool_t plotAllRuns()
+{
+ if (numberRuns > 1)
+ {
+ Float_t lastbin;
+ TTimeStamp* time = new TTimeStamp();
+
+ TCanvas* canvas = new TCanvas(Form("%d",time->GetNanoSec()), "Summary", 1600, 1000);
+ if (isBatch)
+ canvas->SetCanvasSize(3200,2000);
+
+ canvas->Divide(2,2);
+ Float_t height = numberRuns * 0.04;
+ TLegend* leg1 = new TLegend(0.3,0.89-height,0.89,0.89);//(0.6,0.7,0.89,0.89);
+ TLegend* leg2 = new TLegend(0.6,0.89-height,0.89,0.89);//(0.6,0.7,0.89,0.89);
+ leg1->SetTextSize(0.02);
+ leg2->SetTextSize(0.02);
+ leg1->SetFillColor(0); leg1->SetBorderSize(0);
+ leg2->SetFillColor(0); leg2->SetBorderSize(0);
+ TString legendEntry;
+
+ for(Int_t runi=0;runi<numberRuns;runi++) // loop over runs read from file
+ {
+ if (runs[runi] != nullptr)
+ {
+ if (!runs[runi]->error)
+ {
+ canvas->cd(1);
+ runs[runi]->plothistogramstructpointer->Seed->Draw("SAME");
+ lastbin = runs[runi]->plothistogramstructpointer->Seed->GetBinCenter(runs[runi]->plothistogramstructpointer->Seed->FindLastBinAbove(2,1));
+ runs[runi]->plothistogramstructpointer->Seed->SetAxisRange(0,lastbin*1.1,"X");
+ gPad->SetLogy(1);
+ legendEntry = Form("%s", runs[runi]->plothistogramstructpointer->Seed->GetTitle());
+ leg1->AddEntry(runs[runi]->plothistogramstructpointer->Veto, legendEntry, "l");
+ leg1->Draw("SAME");
+ canvas->cd(2);
+ runs[runi]->plothistogramstructpointer->Sum->Draw("SAME");
+ lastbin = runs[runi]->plothistogramstructpointer->Sum->GetBinCenter(runs[runi]->plothistogramstructpointer->Sum->FindLastBinAbove(2,1));
+ runs[runi]->plothistogramstructpointer->Sum->SetAxisRange(0,lastbin*1.1,"X");
+ canvas->cd(3);
+ runs[runi]->plothistogramstructpointer->Veto->Draw("SAME");
+ runs[runi]->plothistogramstructpointer->Veto->SetAxisRange(runs[runi]->plothistogramstructpointer->posVeto*0.7,runs[runi]->plothistogramstructpointer->posVeto*1.4,"X");
+ canvas->cd(4);
+ runs[runi]->plothistogramstructpointer->Noise->Draw("SAME");
+ legendEntry = Form("%s, Noise: %.2f", runs[runi]->labbook.matrix.Data(), runs[runi]->plothistogramstructpointer->avgNoise);
+ leg2->AddEntry(runs[runi]->plothistogramstructpointer->Veto, legendEntry, "l");
+ leg2->Draw("SAME");
+ }
+ }
+ }
+
+ // canvas -> Print( runs[0]->savepathresults + "/" + canvastitle + ".eps");
+ TImageDump *img = new TImageDump(runs[0]->savepathresults + "/" + Form("%s - %s",runs[0]->runcode.Data(), runs[numberRuns-1]->runcode.Data()) + ".png");
+ canvas->Paint();
+ img->Close();
+
+ TFile *f = new TFile(runs[0]->savepathresults + "/" + Form("%s - %s",runs[0]->runcode.Data(),runs[numberRuns-1]->runcode.Data()) + ".root","RECREATE");
+ f->cd();
+ f->Append(canvas);
+ f->Append(img);
+ f->Write();
+ }
+ return 0;
+}
+