// $Id: hrichrecalibrater.cc,v 1.6 2009-07-15 11:39:22 halo Exp $ // Last update by Thomas Eberl: 02/09/25 17:44:59 // #include #include "hrichrecalibrater.h" #include "hevent.h" #include "hspectrometer.h" #include "hrichdetector.h" #include "hcategory.h" #include "hmatrixcatiter.h" #include "hrichcal.h" #include "richdef.h" #include "hrichgeometrypar.h" #include "hdetgeompar.h" #include "hruntimedb.h" #include "TFile.h" #include #include #include "hrichcalparcell.h" #include "hlocation.h" #include "hrichcalpar.h" ClassImp(HRichReCalibrater) HRichReCalibrater::HRichReCalibrater(const Text_t *name, const Text_t *title,const Char_t * path ,const Char_t * pString,Float_t fNoiseThr): HReconstructor(name,title) { pedPathName = path; fNoiseLim = fNoiseThr; strcpy(sectorList,pString); numSec = strlen(sectorList); pRichCal = 0; pIter = 0; sectorMax = 6; rowMax = 90; colMax = 92; hardwareMax = 17464; size = 6.; // for finding runaways in meanAndSigma! epsilon = 0.001; channels = 2; sigmaTransformation = false; for (Int_t i=0;i sectorMax) { cout<<"!!!!!!!!!!!!!!!!!!!!!!!"<47 && b<55)){ cout<<"Attention!!! "<Fill(j,k,pStat[sIx][j][k]); runAwayHisto[i]->Fill(j,k,pRunAway[sIx][j][k]); meanHisto[i]->Fill(j,k,pMean[sIx][j][k]); Float_t radikand = pSigma[sIx][j][k]*countArray[sIx][j][k]; if(radikand < 0.){ sigmaHisto[i]->Fill(j,k,20000.); cout<<" !2D! numerical problem occured "<Get("uip"); //retrieve object from file vec5 = (TVector*) pFile->Get("pads_x"); //and keyname vec6 = (TVector*) pFile->Get("pads_y"); } else cout << "problems opening upifile" << endl; } void HRichReCalibrater::bookCanvases(){ } void HRichReCalibrater::calculate(){ HRichCal *pCal=NULL; Bool_t kData = kFALSE; pIter->Reset(); while( (pCal = (HRichCal *)pIter->Next()) ){ kData = kTRUE; Int_t sec = pCal->getSector(); Float_t fCharge = pCal->getCharge(); Int_t iRow = pCal->getRow(); Int_t iCol = pCal->getCol(); if(mask[sec][0]==1){ if(iRow < rowMax && iCol < colMax){ if (fCharge5. && fabs(pMean[sIx][col][row] - charge) >= size * sigma + epsilon && fabs(pMean[sIx][col][row] - charge) > channels ){ // "nEv>5." to avoid numerical problems pRunAway[sIx][col][row]++; countArray[sIx][col][row]--; } else{ pDiff[sIx][col][row] = ((double)charge - pMean[sIx][col][row]) / (nEv+1.); pMean[sIx][col][row] = pMean[sIx][col][row] + pDiff[sIx][col][row]; pSigma[sIx][col][row] = (nEv==0.)?0.:((nEv-1.)/(nEv+1.))*pSigma[sIx][col][row]+pDiff[sIx][col][row]*pDiff[sIx][col][row]; } } void HRichReCalibrater::bookCounterHisto(){ count = new TH1F("count","count",3,0,3); } void HRichReCalibrater::fillCounterHisto(){ count->Fill(1,nCounter+1); } void HRichReCalibrater::outputFile(){ Char_t fileName[128]; const Char_t * extRoot = ".root"; strcpy(fileName,pedPathName.Data()); strcat(fileName,extRoot); dataFile = new TFile(fileName, "RECREATE"); count->Write(); for (Int_t i = 0; iWrite(); mean1dHisto[i]->Write(); sigmaHisto[i]->Write(); sigma1dHisto[i]->Write(); statHisto[i]->Write(); runAwayHisto[i]->Write(); } } dataFile->Close(); cout<<"Histos are written to: "<getSetup()->getDetector("Rich"); pRichCal=gHades->getCurrentEvent()->getCategory(catRichCal); if (!pRichCal) { pRichCal=pRichDet->buildCategory(catRichCal); if (!pRichCal) return kFALSE; else gHades->getCurrentEvent() ->addCategory(catRichCal, pRichCal, "Rich"); } pIter = (HMatrixCatIter*)pRichCal->MakeIterator(); uipFile(); nCounter = 0; } return kTRUE; } Int_t HRichReCalibrater::execute() { if (checkInput){ calculate(); } return kTRUE; } Bool_t HRichReCalibrater::finalize(void) { if (checkInput){ cout<<"We are in finalize!"<