Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

IniCalib Class Reference

#include <IniCalib.h>

Inheritance diagram for IniCalib:

CalibBase List of all members.

Public Member Functions

void calib (MdcCalibConst *calconst)
 IniCalib ()
void init (TObjArray *hlist, MdcCosGeom *pGeom)
void mergeHist (TFile *fhist)
 ~IniCalib ()

Private Member Functions

void renameHist ()

Static Private Member Functions

Double_t funTmax (Double_t *x, Double_t *par)
Double_t funTmin (Double_t *x, Double_t *par)

Private Attributes

TFolder * m_fdcom
TFolder * m_fdQmap
TFolder * m_fdQraw
TFolder * m_fdQrawCel
TFolder * m_fdTmap
TFolder * m_fdTraw
TFolder * m_fdTrawCel
TFolder * m_fdTrawTes
TH1F * m_hLayerHitmapQ
TH1F * m_hLayerHitmapT
TH1F * m_hlaymapQ [NLAYER]
TH1F * m_hlaymapT [NLAYER]
TH1F * m_hqraw [NLAYER]
TH1F * m_hqrawCel [NWIRE]
TH1F * m_htdc [NLAYER]
TH1F * m_hTesAll
TH1F * m_hTesCal
TH1F * m_hTesFlag
TH1F * m_htraw [NLAYER]
TH1F * m_htrawCel [NWIRE]
TH1F * m_hWireHitMapQ
TH1F * m_hWireHitMapT
MdcCosGeomm_pGeom

Constructor & Destructor Documentation

IniCalib::IniCalib  ) 
 

00007                   {
00008      cout << "Calibration type: IniCalib" << endl;
00009 }

IniCalib::~IniCalib  ) 
 

00011                    {
00012 }


Member Function Documentation

void IniCalib::calib MdcCalibConst calconst  )  [virtual]
 

Implements CalibBase.

00165                                            {
00166      int lay;
00167      int wir;
00168      double t0Fit[NLAYER];
00169      double t0Cal[NLAYER];
00170      double tmax[NLAYER];
00171      double initT0 = gInitT0;
00172 
00173      int fitTminFg[NLAYER];
00174      int fitTmaxFg[NLAYER];
00175      double chisq;
00176      double ndf;
00177      double chindfTmin[NLAYER];
00178      double chindfTmax[NLAYER];
00179      char funname[200];
00180 
00181      // fit Tmin
00182      TF1* ftmin[NLAYER];
00183      for(lay=0; lay<NLAYER; lay++){
00184           fitTminFg[lay] = 0;
00185           chindfTmin[lay] = -1;
00186           sprintf(funname, "ftmin%02d", lay);
00187           ftmin[lay] = new TF1(funname, funTmin, 0, 150, 6);
00188 
00189           if(1 == gFgCalib[lay]){
00190                ftmin[lay] -> SetParameter(0, 0);
00191                ftmin[lay] -> SetParameter(4, initT0);
00192                ftmin[lay] -> SetParameter(5, 1);
00193 
00194                m_htraw[lay] -> Fit(funname, "Q", "", gTminFitRange[lay][0], gTminFitRange[lay][1]);
00195                gStyle -> SetOptFit(11);
00196                chisq = ftmin[lay]->GetChisquare();
00197                ndf = ftmin[lay]->GetNDF();
00198                chindfTmin[lay] = chisq / ndf;
00199                if(chindfTmin[lay] < gTminFitChindf){
00200                     fitTminFg[lay] = 1;
00201                     t0Fit[lay] = ftmin[lay]->GetParameter(4);
00202                     t0Fit[lay] += gT0Shift;
00203                     t0Cal[lay] = t0Fit[lay] - gTimeShift;
00204                }
00205           }
00206 
00207           if(0 == fitTminFg[lay]){
00208                wir = m_pGeom->getWire(lay, 0)->getWireId();
00209                t0Cal[lay] = calconst->getT0(wir);
00210                t0Fit[lay] = t0Cal[lay] + gTimeShift;
00211           }
00212      }
00213 
00214      // fit Tmax
00215      TF1* ftmax[NLAYER];
00216      for(lay=0; lay<NLAYER; lay++){
00217           fitTmaxFg[lay] = 0;
00218           chindfTmax[lay] = -1;
00219           sprintf(funname, "ftmax%02d", lay);
00220           ftmax[lay] = new TF1(funname, funTmax, 250, 500, 4);
00221 
00222           if(1 == gFgCalib[lay]){
00223                ftmax[lay] -> SetParameter(2, gInitTm[lay]);
00224                ftmax[lay] -> SetParameter(3, 10);
00225 
00226                m_htraw[lay] -> Fit(funname, "Q+", "", gTmaxFitRange[lay][0], gTmaxFitRange[lay][1]);
00227                gStyle -> SetOptFit(11);
00228                chisq = ftmax[lay]->GetChisquare();
00229                ndf = ftmax[lay]->GetNDF();
00230                chindfTmax[lay] = chisq / ndf;
00231                if(chindfTmax[lay] < gTmaxFitChindf){
00232                     fitTmaxFg[lay] = 1;
00233                     tmax[lay] = ftmax[lay]->GetParameter(2);
00234                }
00235           }
00236 
00237           if(0 == fitTmaxFg[lay]){
00238                tmax[lay] = (calconst->getXtpar(lay, 0, 0, 6)) + t0Fit[lay];
00239           }
00240      }
00241 
00242      // output for check
00243      ofstream ft0("iniT0.dat");
00244      for(lay=0; lay<NLAYER; lay++){
00245           ft0 << setw(5) << lay << setw(3) << fitTminFg[lay]
00246               << setw(12) << t0Cal[lay] << setw(12) << t0Fit[lay]
00247               << setw(12) << chindfTmin[lay] << setw(5) << fitTmaxFg[lay]
00248               << setw(12) << tmax[lay] << setw(12) << tmax[lay] - t0Fit[lay]
00249               << setw(12) << chindfTmax[lay] << endl;
00250      }
00251      ft0.close();
00252      cout << "iniT0.dat was written." << endl;
00253 
00254      // set T0
00255      int i;
00256      int nwire = m_pGeom -> getWireSize();
00257      for(i=0; i<nwire; i++){
00258           lay = m_pGeom -> getWire(i) -> getLayerId();
00259           if(1 == gFgCalib[lay]){
00260                calconst -> resetT0(i, t0Cal[lay]);
00261                calconst -> resetDelT0(i, 0.0);
00262           }
00263      }
00264 
00265      if(0 == gFgIniCalConst){
00266           // set X-T
00267           int lr;
00268           int iEntr;
00269           int ord;
00270           double xtpar;
00271           double xtini[8] = {0, 0.03, 0, 0, 0, 0, 999.9, 0};
00272           for(lay=0; lay<NLAYER; lay++){
00273                if(1 != gFgCalib[lay]) continue;
00274 
00275                for(iEntr=0; iEntr<NENTRXT; iEntr++){
00276                     for(lr=0; lr<NLR; lr++){
00277                          for(ord=0; ord<NXTPAR; ord++){
00278                               if(6 == ord){
00279                                    xtpar = tmax[lay] - t0Fit[lay];
00280                               } else{
00281                                    xtpar = xtini[ord];
00282                               }
00283                               calconst -> resetXtpar(lay, iEntr, lr, ord, xtpar);
00284                          }
00285                     }
00286                }
00287           }
00288 
00289           // set Q-T
00290           for(lay=0; lay<NLAYER; lay++){
00291                calconst -> resetQtpar0(lay, 0.0);
00292                calconst -> resetQtpar1(lay, 0.0);
00293           }
00294 
00295           // set S-D
00296           int bin;
00297           double sdpar = 0.18;  // mm
00298           for(lay=0; lay<NLAYER; lay++){
00299                for(iEntr=0; iEntr<NENTRSD; iEntr++){
00300                     for(lr=0; lr<2; lr++){
00301                          for(bin=0; bin<NSDBIN; bin++){
00302                               calconst -> resetSdpar(lay, iEntr, lr, bin, sdpar);
00303                          }
00304                     }
00305                }
00306           }
00307      } else if(2 == gFgIniCalConst){
00308           int lr;
00309           int iEntr;
00310           double xtpar;
00311           for(lay=0; lay<NLAYER; lay++){
00312                for(iEntr=0; iEntr<NENTRXT; iEntr++){
00313                     for(lr=0; lr<NLR; lr++){
00314                          xtpar = tmax[lay] - t0Fit[lay];
00315                          calconst -> resetXtpar(lay, iEntr, lr, 6, xtpar);
00316                     }
00317                }
00318           }
00319      }
00320 
00321      renameHist();
00322      for(lay=0; lay<NLAYER; lay++){
00323           delete ftmin[lay];
00324           delete ftmax[lay];
00325      }
00326 }

Double_t IniCalib::funTmax Double_t *  x,
Double_t *  par
[static, private]
 

00335                                                     {
00336      Double_t fitval;
00337      fitval = par[0] + par[1] / (1 + exp((x[0]-par[2])/par[3]));
00338      return fitval;
00339 }

Double_t IniCalib::funTmin Double_t *  x,
Double_t *  par
[static, private]
 

00328                                                     {
00329      Double_t fitval;
00330      fitval = par[0] + par[1]*exp( -par[2]*(x[0]-par[3]) ) /
00331           ( 1 + exp( -(x[0]-par[4])/par[5] ));
00332      return fitval;
00333 }

void IniCalib::init TObjArray *  hlist,
MdcCosGeom pGeom
[virtual]
 

Implements CalibBase.

00014                                                       {
00015      m_pGeom = pGeom;
00016      char hname[200];
00017      m_fdcom = new TFolder("mCommon", "mCommon");
00018      hlist->Add(m_fdcom);
00019 
00020      m_fdTmap = new TFolder("mThitmap", "mThitmap");
00021      hlist->Add(m_fdTmap);
00022 
00023      m_fdTraw = new TFolder("mTraw", "mTraw");
00024      hlist->Add(m_fdTraw);
00025 
00026      m_fdTrawCel = new TFolder("mTrawCell", "mTrawCell");
00027      hlist->Add(m_fdTrawCel);
00028 
00029      m_fdQmap = new TFolder("mQhitmap", "mQhitmap");
00030      hlist->Add(m_fdQmap);
00031 
00032      m_fdQraw = new TFolder("mQraw", "mQraw");
00033      hlist->Add(m_fdQraw);
00034 
00035      m_fdQrawCel = new TFolder("mQrawCell", "mQrawCell");
00036      hlist->Add(m_fdQrawCel);
00037 
00038      m_hLayerHitmapT = new TH1F("mT_Hitmap_Layer", "", 43, -0.5, 42.5);
00039      m_fdcom->Add(m_hLayerHitmapT);
00040                 
00041      m_hWireHitMapT = new TH1F("mT_Hitmap_Wire", "", 6796, -0.5, 6795.5);
00042      m_fdcom->Add(m_hWireHitMapT);
00043 
00044      m_hLayerHitmapQ = new TH1F("mQ_Hitmap_Layer", "", 43, -0.5, 42.5);
00045      m_fdcom->Add(m_hLayerHitmapQ);
00046                 
00047      m_hWireHitMapQ = new TH1F("mQ_Hitmap_Wire", "", 6796, -0.5, 6795.5);
00048      m_fdcom->Add(m_hWireHitMapQ);
00049 
00050      m_hTesAll = new TH1F("mTesAll", "", 750, 0, 1500);
00051      m_fdcom->Add(m_hTesAll);
00052 
00053      m_hTesCal = new TH1F("mTesCal", "", 750, 0, 1500);
00054      m_fdcom->Add(m_hTesCal);
00055 
00056      m_hTesFlag = new TH1F("mTes_Flag", "", 300, -0.5, 299.5);
00057      m_fdcom->Add(m_hTesFlag);
00058 
00059      for(int lay=0; lay<NLAYER; lay++){
00060           int ncel = pGeom->getLayer(lay)->getNcell();
00061 
00062           sprintf(hname, "mT_hitmap_Lay%02d", lay);
00063           m_hlaymapT[lay] = new TH1F(hname, "", ncel, -0.5, (float)ncel-0.5);
00064           m_fdTmap -> Add(m_hlaymapT[lay]);
00065 
00066           sprintf(hname, "mTDC_Lay%02d", lay);
00067           m_htdc[lay] = new TH1F(hname, "", 800, 0, 20000);
00068           m_fdTraw -> Add(m_htdc[lay]);
00069 
00070           sprintf(hname, "mTraw_Lay%02d", lay);
00071           m_htraw[lay] = new TH1F(hname, "", 300, 0, 600);
00072           m_fdTraw -> Add(m_htraw[lay]);
00073 
00074           sprintf(hname, "mQ_hitmap_Lay%02d", lay);
00075           m_hlaymapQ[lay] = new TH1F(hname, "", ncel, -0.5, (float)ncel-0.5);
00076           m_fdQmap -> Add(m_hlaymapQ[lay]);
00077 
00078           sprintf(hname, "mQraw_Lay%02d", lay);
00079           m_hqraw[lay] = new TH1F(hname, "", 2000, 0, 4000);
00080           m_fdQraw -> Add(m_hqraw[lay]);
00081      }
00082 
00083      for(int wir=0; wir<NWIRE; wir++){
00084           int lay = m_pGeom -> getWire(wir) -> getLayerId();
00085           int cel = m_pGeom -> getWire(wir) -> getCellId();
00086 
00087           sprintf(hname, "mTraw_%02d_%03d_%04d", lay, cel, wir);
00088           m_htrawCel[wir] = new TH1F(hname, "", 300, 0, 600);
00089           m_fdTrawCel -> Add(m_htrawCel[wir]);
00090 
00091           sprintf(hname, "mQraw_%02d_%03d_%04d", lay, cel, wir);
00092           m_hqrawCel[wir] = new TH1F(hname, "", 2000, 0, 4000);
00093           m_fdQrawCel -> Add(m_hqrawCel[wir]);
00094      }
00095 }

void IniCalib::mergeHist TFile *  fhist  )  [virtual]
 

Implements CalibBase.

00097                                     {
00098      TFolder* fdcom = (TFolder*)fhist->Get("Common");
00099      TFolder* fdTmap = (TFolder*)fhist->Get("Thitmap");
00100      TFolder* fdTraw = (TFolder*)fhist->Get("Traw");
00101      TFolder* fdTrawCel = (TFolder*)fhist->Get("TrawCell");
00102      TFolder* fdQmap = (TFolder*)fhist->Get("Qhitmap");
00103      TFolder* fdQraw = (TFolder*)fhist->Get("Qraw");
00104      TFolder* fdQrawCel = (TFolder*)fhist->Get("QrawCell");
00105 
00106      char hname[200];
00107      TH1F* hist;
00108      hist = (TH1F*)fdcom->FindObjectAny("T_Hitmap_Layer");
00109      m_hLayerHitmapT->Add(hist);
00110 
00111      hist = (TH1F*)fdcom->FindObjectAny("T_Hitmap_Wire");
00112      m_hWireHitMapT->Add(hist);
00113 
00114      hist = (TH1F*)fdcom->FindObjectAny("Q_Hitmap_Layer");
00115      m_hLayerHitmapQ->Add(hist);
00116 
00117      hist = (TH1F*)fdcom->FindObjectAny("Q_Hitmap_Wire");
00118      m_hWireHitMapQ->Add(hist);
00119 
00120      hist = (TH1F*)fdcom->FindObjectAny("TesAll");
00121      m_hTesAll->Add(hist);
00122 
00123      hist = (TH1F*)fdcom->FindObjectAny("TesCal");
00124      m_hTesCal->Add(hist);
00125 
00126      hist = (TH1F*)fdcom->FindObjectAny("Tes_Flag");
00127      m_hTesFlag->Add(hist);
00128 
00129      for(int lay=0; lay<NLAYER; lay++){
00130           sprintf(hname, "T_hitmap_Lay%02d", lay);
00131           hist = (TH1F*)fdTmap->FindObjectAny(hname);
00132           m_hlaymapT[lay]->Add(hist);
00133 
00134           sprintf(hname, "TDC_Lay%02d", lay);
00135           hist = (TH1F*)fdTraw->FindObjectAny(hname);
00136           m_htdc[lay]->Add(hist);
00137 
00138           sprintf(hname, "Traw_Lay%02d", lay);
00139           hist = (TH1F*)fdTraw->FindObjectAny(hname);
00140           m_htraw[lay]->Add(hist);
00141 
00142           sprintf(hname, "Q_hitmap_Lay%02d", lay);
00143           hist = (TH1F*)fdQmap->FindObjectAny(hname);
00144           m_hlaymapQ[lay]->Add(hist);
00145 
00146           sprintf(hname, "Qraw_Lay%02d", lay);
00147           hist = (TH1F*)fdQraw->FindObjectAny(hname);
00148           m_hqraw[lay]->Add(hist);
00149      }
00150 
00151      for(int wir=0; wir<NWIRE; wir++){
00152           int lay = m_pGeom -> getWire(wir) -> getLayerId();
00153           int cel = m_pGeom -> getWire(wir) -> getCellId();
00154 
00155           sprintf(hname, "Traw_%02d_%03d_%04d", lay, cel, wir);
00156           hist = (TH1F*)fdTrawCel->FindObjectAny(hname);
00157           m_htrawCel[wir]->Add(hist);
00158 
00159           sprintf(hname, "Qraw_%02d_%03d_%04d", lay, cel, wir);
00160           hist = (TH1F*)fdQrawCel->FindObjectAny(hname);
00161           m_hqrawCel[wir]->Add(hist);
00162      }
00163 }

void IniCalib::renameHist  )  [private]
 

Reimplemented from CalibBase.

00341                          {
00342      char hname[200];
00343      m_fdcom->SetName("Common");
00344      m_fdTmap->SetName("Thitmap");
00345      m_fdTraw->SetName("Traw");
00346      m_fdTrawCel->SetName("TrawCell");
00347      m_fdQmap->SetName("Qhitmap");
00348      m_fdQraw->SetName("Qraw");
00349      m_fdQrawCel->SetName("QrawCell");
00350 
00351      m_hLayerHitmapT->SetName("T_Hitmap_Layer");
00352      m_hWireHitMapT->SetName("T_Hitmap_Wire");
00353      m_hLayerHitmapQ->SetName("Q_Hitmap_Layer");
00354      m_hWireHitMapQ->SetName("Q_Hitmap_Wire");
00355      m_hTesAll->SetName("TesAll");
00356      m_hTesCal->SetName("TesCal");
00357      m_hTesFlag->SetName("Tes_Flag");
00358 
00359      for(int lay=0; lay<NLAYER; lay++){
00360           sprintf(hname, "T_hitmap_Lay%02d", lay);
00361           m_hlaymapT[lay]->SetName(hname);
00362 
00363           sprintf(hname, "TDC_Lay%02d", lay);
00364           m_htdc[lay]->SetName(hname);
00365 
00366           sprintf(hname, "Traw_Lay%02d", lay);
00367           m_htraw[lay]->SetName(hname);
00368 
00369           sprintf(hname, "Q_hitmap_Lay%02d", lay);
00370           m_hlaymapQ[lay]->SetName(hname);
00371 
00372           sprintf(hname, "Qraw_Lay%02d", lay);
00373           m_hqraw[lay]->SetName(hname);
00374      }
00375      for(int wir=0; wir<NWIRE; wir++){
00376           int lay = m_pGeom -> getWire(wir) -> getLayerId();
00377           int cel = m_pGeom -> getWire(wir) -> getCellId();
00378 
00379           sprintf(hname, "Traw_%02d_%03d_%04d", lay, cel, wir);
00380           m_htrawCel[wir]->SetName(hname);
00381 
00382           sprintf(hname, "Qraw_%02d_%03d_%04d", lay, cel, wir);
00383           m_hqrawCel[wir]->SetName(hname);
00384      }
00385 }


Member Data Documentation

TFolder* IniCalib::m_fdcom [private]
 

Reimplemented from CalibBase.

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]
 

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.

TH1F* IniCalib::m_hTesCal [private]
 

TH1F* IniCalib::m_hTesFlag [private]
 

TH1F* IniCalib::m_htraw[NLAYER] [private]
 

Reimplemented from CalibBase.

TH1F* IniCalib::m_htrawCel[NWIRE] [private]
 

TH1F* IniCalib::m_hWireHitMapQ [private]
 

TH1F* IniCalib::m_hWireHitMapT [private]
 

MdcCosGeom* IniCalib::m_pGeom [private]
 


The documentation for this class was generated from the following files:
Generated on Wed Feb 2 16:18:39 2011 for BOSS6.5.5 by  doxygen 1.3.9.1