00001 #include "AltTimeHist.h"
00002 #include <Midad/Base/Mint.h>
00003 #include <Midad/Base/MintView.h>
00004 #include <Midad/Base/ZoomPad.h>
00005 #include <Midad/Util/Range.h>
00006
00007 #include <Conventions/Munits.h>
00008
00009 #include <CandDigit/CandDigitHandle.h>
00010 #include <CandDigit/CandDigitListHandle.h>
00011
00012 #include <DataUtil/CDL2STL.h>
00013 using namespace DataUtil;
00014
00015 #include <TH1F.h>
00016
00017 #include <sigc++/sigc++.h>
00018 #include <sigc++/class_slot.h>
00019 using namespace SigC;
00020
00021 #include <vector>
00022 using namespace std;
00023
00024 AltTimeHist::AltTimeHist()
00025 : fPad(0)
00026 , fHist1(0)
00027 , fHist2(0)
00028 {
00029
00030 fPad = new TPad("Alt Time Hist2", "Alt Time Hist2", 0.42,0.25,0.75,0.44);
00031 fPad->Draw();
00032
00033 fPad->cd();
00034 fHist1 = new TH1F("AltTimeHist","Digit Times (ns)",100,0,100);
00035 fHist2 = new TH1F("AltTimeHistwin","Digit Times (ns)",100,0,100);
00036 fHist1->Draw();
00037 fHist2->Draw("same");
00038 fHist1->SetFillColor(2);
00039 fHist1->SetLineColor(2);
00040 fHist1->SetFillStyle(1001);
00041 fHist2->SetFillColor(3);
00042 fHist2->SetLineColor(3);
00043 fHist2->SetFillStyle(1001);
00044
00045 }
00046
00047
00048 AltTimeHist::~AltTimeHist()
00049 {
00050 }
00051
00052 void AltTimeHist::Draw(Option_t*)
00053 {
00054 fPad->Draw();
00055 }
00056 void AltTimeHist::SetMint(Mint* mint)
00057 {
00058 this->MintView::SetMint(mint);
00059 mint->GetTimeRange().modified.connect(slot_class(*this,&AltTimeHist::Refresh));
00060
00061 }
00062
00063 void AltTimeHist::SetTotTimeRange(RangeDouble& r){
00064 fTotTimeRange.SetMin(r.Min());
00065 fTotTimeRange.SetMax(r.Max());
00066 }
00067
00068 void AltTimeHist::UpdatePad()
00069 {
00070 fPad->Modified();
00071 fPad->Update();
00072 }
00073
00074 void AltTimeHist::Refresh()
00075 {
00076
00077
00078 fHist1->Reset();
00079
00080 fHist2->Reset();
00081
00082 const CandDigitListHandle *cdlh = this->GetMint().GetDigits();
00083 if (! cdlh) return;
00084
00085 RangeDouble& r = this->GetMint().GetTimeRange();
00086
00087 if(fTotTimeRange.Max()-fTotTimeRange.Min()>0){
00088 fHist1->SetBins(300,fTotTimeRange.Min()/Munits::ns, fTotTimeRange.Max()/Munits::ns);
00089 fHist2->SetBins(300,fTotTimeRange.Min()/Munits::ns, fTotTimeRange.Max()/Munits::ns);
00090
00091 vector<const CandDigitHandle*> dc = CDL2STLvector<const CandDigitHandle>(*cdlh);
00092
00093 int siz = dc.size();
00094 for (int ind=0; ind < siz; ++ind) {
00095 fHist1->Fill(dc[ind]->GetTime()/Munits::ns,dc[ind]->GetCharge());
00096 }
00097
00098 for (int ind=0; ind < siz; ++ind) {
00099 Float_t t = dc[ind]->GetTime();
00100 if(t>r.Min() && t<r.Max()){
00101 fHist2->Fill(dc[ind]->GetTime()/Munits::ns,dc[ind]->GetCharge());
00102 }
00103 }
00104 }
00105
00106 this->UpdatePad();
00107 }