BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
GrXtCalib Class Reference

#include <GrXtCalib.h>

Inheritance diagram for GrXtCalib:

Public Member Functions

 GrXtCalib ()
 ~GrXtCalib ()
void init (TObjArray *hlist, MdcCosGeom *pGeom)
void mergeHist (TFile *fhist)
void calib (MdcCalibConst *calconst, TObjArray *newXtList, TObjArray *r2tList)
Public Member Functions inherited from CalibBase
 CalibBase ()
virtual ~CalibBase ()

Detailed Description

Definition at line 11 of file GrXtCalib.h.

Constructor & Destructor Documentation

◆ GrXtCalib()

GrXtCalib::GrXtCalib ( )

Definition at line 9 of file GrXtCalib.cpp.

9 {
10 m_maxNhit = 5000;
11 m_nMaxEd = 1000;
12 for ( int lay = 0; lay < NLAYER; lay++ )
13 {
14 if ( lay < 8 ) m_tEd[lay] = 200.0;
15 else m_tEd[lay] = 300.0;
16 }
17 cout << "Calibration type: GrXtCalib" << endl;
18}

◆ ~GrXtCalib()

GrXtCalib::~GrXtCalib ( )

Definition at line 20 of file GrXtCalib.cpp.

20{}

Member Function Documentation

◆ calib()

void GrXtCalib::calib ( MdcCalibConst * calconst,
TObjArray * newXtList,
TObjArray * r2tList )
virtual

Implements CalibBase.

Definition at line 93 of file GrXtCalib.cpp.

93 {
94 CalibBase::calib( calconst, newXtList, r2tList );
95
96 int ord;
97 double xtpar[NLAYER][NENTRXT][NLR][8];
98 TF1* fxtDr = new TF1( "fxtDr", xtFitFun, 0, 300, 6 );
99 TF1* fxtEd = new TF1( "fxtEd", xtFitEdge, 150, 500, 1 );
100 if ( 1 == gfixXtC0 ) fxtDr->FixParameter( 0, 0 );
101
102 for ( int lay = 0; lay < NLAYER; lay++ )
103 {
104 for ( int iEntr = 0; iEntr < NENTRXT; iEntr++ )
105 {
106 for ( int lr = 0; lr < NLR; lr++ )
107 {
108 m_fgFit[lay][iEntr][lr] = false;
109 if ( 0 == gFgCalib[lay] ) continue;
110
111 if ( m_nhitIn[lay][iEntr][lr] > 1000 )
112 {
113 Tmax = calconst->getXtpar( lay, iEntr, lr, 6 );
114
115 m_grxt[lay][iEntr][lr]->Fit( "fxtDr", "Q+", "", 0, Tmax );
116 for ( ord = 0; ord < 6; ord++ )
117 { xtpar[lay][iEntr][lr][ord] = fxtDr->GetParameter( ord ); }
118 xtpar[lay][iEntr][lr][6] = Tmax;
119
120 Dmax = 0.0;
121 for ( ord = 0; ord < 6; ord++ )
122 Dmax += xtpar[lay][iEntr][lr][ord] * pow( Tmax, ord );
123
124 if ( m_nhitEd[lay][iEntr][lr] > 300 )
125 {
126 m_grxt[lay][iEntr][lr]->Fit( "fxtEd", "Q+", "", Tmax, Tmax + 300 );
127 xtpar[lay][iEntr][lr][7] = fxtEd->GetParameter( 0 );
128 if ( xtpar[lay][iEntr][lr][7] < 0.0 ) xtpar[lay][iEntr][lr][7] = 0.0;
129 }
130 else { xtpar[lay][iEntr][lr][7] = 0.0; }
131
132 m_fgFit[lay][iEntr][lr] = true;
133 }
134
135 } // end of lr loop
136 } // end of entrance angle loop
137 } // end of layer loop
138
139 ofstream fxtlog( "xtlog" );
140 for ( int lay = 0; lay < NLAYER; lay++ )
141 {
142 for ( int iEntr = 0; iEntr < NENTRXT; iEntr++ )
143 {
144 for ( int lr = 0; lr < NLR; lr++ )
145 {
146 fxtlog << setw( 3 ) << lay << setw( 3 ) << iEntr << setw( 3 ) << lr;
147
148 int fgUpdate = -1;
149 if ( m_fgFit[lay][iEntr][lr] )
150 {
151 fgUpdate = 1;
152 for ( ord = 0; ord < 8; ord++ )
153 calconst->resetXtpar( lay, iEntr, lr, ord, xtpar[lay][iEntr][lr][ord] );
154 }
155 else
156 {
157 int iEntrNew = findXtEntr( lay, iEntr, lr );
158 if ( -1 != iEntrNew )
159 {
160 fgUpdate = 2;
161 for ( ord = 0; ord < 8; ord++ )
162 { calconst->resetXtpar( lay, iEntr, lr, ord, xtpar[lay][iEntrNew][lr][ord] ); }
163 }
164 }
165 fxtlog << setw( 3 ) << fgUpdate;
166 for ( ord = 0; ord < 8; ord++ )
167 {
168 double par = calconst->getXtpar( lay, iEntr, lr, ord );
169 if ( 6 == ord ) fxtlog << setw( 9 ) << par;
170 else fxtlog << setw( 14 ) << par;
171 }
172 fxtlog << endl;
173 }
174 }
175 }
176 fxtlog.close();
177
178 cout << "Xt update finished. File xtlog was written." << endl;
179
180 renameHist();
181 delete fxtDr;
182 delete fxtEd;
183}
Double_t xtFitEdge(Double_t *x, Double_t par[])
Double_t xtFitFun(Double_t *x, Double_t par[])
virtual void calib(MdcCalibConst *calconst, TObjArray *newXtList, TObjArray *r2tList)=0
void resetXtpar(int lay, int entr, int lr, int order, double val)
double getXtpar(int lay, int entr, int lr, int order)

◆ init()

void GrXtCalib::init ( TObjArray * hlist,
MdcCosGeom * pGeom )
virtual

Implements CalibBase.

Definition at line 22 of file GrXtCalib.cpp.

22 {
23 CalibBase::init( hlist, pGeom );
24
25 m_fdXt = new TFolder( "mfdxt", "fdxt" );
26 hlist->Add( m_fdXt );
27
28 m_haxis = new TH2F( "axis", "", 50, 0, 300, 50, 0, 9 );
29 m_haxis->SetStats( 0 );
30 m_fdXt->Add( m_haxis );
31
32 char hname[200];
33 for ( int lay = 0; lay < NLAYER; lay++ )
34 {
35 for ( int iEntr = 0; iEntr < NENTRXT; iEntr++ )
36 {
37 for ( int lr = 0; lr < NLR; lr++ )
38 {
39 m_nhitIn[lay][iEntr][lr] = 0;
40 m_nhitEd[lay][iEntr][lr] = 0;
41
42 sprintf( hname, "mgrXt%02d_%02d_lr%01d", lay, iEntr, lr );
43 m_grxt[lay][iEntr][lr] = new TGraph();
44 m_grxt[lay][iEntr][lr]->SetName( hname );
45 m_grxt[lay][iEntr][lr]->SetMarkerStyle( 10 );
46 m_grxt[lay][iEntr][lr]->SetLineColor( 10 );
47 m_fdXt->Add( m_grxt[lay][iEntr][lr] );
48 }
49 }
50 }
51}
sprintf(cut, "kal_costheta0_em>-0.93&&kal_costheta0_em<0.93&&kal_pxy0_em>=0.05+%d*0.1&&kal_" "pxy0_em<0.15+%d*0.1&&NGch>=2", j, j)
virtual void init(TObjArray *hlist, MdcCosGeom *pGeom)=0
Definition CalibBase.cpp:12

◆ mergeHist()

void GrXtCalib::mergeHist ( TFile * fhist)
virtual

Implements CalibBase.

Definition at line 53 of file GrXtCalib.cpp.

53 {
54 CalibBase::mergeHist( fhist );
55
56 double tdr, doca;
57 char hname[200];
58 TFolder* fd = (TFolder*)fhist->Get( "fdXtGr" );
59 for ( int lay = 0; lay < NLAYER; lay++ )
60 {
61 for ( int iEntr = 0; iEntr < NENTRXT; iEntr++ )
62 {
63 for ( int lr = 0; lr < NLR; lr++ )
64 {
65 if ( ( m_nhitIn[lay][iEntr][lr] > m_maxNhit ) &&
66 ( m_nhitEd[lay][iEntr][lr] > m_nMaxEd ) )
67 continue;
68
69 sprintf( hname, "grXt%02d_%02d_lr%01d", lay, iEntr, lr );
70 TGraph* gr = (TGraph*)fd->FindObjectAny( hname );
71 int nPoint = gr->GetN();
72 for ( int i = 0; i < nPoint; i++ )
73 {
74 gr->GetPoint( i, tdr, doca );
75 if ( ( tdr < m_tEd[lay] ) && ( m_nhitIn[lay][iEntr][lr] <= m_maxNhit ) )
76 {
77 int np = m_grxt[lay][iEntr][lr]->GetN();
78 m_grxt[lay][iEntr][lr]->SetPoint( np, tdr, doca );
79 m_nhitIn[lay][iEntr][lr]++;
80 }
81 else if ( ( tdr >= m_tEd[lay] ) && ( m_nhitEd[lay][iEntr][lr] <= m_nMaxEd ) )
82 {
83 int np = m_grxt[lay][iEntr][lr]->GetN();
84 m_grxt[lay][iEntr][lr]->SetPoint( np, tdr, doca );
85 m_nhitEd[lay][iEntr][lr]++;
86 }
87 }
88 }
89 }
90 }
91}
TGraph * gr
virtual void mergeHist(TFile *fhist)=0

The documentation for this class was generated from the following files: