1 #ifndef __JGIZMOTOOLKIT__ 
    2 #define __JGIZMOTOOLKIT__ 
   18 #include "TGraphErrors.h" 
   20 #include "TGraph2DErrors.h" 
   21 #include "TMultiGraph.h" 
   29 #include "TIterator.h" 
   31 #include "TMethodCall.h" 
   46 namespace JPP { 
using namespace JGIZMO; }
 
   72     static const char* 
const Add()        { 
return "Add"; }        
 
   73     static const char* 
const add()        { 
return "add"; }        
 
   74     static const char* 
const Subtract()   { 
return "Subtract"; }   
 
   75     static const char* 
const subtract()   { 
return "subtract"; }   
 
   76     static const char* 
const Multiply()   { 
return "Multiply"; }   
 
   77     static const char* 
const multiply()   { 
return "multiply"; }   
 
   78     static const char* 
const Divide()     { 
return "Divide"; }     
 
   79     static const char* 
const divide()     { 
return "divide"; }     
 
   80     static const char* 
const efficiency() { 
return "efficiency"; } 
 
   81     static const char* 
const stdev()      { 
return "stdev"; }      
 
   82     static const char* 
const sqrt()       { 
return "sqrt"; }       
 
   83     static const char* 
const Replace()    { 
return "Replace"; }    
 
   90   static const char* 
const TIMESTAMP = 
"#splitline{}{#splitline{%d:%m:%y}{  %H:%M}}%F1970-01-01 00:00:00";
 
  103   inline TFile* 
getFile(
const std::string& file_name, 
const std::string& option = 
"exist")
 
  107     gErrorIgnoreLevel = kError;
 
  113     if (i == zmap.end() || i->second == NULL || !i->second->IsOpen()) {
 
  115       TFile* 
file = TFile::Open(file_name.c_str(), option.c_str());
 
  117       zmap[file_name] = 
file;
 
  140     if (in == NULL || !in->IsOpen()) {
 
  145       return in->GetDirectory(
id.getDirectory());
 
  163       const TRegexp regexp(
id.getObjectName());
 
  165       TIter iter(dir->GetListOfKeys());
 
  167       for (TKey* key; (key = (TKey*) iter.Next()) != NULL; ) {
 
  169         const TString tag(key->GetName());
 
  173         if (tag.Index(regexp) != -1) {
 
  174           return key->ReadObj();
 
  192       const TH1* 
h1 = 
dynamic_cast<const TH1*
>(object);
 
  196         if (h1->GetSumw2N()) {
 
  197           for (Int_t i = 1; i <= h1->GetNbinsX(); ++i) {
 
  198             if (h1->GetBinError(i) != 0.0) {
 
  206       const TGraphErrors* 
g1 = 
dynamic_cast<const TGraphErrors*
>(object);
 
  210         for (Int_t i = 0; i != g1->GetN(); ++i) {
 
  211           if (g1->GetEY()[i] != 0.0) {
 
  216         return g1->GetN() > 1;
 
  220       const TGraph* 
g1 = 
dynamic_cast<const TGraph*
>(object);
 
  223         return g1->GetN() > 1;
 
  247     TString buffer(text);
 
  249     if (
object != NULL) {
 
  251       TClass* p = TClass::GetClass(object->ClassName());
 
  257           TIterator* iter   = p->GetListOfAllPublicMethods()->MakeIterator();
 
  258           TMethod*   method = NULL;
 
  260           for (TMethod* p; (p = (TMethod*) iter->Next()) != NULL; ) {
 
  261             if (buffer.Index(p->GetName()) != -1) {
 
  262               if (method == NULL || strlen(p->GetName()) > strlen(method->GetName())) {
 
  268           if (method == NULL) {
 
  272           for (Ssiz_t index; (index = buffer.Index(method->GetName())) != -1; ) {
 
  274             const TRegexp fp(
" *([^)]*)");   
 
  277             Ssiz_t pos = buffer.Index(fp, &len, index);
 
  281             if (pos == -1 || pos != index + (Ssiz_t) strlen(method->GetName())) {
 
  283               TMethodCall(p, method->GetName(), NULL).Execute(
object, value);
 
  285               len  = strlen(method->GetName());
 
  289               TMethodCall(p, method->GetName(), NULL).Execute(
object, TString(buffer(pos + 1, len - 2)), value);
 
  291               len += strlen(method->GetName());
 
  294             buffer.Replace(index, len, TString::Format(
"%15.5e", value));
 
  300     return TFormula(
"/tmp", buffer.Data()).Eval(0.0);
 
  320     return getResult(TString(text.c_str()), 
object);
 
  334     const char* regexp(
"p[0-9]* *=");
 
  336     TString buffer(text.c_str());
 
  338     buffer = buffer(TRegexp(regexp));
 
  339     buffer = buffer(1, buffer.Length() - 2);
 
  341     if (!buffer.IsDigit()) {
 
  345     return buffer.Atoi();
 
  365     const char* regexp(
"=.*");
 
  367     TString buffer(text.c_str());
 
  369     buffer = buffer(TRegexp(regexp));
 
  370     buffer = buffer(1, buffer.Length() - 1);
 
  372     return getResult(std::string(buffer), 
object);
 
  395     const char* regexp(
"=.*");
 
  397     TString buffer(text.c_str());
 
  399     buffer = buffer(TRegexp(regexp));
 
  400     buffer = buffer(1, buffer.Length() - 1);
 
  403     istringstream 
is((std::string(buffer)));
 
  407     for (
int i = index; is >> value && i > 0; --i) {}
 
  412       THROW(
JParseError, 
"Text des not contain a number at given position " << buffer << 
' ' << index);
 
  425       const Int_t    
first = axis->GetFirst();
 
  426       const Int_t    last  = axis->GetLast();
 
  428       const Double_t xmin  = axis->GetBinLowEdge(first);
 
  429       const Double_t xmax  = axis->GetBinLowEdge(last)  +  axis->GetBinWidth(last);
 
  431       const Int_t 
N = axis->GetNbins();
 
  432       Double_t    buffer[N+1];
 
  434       buffer[0] = TMath::Power(10.0, axis->GetBinLowEdge(1));
 
  436       for (Int_t i = 1; i <= 
N; ++i) {
 
  437         buffer[i] = TMath::Power(10.0, axis->GetBinLowEdge(i) + axis->GetBinWidth(i));
 
  440       axis->Set(N, buffer);
 
  442       if (axis->TestBit(TAxis::kAxisRange)) {
 
  443         axis->SetRangeUser(TMath::Power(10.0, xmin), TMath::Power(10.0, xmax));
 
  458     const TRegexp regexp[] = {
 
  459       TString(
"^")          + TString(parameter) + TString(
"[^a-zA-Z_]"),   
 
  460       TString(
"[^a-zA-Z_]") + TString(parameter) + TString(
"[^a-zA-Z_]"),   
 
  461       TString(
"[^a-zA-Z_]") + TString(parameter) + TString(
"$")             
 
  464     const TString replacement = TString(
"log10(") + TString(parameter) + TString(
")");
 
  466     TString buffer(formula);
 
  468     if (buffer.Length() == 1 && buffer[0] == parameter) {
 
  470       buffer = replacement;
 
  474       for (Ssiz_t pos = 0, i; pos < buffer.Length(); pos += replacement.Length()) {
 
  475         if      ((i = buffer.Index(regexp[0], pos)) != -1) { buffer.Replace((pos = i + 0), 1, replacement); }
 
  476         else if ((i = buffer.Index(regexp[1], pos)) != -1) { buffer.Replace((pos = i + 1), 1, replacement); }
 
  477         else if ((i = buffer.Index(regexp[2], pos)) != -1) { buffer.Replace((pos = i + 1), 1, replacement); }
 
  492   inline void copy(
const TF1& from, TF1& to)
 
  494     static_cast<TAttLine&
>  (to) = static_cast<const TAttLine&>  (from);
 
  495     static_cast<TAttFill&
>  (to) = static_cast<const TAttFill&>  (from);
 
  496     static_cast<TAttMarker&
>(to) = static_cast<const TAttMarker&>(from);
 
  498     to.SetParameters(from.GetParameters());
 
  500     to.SetNpx(from.GetNpx());
 
  510   inline void copy(
const TF2& from, TF2& to)
 
  512     copy(static_cast<const TF1&>(from), static_cast<TF1&>(to));
 
  514     to.SetNpy(from.GetNpy());
 
  549       fn.SetRange(f1->GetXmin(),
 
  554       f1->SetRange(TMath::Power(10.0,f1->GetXmin()),
 
  555                    TMath::Power(10.0,f1->GetXmax()));
 
  569       TString buffer = f1->GetExpFormula();
 
  571       buffer = 
"pow(10.0, " + buffer + 
")";
 
  573       TF1 fn(f1->GetName(), buffer);
 
  595       fn.SetRange(f2->GetXmin(),
 
  602       f2->SetRange(TMath::Power(10.0,f2->GetXmin()),
 
  604                    TMath::Power(10.0,f2->GetXmax()),
 
  623       fn.SetRange(f2->GetXmin(),
 
  630       f2->SetRange(f2->GetXmin(),
 
  631                    TMath::Power(10.0,f2->GetYmin()),
 
  633                    TMath::Power(10.0,f2->GetYmax()));
 
  647       setLogarithmicX<TF1>(h1->GetListOfFunctions());
 
  665       setLogarithmicX<TF2>(h2->GetListOfFunctions());
 
  681       setLogarithmicY<TF2>(h2->GetListOfFunctions());
 
  697       setLogarithmicX<TF1>(g1->GetListOfFunctions());
 
  699       for (Int_t i = 0; i != g1->GetN(); ++i) {
 
  700         g1->GetX()[i] = 
pow(10.0, g1->GetX()[i]);
 
  715       setLogarithmicY<TF1>(g1->GetListOfFunctions());
 
  717       for (Int_t i = 0; i != g1->GetN(); ++i) {
 
  718         g1->GetY()[i] = 
pow(10.0, g1->GetY()[i]);
 
  733       setLogarithmicX<TF1>(g1->GetListOfFunctions());
 
  735       for (Int_t i = 0; i != g1->GetN(); ++i) {
 
  736         g1->GetEX()[i] = 
pow(10.0, g1->GetX()[i] + g1->GetEX()[i])  -  
pow(10.0, g1->GetX()[i]);
 
  737         g1->GetX() [i] = 
pow(10.0, g1->GetX()[i]);
 
  752       setLogarithmicY<TF1>(g1->GetListOfFunctions());
 
  754       for (Int_t i = 0; i != g1->GetN(); ++i) {
 
  755         g1->GetEY()[i] = 
pow(10.0, g1->GetY()[i] + g1->GetEY()[i])  -  
pow(10.0, g1->GetY()[i]);
 
  756         g1->GetY() [i] = 
pow(10.0, g1->GetY()[i]);
 
  771       setLogarithmicX<TF2>(g2->GetListOfFunctions());
 
  773       for (Int_t i = 0; i != g2->GetN(); ++i) {
 
  774         g2->GetX()[i] = 
pow(10.0, g2->GetX()[i]);
 
  789       setLogarithmicY<TF2>(g2->GetListOfFunctions());
 
  791       for (Int_t i = 0; i != g2->GetN(); ++i) {
 
  792         g2->GetY()[i] = 
pow(10.0, g2->GetY()[i]);
 
  807       setLogarithmicX<TF2>(g2->GetListOfFunctions());
 
  809       for (Int_t i = 0; i != g2->GetN(); ++i) {
 
  810         g2->GetEX()[i] = 
pow(10.0, g2->GetX()[i] + g2->GetEX()[i])  -  
pow(10.0, g2->GetX()[i]);
 
  811         g2->GetX() [i] = 
pow(10.0, g2->GetX()[i]);
 
  826       setLogarithmicY<TF2>(g2->GetListOfFunctions());
 
  828       for (Int_t i = 0; i != g2->GetN(); ++i) {
 
  829         g2->GetEY()[i] = 
pow(10.0, g2->GetY()[i] + g2->GetEY()[i])  -  
pow(10.0, g2->GetY()[i]);
 
  830         g2->GetY() [i] = 
pow(10.0, g2->GetY()[i]);
 
  844       setLogarithmicX<TGraph>(gn->GetListOfGraphs());
 
  857       setLogarithmicY<TGraph>(gn->GetListOfGraphs());
 
  870       line->SetX1(
pow(10.0, line->GetX1()));
 
  871       line->SetX2(
pow(10.0, line->GetX2()));
 
  884       line->SetY1(
pow(10.0, line->GetY1()));
 
  885       line->SetY2(
pow(10.0, line->GetY2()));
 
  920     for (TIter i(list); 
T* p = 
dynamic_cast<T*
>(i.Next()); ) {
 
  934     for (TIter i(list); 
T* p = 
dynamic_cast<T*
>(i.Next()); ) {
 
  952   inline void convertToPDF(TH1& 
h1, 
const std::string& option = 
"NW", 
const double factor = 1.0)
 
  956     const bool normalise = (option.find(
'N') != string::npos || option.find(
'n') != string::npos);
 
  957     const bool bin_width = (option.find(
'W') != string::npos || option.find(
'w') != string::npos);
 
  958     const bool use_error = (option.find(
'E') != string::npos || option.find(
'e') != string::npos);
 
  966       for (Int_t i = 1; i <= h1.GetXaxis()->GetNbins(); ++i) {
 
  967         W += h1.GetBinContent(i);
 
  973       for (Int_t i = 1; i <= h1.GetXaxis()->GetNbins(); ++i) {
 
  975         const Double_t 
w = W * (bin_width ? h1.GetXaxis()->GetBinWidth(i) : 1.0);
 
  977         h1.SetBinContent(i, h1.GetBinContent(i) * factor / 
w);
 
  980           h1.SetBinError(i, h1.GetBinError(i) * factor / 
w);
 
 1001   inline void convertToPDF(TH2& h2, 
const std::string& option = 
"NXYW", 
const double factor = 1.0)
 
 1003     using namespace std;
 
 1005     const bool normalise = (option.find(
'N') != string::npos || option.find(
'n') != string::npos);
 
 1006     const bool X         = (option.find(
'X') != string::npos || option.find(
'x') != string::npos);
 
 1007     const bool Y         = (option.find(
'Y') != string::npos || option.find(
'y') != string::npos);
 
 1008     const bool bin_width = (option.find(
'W') != string::npos || option.find(
'w') != string::npos);
 
 1009     const bool use_error = (option.find(
'E') != string::npos || option.find(
'e') != string::npos);
 
 1019         for (Int_t ix = 1; ix <= h2.GetXaxis()->GetNbins(); ++ix) {
 
 1020           for (Int_t iy = 1; iy <= h2.GetYaxis()->GetNbins(); ++iy) {
 
 1021             W += h2.GetBinContent(ix,iy);
 
 1028         for (Int_t ix = 1; ix <= h2.GetXaxis()->GetNbins(); ++ix) {
 
 1029           for (Int_t iy = 1; iy <= h2.GetYaxis()->GetNbins(); ++iy) {
 
 1031             const Double_t 
w = W * (bin_width ? h2.GetXaxis()->GetBinWidth(ix) * h2.GetYaxis()->GetBinWidth(iy) : 1.0);
 
 1033             h2.SetBinContent(ix, iy, h2.GetBinContent(ix,iy) * factor / 
w);
 
 1036               h2.SetBinError(ix, iy, h2.GetBinError(ix,iy) * factor / 
w);
 
 1044       for (Int_t iy = 1; iy <= h2.GetYaxis()->GetNbins(); ++iy) {
 
 1050           for (Int_t ix = 1; ix <= h2.GetXaxis()->GetNbins(); ++ix) {
 
 1051             W += h2.GetBinContent(ix,iy);
 
 1057           for (Int_t ix = 1; ix <= h2.GetXaxis()->GetNbins(); ++ix) {
 
 1059             const Double_t 
w = W * (bin_width ? h2.GetXaxis()->GetBinWidth(ix) : 1.0);
 
 1061             h2.SetBinContent(ix, iy, h2.GetBinContent(ix,iy) * factor / 
w);
 
 1064               h2.SetBinError(ix, iy, h2.GetBinError(ix,iy) * factor / 
w);
 
 1072       for (Int_t ix = 1; ix <= h2.GetXaxis()->GetNbins(); ++ix) {
 
 1078           for (Int_t iy = 1; iy <= h2.GetYaxis()->GetNbins(); ++iy) {
 
 1079             W += h2.GetBinContent(ix,iy);
 
 1085           for (Int_t iy = 1; iy <= h2.GetYaxis()->GetNbins(); ++iy) {
 
 1087             const Double_t 
w = W * (bin_width ? h2.GetYaxis()->GetBinWidth(iy) : 1.0);
 
 1089             h2.SetBinContent(ix, iy, h2.GetBinContent(ix,iy) / 
w);
 
 1092               h2.SetBinError(ix, iy, h2.GetBinError(ix,iy) / 
w);
 
 1116   inline void convertToPDF(TH3& h3, 
const std::string& option = 
"NXYW", 
const double factor = 1.0)
 
 1118     using namespace std;
 
 1120     const bool normalise = (option.find(
'N') != string::npos || option.find(
'n') != string::npos);
 
 1121     const bool X         = (option.find(
'X') != string::npos || option.find(
'x') != string::npos);
 
 1122     const bool Y         = (option.find(
'Y') != string::npos || option.find(
'y') != string::npos);
 
 1123     const bool Z         = (option.find(
'Z') != string::npos || option.find(
'z') != string::npos);    
 
 1124     const bool bin_width = (option.find(
'W') != string::npos || option.find(
'w') != string::npos);
 
 1125     const bool use_error = (option.find(
'E') != string::npos || option.find(
'e') != string::npos);
 
 1135         for (Int_t ix = 1; ix <= h3.GetXaxis()->GetNbins(); ++ix) {
 
 1136           for (Int_t iy = 1; iy <= h3.GetYaxis()->GetNbins(); ++iy) {
 
 1137             for (Int_t iz = 1; iz <= h3.GetZaxis()->GetNbins(); ++iz) {     
 
 1138               W += h3.GetBinContent(ix,iy,iz);
 
 1146         for (Int_t ix = 1; ix <= h3.GetXaxis()->GetNbins(); ++ix) {
 
 1147           for (Int_t iy = 1; iy <= h3.GetYaxis()->GetNbins(); ++iy) {
 
 1148             for (Int_t iz = 1; iz <= h3.GetZaxis()->GetNbins(); ++iz) {     
 
 1150               const Double_t 
w = W * (bin_width ? h3.GetXaxis()->GetBinWidth(ix) * h3.GetYaxis()->GetBinWidth(iy) * h3.GetZaxis()->GetBinWidth(iz) : 1.0);
 
 1152               h3.SetBinContent(ix, iy, iz, h3.GetBinContent(ix,iy,iz) * factor / 
w);
 
 1155                 h3.SetBinError(ix, iy, iz, h3.GetBinError(ix,iy,iz) * factor / 
w);
 
 1162     } 
else if (
X && 
Z) {
 
 1164       for (Int_t iy = 1; iy <= h3.GetYaxis()->GetNbins(); ++iy) {
 
 1170           for (Int_t ix = 1; ix <= h3.GetXaxis()->GetNbins(); ++ix) {
 
 1171             for (Int_t iz = 1; iz <= h3.GetZaxis()->GetNbins(); ++iz) {
 
 1172               W += h3.GetBinContent(ix,iy,iz);
 
 1179           for (Int_t ix = 1; ix <= h3.GetXaxis()->GetNbins(); ++ix) {
 
 1180             for (Int_t iz = 1; iz <= h3.GetZaxis()->GetNbins(); ++iz) {
 
 1182               const Double_t 
w = W * (bin_width ? h3.GetXaxis()->GetBinWidth(ix) * h3.GetZaxis()->GetBinWidth(iz) : 1.0);
 
 1184               h3.SetBinContent(ix, iy, iz, h3.GetBinContent(ix,iy,iz) * factor / 
w);
 
 1187                 h3.SetBinError(ix, iy, iz, h3.GetBinError(ix,iy,iz) * factor / 
w);
 
 1194     } 
else if (
Y && 
Z) {
 
 1196       for (Int_t ix = 1; ix <= h3.GetXaxis()->GetNbins(); ++ix) {
 
 1202           for (Int_t iy = 1; iy <= h3.GetYaxis()->GetNbins(); ++iy) {
 
 1203             for (Int_t iz = 1; iz <= h3.GetZaxis()->GetNbins(); ++iz) {
 
 1204               W += h3.GetBinContent(ix,iy,iz);
 
 1211           for (Int_t iy = 1; iy <= h3.GetYaxis()->GetNbins(); ++iy) {
 
 1212             for (Int_t iz = 1; iz <= h3.GetZaxis()->GetNbins(); ++iz) {
 
 1214               const Double_t 
w = W * (bin_width ? h3.GetYaxis()->GetBinWidth(iy) * h3.GetZaxis()->GetBinWidth(iz) : 1.0);
 
 1216               h3.SetBinContent(ix, iy, iz, h3.GetBinContent(ix,iy,iz) * factor / 
w);
 
 1219                 h3.SetBinError(ix, iy, iz, h3.GetBinError(ix,iy,iz) * factor / 
w);
 
 1226     } 
else if (
X && 
Y) {
 
 1228       for (Int_t iz = 1; iz <= h3.GetZaxis()->GetNbins(); ++iz) {      
 
 1234           for (Int_t ix = 1; ix <= h3.GetXaxis()->GetNbins(); ++ix) {
 
 1235             for (Int_t iy = 1; iy <= h3.GetYaxis()->GetNbins(); ++iy) {
 
 1236               W += h3.GetBinContent(ix,iy,iz);
 
 1243           for (Int_t ix = 1; ix <= h3.GetXaxis()->GetNbins(); ++ix) {
 
 1244             for (Int_t iy = 1; iy <= h3.GetYaxis()->GetNbins(); ++iy) {
 
 1246               const Double_t 
w = W * (bin_width ? h3.GetXaxis()->GetBinWidth(ix) * h3.GetYaxis()->GetBinWidth(iy) : 1.0);
 
 1248               h3.SetBinContent(ix, iy, iz, h3.GetBinContent(ix,iy,iz) * factor / 
w);
 
 1251                 h3.SetBinError(ix, iy, iz, h3.GetBinError(ix,iy,iz) * factor / 
w);
 
 1260       for (Int_t iy = 1; iy <= h3.GetYaxis()->GetNbins(); ++iy) {
 
 1261         for (Int_t iz = 1; iz <= h3.GetZaxis()->GetNbins(); ++iz) {
 
 1267             for (Int_t ix = 1; ix <= h3.GetXaxis()->GetNbins(); ++ix) {
 
 1268               W += h3.GetBinContent(ix,iy,iz);
 
 1274             for (Int_t ix = 1; ix <= h3.GetXaxis()->GetNbins(); ++ix) {
 
 1276               const Double_t 
w = W * (bin_width ? h3.GetXaxis()->GetBinWidth(ix) : 1.0);
 
 1278               h3.SetBinContent(ix, iy, iz, h3.GetBinContent(ix,iy,iz) * factor / 
w);
 
 1281                 h3.SetBinError(ix, iy, iz, h3.GetBinError(ix,iy,iz) * factor / 
w);
 
 1290       for (Int_t ix = 1; ix <= h3.GetXaxis()->GetNbins(); ++ix) {
 
 1291         for (Int_t iz = 1; iz <= h3.GetZaxis()->GetNbins(); ++iz) {     
 
 1297             for (Int_t iy = 1; iy <= h3.GetYaxis()->GetNbins(); ++iy) {
 
 1298               W += h3.GetBinContent(ix,iy,iz);
 
 1304             for (Int_t iy = 1; iy <= h3.GetYaxis()->GetNbins(); ++iy) {
 
 1306               const Double_t 
w = W * (bin_width ? h3.GetYaxis()->GetBinWidth(iy) : 1.0);
 
 1308               h3.SetBinContent(ix, iy, iz, h3.GetBinContent(ix,iy,iz) / 
w);
 
 1311                 h3.SetBinError(ix, iy, iz, h3.GetBinError(ix,iy,iz) / 
w);
 
 1320       for (Int_t ix = 1; ix <= h3.GetXaxis()->GetNbins(); ++ix) {
 
 1321         for (Int_t iy = 1; iy <= h3.GetYaxis()->GetNbins(); ++iy) {     
 
 1327             for (Int_t iz = 1; iz <= h3.GetZaxis()->GetNbins(); ++iz) {
 
 1328               W += h3.GetBinContent(ix,iy,iz);
 
 1334             for (Int_t iz = 1; iz <= h3.GetZaxis()->GetNbins(); ++iz) {
 
 1336               const Double_t 
w = W * (bin_width ? h3.GetZaxis()->GetBinWidth(iz) : 1.0);
 
 1338               h3.SetBinContent(ix, iy, iz, h3.GetBinContent(ix,iy,iz) / 
w);
 
 1341                 h3.SetBinError(ix, iy, iz, h3.GetBinError(ix,iy,iz) / 
w);
 
 1358     using namespace std;
 
 1360     Double_t ymin = numeric_limits<Double_t>::max();
 
 1361     Double_t ymax = numeric_limits<Double_t>::lowest();
 
 1363     for (Int_t i = 0; i != g1.GetN(); ++i) {
 
 1365       const Double_t y = g1.GetY()[i];
 
 1367       if (y > ymax) { ymax = y; }
 
 1368       if (y < ymin) { ymin = y; }
 
 1371     g1.SetMinimum(ymin);
 
 1372     g1.SetMaximum(ymax);
 
 1383     using namespace std;
 
 1385     Double_t zmin = numeric_limits<Double_t>::max();
 
 1386     Double_t zmax = numeric_limits<Double_t>::lowest();
 
 1388     for (Int_t i = 0; i != g2.GetN(); ++i) {
 
 1390       const Double_t z = g2.GetZ()[i];
 
 1392       if (z > zmax) { zmax = z; }
 
 1393       if (z < zmin) { zmin = z; }
 
 1396     g2.SetMinimum(zmin);
 
 1397     g2.SetMaximum(zmax);
 
 1417     double dx = (xmax - xmin) * 0.1;
 
 1419     if (xmin > dx || xmin < 0.0)
 
 1449     using namespace JPP;
 
 1451     if (axis->GetNbins() == (int) memo.size()) {
 
 1453       for (
int i = 0; i != axis->GetNbins(); ++i) {
 
 1455         const JPMTPhysicalAddress& address = memo[i];
 
 1457         axis->SetBinLabel(i + 1, address.toString().c_str());
 
 1480     using namespace JPP;
 
 1484     if      (axis == 
"x" || axis == 
"X") 
 
 1485       pax = h1.GetXaxis();
 
 1486     else if (axis == 
"y" || axis == 
"Y") 
 
 1487       pax = h1.GetYaxis();
 
 1488     else if (axis == 
"z" || axis == 
"Z") 
 
 1489       pax = h1.GetZaxis();
 
 1493     if (pax->GetNbins() == (int) memo.size()) {
 
 1495       for (
int i = 0; i != pax->GetNbins(); ++i) {
 
 1499         pax->SetBinLabel(i + 1, address.toString().c_str());
 
 1502       h1.LabelsOption(
"a", axis.c_str());       
 
 1519     return (key != NULL && TClass::GetClass(key->GetClassName())->IsTObject());
 
static const char *const sqrt()
Set contents to signed difference between squares. 
 
TObject * getObject(const JRootObjectID &id)
Get first TObject with given identifier. 
 
double getValue(const JScale_t scale)
Get numerical value corresponding to scale. 
 
int getParameter(const std::string &text)
Get parameter number from text string. 
 
static const char *const Divide()
ROOT TH1::Divide. 
 
static const char *const Subtract()
ROOT TH1::Subtract. 
 
Exception for a functional operation. 
 
static const char *const SAME_AS_INPUT()
Set name of output histogram to name of input histogram. 
 
then set_variable PMT_FILE set_variable DAQ_FILE set_variable OUTPUT_FILE set_variable DETECTOR else fatal Wrong number of arguments fi set_variable RUNBYRUN file
 
#define THROW(JException_t, A)
Marco for throwing exception with std::ostream compatible message. 
 
static const char *const Replace()
Set contents to associated function. 
 
then JShowerPostfit f $INPUT_FILE o $OUTPUT_FILE N
 
void setLimits(TGraph &g1)
Set limits of TGraph. 
 
static const char *const subtract()
Subtract contents with lookup bin in second histogram. 
 
then for HISTOGRAM in h0 h1
 
Auxiliary class to handle file name, ROOT directory and object name. 
 
then fatal Wrong number of arguments fi set_variable STRING $argv[1] set_variable DETECTORXY_TXT $WORKDIR $DETECTORXY_TXT tail read X Y CHI2 RMS printf optimum n $X $Y $CHI2 $RMS awk v Y
 
static const char *const stdev()
Set contents to standard deviation. 
 
then fatal Wrong number of arguments fi set_variable DETECTOR $argv[1] set_variable STRING $argv[2] set_array QUANTILES set_variable FORMULA *[0] exp(-0.5 *(x-[1])*(x-[1])/([2]*[2]))" set_variable MODULE `getModule -a $DETECTOR -L "$STRING 0"` source JAcoustics.sh -- typeset -A TRIPODS get_tripods $WORKDIR/tripod.txt TRIPODS XMEAN
 
then echo The file $DIR KM3NeT_00000001_00000000 root already please rename or remove it first
 
void setLogarithmic(TAxis *axis)
Make histogram axis logarithmic (e.g. after using log10()). 
 
bool isTAttLine(const TObject *object)
Get drawing option of TH1. 
 
static const char *const efficiency()
Divide contents and multiply errors with inefficiency. 
 
static const char *const Add()
ROOT TH1::Add. 
 
Lookup table for PMT addresses in optical module. 
 
static const char *const multiply()
Multiply contents with lookup bin in second histogram. 
 
TFile * getFile(const std::string &file_name, const std::string &option="exist")
Get TFile pointer corresponding to give file name. 
 
static const char *const add()
Add contents with lookup bin in second histogram. 
 
Auxiliary data structure for JOpera1D.cc and JOpera2D.cc applications. 
 
void setLogarithmicX(TList *list)
Make x-axis of objects in list logarithmic (e.g. after using log10()). 
 
Double_t getResult(const TString &text, TObject *object=NULL)
Get result of given textual formula. 
 
do set_variable OUTPUT_DIRECTORY $WORKDIR T
 
void convertToPDF(TH1 &h1, const std::string &option="NW", const double factor=1.0)
Convert 1D histogram to PDF. 
 
void setAxisLabels(TAxis *axis, const JModuleAddressMap &memo)
Set axis with PMT address labels. 
 
T pow(const T &x, const double y)
Power . 
 
then break fi done getCenter read X Y Z let X
 
static const char *const Multiply()
ROOT TH1::Multiply. 
 
static const char *const SAME_AS_OPERATION()
Set name of output histogram to name of operation. 
 
void setLogarithmicY(TList *list)
Make y-axis of objects in list logarithmic (e.g. after using log10()). 
 
void setRange(double &xmin, double &xmax, const bool logx)
Set axis range. 
 
const JPMTAddressTranslator & getAddressTranslator(const int tdc) const 
Get PMT address translator. 
 
static const char *const divide()
Divide contents with lookup bin in second histogram. 
 
void copy(const Head &from, JHead &to)
Copy header from from to to. 
 
Exception for parsing value. 
 
bool isTObject(const TKey *key)
Check if given key corresponds to a TObject. 
 
TDirectory * getDirectory(const JRootObjectID &id)
Get TDirectory pointer. 
 
std::string getFilename(const std::string &file_name)
Get file name part, i.e. part after last JEEP::PATHNAME_SEPARATOR if any. 
 
do set_variable MODULE getModule a $WORKDIR detector_a datx L $STRING JEditDetector a $WORKDIR detector_a datx M $MODULE setz o $WORKDIR detector_a datx JEditDetector a $WORKDIR detector_b datx M $MODULE setz o $WORKDIR detector_b datx done echo Output stored at $WORKDIR detector_a datx and $WORKDIR tripod_a txt JDrawDetector2D a $WORKDIR detector_a datx a $WORKDIR detector_b datx L BL o detector $FORMAT $BATCH JDrawDetector2D T $WORKDIR tripod_a txt T $WORKDIR tripod_b txt L BL o tripod $FORMAT $BATCH JCompareDetector a $WORKDIR detector_a datx b $WORKDIR detector_b datx o $WORKDIR abc root &dev null for KEY in X Y Z
 
Exception for accessing a value in a collection that is outside of its range. 
 
TString getLogarithmic(const TString &formula, const char parameter)
Make given parameter in formula logarithmic (e.g. after using log10()). 
 
then fatal Wrong number of arguments fi set_variable DETECTOR $argv[1] set_variable INPUT_FILE $argv[2] eval JPrintDetector a $DETECTOR O IDENTIFIER eval JPrintDetector a $DETECTOR O SUMMARY source JAcoustics sh $DETECTOR_ID CHECK_EXIT_CODE typeset A TRIPODS get_tripods $WORKDIR tripod txt TRIPODS for EMITTER in
 
static const char *const TIMESTAMP
Time stamp of earliest UTC time. 
 
Double_t g1(const Double_t x)
Function.