GSI Object Oriented Online Offline (Go4) GO4-6.4.0
Loading...
Searching...
No Matches
TXXXAnlProc.cxx
Go to the documentation of this file.
1// $Id: TXXXAnlProc.cxx 478 2009-10-29 12:26:09Z linev $
2//-----------------------------------------------------------------------
3// The GSI Online Offline Object Oriented (Go4) Project
4// Experiment Data Processing at EE department, GSI
5//-----------------------------------------------------------------------
6// Copyright (C) 2000- GSI Helmholtzzentrum fuer Schwerionenforschung GmbH
7// Planckstr. 1, 64291 Darmstadt, Germany
8// Contact: http://go4.gsi.de
9//-----------------------------------------------------------------------
10// This software can be used under the license agreements as stated
11// in Go4License.txt file which is part of the distribution.
12//-----------------------------------------------------------------------
13
14#include "TXXXAnlProc.h"
15
16#include "TH1.h"
17#include "TGraph.h"
18
19#include "TGo4Log.h"
20#include "TGo4WinCond.h"
21#include "TGo4Fitter.h"
22
23#include "TXXXAnlEvent.h"
24#include "TXXXUnpackEvent.h"
25#include "TXXXParameter.h"
26#include "TXXXCalibPar.h"
27
28//***********************************************************
31{
32}
33
34//***********************************************************
35// this one is used in TXXXAnlFact
36TXXXAnlProc::TXXXAnlProc(const char *name) :
38{
39 TGo4Log::Info("TXXXAnlProc: Create %s", name);
41 fParam1 = (TXXXParameter *) GetParameter("XXXPar1");
42 fParam2 = (TXXXParameter *) GetParameter("XXXPar2");
43 fWinCon = (TGo4WinCond *) GetAnalysisCondition("wincon1");
44
45 fSum1 = MakeTH1('I', "Sum1", "Sum over 8 channels", 5000, 1., 5001.);
46 fSum2 = MakeTH1('I', "Sum2", "Sum over 8 channels shift 1", 5000, 1., 5001.);
47 fSum3 = MakeTH1('I', "Sum3", "Sum over 8 channels shift 2", 5000, 1., 5001.);
48 fCaliSum1 = MakeTH1('I', "Sum1Calib", "Sum over 8 channels(keV)", 5000, 1., 20.);
49
50 fFitSrc = MakeTH1('I', "FitSource","Copy of fit data", 1000, 0., 1000.);
51 fFitRes = MakeTH1('I', "FitTarget","Copy of fit result", 1000, 0., 1000.);
52
53 fCaligraph = (TGraph *) GetObject("Calibration");
54 if (!fCaligraph) {
55 fCaligraph = new TGraph;
56 fCaligraph->SetName("Calibration");
57 fCaligraph->SetMarkerStyle(3);
58 AddObject(fCaligraph);
59 }
60
61 fFitter = (TGo4Fitter *) GetObject("Fitter");
62 if (!fFitter) {
63 fFitter = new TGo4Fitter("Fitter", TGo4Fitter::ff_chi_square, kTRUE);
64 fFitter->AddH1("data", nullptr, kFALSE, 100., 1000.);
65 fFitter->AddPolynomX("data", "Pol", 1);
66 AddObject(fFitter);
67 }
68
69 fCalipar = (TXXXCalibPar *) GetParameter("CaliPar");
70 if (!fCalipar) {
71 // calibration parameter not yet existing, we set it up:
72 fCalipar = new TXXXCalibPar("CaliPar",GetHistogram("Cr1Ch01"),fCaligraph);
73 AddParameter(fCalipar);
74 }
75
76 fFitCounter = 0;
77}
78
79//***********************************************************
81{
82}
83
84//-----------------------------------------------------------
85
87{
88 auto inp_evt = static_cast<TXXXUnpackEvent *>(GetInputEvent());
89 auto out_evt = static_cast<TXXXAnlEvent *>(dest);
90
91 out_evt->SetValid(kFALSE); // events are not stored until kTRUE is set
92 if(!inp_evt || !inp_evt->IsValid()) // do not process unvalid event
93 return kFALSE;
94 out_evt->SetValid(kTRUE); // events are not stored until kTRUE is set
95 Int_t cnt = 0;
96 TXXXUnpackEvent& ev=*inp_evt; // ref instead pointer for array syntax below
97 for (Int_t cr = 1; cr < 3; cr++) {
98 // loop over first filled crates 1 and 2
99 for (Int_t ii = 0; ii < 4; ii++) {
100 // get first channels of each crate
101 TXXXModule* mod=dynamic_cast<TXXXModule*>( &ev[cr][ii]); // 2d array with composite event operator[]
102 if(!mod) continue;
103 Float_t val= mod->GetData();
104 out_evt->frData[cnt] = val;
105 if(val) fCaliSum1->Fill(fCalipar->Energy(val));
106 cnt++;
107 }
108 }
109
110 for (Int_t ii = 0; ii < 8; ii++)
111 if (out_evt->frData[ii]) {
112 if(fWinCon && fWinCon->Test(out_evt->frData[ii])) fSum1->Fill(out_evt->frData[ii]);
113 if (fParam1) fSum2->Fill(out_evt->frData[ii] + fParam1->frP1);
114 if (fParam2) fSum3->Fill(out_evt->frData[ii] + fParam2->frP1);
115 }
116
117 fFitCounter++;
118
119 if ((fFitCounter % 500000 == 0) && fFitter) {
120 TH1 *histo1 = GetHistogram("Crate1/Cr1Ch04");
121
122 if (histo1) {
123 fFitter->SetH1("data", histo1, kFALSE);
124 fFitter->DoActions();
125
126 fFitSrc->Reset();
127 fFitSrc->SetBins(histo1->GetNbinsX(), histo1->GetXaxis()->GetXmin(), histo1->GetXaxis()->GetXmax());
128 fFitSrc->Add(histo1);
129
130 TH1 *histo2 = (TH1 *) fFitter->CreateDrawObject("FitResult", "data", kTRUE);
131 fFitRes->Reset();
132 if (histo2) {
133 fFitRes->SetBins(histo2->GetNbinsX(), histo2->GetXaxis()->GetXmin(), histo2->GetXaxis()->GetXmax());
134 fFitRes->Add(histo2);
135
136 TString title = TString::Format("Result K=%5.3f B=%7.1f", fFitter->GetParValue("Pol_1.Ampl"), fFitter->GetParValue("Pol_0.Ampl"));
137 fFitRes->SetTitle(title.Data());
138 delete histo2;
139 }
140 }
141 }
142
143 return kTRUE;
144}
TH1D * GetHistogram(const char *HistogramName)
Definition Example1.cxx:45
The abstract base class for the data elements of which the unpacked events (or detector structure dat...
Abstract event processor.
TGo4EventElement * GetInputEvent()
Access to external raw event which is set as association member.
TH1 * GetHistogram(const char *name)
Get histogram from go4 framework.
Central class of Go4Fit package.
Definition TGo4Fitter.h:38
static void Info(const char *text,...) GO4_PRINTF_ARGS
User shortcut for message with prio 1.
Definition TGo4Log.cxx:294
Window condition.
Definition TGo4WinCond.h:26
TH1 * fCaliSum1
Definition TXXXAnlProc.h:35
TXXXParameter * fParam2
Definition TXXXAnlProc.h:39
virtual ~TXXXAnlProc()
TXXXCalibPar * fCalipar
Definition TXXXAnlProc.h:40
TGo4WinCond * fWinCon
Definition TXXXAnlProc.h:37
TH1 * fFitRes
Definition TXXXAnlProc.h:46
TGo4Fitter * fFitter
Definition TXXXAnlProc.h:43
Int_t fFitCounter
Definition TXXXAnlProc.h:44
Bool_t BuildEvent(TGo4EventElement *dest) override
Fill the destination event dest.
TXXXParameter * fParam1
Definition TXXXAnlProc.h:38
TH1 * fFitSrc
Definition TXXXAnlProc.h:45
Int_t GetData() const