diff --git a/fles/mcbm2018/tasks/CbmMcbmCheckTimingAlgo.cxx b/fles/mcbm2018/tasks/CbmMcbmCheckTimingAlgo.cxx index 9513e1bf4a4eb709a1124c3f8ca831aae6d0d0ff..c2104af44614e8d1fafd0b81494f92b83ece5b56 100644 --- a/fles/mcbm2018/tasks/CbmMcbmCheckTimingAlgo.cxx +++ b/fles/mcbm2018/tasks/CbmMcbmCheckTimingAlgo.cxx @@ -20,6 +20,7 @@ #include "FairRunOnline.h" #include <Logger.h> +#include "TF1.h" #include "TH1.h" #include "TH2.h" #include "THttpServer.h" @@ -245,7 +246,7 @@ void CbmMcbmCheckTimingAlgo::CheckInterSystemOffset() } // for( std::vector< CheckTimingDetector >::iterator det = fvDets.begin(); det != fvDets.end(); ++det ) for (UInt_t uDigi = 0; uDigi < uNbRefDigis; ++uDigi) { - LOG(debug) << Form("Checking seed %6u / %6u", uDigi, uNbRefDigis); + //LOG(debug) << Form("Checking seed %6u / %6u", uDigi, uNbRefDigis); Double_t dRefTime = 0; Double_t dRefCharge = 0; @@ -411,14 +412,119 @@ void CbmMcbmCheckTimingAlgo::WriteHistos() TFile* outfile = TFile::Open(fOutFileName, "RECREATE"); for (UInt_t uDetIdx = 0; uDetIdx < fvDets.size(); ++uDetIdx) { - LOG(info) << "Saving histos for " << fvDets[uDetIdx].sName; + LOG(debug) << "Saving histos for " << fvDets[uDetIdx].sName; fvhDetSelfDiff[uDetIdx]->Write(); - fvhDetToRefDiff[uDetIdx]->Write(); + fvhDetToRefDiffRefCharge[uDetIdx]->Write(); fvhDetToRefDiffDetCharge[uDetIdx]->Write(); fvhDetToRefDiffEvo[uDetIdx]->Write(); fvhDetToRefDiffEvoLong[uDetIdx]->Write(); + LOG(debug) << "WriteHistos, uDetIdx, Det, entries = " << uDetIdx << " " << fvDets[uDetIdx].sName << " " <<fvhDetToRefDiff[uDetIdx]->GetEntries(); LOG(info) << "Saved histos for " << fvDets[uDetIdx].sName; + + DetPeakPosSingle = fvhDetToRefDiff[uDetIdx]->GetMaximumBin() * fvhDetToRefDiff[uDetIdx]->GetBinWidth(1) + fvhDetToRefDiff[uDetIdx]->GetXaxis()->GetXmin(); + DetAverageSingle = (fvhDetToRefDiff[uDetIdx]->Integral()) / (fvhDetToRefDiff[uDetIdx]->GetNbinsX()); + + switch (fvDets[uDetIdx].detId) { + case ECbmModuleId::kSts: { + if (DetAverageSingle > 0) { + TF1* gs_sts = new TF1("gs_sts", "gaus(0)+pol0(3)", DetPeakPosSingle - 2 * fStsPeakWidthNs, DetPeakPosSingle + 2 * fStsPeakWidthNs); + gs_sts->SetParameters(DetAverageSingle, DetPeakPosSingle, fStsPeakWidthNs, DetAverageSingle); + fvhDetToRefDiff[uDetIdx]->Fit("gs_sts", "R"); + TF1* fitresult_sts = fvhDetToRefDiff[uDetIdx]->GetFunction("gs_sts"); + LOG(debug)<< fvDets[uDetIdx].sName << " parameters from Gauss fit = " << fitresult_sts->GetParameter(0) << ", " + << fitresult_sts->GetParameter(1) << ", " << fitresult_sts->GetParameter(2); + } + break; + } + + case ECbmModuleId::kMuch: { + if (DetAverageSingle > 0) { + TF1* gs_much = + new TF1("gs_much", "gaus(0)+pol0(3)", DetPeakPosSingle - 2 * fMuchPeakWidthNs, DetPeakPosSingle + 2 * fMuchPeakWidthNs); + gs_much->SetParameters(DetAverageSingle, DetPeakPosSingle, fMuchPeakWidthNs, DetAverageSingle); + fvhDetToRefDiff[uDetIdx]->Fit("gs_much", "R"); + TF1* fitresult_much = fvhDetToRefDiff[uDetIdx]->GetFunction("gs_much"); + LOG(debug)<< fvDets[uDetIdx].sName << " parameters from Gauss fit = " << fitresult_much->GetParameter(0) << ", " + << fitresult_much->GetParameter(1) << ", " << fitresult_much->GetParameter(2); + } + break; + } + + case ECbmModuleId::kTrd: { + if (DetAverageSingle > 0) { + TF1* gs_trd = + new TF1("gs_trd", "gaus(0)+pol0(3)", DetPeakPosSingle - 2 * fTrdPeakWidthNs, DetPeakPosSingle + 2 * fTrdPeakWidthNs); + gs_trd->SetParameters(0.7 * DetAverageSingle, DetPeakPosSingle, fTrdPeakWidthNs, DetAverageSingle); + fvhDetToRefDiff[uDetIdx]->Fit("gs_trd", "R"); + TF1* fitresult_trd = fvhDetToRefDiff[uDetIdx]->GetFunction("gs_trd"); + LOG(debug)<< fvDets[uDetIdx].sName << " parameters from Gauss fit = " << fitresult_trd->GetParameter(0) << ", " + << fitresult_trd->GetParameter(1) << ", " << fitresult_trd->GetParameter(2); + } + break; + } + + case ECbmModuleId::kT0: { + if (DetAverageSingle > 0) { + TF1* gs_tof = + new TF1("gs_tof", "gaus(0)+pol0(3)", DetPeakPosSingle - 2 * fTofPeakWidthNs, DetPeakPosSingle + 2 * fTofPeakWidthNs); + gs_tof->SetParameters(DetAverageSingle, DetPeakPosSingle, fTofPeakWidthNs, DetAverageSingle); + fvhDetToRefDiff[uDetIdx]->Fit("gs_tof", "R"); + TF1* fitresult_tof = fvhDetToRefDiff[uDetIdx]->GetFunction("gs_tof"); + LOG(debug)<< fvDets[uDetIdx].sName << " parameters from Gauss fit = " << fitresult_tof->GetParameter(0) << ", " + << fitresult_tof->GetParameter(1) << ", " << fitresult_tof->GetParameter(2); + } + break; + } + + case ECbmModuleId::kTof: { + if (DetAverageSingle > 0) { + TF1* gs_tof = + new TF1("gs_tof", "gaus(0)+pol0(3)", DetPeakPosSingle - 2 * fTofPeakWidthNs, DetPeakPosSingle + 2 * fTofPeakWidthNs); + gs_tof->SetParameters(DetAverageSingle, DetPeakPosSingle, fTofPeakWidthNs, DetAverageSingle); + fvhDetToRefDiff[uDetIdx]->Fit("gs_tof", "R"); + TF1* fitresult_tof = fvhDetToRefDiff[uDetIdx]->GetFunction("gs_tof"); + LOG(debug)<< fvDets[uDetIdx].sName << " parameters from Gauss fit = " << fitresult_tof->GetParameter(0) << ", " + << fitresult_tof->GetParameter(1) << ", " << fitresult_tof->GetParameter(2); + } + break; + } + + case ECbmModuleId::kRich: { + if (DetAverageSingle > 0) { + TF1* gs_rich = + new TF1("gs_rich", "gaus(0)+pol0(3)", DetPeakPosSingle - 2 * fRichPeakWidthNs, DetPeakPosSingle + 2 * fRichPeakWidthNs); + gs_rich->SetParameters(0.5 * DetAverageSingle, DetPeakPosSingle, fRichPeakWidthNs, DetAverageSingle); + fvhDetToRefDiff[uDetIdx]->Fit("gs_rich", "R"); + TF1* fitresult_rich = fvhDetToRefDiff[uDetIdx]->GetFunction("gs_rich"); + LOG(debug)<< fvDets[uDetIdx].sName << " parameters from Gauss fit = " << fitresult_rich->GetParameter(0) << ", " + << fitresult_rich->GetParameter(1) << ", " << fitresult_rich->GetParameter(2); + } + break; + } + + case ECbmModuleId::kPsd: { + if (DetAverageSingle > 0) { + TF1* gs_psd = + new TF1("gs_psd", "gaus(0)+pol0(3)", DetPeakPosSingle - 2 * fPsdPeakWidthNs, DetPeakPosSingle + 2 * fPsdPeakWidthNs); + gs_psd->SetParameters(DetAverageSingle, DetPeakPosSingle, fPsdPeakWidthNs, DetAverageSingle); + fvhDetToRefDiff[uDetIdx]->Fit("gs_psd", "R"); + TF1* fitresult_psd = fvhDetToRefDiff[uDetIdx]->GetFunction("gs_psd"); + LOG(debug)<< fvDets[uDetIdx].sName << " parameters from Gauss fit = " << fitresult_psd->GetParameter(0) << ", " + << fitresult_psd->GetParameter(1) << ", " << fitresult_psd->GetParameter(2); + } + break; + } + + default: { + LOG(info)<< "Detector ID for fitting is not valid."; + break; + } + + + } + + fvhDetToRefDiff[uDetIdx]->Write(); //At the end in order to include fitting results in histos } // for( std::vector< CheckTimingDetector >::iterator det = fvDets.begin(); det != fvDets.end(); ++det ) /// Register the histo for reference detector digi to digi time difference diff --git a/fles/mcbm2018/tasks/CbmMcbmCheckTimingAlgo.h b/fles/mcbm2018/tasks/CbmMcbmCheckTimingAlgo.h index 8ef9059b632708f3fcb09fad9b0a58f231b65bd8..a879eb2b57441a1628dbc47daf4df31e2a969848 100644 --- a/fles/mcbm2018/tasks/CbmMcbmCheckTimingAlgo.h +++ b/fles/mcbm2018/tasks/CbmMcbmCheckTimingAlgo.h @@ -86,6 +86,14 @@ public: UInt_t uChargeCutMaxIn = 0); void RemoveCheckDetector(ECbmModuleId detIn); + void SetTrdPeakWidthNs(Double_t val = 120.) { fTrdPeakWidthNs = val; } + void SetStsPeakWidthNs(Double_t val = 30.) { fStsPeakWidthNs = val; } + void SetMuchPeakWidthNs(Double_t val = 100.) { fMuchPeakWidthNs = val; } + void SetTofPeakWidthNs(Double_t val = 20.) { fTofPeakWidthNs = val; } + void SetRichPeakWidthNs(Double_t val = 40.) { fRichPeakWidthNs = val; } + void SetPsdPeakWidthNs(Double_t val = 20.) { fPsdPeakWidthNs = val; } + + private: void CheckDataPresence(CheckTimingDetector detToCheck); void CreateHistos(); @@ -121,7 +129,17 @@ private: /** Name of the histogram output file **/ TString fOutFileName = "data/HistosCheckTiming.root"; - + + Double_t DetPeakPosSingle; + Double_t DetAverageSingle; + + Double_t fTrdPeakWidthNs = 120.; + Double_t fStsPeakWidthNs = 30.; + Double_t fMuchPeakWidthNs = 100.; + Double_t fTofPeakWidthNs = 20.; + Double_t fRichPeakWidthNs = 40.; + Double_t fPsdPeakWidthNs = 20.; + ClassDefNV(CbmMcbmCheckTimingAlgo, 1); }; diff --git a/macro/beamtime/mcbm2020/check_timing_any.C b/macro/beamtime/mcbm2020/check_timing_any.C index 0ce0b391ef0d8df0d25e6a5dbeff0c5813f96810..2010dc5a0366bb5be8d664612f6c0a39aaa6c7cd 100644 --- a/macro/beamtime/mcbm2020/check_timing_any.C +++ b/macro/beamtime/mcbm2020/check_timing_any.C @@ -23,7 +23,7 @@ void check_timing_any(TString fileName, UInt_t uRunId = 0, Int_t nEvents = 0, TS // ----- Analysis run -------------------------------------------------- FairRunOnline* fRun = new FairRunOnline(); fRun->ActivateHttpServer(100, 8080); // refresh each 100 events - + fRun->SetSink(new FairRootFileSink("SinkFile.root")); FairFileSource* inputSource = new FairFileSource(fileName); fRun->SetSource(inputSource);