00001
00002
00003 #include "PlotAmpVsTDiff.h"
00004 #include <iostream>
00005 #include <stdio.h>
00006 #include <stdlib.h>
00007 #include <string>
00008 #include <map>
00009 #include <utility>
00010 #include <algorithm>
00011 #include <cmath>
00012 #include "definitions.h"
00013
00014 #include "TAnalysedPulse.h"
00015 #include "TDetectorPulse.h"
00016 #include "RegisterModule.inc"
00017
00018 using std::string;
00019 using std::map;
00020 using std::vector;
00021 using std::pair;
00022
00023 extern StringAnalPulseMap gAnalysedPulseMap;
00024
00025 PlotAmpVsTDiff::PlotAmpVsTDiff(char *HistogramDirectoryName, std::string det_name_a, std::string det_name_b) :
00026 BaseModule(HistogramDirectoryName){
00027
00028 fDetNameA = det_name_a;
00029 fDetNameB = det_name_b;
00030
00031
00032 std::string histname = "h" + fDetNameA + "-" + fDetNameB + "_AmpVsTDiff_Coarse";
00033 std::string histtitle = "Plot of the amplitude vs time difference for the " + fDetNameA + " and " + fDetNameB + " detector";
00034 int n_bits = TSetupData::Instance()->GetNBits(TSetupData::Instance()->GetBankName(fDetNameB));
00035 double max_adc_value = std::pow(2, n_bits);
00036
00037 std::string x_axis_title = "Time Difference (" + fDetNameB + " - " + fDetNameA + ") [ns]";
00038 std::string y_axis_title = "Amplitude of " + fDetNameB + " [ADC Value]";
00039
00040 amp_vs_tdiff_plot_coarse = new TH2F(histname.c_str(), histtitle.c_str(), 100,-50000,50000, max_adc_value,0,max_adc_value);
00041 amp_vs_tdiff_plot_coarse->GetXaxis()->SetTitle(x_axis_title.c_str());
00042 amp_vs_tdiff_plot_coarse->GetYaxis()->SetTitle(y_axis_title.c_str());
00043
00044 histname = "h" + fDetNameA + "-" + fDetNameB + "_AmpVsTDiff_Fine";
00045 amp_vs_tdiff_plot_fine = new TH2F(histname.c_str(), histtitle.c_str(), 5000,-5000,20000, max_adc_value,0,max_adc_value);
00046 amp_vs_tdiff_plot_fine->GetXaxis()->SetTitle(x_axis_title.c_str());
00047 amp_vs_tdiff_plot_fine->GetYaxis()->SetTitle(y_axis_title.c_str());
00048
00049 dir->cd("/");
00050 }
00051
00052 PlotAmpVsTDiff::PlotAmpVsTDiff(modules::options* opts) : BaseModule( (opts->GetString("0")).c_str() ) {
00053
00054 fDetNameA = opts->GetString("1");
00055 fDetNameB = opts->GetString("2");
00056
00057
00058 std::string histname = "h" + fDetNameA + "-" + fDetNameB + "_AmpVsTDiff_Coarse";
00059 std::string histtitle = "Plot of the amplitude vs time difference for the " + fDetNameA + " and " + fDetNameB + " detector";
00060 int n_bits = TSetupData::Instance()->GetNBits(TSetupData::Instance()->GetBankName(fDetNameB));
00061 double max_adc_value = std::pow(2, n_bits);
00062
00063 std::string x_axis_title = "Time Difference (" + fDetNameB + " - " + fDetNameA + ") [ns]";
00064 std::string y_axis_title = "Amplitude of " + fDetNameB + " [ADC Value]";
00065
00066 amp_vs_tdiff_plot_coarse = new TH2F(histname.c_str(), histtitle.c_str(), 100,-50000,50000, max_adc_value,0,max_adc_value);
00067 amp_vs_tdiff_plot_coarse->GetXaxis()->SetTitle(x_axis_title.c_str());
00068 amp_vs_tdiff_plot_coarse->GetYaxis()->SetTitle(y_axis_title.c_str());
00069
00070 histname = "h" + fDetNameA + "-" + fDetNameB + "_AmpVsTDiff_Fine";
00071 amp_vs_tdiff_plot_fine = new TH2F(histname.c_str(), histtitle.c_str(), 5000,-5000,20000, max_adc_value,0,max_adc_value);
00072 amp_vs_tdiff_plot_fine->GetXaxis()->SetTitle(x_axis_title.c_str());
00073 amp_vs_tdiff_plot_fine->GetYaxis()->SetTitle(y_axis_title.c_str());
00074
00075 dir->cd("/");
00076 }
00077
00078 PlotAmpVsTDiff::~PlotAmpVsTDiff(){
00079 }
00080
00081 int PlotAmpVsTDiff::ProcessEntry(TGlobalData *gData, const TSetupData* gSetup){
00082
00083
00084 AnalysedPulseList detA_pulses;
00085 AnalysedPulseList detB_pulses;
00086
00087 if (gAnalysedPulseMap.find(fDetNameA) == gAnalysedPulseMap.end()) {
00088 std::cout << fDetNameA << " pulses not found" << std::endl;
00089 }
00090 else {
00091 detA_pulses = gAnalysedPulseMap[fDetNameA];
00092 }
00093
00094 if (gAnalysedPulseMap.find(fDetNameB) == gAnalysedPulseMap.end()) {
00095 std::cout << fDetNameB << " pulses not found" << std::endl;
00096 }
00097 else {
00098 detB_pulses = gAnalysedPulseMap[fDetNameB];
00099 }
00100
00101
00102 AnalysedPulseList::iterator currentDetAPulse = detA_pulses.begin();
00103
00104
00105 for (AnalysedPulseList::iterator detBPulseIter = detB_pulses.begin(); detBPulseIter != detB_pulses.end(); ++detBPulseIter) {
00106
00107
00108
00109 for (AnalysedPulseList::iterator detAPulseIter = currentDetAPulse; detAPulseIter != detA_pulses.end(); ++detAPulseIter) {
00110
00111 double detB_time = (*detBPulseIter)->GetTime();
00112 double detA_time = (*detAPulseIter)->GetTime();
00113 double t_diff = detB_time - detA_time;
00114 double detB_amplitude = (*detBPulseIter)->GetAmplitude();
00115
00116 amp_vs_tdiff_plot_coarse->Fill(t_diff, detB_amplitude);
00117 amp_vs_tdiff_plot_fine->Fill(t_diff, detB_amplitude);
00118
00119 }
00120 }
00121
00122 return 0;
00123 }
00124
00125 ALCAP_REGISTER_MODULE(PlotAmpVsTDiff)