#include <IniCalib.h>
Inheritance diagram for IniCalib:
Public Member Functions | |
IniCalib () | |
~IniCalib () | |
void | init (TObjArray *hlist, MdcCosGeom *pGeom) |
void | mergeHist (TFile *fhist) |
void | calib (MdcCalibConst *calconst, TObjArray *newXtList, TObjArray *r2tList) |
Private Member Functions | |
void | renameHist () |
Static Private Member Functions | |
static Double_t | funTmin (Double_t *x, Double_t *par) |
static Double_t | funTmax (Double_t *x, Double_t *par) |
Private Attributes | |
MdcCosGeom * | m_pGeom |
TFolder * | m_fdcom |
TFolder * | m_fdTmap |
TFolder * | m_fdTraw |
TFolder * | m_fdTrawCel |
TFolder * | m_fdTrawTes |
TFolder * | m_fdQmap |
TFolder * | m_fdQraw |
TFolder * | m_fdQrawCel |
TH1F * | m_hLayerHitmapT |
TH1F * | m_hWireHitMapT |
TH1F * | m_hLayerHitmapQ |
TH1F * | m_hWireHitMapQ |
TH1F * | m_hTesAll |
TH1F * | m_hTesCal |
TH1F * | m_hTesFlag |
TH1F * | m_hlaymapT [NLAYER] |
TH1F * | m_htdc [NLAYER] |
TH1F * | m_htraw [NLAYER] |
TH1F * | m_htrawCel [NWIRE] |
TH1F * | m_hlaymapQ [NLAYER] |
TH1F * | m_hqraw [NLAYER] |
TH1F * | m_hqrawCel [NWIRE] |
Definition at line 11 of file IniCalib.h.
IniCalib::IniCalib | ( | ) |
IniCalib::~IniCalib | ( | ) |
void IniCalib::calib | ( | MdcCalibConst * | calconst, | |
TObjArray * | newXtList, | |||
TObjArray * | r2tList | |||
) | [virtual] |
Implements CalibBase.
Definition at line 166 of file IniCalib.cpp.
References bin, funTmax(), funTmin(), MdcCalibConst::getT0(), MdcCosGeom::getWire(), MdcCosWire::getWireId(), MdcCalibConst::getXtpar(), gFgCalib, gFgIniCalConst, gInitT0, gInitTm, gT0Shift, gTimeShift, gTmaxFitChindf, gTmaxFitRange, gTminFitChindf, gTminFitRange, genRecEmupikp::i, m_htraw, m_pGeom, NENTRSD, NENTRXT, NLAYER, NLR, NSDBIN, NXTPAR, renameHist(), and SetOptFit().
00166 { 00167 int lay; 00168 int wir; 00169 double t0Fit[NLAYER]; 00170 double t0Cal[NLAYER]; 00171 double tmax[NLAYER]; 00172 double initT0 = gInitT0; 00173 00174 int fitTminFg[NLAYER]; 00175 int fitTmaxFg[NLAYER]; 00176 double chisq; 00177 double ndf; 00178 double chindfTmin[NLAYER]; 00179 double chindfTmax[NLAYER]; 00180 char funname[200]; 00181 00182 // fit Tmin 00183 TF1* ftmin[NLAYER]; 00184 for(lay=0; lay<NLAYER; lay++){ 00185 fitTminFg[lay] = 0; 00186 chindfTmin[lay] = -1; 00187 sprintf(funname, "ftmin%02d", lay); 00188 ftmin[lay] = new TF1(funname, funTmin, 0, 150, 6); 00189 00190 if(1 == gFgCalib[lay]){ 00191 Stat_t nEntryTot = 0; 00192 for(int ibin=1; ibin<=25; ibin++){ 00193 Stat_t entry = m_htraw[lay]->GetBinContent(ibin); 00194 nEntryTot += entry; 00195 } 00196 double c0Ini = (double)nEntryTot / 25.0; 00197 double c1Ini = (m_htraw[lay]->GetMaximum()) - c0Ini; 00198 00199 ftmin[lay] -> SetParameter(0, c0Ini); 00200 ftmin[lay] -> SetParameter(1, c1Ini); 00201 ftmin[lay] -> SetParameter(2, 0); 00202 ftmin[lay] -> SetParameter(4, initT0); 00203 ftmin[lay] -> SetParameter(5, 1); 00204 00205 m_htraw[lay] -> Fit(funname, "Q", "", gTminFitRange[lay][0], gTminFitRange[lay][1]); 00206 gStyle -> SetOptFit(11); 00207 chisq = ftmin[lay]->GetChisquare(); 00208 ndf = ftmin[lay]->GetNDF(); 00209 chindfTmin[lay] = chisq / ndf; 00210 if(chindfTmin[lay] < gTminFitChindf){ 00211 fitTminFg[lay] = 1; 00212 t0Fit[lay] = ftmin[lay]->GetParameter(4); 00213 t0Fit[lay] += gT0Shift; 00214 t0Cal[lay] = t0Fit[lay] - gTimeShift; 00215 } 00216 } 00217 00218 if(0 == fitTminFg[lay]){ 00219 wir = m_pGeom->getWire(lay, 0)->getWireId(); 00220 t0Cal[lay] = calconst->getT0(wir); 00221 t0Fit[lay] = t0Cal[lay] + gTimeShift; 00222 } 00223 } 00224 00225 // fit Tmax 00226 TF1* ftmax[NLAYER]; 00227 for(lay=0; lay<NLAYER; lay++){ 00228 fitTmaxFg[lay] = 0; 00229 chindfTmax[lay] = -1; 00230 sprintf(funname, "ftmax%02d", lay); 00231 ftmax[lay] = new TF1(funname, funTmax, 250, 500, 4); 00232 00233 if(1 == gFgCalib[lay]){ 00234 ftmax[lay] -> SetParameter(2, gInitTm[lay]); 00235 ftmax[lay] -> SetParameter(3, 10); 00236 00237 m_htraw[lay] -> Fit(funname, "Q+", "", gTmaxFitRange[lay][0], gTmaxFitRange[lay][1]); 00238 gStyle -> SetOptFit(11); 00239 chisq = ftmax[lay]->GetChisquare(); 00240 ndf = ftmax[lay]->GetNDF(); 00241 chindfTmax[lay] = chisq / ndf; 00242 if(chindfTmax[lay] < gTmaxFitChindf){ 00243 fitTmaxFg[lay] = 1; 00244 tmax[lay] = ftmax[lay]->GetParameter(2); 00245 } 00246 } 00247 00248 if(0 == fitTmaxFg[lay]){ 00249 tmax[lay] = (calconst->getXtpar(lay, 0, 0, 6)) + t0Fit[lay]; 00250 } 00251 } 00252 00253 // output for check 00254 ofstream ft0("iniT0.dat"); 00255 for(lay=0; lay<NLAYER; lay++){ 00256 ft0 << setw(5) << lay << setw(3) << fitTminFg[lay] 00257 << setw(12) << t0Cal[lay] << setw(12) << t0Fit[lay] 00258 << setw(12) << chindfTmin[lay] << setw(5) << fitTmaxFg[lay] 00259 << setw(12) << tmax[lay] << setw(12) << tmax[lay] - t0Fit[lay] 00260 << setw(12) << chindfTmax[lay] << endl; 00261 } 00262 ft0.close(); 00263 cout << "iniT0.dat was written." << endl; 00264 00265 // set T0 00266 int i; 00267 int nwire = m_pGeom -> getWireSize(); 00268 for(i=0; i<nwire; i++){ 00269 lay = m_pGeom -> getWire(i) -> getLayerId(); 00270 if(1 == gFgCalib[lay]){ 00271 calconst -> resetT0(i, t0Cal[lay]); 00272 calconst -> resetDelT0(i, 0.0); 00273 } 00274 } 00275 00276 if(0 == gFgIniCalConst){ 00277 // set X-T 00278 int lr; 00279 int iEntr; 00280 int ord; 00281 double xtpar; 00282 double xtini[8] = {0, 0.03, 0, 0, 0, 0, 999.9, 0}; 00283 for(lay=0; lay<NLAYER; lay++){ 00284 if(1 != gFgCalib[lay]) continue; 00285 00286 for(iEntr=0; iEntr<NENTRXT; iEntr++){ 00287 for(lr=0; lr<NLR; lr++){ 00288 for(ord=0; ord<NXTPAR; ord++){ 00289 if(6 == ord){ 00290 xtpar = tmax[lay] - t0Fit[lay]; 00291 } else{ 00292 xtpar = xtini[ord]; 00293 } 00294 calconst -> resetXtpar(lay, iEntr, lr, ord, xtpar); 00295 } 00296 } 00297 } 00298 } 00299 00300 // set Q-T 00301 for(lay=0; lay<NLAYER; lay++){ 00302 calconst -> resetQtpar0(lay, 0.0); 00303 calconst -> resetQtpar1(lay, 0.0); 00304 } 00305 00306 // set S-D 00307 int bin; 00308 double sdpar = 0.18; // mm 00309 for(lay=0; lay<NLAYER; lay++){ 00310 for(iEntr=0; iEntr<NENTRSD; iEntr++){ 00311 for(lr=0; lr<2; lr++){ 00312 for(bin=0; bin<NSDBIN; bin++){ 00313 calconst -> resetSdpar(lay, iEntr, lr, bin, sdpar); 00314 } 00315 } 00316 } 00317 } 00318 } else if(2 == gFgIniCalConst){ 00319 int lr; 00320 int iEntr; 00321 double xtpar; 00322 for(lay=0; lay<NLAYER; lay++){ 00323 for(iEntr=0; iEntr<NENTRXT; iEntr++){ 00324 for(lr=0; lr<NLR; lr++){ 00325 xtpar = tmax[lay] - t0Fit[lay]; 00326 calconst -> resetXtpar(lay, iEntr, lr, 6, xtpar); 00327 } 00328 } 00329 } 00330 } 00331 00332 renameHist(); 00333 for(lay=0; lay<NLAYER; lay++){ 00334 delete ftmin[lay]; 00335 delete ftmax[lay]; 00336 } 00337 }
Double_t IniCalib::funTmax | ( | Double_t * | x, | |
Double_t * | par | |||
) | [static, private] |
Double_t IniCalib::funTmin | ( | Double_t * | x, | |
Double_t * | par | |||
) | [static, private] |
void IniCalib::init | ( | TObjArray * | hlist, | |
MdcCosGeom * | pGeom | |||
) | [virtual] |
Implements CalibBase.
Definition at line 15 of file IniCalib.cpp.
References MdcCosGeom::getLayer(), MdcCosLayer::getNcell(), m_fdcom, m_fdQmap, m_fdQraw, m_fdQrawCel, m_fdTmap, m_fdTraw, m_fdTrawCel, m_hLayerHitmapQ, m_hLayerHitmapT, m_hlaymapQ, m_hlaymapT, m_hqraw, m_hqrawCel, m_htdc, m_hTesAll, m_hTesCal, m_hTesFlag, m_htraw, m_htrawCel, m_hWireHitMapQ, m_hWireHitMapT, m_pGeom, NLAYER, and NWIRE.
00015 { 00016 m_pGeom = pGeom; 00017 char hname[200]; 00018 m_fdcom = new TFolder("mCommon", "mCommon"); 00019 hlist->Add(m_fdcom); 00020 00021 m_fdTmap = new TFolder("mThitmap", "mThitmap"); 00022 hlist->Add(m_fdTmap); 00023 00024 m_fdTraw = new TFolder("mTraw", "mTraw"); 00025 hlist->Add(m_fdTraw); 00026 00027 m_fdTrawCel = new TFolder("mTrawCell", "mTrawCell"); 00028 hlist->Add(m_fdTrawCel); 00029 00030 m_fdQmap = new TFolder("mQhitmap", "mQhitmap"); 00031 hlist->Add(m_fdQmap); 00032 00033 m_fdQraw = new TFolder("mQraw", "mQraw"); 00034 hlist->Add(m_fdQraw); 00035 00036 m_fdQrawCel = new TFolder("mQrawCell", "mQrawCell"); 00037 hlist->Add(m_fdQrawCel); 00038 00039 m_hLayerHitmapT = new TH1F("mT_Hitmap_Layer", "", 43, -0.5, 42.5); 00040 m_fdcom->Add(m_hLayerHitmapT); 00041 00042 m_hWireHitMapT = new TH1F("mT_Hitmap_Wire", "", 6796, -0.5, 6795.5); 00043 m_fdcom->Add(m_hWireHitMapT); 00044 00045 m_hLayerHitmapQ = new TH1F("mQ_Hitmap_Layer", "", 43, -0.5, 42.5); 00046 m_fdcom->Add(m_hLayerHitmapQ); 00047 00048 m_hWireHitMapQ = new TH1F("mQ_Hitmap_Wire", "", 6796, -0.5, 6795.5); 00049 m_fdcom->Add(m_hWireHitMapQ); 00050 00051 m_hTesAll = new TH1F("mTesAll", "", 750, 0, 1500); 00052 m_fdcom->Add(m_hTesAll); 00053 00054 m_hTesCal = new TH1F("mTesCal", "", 750, 0, 1500); 00055 m_fdcom->Add(m_hTesCal); 00056 00057 m_hTesFlag = new TH1F("mTes_Flag", "", 300, -0.5, 299.5); 00058 m_fdcom->Add(m_hTesFlag); 00059 00060 for(int lay=0; lay<NLAYER; lay++){ 00061 int ncel = pGeom->getLayer(lay)->getNcell(); 00062 00063 sprintf(hname, "mT_hitmap_Lay%02d", lay); 00064 m_hlaymapT[lay] = new TH1F(hname, "", ncel, -0.5, (float)ncel-0.5); 00065 m_fdTmap -> Add(m_hlaymapT[lay]); 00066 00067 sprintf(hname, "mTDC_Lay%02d", lay); 00068 m_htdc[lay] = new TH1F(hname, "", 800, 0, 20000); 00069 m_fdTraw -> Add(m_htdc[lay]); 00070 00071 sprintf(hname, "mTraw_Lay%02d", lay); 00072 m_htraw[lay] = new TH1F(hname, "", 500, 0, 1000); 00073 m_fdTraw -> Add(m_htraw[lay]); 00074 00075 sprintf(hname, "mQ_hitmap_Lay%02d", lay); 00076 m_hlaymapQ[lay] = new TH1F(hname, "", ncel, -0.5, (float)ncel-0.5); 00077 m_fdQmap -> Add(m_hlaymapQ[lay]); 00078 00079 sprintf(hname, "mQraw_Lay%02d", lay); 00080 m_hqraw[lay] = new TH1F(hname, "", 2000, 0, 4000); 00081 m_fdQraw -> Add(m_hqraw[lay]); 00082 } 00083 00084 for(int wir=0; wir<NWIRE; wir++){ 00085 int lay = m_pGeom -> getWire(wir) -> getLayerId(); 00086 int cel = m_pGeom -> getWire(wir) -> getCellId(); 00087 00088 sprintf(hname, "mTraw_%02d_%03d_%04d", lay, cel, wir); 00089 m_htrawCel[wir] = new TH1F(hname, "", 300, 0, 600); 00090 m_fdTrawCel -> Add(m_htrawCel[wir]); 00091 00092 sprintf(hname, "mQraw_%02d_%03d_%04d", lay, cel, wir); 00093 m_hqrawCel[wir] = new TH1F(hname, "", 2000, 0, 4000); 00094 m_fdQrawCel -> Add(m_hqrawCel[wir]); 00095 } 00096 }
void IniCalib::mergeHist | ( | TFile * | fhist | ) | [virtual] |
Implements CalibBase.
Definition at line 98 of file IniCalib.cpp.
References m_hLayerHitmapQ, m_hLayerHitmapT, m_hlaymapQ, m_hlaymapT, m_hqraw, m_hqrawCel, m_htdc, m_hTesAll, m_hTesCal, m_hTesFlag, m_htraw, m_htrawCel, m_hWireHitMapQ, m_hWireHitMapT, m_pGeom, NLAYER, and NWIRE.
00098 { 00099 TFolder* fdcom = (TFolder*)fhist->Get("Common"); 00100 TFolder* fdTmap = (TFolder*)fhist->Get("Thitmap"); 00101 TFolder* fdTraw = (TFolder*)fhist->Get("Traw"); 00102 TFolder* fdTrawCel = (TFolder*)fhist->Get("TrawCell"); 00103 TFolder* fdQmap = (TFolder*)fhist->Get("Qhitmap"); 00104 TFolder* fdQraw = (TFolder*)fhist->Get("Qraw"); 00105 TFolder* fdQrawCel = (TFolder*)fhist->Get("QrawCell"); 00106 00107 char hname[200]; 00108 TH1F* hist; 00109 hist = (TH1F*)fdcom->FindObjectAny("T_Hitmap_Layer"); 00110 m_hLayerHitmapT->Add(hist); 00111 00112 hist = (TH1F*)fdcom->FindObjectAny("T_Hitmap_Wire"); 00113 m_hWireHitMapT->Add(hist); 00114 00115 hist = (TH1F*)fdcom->FindObjectAny("Q_Hitmap_Layer"); 00116 m_hLayerHitmapQ->Add(hist); 00117 00118 hist = (TH1F*)fdcom->FindObjectAny("Q_Hitmap_Wire"); 00119 m_hWireHitMapQ->Add(hist); 00120 00121 hist = (TH1F*)fdcom->FindObjectAny("TesAll"); 00122 m_hTesAll->Add(hist); 00123 00124 hist = (TH1F*)fdcom->FindObjectAny("TesCal"); 00125 m_hTesCal->Add(hist); 00126 00127 hist = (TH1F*)fdcom->FindObjectAny("Tes_Flag"); 00128 m_hTesFlag->Add(hist); 00129 00130 for(int lay=0; lay<NLAYER; lay++){ 00131 sprintf(hname, "T_hitmap_Lay%02d", lay); 00132 hist = (TH1F*)fdTmap->FindObjectAny(hname); 00133 m_hlaymapT[lay]->Add(hist); 00134 00135 sprintf(hname, "TDC_Lay%02d", lay); 00136 hist = (TH1F*)fdTraw->FindObjectAny(hname); 00137 m_htdc[lay]->Add(hist); 00138 00139 sprintf(hname, "Traw_Lay%02d", lay); 00140 hist = (TH1F*)fdTraw->FindObjectAny(hname); 00141 m_htraw[lay]->Add(hist); 00142 00143 sprintf(hname, "Q_hitmap_Lay%02d", lay); 00144 hist = (TH1F*)fdQmap->FindObjectAny(hname); 00145 m_hlaymapQ[lay]->Add(hist); 00146 00147 sprintf(hname, "Qraw_Lay%02d", lay); 00148 hist = (TH1F*)fdQraw->FindObjectAny(hname); 00149 m_hqraw[lay]->Add(hist); 00150 } 00151 00152 for(int wir=0; wir<NWIRE; wir++){ 00153 int lay = m_pGeom -> getWire(wir) -> getLayerId(); 00154 int cel = m_pGeom -> getWire(wir) -> getCellId(); 00155 00156 sprintf(hname, "Traw_%02d_%03d_%04d", lay, cel, wir); 00157 hist = (TH1F*)fdTrawCel->FindObjectAny(hname); 00158 m_htrawCel[wir]->Add(hist); 00159 00160 sprintf(hname, "Qraw_%02d_%03d_%04d", lay, cel, wir); 00161 hist = (TH1F*)fdQrawCel->FindObjectAny(hname); 00162 m_hqrawCel[wir]->Add(hist); 00163 } 00164 }
void IniCalib::renameHist | ( | ) | [private] |
Reimplemented from CalibBase.
Definition at line 352 of file IniCalib.cpp.
References m_fdcom, m_fdQmap, m_fdQraw, m_fdQrawCel, m_fdTmap, m_fdTraw, m_fdTrawCel, m_hLayerHitmapQ, m_hLayerHitmapT, m_hlaymapQ, m_hlaymapT, m_hqraw, m_hqrawCel, m_htdc, m_hTesAll, m_hTesCal, m_hTesFlag, m_htraw, m_htrawCel, m_hWireHitMapQ, m_hWireHitMapT, m_pGeom, NLAYER, and NWIRE.
Referenced by calib().
00352 { 00353 char hname[200]; 00354 m_fdcom->SetName("Common"); 00355 m_fdTmap->SetName("Thitmap"); 00356 m_fdTraw->SetName("Traw"); 00357 m_fdTrawCel->SetName("TrawCell"); 00358 m_fdQmap->SetName("Qhitmap"); 00359 m_fdQraw->SetName("Qraw"); 00360 m_fdQrawCel->SetName("QrawCell"); 00361 00362 m_hLayerHitmapT->SetName("T_Hitmap_Layer"); 00363 m_hWireHitMapT->SetName("T_Hitmap_Wire"); 00364 m_hLayerHitmapQ->SetName("Q_Hitmap_Layer"); 00365 m_hWireHitMapQ->SetName("Q_Hitmap_Wire"); 00366 m_hTesAll->SetName("TesAll"); 00367 m_hTesCal->SetName("TesCal"); 00368 m_hTesFlag->SetName("Tes_Flag"); 00369 00370 for(int lay=0; lay<NLAYER; lay++){ 00371 sprintf(hname, "T_hitmap_Lay%02d", lay); 00372 m_hlaymapT[lay]->SetName(hname); 00373 00374 sprintf(hname, "TDC_Lay%02d", lay); 00375 m_htdc[lay]->SetName(hname); 00376 00377 sprintf(hname, "Traw_Lay%02d", lay); 00378 m_htraw[lay]->SetName(hname); 00379 00380 sprintf(hname, "Q_hitmap_Lay%02d", lay); 00381 m_hlaymapQ[lay]->SetName(hname); 00382 00383 sprintf(hname, "Qraw_Lay%02d", lay); 00384 m_hqraw[lay]->SetName(hname); 00385 } 00386 for(int wir=0; wir<NWIRE; wir++){ 00387 int lay = m_pGeom -> getWire(wir) -> getLayerId(); 00388 int cel = m_pGeom -> getWire(wir) -> getCellId(); 00389 00390 sprintf(hname, "Traw_%02d_%03d_%04d", lay, cel, wir); 00391 m_htrawCel[wir]->SetName(hname); 00392 00393 sprintf(hname, "Qraw_%02d_%03d_%04d", lay, cel, wir); 00394 m_hqrawCel[wir]->SetName(hname); 00395 } 00396 }
TFolder* IniCalib::m_fdcom [private] |
Reimplemented from CalibBase.
Definition at line 26 of file IniCalib.h.
Referenced by init(), and renameHist().
TFolder* IniCalib::m_fdQmap [private] |
TFolder* IniCalib::m_fdQraw [private] |
TFolder* IniCalib::m_fdQrawCel [private] |
TFolder* IniCalib::m_fdTmap [private] |
TFolder* IniCalib::m_fdTraw [private] |
TFolder* IniCalib::m_fdTrawCel [private] |
TFolder* IniCalib::m_fdTrawTes [private] |
Definition at line 30 of file IniCalib.h.
TH1F* IniCalib::m_hLayerHitmapQ [private] |
TH1F* IniCalib::m_hLayerHitmapT [private] |
TH1F* IniCalib::m_hlaymapQ[NLAYER] [private] |
TH1F* IniCalib::m_hlaymapT[NLAYER] [private] |
TH1F* IniCalib::m_hqraw[NLAYER] [private] |
TH1F* IniCalib::m_hqrawCel[NWIRE] [private] |
TH1F* IniCalib::m_htdc[NLAYER] [private] |
TH1F* IniCalib::m_hTesAll [private] |
Reimplemented from CalibBase.
Definition at line 42 of file IniCalib.h.
Referenced by init(), mergeHist(), and renameHist().
TH1F* IniCalib::m_hTesCal [private] |
TH1F* IniCalib::m_hTesFlag [private] |
TH1F* IniCalib::m_htraw[NLAYER] [private] |
Reimplemented from CalibBase.
Definition at line 48 of file IniCalib.h.
Referenced by calib(), init(), mergeHist(), and renameHist().
TH1F* IniCalib::m_htrawCel[NWIRE] [private] |
TH1F* IniCalib::m_hWireHitMapQ [private] |
TH1F* IniCalib::m_hWireHitMapT [private] |
MdcCosGeom* IniCalib::m_pGeom [private] |
Definition at line 24 of file IniCalib.h.
Referenced by calib(), init(), mergeHist(), and renameHist().