#include <XtCalib.h>
Inheritance diagram for XtCalib:
Public Member Functions | |
void | calib (MdcCalibConst *calconst) |
void | init (TObjArray *hlist, MdcCosGeom *pGeom) |
void | mergeHist (TFile *fhist) |
XtCalib () | |
~XtCalib () | |
Private Member Functions | |
void | renameHist () |
Private Attributes | |
TFolder * | m_fdXt |
TH1D * | m_hxt [43][2][3][51] |
|
00006 {
00007 cout << "Calibration type: XtCalib" << endl;
00008 }
|
|
00010 { 00011 }
|
|
Implements CalibBase. 00055 { 00056 CalibBase::calib(calconst); 00057 00058 Int_t ierflg; 00059 Int_t istat; 00060 Int_t nvpar; 00061 Int_t nparx; 00062 Double_t fmin; 00063 Double_t edm; 00064 Double_t errdef; 00065 Double_t arglist[10]; 00066 00067 TMinuit* gmxt = new TMinuit(6); 00068 gmxt -> SetPrintLevel(-1); 00069 gmxt -> SetFCN(fcnXT); 00070 gmxt -> SetErrorDef(1.0); 00071 gmxt -> mnparm(0, "xtpar0", 0, 0.1, 0, 0, ierflg); 00072 gmxt -> mnparm(1, "xtpar1", 0, 0.1, 0, 0, ierflg); 00073 gmxt -> mnparm(2, "xtpar2", 0, 0.1, 0, 0, ierflg); 00074 gmxt -> mnparm(3, "xtpar3", 0, 0.1, 0, 0, ierflg); 00075 gmxt -> mnparm(4, "xtpar4", 0, 0.1, 0, 0, ierflg); 00076 gmxt -> mnparm(5, "xtpar5", 0, 0.1, 0, 0, ierflg); 00077 arglist[0] = 0; 00078 gmxt -> mnexcm("SET NOW", arglist, 0, ierflg); 00079 00080 TMinuit* gmxtEd = new TMinuit(1); 00081 gmxtEd -> SetPrintLevel(-1); 00082 gmxtEd -> SetFCN(fcnXtEdge); 00083 gmxtEd -> SetErrorDef(1.0); 00084 gmxtEd -> mnparm(0, "xtpar0", 0, 0.1, 0, 0, ierflg); 00085 arglist[0] = 0; 00086 gmxtEd -> mnexcm("SET NOW", arglist, 0, ierflg); 00087 00088 // double xtpar; 00089 int i; 00090 Stat_t histEntry; 00091 double xtpar; 00092 double xterr; 00093 double tbcen; 00094 double deltx; 00095 double xcor; 00096 double xerr; 00097 double xtini[8]; 00098 double xtfit[8]; 00099 ofstream fxtlog("xtlog"); 00100 for(int lay=0; lay<43; lay++){ 00101 for(int iEntr=0; iEntr<gNEntr[lay]; iEntr++){ 00102 for(int iLR=0; iLR<NLR; iLR++){ 00103 fxtlog << "Layer " << setw(3) << lay << setw(3) << iEntr 00104 << setw(3) << iLR << endl; 00105 for(int ord=0; ord<NXTPAR; ord++){ 00106 if(0 == iEntr) xtpar = calconst -> getXtpar(lay, 8, iLR, ord); 00107 else if(1 == iEntr) xtpar = calconst -> getXtpar(lay, 9, iLR, ord); 00108 xtini[ord] = xtpar; 00109 xtfit[ord] = xtpar; 00110 } 00111 Tmax = xtini[6]; 00112 00113 for(int bin=0; bin<=NXTBIN; bin++){ 00114 histEntry = (int)(m_hxt[lay][iEntr][iLR][bin] -> GetEntries()); 00115 if(histEntry > 100){ 00116 deltx = m_hxt[lay][iEntr][iLR][bin] -> GetMean(); 00117 xerr = m_hxt[lay][iEntr][iLR][bin]->GetRMS(); 00118 } else{ 00119 continue; 00120 } 00121 00122 if(bin < NXTBIN) 00123 tbcen = ( (double)bin + 0.5 ) * gTbinw; 00124 else tbcen = xtini[6]; // m_tm[lay][iEntr][iLR]; 00125 xcor = xtFun(tbcen, xtini) - deltx; 00126 00127 if((tbcen <= Tmax) || (bin == NXTBIN)){ 00128 TBINCEN.push_back( tbcen ); 00129 XMEAS.push_back( xcor ); 00130 ERR.push_back( xerr ); 00131 } else{ 00132 TBINCENED.push_back( tbcen ); 00133 XMEASED.push_back( xcor ); 00134 ERRED.push_back( xerr ); 00135 } 00136 fxtlog << setw(3) << bin 00137 << setw(15) << deltx 00138 << setw(15) << xcor 00139 << setw(15) << tbcen 00140 << setw(15) << xerr 00141 << endl; 00142 } // end of bin loop 00143 00144 if( XMEAS.size() < 12 ){ 00145 TBINCEN.clear(); 00146 XMEAS.clear(); 00147 ERR.clear(); 00148 00149 TBINCENED.clear(); 00150 XMEASED.clear(); 00151 ERRED.clear(); 00152 00153 continue; 00154 } 00155 00156 for(int ord=0; ord<=5; ord++){ 00157 arglist[0] = ord + 1; 00158 arglist[1] = xtini[ord]; 00159 gmxt -> mnexcm("SET PARameter", arglist, 2, ierflg); 00160 } 00161 00162 // fix the xtpar[0] at 0 00163 if(1 == gfixXtC0){ 00164 arglist[0] = 1; 00165 arglist[1] = 0.0; 00166 gmxt -> mnexcm("SET PARameter", arglist, 2, ierflg); 00167 gmxt -> mnexcm("FIX", arglist, 1, ierflg); 00168 } 00169 00170 arglist[0] = 1000; 00171 arglist[1] = 0.1; 00172 gmxt -> mnexcm("MIGRAD", arglist, 2, ierflg); 00173 gmxt -> mnstat(fmin, edm, errdef, nvpar, nparx, istat); 00174 00175 fxtlog << "Xtpar: " << endl; 00176 if( (0 == ierflg) && (istat >= 2) ){ 00177 for(int ord=0; ord<=5; ord++){ 00178 gmxt -> GetParameter(ord, xtpar, xterr); 00179 // calconst -> resetXtpar(lay, iEntr, iLR, ord, xtpar); 00180 xtfit[ord] = xtpar; 00181 00182 if(1 == gNEntr[lay]){ 00183 for(i=0; i<18; i++) 00184 calconst -> resetXtpar(lay, i, iLR, ord, xtpar); 00185 } else if(2 == gNEntr[lay]){ 00186 if(0 == iEntr){ 00187 for(i=0; i<9; i++) // entr<0 00188 calconst->resetXtpar(lay, i, iLR, ord, xtpar); 00189 } else{ 00190 for(i=9; i<18; i++) // entr>0 00191 calconst->resetXtpar(lay, i, iLR, ord, xtpar); 00192 } 00193 } 00194 fxtlog << setw(15) << xtpar << setw(15) << xterr << endl; 00195 } 00196 } else{ 00197 for(int ord=0; ord<=5; ord++){ 00198 fxtlog << setw(15) << xtini[ord] << setw(15) << "0" << endl; 00199 } 00200 } 00201 fxtlog << setw(15) << Tmax << setw(15) << "0" << endl; 00202 00203 // release the first parameter 00204 if(1 == gfixXtC0){ 00205 arglist[0] = 1; 00206 gmxt -> mnexcm("REL", arglist, 1, ierflg); 00207 } 00208 00209 Dmax = xtFun(Tmax, xtfit); 00210 00211 if( XMEASED.size() >= 3 ){ 00212 // fit xt in the edge area 00213 arglist[0] = 1; 00214 arglist[1] = xtini[7]; 00215 gmxtEd -> mnexcm("SET PARameter", arglist, 2, ierflg); 00216 00217 arglist[0] = 1000; 00218 arglist[1] = 0.1; 00219 gmxtEd -> mnexcm("MIGRAD", arglist, 2, ierflg); 00220 gmxtEd -> mnstat(fmin, edm, errdef, nvpar, nparx, istat); 00221 00222 if( (0 == ierflg) && (istat >=2) ){ 00223 gmxtEd -> GetParameter(0, xtpar, xterr); 00224 if(xtpar < 0.0) xtpar = 0.0; 00225 // calconst -> resetXtpar(lay, iEntr, iLR, 7, xtpar); 00226 00227 if(1 == gNEntr[lay]){ 00228 for(i=0; i<18; i++) 00229 calconst -> resetXtpar(lay, i, iLR, 7, xtpar); 00230 } else if(2 == gNEntr[lay]){ 00231 if(0 == iEntr){ 00232 for(i=0; i<9; i++) 00233 calconst->resetXtpar(lay, i, iLR, 7, xtpar); 00234 } else{ 00235 for(i=9; i<18; i++) 00236 calconst->resetXtpar(lay, i, iLR, 7, xtpar); 00237 } 00238 } 00239 fxtlog << setw(15) << xtpar << setw(15) << xterr << endl; 00240 } else { 00241 fxtlog << setw(15) << xtini[7] << setw(15) << "0" << endl; 00242 } 00243 } else { 00244 fxtlog << setw(15) << xtini[7] << setw(15) << "0" << endl; 00245 } 00246 fxtlog << "Tm " << setw(15) << Tmax 00247 << " Dmax " << setw(15) << Dmax << endl; 00248 00249 TBINCEN.clear(); 00250 XMEAS.clear(); 00251 ERR.clear(); 00252 TBINCENED.clear(); 00253 XMEASED.clear(); 00254 ERRED.clear(); 00255 } // lr loop 00256 } // entrance loop 00257 } // layer loop 00258 fxtlog.close(); 00259 00260 renameHist(); 00261 delete gmxt; 00262 delete gmxtEd; 00263 }
|
|
Implements CalibBase. 00013 { 00014 CalibBase::init(hlist, pGeom); 00015 00016 m_fdXt = new TFolder("fdxt","fdxt"); 00017 hlist->Add(m_fdXt); 00018 00019 char hname[200]; 00020 for(int lay=0; lay<43; lay++){ 00021 for(int iEntr=0; iEntr<gNEntr[lay]; iEntr++){ 00022 for(int lr=0; lr<NLR; lr++){ 00023 for(int bin=0; bin<=NXTBIN; bin++){ 00024 sprintf(hname, "mHxt%02d_E%02d_LR%01d_B%02d", lay, iEntr, lr, bin); 00025 m_hxt[lay][iEntr][lr][bin] = new TH1D(hname, "", 300, -1.5, 1.5); 00026 m_fdXt->Add(m_hxt[lay][iEntr][lr][bin]); 00027 } 00028 } 00029 } 00030 } 00031 }
|
|
Implements CalibBase. 00033 { 00034 CalibBase::mergeHist(fhist); 00035 00036 char hname[200]; 00037 TFolder* fd = (TFolder*)fhist->Get("fdXt"); 00038 for(int lay=0; lay<43; lay++){ 00039 for(int iEntr=0; iEntr<gNEntr[lay]; iEntr++){ 00040 for(int lr=0; lr<NLR; lr++){ 00041 for(int bin=0; bin<=NXTBIN; bin++){ 00042 sprintf(hname, "Hxt%02d_E%02d_LR%01d_B%02d", lay, iEntr, lr, bin); 00043 TH1F* hist = (TH1F*)fd->FindObjectAny(hname); 00044 m_hxt[lay][iEntr][lr][bin]->Add(hist); 00045 // if((0==lay)&&(0==iEntr)&&(0==lr)&&(50==bin)){ 00046 // cout << setw(15) << hist->GetEntries() 00047 // << setw(15) << m_hxt[lay][iEntr][lr][bin]->GetEntries() << endl; 00048 // } 00049 } 00050 } 00051 } 00052 } 00053 }
|
|
Reimplemented from CalibBase. 00265 { 00266 char hname[200]; 00267 m_fdXt->SetName("fdXt"); 00268 for(int lay=0; lay<43; lay++){ 00269 for(int iEntr=0; iEntr<gNEntr[lay]; iEntr++){ 00270 for(int lr=0; lr<NLR; lr++){ 00271 for(int bin=0; bin<=NXTBIN; bin++){ 00272 sprintf(hname, "Hxt%02d_E%02d_LR%01d_B%02d", lay, iEntr, lr, bin); 00273 m_hxt[lay][iEntr][lr][bin]->SetName(hname); 00274 } 00275 } 00276 } 00277 } 00278 }
|
|
|
|
|