|
#ifndef BRAT_BrZdcTdcCalModule #include "BrZdcTdcCalModule.h" #endif #ifndef ROOT_TF1 #include "TF1.h" #endif #ifndef ROOT_TGraphErrors #include "TGraphErrors.h" #endif ClassImp (BrZdcTdcCalModule); BrZdcTdcCalModule::BrZdcTdcCalModule () { SetState (kSetup); } BrZdcTdcCalModule::BrZdcTdcCalModule (const Char_t *name, const Char_t *title):BrZdcCalModule (name, title) { SetState (kSetup); } BrZdcTdcCalModule::~BrZdcTdcCalModule () { } void BrZdcTdcCalModule::DefineHistograms () { if (fCommitAscii || fLoadAscii) return; if (GetState ()!= kInit) return; } void BrZdcTdcCalModule::Init () { SetState (kInit); BrZdcCalModule::Init (); BrCalibration::EAccessMode mode= BrCalibration::kRead; if (fLoadAscii) mode= BrCalibration::kTransitional; else if (fSaveAscii || fCommitAscii) mode= BrCalibration::kWrite; fCalibration->Use ("TdcGain", mode, fNoModules); } void BrZdcTdcCalModule::Begin () { SetState (kBegin); if (fLoadAscii) { ReadAscii (); return; } if (fCommitAscii) return; for (Int_t i= 0; i < fNoModules; i++) fCalibration->SetTdcGain (i+1, BrZdcCalibration::kCalException); } void BrZdcTdcCalModule::Event (BrEventNode *inNode, BrEventNode *outNode) { SetState (kEvent); if (fCommitAscii || fLoadAscii) return; } void BrZdcTdcCalModule::End () { SetState (kEnd); } void BrZdcTdcCalModule::Finish () { SetState (kFinish); if (fLoadAscii) return; if (fCommitAscii) {ReadAscii (); return;} //----- set TDC calibration constants for eventual commission into DB //----- parameters are read (temporarily) from the $BRAT/share/brat/params/zdc/BrCalibrZdc.dat file Int_t i, j=1, k= 0, n= 20; Float_t value, tdcGain [4]; Double_t x [n], y [n], ex [n], ey [n]; TF1 *fitFunc; TGraphErrors *graph; for (i= 0; i < n; i++) { x [i]= 10.0*(i+1); ex [i]= 0.0; ey [i]= 1.0; } fitFunc= new TF1 ("pfit", "pol1", 20, 200); ifstream file ("$BRAT/share/brat/params/zdc/BrCalibrZdc.dat", ios::in); if (!strcmp (GetName (), "ZDCRight")) for (i= 0; i < fNoModules; i++) file.ignore (256, 'n'); i= 0; while (file) { file >> value; if (i > n*j-1) { k= 0; j++; if (!strcmp (GetName (), "ZDCLeft") && (j-2) > 3) break; graph= new TGraphErrors (n, x, y, ex, ey); /*graph->SetTitle ("TDC calibration"); graph->SetMarkerColor (4); graph->SetMarkerStyle (20); graph->Draw ("AP"); graph->GetHistogram ()->SetXTitle ("time, ns"); graph->GetHistogram ()->SetYTitle ("TDC counts");*/ graph->Fit ("pfit", "R"); tdcGain [j-2]= 1/ fitFunc->GetParameter (1); } y [k]= value; k++; i++; } for (i= 0; i < fNoModules; i++) { fCalibration->SetTdcGain (i+1, tdcGain [i]); } fCalibration->SetComment ("TdcGain", "Generated by BrZdcTdcCalModule: TDC calibration parameters"); if (fSaveAscii) SaveAscii (); } void BrZdcTdcCalModule::SaveAscii () { Int_t i; Float_t par; //----- save TDC gains to an ASCII file BrRunInfoManager *runMan= BrRunInfoManager::Instance (); const BrRunInfo *run= runMan->GetCurrentRun (); if (run->GetRunNo ()== -1) { Abort ("SaveAscii", "RunInfo has run number = -1"); return; } BrZdcCalModule::SaveAscii (); ofstream file (fCalibFile.Data (), ios::out); file.setf (ios::left, ios::adjustfield); file.setf (ios::showpoint); file.precision (6); file.setf (ios::fixed, ios::floatfield); file << "**************************************************" << endl; file << "*" << endl; file << "*" << " " << GetName () << " TDC gains: events from run #" << run->GetRunNo () << endl; file << "*" << endl; file << "**************************************************" << endl; file << "*" << endl; file << "*" << " "; file.width (8); file << "Mod.#"; file.width (15); file << "TdcGain" << endl; file << "*" << endl; for (i= 0; i < fNoModules; i++) { par= fCalibration->GetTdcGain (i+1); file << " "; file.width (8); file << (i+1); file.width (15); file << par << endl; } } void BrZdcTdcCalModule::ReadAscii () { //----- save TDC gains to an ASCII file BrZdcCalModule::SaveAscii (); ifstream file (fCalibFile.Data (), ios::in); if (!file) { Abort ("ReadAscii", "File %s was not found", fCalibFile.Data ()); return; } Int_t i= 0, module; Float_t par; Char_t c; do { file.get (c); if (c== '*') file.ignore (256, 'n'); } while (c== '*'); for (Int_t i= 0; i < fNoModules; i++) { file >> module >> par; fCalibration->SetTdcGain (i+1, par); } } |
||||||
This page automatically generated by script docBrat by Christian Holm |
Copyright ; 2002 BRAHMS Collaboration
<brahmlib@rcf.rhic.bnl.gov>
|