BRAT 2.4.5
Class index
Full class index
brahmlib
BRAHMS
ROOT page
#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>
Last Update on by

Validate HTML
Validate CSS