diff --git a/convertDRS4/read_binary.cpp b/convertDRS4/read_binary.cpp index 8de23e13edbf4bee9639ab9f10f677e62aa28cb5..8cf0650f4e3c99b94321f8efbcaf4a9d74780ea7 100644 --- a/convertDRS4/read_binary.cpp +++ b/convertDRS4/read_binary.cpp @@ -334,7 +334,9 @@ int main(int argc, const char * argv[]) rfile->Close(); // delete event; + printf("error1\n"); delete[] event; + printf("error2\n"); return 1; } diff --git a/data/dataDSR4/analysis_07_1.root b/data/dataDSR4/analysis_07_1.root index 1a9e7d6a47e2682a16771d4d4ddc8a2f2cc22530..ef57558475da2aaf6abd3097d218accac8e192d6 100644 Binary files a/data/dataDSR4/analysis_07_1.root and b/data/dataDSR4/analysis_07_1.root differ diff --git a/data/rawDataDSR4/NeuRad_test_07_1.root b/data/rawDataDSR4/NeuRad_test_07_1.root index 0edec10b15f7435cac6d9bcd5211b22b4f881ae7..8bca15a8cd3af82a37d0e48215d7c41a5d2c086f 100644 Binary files a/data/rawDataDSR4/NeuRad_test_07_1.root and b/data/rawDataDSR4/NeuRad_test_07_1.root differ diff --git a/dataClasses/AEvent.cpp b/dataClasses/AEvent.cpp index 362afefd7a34801d8b4e8a4b6b06a4372a05a4bf..5e761ec98deb2de2ed7355a661296ab4fb093aa2 100644 --- a/dataClasses/AEvent.cpp +++ b/dataClasses/AEvent.cpp @@ -55,6 +55,14 @@ void AEvent::ProcessEvent() { fTime[j] = time[j]; } +// SetGraphs(); + const Double_t zeroLevel = FindZeroLevel(); +// const Double_t zeroLevel = 0; + for(Int_t j = 0; j < fNPoints; j++) { + //fAmpPos[j] = amp[j]*(-1.) - zeroLevel; + fAmpPos[j] = fAmpPos[j] - zeroLevel; + } + Double_t maxAmp = 0.; Double_t maxAmpT = 0.; @@ -125,9 +133,8 @@ void AEvent::SetGraphs() { } void AEvent::SetCFD() { -// Double_t c = 0.5; //attenuation coefficient -// Int_t td = 5; //time of delay in points - Double_t level = 100.; //todo what is it? + + Double_t level = 100.; //is necessary to find cfd amplitude value closest to zero fGraphCFD->Set(fNPoints); @@ -139,9 +146,7 @@ void AEvent::SetCFD() { //CFD method if(i>fCFtimeDelay) { -// fAmpCFD[i] = fAmpPos[i]*cfRatio*(-1); fAmpCFD[i] = fAmpPos[i]*fCFratio*(-1); -// fAmpCFD[i] = fAmpCFD[i] + fAmpPos[i - timeDelay]; fAmpCFD[i] = fAmpCFD[i] + fAmpPos[i - fCFtimeDelay]; fGraphCFD->SetPoint(i, fTime[i], fAmpCFD[i]); } @@ -167,8 +172,30 @@ void AEvent::SetCFD() { fCFD = fTime[j]; } } +} - return; +Double_t AEvent::FindZeroLevel(Int_t pmin, Int_t pmax) { + +// fGraphZero->Set(fNPoints); +// const Double_t *amp = fInputEvent->GetAmp(); +// const Double_t *time = fInputEvent->GetTime(); + SetGraphs(); + Double_t correction = 0; + TF1 *fit1 = new TF1("fit1","[0]"); + fit1->SetRange(pmin,pmax); + +// Warning("AEvent::FindZeroLevel", "Graph was not set"); + if (!fGraphSignal) { + Warning("AEvent::FindZeroLevel", "Graph was not set"); + return 0; + } +// fGraphSignal->Print(); + fGraphSignal->Fit(fit1,"RQN","goff"); +// fGraphSignal->Fit(fit1,"QR","goff"); + correction = fit1->GetParameter(0); +// printf("zero level %f\n", correction); + delete fit1; + return correction; } diff --git a/dataClasses/AEvent.h b/dataClasses/AEvent.h index 145155835643c8896a402e8a98cdb1d35658e317..b48a8065738a0fbe20fdf4b2eb4b5031f8a3ba58 100644 --- a/dataClasses/AEvent.h +++ b/dataClasses/AEvent.h @@ -17,6 +17,7 @@ #include "TString.h" #include "TTree.h" #include "TFile.h" +#include "TF1.h" //#include "TMath.h" @@ -43,10 +44,11 @@ private: TGraph *fGraphSignal; TGraph *fGraphCFD; + TGraph *fGraphZero; RawEvent *fInputEvent; //! - Double_t fCFratio; //! + Double_t fCFratio; //! Double_t fCFtimeDelay; //! public: @@ -57,20 +59,33 @@ public: void SetRawDataFile(const char* inprawfile, const char* treename); void ProcessEvent(); -// void Integral() void SetInputEvent(RawEvent** event); - void SetCFratio(Double_t ratio) { fCFratio = ratio; }; - void SetCFtimeDelay(Double_t timeDelay) { fCFtimeDelay = timeDelay; }; + void SetCFratio(Double_t ratio) { fCFratio = ratio; }; + //CFD set attenuation coefficient + + void SetCFtimeDelay(Double_t timeDelay) { fCFtimeDelay = timeDelay; }; + //CFD set time delay (in points) void Reset(); //Resets arrays to zeros - TGraph* GetGraph() { - //todo + TGraph* GetGraphCFD() { + return fGraphCFD; - // return gSignal; } + //draws CFD graphs + + TGraph* GetGraphSignal() { + + return fGraphSignal; + } + //draws signal shape graphs + + Double_t FindZeroLevel(Int_t pmin = 10, Int_t pmax = 100); + //for zero level correction + //one parameter fit between pmin and pmax + //returns fit parameter i.e. number on which amplitude should be corrected private: void Init(); diff --git a/macros/analyse.C b/macros/analyse.C index a648d693c41f2cc09869b0d0bf82f9084bdc0ea0..abde307df82eb13bcb421afc8bc0dfbd24016da6 100644 --- a/macros/analyse.C +++ b/macros/analyse.C @@ -13,7 +13,7 @@ void analyse() RawEvent *revent[noBranches]; // pointer to the array (of RawEvent class) in which raw data for each channel will be put for (Int_t j = 0; jSetBranchAddress(bName.Data(), &revent[j]); //read the tree tr with raw data and fill array revent with raw data } @@ -37,6 +37,9 @@ void analyse() for(Long64_t i = 0; i < nentries; i++) { tr->GetEntry(i); + if ( !(tr->GetEntry(i)%100) ) { + printf("Found event #%d\n", tr->GetEntry(i)); + } for (Int_t j = 0; jReset(); diff --git a/macros/testShowCFD.cxx b/macros/testShowCFD.cxx index 503cbeb1be5de3c826a10acab1d6fdb9d23005fc..b9a3c3589cc67174205772c1ac518539c92f88c0 100644 --- a/macros/testShowCFD.cxx +++ b/macros/testShowCFD.cxx @@ -17,7 +17,7 @@ void testShowCFD() for (Int_t i = 0; i < 10; i++) { gr[i] = 0; tr->GetEntry(i+kFirstEvent); - gr[i] = new TGraph(*revent->GetGraph()); + gr[i] = new TGraph(*revent->GetGraphCFD()); }//for over events diff --git a/macros/testShowGraphs.cxx b/macros/testShowGraphs.cxx index 127213dc519df3200776c71234c96ed8a8a20da3..b1a2d6cc5a999e7b143e816eb1633ac5fa7be182 100644 --- a/macros/testShowGraphs.cxx +++ b/macros/testShowGraphs.cxx @@ -9,24 +9,33 @@ void testShowGraphs() TTree *tr = (TTree*)fr.Get("atree"); AEvent *revent = new AEvent(); - tr->SetBranchAddress("Ach0.",&revent); + cout << tr->SetBranchAddress("Ach0.",&revent) << endl; TGraph *gr[10]; + cout << "warning" << endl; + + cout << tr->GetEntries() << endl; + //loop over events - for (Int_t i = 0; i < 10; i++) { + for (Long64_t i = 0; i < 10; i++) { gr[i] = 0; - tr->GetEntry(i+kFirstEvent); - gr[i] = new TGraph(*revent->GetGraph()); + cout << "warning 1" << endl; + cout << i+kFirstEvent << endl; +// tr->GetEntry(i+kFirstEvent); + tr->GetEntry(i); + cout << "warning 2" << endl; + gr[i] = new TGraph(*revent->GetGraphSignal()); }//for over events + cout << "warning 3" << endl; TCanvas *c1 = new TCanvas("c1","test",10,10,1000,600); c1->Divide(3,2); - for (Int_t i = 0; i < 6; i++) { - c1->cd(i+1); - gr[i]->Draw(); + for (Int_t k = 0; k < 6; k++) { + c1->cd(k+1); + gr[k]->Draw(); } // c1->cd(2);