]> jspc29.x-matter.uni-frankfurt.de Git - radhard.git/commitdiff
Run analyzer: outsource functions from ChargeSpectrum.c to a newly created file Charg...
authorBenjamin Linnik <blinnik@jspc28.x-matter.uni-frankfurt.de>
Wed, 17 Jun 2015 11:55:48 +0000 (13:55 +0200)
committerBenjamin Linnik <blinnik@jspc28.x-matter.uni-frankfurt.de>
Wed, 17 Jun 2015 11:55:48 +0000 (13:55 +0200)
MABS_run_analyzer/ChargeSpektrumFunctions.c [new file with mode: 0644]

diff --git a/MABS_run_analyzer/ChargeSpektrumFunctions.c b/MABS_run_analyzer/ChargeSpektrumFunctions.c
new file mode 100644 (file)
index 0000000..52fe9a3
--- /dev/null
@@ -0,0 +1,260 @@
+/**
+ * @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;
+}
+