/*************************************************************************** TPsiRunHeader.cpp Author: Andreas Suter e-mail: andreas.suter@psi.ch $Id$ ***************************************************************************/ /*************************************************************************** * Copyright (C) 2007-2011 by Andreas Suter * * andreas.suter@psi.ch * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the * * Free Software Foundation, Inc., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #include #include using namespace std; #include "TPsiRunHeader.h" #include #include #define TPRH_VERSION_IDX 0 #define TPRH_RUN_TITLE_IDX 1 #define TPRH_RUN_NUMBER_IDX 2 #define TPRH_LABORATORY_IDX 3 #define TPRH_INSTRUMENT_IDX 4 #define TPRH_SETUP_IDX 5 #define TPRH_SAMPLE_IDX 6 #define TPRH_ORIENTATION_IDX 7 #define TPRH_OFFSET 9 ClassImp(TPsiRunProperty) //-------------------------------------------------------------------------- // Constructor //-------------------------------------------------------------------------- /** *

Constructor. */ TPsiRunProperty::TPsiRunProperty() { fLabel = "n/a"; fValue = 0.0; fError = 0.0; fUnit = "n/a"; } //-------------------------------------------------------------------------- // Constructor //-------------------------------------------------------------------------- /** *

Constructor. * * \param name * \param value * \param error * \param unit */ TPsiRunProperty::TPsiRunProperty(TString &label, Double_t value, Double_t error, TString &unit) : fLabel(label), fValue(value), fError(error), fUnit(unit) { } //-------------------------------------------------------------------------- // Destructor //-------------------------------------------------------------------------- /** *

Destructor. */ TPsiRunProperty::~TPsiRunProperty() { } //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ClassImp(TPsiRunHeader) //-------------------------------------------------------------------------- // Constructor //-------------------------------------------------------------------------- /** *

Constructor. */ TPsiRunHeader::TPsiRunHeader() { fVersion = TString("$Id$"); fRunTitle = TString("n/a"); fRunNumber = -1; fLaboratory = TString("n/a"); fInstrument = TString("n/a"); fSetup = TString("n/a"); fSample = TString("n/a"); fOrientation = TString("n/a"); fHeader.Expand(0); // init to size 0 } //-------------------------------------------------------------------------- // Destructor //-------------------------------------------------------------------------- /** *

Destructor. */ TPsiRunHeader::~TPsiRunHeader() { fProperties.clear(); fHeader.Delete(); } //-------------------------------------------------------------------------- // GetHeader (public) //-------------------------------------------------------------------------- /** *

* */ TObjArray* TPsiRunHeader::GetHeader() { // make sure that previous header is removed fHeader.Delete(); fHeader.Expand(0); char str[1024], fmt[1024]; TObjString *tostr; // add version sprintf(str, "%02d - Version: %s", TPRH_VERSION_IDX+1, fVersion.Data()); tostr = new TObjString(str); fHeader.AddLast(tostr); // add run title sprintf(str, "%02d - Run Title: %s", TPRH_RUN_TITLE_IDX+1, fRunTitle.Data()); tostr = new TObjString(str); fHeader.AddLast(tostr); // add run number sprintf(str, "%02d - Run Number: %d", TPRH_RUN_NUMBER_IDX+1, fRunNumber); tostr = new TObjString(str); fHeader.AddLast(tostr); // add laboratory sprintf(str, "%02d - Laboratory: %s", TPRH_LABORATORY_IDX+1, fLaboratory.Data()); tostr = new TObjString(str); fHeader.AddLast(tostr); // add instrument sprintf(str, "%02d - Instrument: %s", TPRH_INSTRUMENT_IDX+1, fInstrument.Data()); tostr = new TObjString(str); fHeader.AddLast(tostr); // add setup sprintf(str, "%02d - Setup: %s", TPRH_SETUP_IDX+1, fSetup.Data()); tostr = new TObjString(str); fHeader.AddLast(tostr); // add sample sprintf(str, "%02d - Sample: %s", TPRH_SAMPLE_IDX+1, fSample.Data()); tostr = new TObjString(str); fHeader.AddLast(tostr); // add orientation sprintf(str, "%02d - Orientation: %s", TPRH_ORIENTATION_IDX+1, fOrientation.Data()); tostr = new TObjString(str); fHeader.AddLast(tostr); // add properties UInt_t digit=0; for (UInt_t i=0; i Extracts from an array of TObjStrings containing the header information * all the necessary parameters. * * \param runHeader an array of TObjStrings containing the header information */ Bool_t TPsiRunHeader::ExtractHeaderInformation(TObjArray *runHeader) { return true; } //-------------------------------------------------------------------------- // AddProperty (public) //-------------------------------------------------------------------------- /** *

* * \param property */ void TPsiRunHeader::AddProperty(TPsiRunProperty &property) { fProperties.push_back(property); } //-------------------------------------------------------------------------- // AddProperty (public) //-------------------------------------------------------------------------- /** *

* * \param name * \param value * \param error * \param unit */ void TPsiRunHeader::AddProperty(TString name, Double_t value, Double_t error, TString unit) { TPsiRunProperty property(name, value, error, unit); fProperties.push_back(property); } //-------------------------------------------------------------------------- // DumpHeader (public) //-------------------------------------------------------------------------- /** *

*/ void TPsiRunHeader::DumpHeader() const { int old_width = cout.width(); // get maximal length of the property names int name_width = 8; // init to max. length of fixed names like: version, etc. for (UInt_t i=0; i name_width) name_width = fProperties[i].GetLabel().Length(); } name_width++; // write SVN versions cout << endl << setw(name_width) << left << "Version" << setw(old_width) << ": " << GetVersion().Data(); // write run title cout << endl << setw(name_width) << left << "Run Title" << setw(old_width) << ": " << GetRunTitle().Data(); // write run number cout << endl << setw(name_width) << left << "Run Number" << setw(old_width) << ": " << GetRunNumber(); // write laboratory cout << endl << setw(name_width) << left << "Laboratory" << setw(old_width) << ": " << GetLab().Data(); // write instrument cout << endl << setw(name_width) << left << "Instrument" << setw(old_width) << ": " << GetInstrument().Data(); // write setup cout << endl << setw(name_width) << left << "Setup" << setw(old_width) << ": " << GetSetup().Data(); // write sample cout << endl << setw(name_width) << left << "Sample" << setw(old_width) << ": " << GetSample().Data(); // write orientation cout << endl << setw(name_width) << left << "Orientation" << setw(old_width) << ": " << GetOrientation().Data(); for (UInt_t i=0; i */ void TPsiRunHeader::DrawHeader() const { TPaveText *pt; TCanvas *ca; ca = new TCanvas("PSI RunHeader","PSI RunHeader", 147,37,699,527); ca->Range(0., 0., 100., 100.); pt = new TPaveText(10.,10.,90.,90.,"br"); pt->SetFillColor(19); pt->SetTextAlign(12); pt->Draw(); ca->Modified(kTRUE); } //-------------------------------------------------------------------------- // GetDecimalPlace (private) //-------------------------------------------------------------------------- /** *

Check decimal place of val. If val > 1.0, the function will return 0, otherwise * the first decimal place found will be returned. * * \param val value from which the first significant digit shall be determined */ UInt_t TPsiRunHeader::GetDecimalPlace(Double_t val) { UInt_t digit = 0; if (val < 1.0) { UInt_t count=1; do { val *= 10.0; if (val > 1.0) digit = count; count++; } while ((digit == 0) || (count > 20)); } return digit; }