1 #ifndef __JGIZMOTOOLKIT__ 
    2 #define __JGIZMOTOOLKIT__ 
   17 #include "TMultiGraph.h" 
   23 #include "TIterator.h" 
   25 #include "TMethodCall.h" 
   40 namespace JPP { 
using namespace JGIZMO; }
 
   65     static const char* 
const Add()        { 
return "Add"; }        
 
   66     static const char* 
const add()        { 
return "add"; }        
 
   67     static const char* 
const Subtract()   { 
return "Subtract"; }   
 
   68     static const char* 
const subtract()   { 
return "subtract"; }   
 
   69     static const char* 
const Multiply()   { 
return "Multiply"; }   
 
   70     static const char* 
const multiply()   { 
return "multiply"; }   
 
   71     static const char* 
const Divide()     { 
return "Divide"; }     
 
   72     static const char* 
const divide()     { 
return "divide"; }     
 
   73     static const char* 
const efficiency() { 
return "efficiency"; } 
 
   74     static const char* 
const stdev()      { 
return "stdev"; }      
 
   75     static const char* 
const sqrt()       { 
return "sqrt"; }       
 
   76     static const char* 
const Replace()    { 
return "Replace"; }    
 
   83   static const char* 
const TIMESTAMP = 
"#splitline{}{#splitline{%d:%m:%y}{  %H:%M}}%F1970-01-01 00:00:00";
 
   96   inline TFile* 
getFile(
const std::string& file_name, 
const std::string& option = 
"exist")
 
  100     gErrorIgnoreLevel = kError;
 
  106     if (i == zmap.end() || i->second == NULL || !i->second->IsOpen()) {
 
  108       TFile* file = TFile::Open(file_name.c_str(), option.c_str());
 
  110       zmap[file_name] = file;
 
  133     if (in == NULL || !in->IsOpen()) {
 
  138       return in->GetDirectory(
id.getDirectory());
 
  156       const TRegexp regexp(
id.getObjectName());
 
  158       TIter iter(dir->GetListOfKeys());
 
  160       for (TKey* key; (key = (TKey*) iter.Next()) != NULL; ) {
 
  162         const TString tag(key->GetName());
 
  166         if (tag.Index(regexp) != -1) {
 
  167           return key->ReadObj();
 
  184     const TH1* 
h1 = 
dynamic_cast<const TH1*
>(object);
 
  188       if (h1->GetSumw2N()) {
 
  190         for (Int_t i = 1; i <= h1->GetNbinsX(); ++i) {
 
  192           if (h1->GetBinError(i) != 0.0) {
 
  223     TString buffer(text);
 
  225     if (
object != NULL) {
 
  227       TClass* p = TClass::GetClass(object->ClassName());
 
  233           TIterator* iter   = p->GetListOfAllPublicMethods()->MakeIterator();
 
  234           TMethod*   method = NULL;
 
  236           for (TMethod* p; (p = (TMethod*) iter->Next()) != NULL; ) {
 
  237             if (buffer.Index(p->GetName()) != -1) {
 
  238               if (method == NULL || strlen(p->GetName()) > strlen(method->GetName())) {
 
  244           if (method == NULL) {
 
  248           for (Ssiz_t index; (index = buffer.Index(method->GetName())) != -1; ) {
 
  250             const TRegexp fp(
" *([^)]*)");   
 
  253             Ssiz_t pos = buffer.Index(fp, &len, index);
 
  257             if (pos == -1 || pos != index + (Ssiz_t) strlen(method->GetName())) {
 
  259               TMethodCall(p, method->GetName(), NULL).Execute(
object, value);
 
  261               len  = strlen(method->GetName());
 
  265               TMethodCall(p, method->GetName(), NULL).Execute(
object, TString(buffer(pos + 1, len - 2)), value);
 
  267               len += strlen(method->GetName());
 
  270             buffer.Replace(index, len, TString::Format(
"%15.5e", value));
 
  276     return TFormula(
"/tmp", buffer.Data()).Eval(0.0);
 
  296     return getResult(TString(text.c_str()), 
object);
 
  310     const char* regexp(
"p[0-9]* *=");
 
  312     TString buffer(text.c_str());
 
  314     buffer = buffer(TRegexp(regexp));
 
  315     buffer = buffer(1, buffer.Length() - 2);
 
  317     if (!buffer.IsDigit()) {
 
  321     return buffer.Atoi();
 
  341     const char* regexp(
"=.*");
 
  343     TString buffer(text.c_str());
 
  345     buffer = buffer(TRegexp(regexp));
 
  346     buffer = buffer(1, buffer.Length() - 1);
 
  348     return getResult(std::string(buffer), 
object);
 
  361       const Int_t    
first = axis->GetFirst();
 
  362       const Int_t    last  = axis->GetLast();
 
  364       const Double_t xmin  = axis->GetBinLowEdge(first);
 
  365       const Double_t xmax  = axis->GetBinLowEdge(last)  +  axis->GetBinWidth(last);
 
  367       const Int_t 
N = axis->GetNbins();
 
  368       Double_t    buffer[N+1];
 
  370       buffer[0] = TMath::Power(10.0, axis->GetBinLowEdge(1));
 
  372       for (Int_t i = 1; i <= 
N; ++i) {
 
  373         buffer[i] = TMath::Power(10.0, axis->GetBinLowEdge(i) + axis->GetBinWidth(i));
 
  376       axis->Set(N, buffer);
 
  378       if (axis->TestBit(TAxis::kAxisRange)) {
 
  379         axis->SetRangeUser(TMath::Power(10.0, xmin), TMath::Power(10.0, xmax));
 
  394     const TRegexp regexp[] = {
 
  395       TString(
"^")          + TString(parameter) + TString(
"[^a-zA-Z_]"),   
 
  396       TString(
"[^a-zA-Z_]") + TString(parameter) + TString(
"[^a-zA-Z_]"),   
 
  397       TString(
"[^a-zA-Z_]") + TString(parameter) + TString(
"$")             
 
  400     const TString replacement = TString(
"log10(") + TString(parameter) + TString(
")");
 
  402     TString buffer(formula);
 
  404     if (buffer.Length() == 1 && buffer[0] == parameter) {
 
  406       buffer = replacement;
 
  410       for (Ssiz_t pos = 0, i; pos < buffer.Length(); pos += replacement.Length()) {
 
  411         if      ((i = buffer.Index(regexp[0], pos)) != -1) { buffer.Replace((pos = i + 0), 1, replacement); }
 
  412         else if ((i = buffer.Index(regexp[1], pos)) != -1) { buffer.Replace((pos = i + 1), 1, replacement); }
 
  413         else if ((i = buffer.Index(regexp[2], pos)) != -1) { buffer.Replace((pos = i + 1), 1, replacement); }
 
  427   inline void copy(
const TF1& from, TF1& to)
 
  429     static_cast<TAttLine&
>  (to) = static_cast<const TAttLine&>  (from);
 
  430     static_cast<TAttFill&
>  (to) = static_cast<const TAttFill&>  (from);
 
  431     static_cast<TAttMarker&
>(to) = static_cast<const TAttMarker&>(from);
 
  433     to.SetParameters(from.GetParameters());
 
  435     to.SetNpx(from.GetNpx());
 
  445   inline void copy(
const TF2& from, TF2& to)
 
  447     copy(static_cast<const TF1&>(from), static_cast<TF1&>(to));
 
  449     to.SetNpy(from.GetNpy());
 
  466       fn.SetRange(f1->GetXmin(),
 
  471       f1->SetRange(TMath::Power(10.0,f1->GetXmin()),
 
  472                    TMath::Power(10.0,f1->GetXmax()));
 
  490       fn.SetRange(f2->GetXmin(),
 
  497       f2->SetRange(TMath::Power(10.0,f2->GetXmin()),
 
  499                    TMath::Power(10.0,f2->GetXmax()),
 
  518       fn.SetRange(f2->GetXmin(),
 
  525       f2->SetRange(f2->GetXmin(),
 
  526                    TMath::Power(10.0,f2->GetYmin()),
 
  528                    TMath::Power(10.0,f2->GetYmax()));
 
  542       for (TIter iter(h1->GetListOfFunctions()); TF1* f1 = 
dynamic_cast<TF1*
>(iter.Next()); ) {
 
  562       for (TIter iter(h2->GetListOfFunctions()); TF2* f2 = 
dynamic_cast<TF2*
>(iter.Next()); ) {
 
  580       for (TIter iter(h2->GetListOfFunctions()); TF2* f2 = 
dynamic_cast<TF2*
>(iter.Next()); ) {
 
  598       for (TIter iter(g1->GetListOfFunctions()); TF1* f1 = 
dynamic_cast<TF1*
>(iter.Next()); ) {
 
  602       for (Int_t i = 0; i != g1->GetN(); ++i) {
 
  603         g1->GetX()[i] = 
pow(10.0, g1->GetX()[i]);
 
  618       for (TIter iter(g2->GetListOfFunctions()); TF2* f2 = 
dynamic_cast<TF2*
>(iter.Next()); ) {
 
  622       for (Int_t i = 0; i != g2->GetN(); ++i) {
 
  623         g2->GetX()[i] = 
pow(10.0, g2->GetX()[i]);
 
  638       for (TIter iter(g2->GetListOfFunctions()); TF2* f2 = 
dynamic_cast<TF2*
>(iter.Next()); ) {
 
  642       for (Int_t i = 0; i != g2->GetN(); ++i) {
 
  643         g2->GetY()[i] = 
pow(10.0, g2->GetY()[i]);
 
  658       for (TIter i1(m1->GetListOfGraphs()); TGraph* 
g1 = 
dynamic_cast<TGraph*
>(i1()); ) {
 
  677   inline void convertToPDF(TH1& 
h1, 
const std::string& option = 
"NW", 
const double factor = 1.0)
 
  681     const bool normalise = (option.find(
'N') != string::npos || option.find(
'n') != string::npos);
 
  682     const bool bin_width = (option.find(
'W') != string::npos || option.find(
'w') != string::npos);
 
  683     const bool use_error = (option.find(
'E') != string::npos || option.find(
'e') != string::npos);
 
  691       for (Int_t i = 1; i <= h1.GetXaxis()->GetNbins(); ++i) {
 
  692         W += h1.GetBinContent(i);
 
  698       for (Int_t i = 1; i <= h1.GetXaxis()->GetNbins(); ++i) {
 
  700         const Double_t 
w = W * (bin_width ? h1.GetXaxis()->GetBinWidth(i) : 1.0);
 
  702         h1.SetBinContent(i, h1.GetBinContent(i) * factor / 
w);
 
  705           h1.SetBinError(i, h1.GetBinError(i) * factor / 
w);
 
  726   inline void convertToPDF(TH2& h2, 
const std::string& option = 
"NXYW", 
const double factor = 1.0)
 
  730     const bool normalise = (option.find(
'N') != string::npos || option.find(
'n') != string::npos);
 
  731     const bool X         = (option.find(
'X') != string::npos || option.find(
'x') != string::npos);
 
  732     const bool Y         = (option.find(
'Y') != string::npos || option.find(
'y') != string::npos);
 
  733     const bool bin_width = (option.find(
'W') != string::npos || option.find(
'w') != string::npos);
 
  734     const bool use_error = (option.find(
'E') != string::npos || option.find(
'e') != string::npos);
 
  744         for (Int_t ix = 1; ix <= h2.GetXaxis()->GetNbins(); ++ix) {
 
  745           for (Int_t iy = 1; iy <= h2.GetYaxis()->GetNbins(); ++iy) {
 
  746             W += h2.GetBinContent(ix,iy);
 
  753         for (Int_t ix = 1; ix <= h2.GetXaxis()->GetNbins(); ++ix) {
 
  754           for (Int_t iy = 1; iy <= h2.GetYaxis()->GetNbins(); ++iy) {
 
  756             const Double_t 
w = W * (bin_width ? h2.GetXaxis()->GetBinWidth(ix) * h2.GetYaxis()->GetBinWidth(iy) : 1.0);
 
  758             h2.SetBinContent(ix, iy, h2.GetBinContent(ix,iy) * factor / 
w);
 
  761               h2.SetBinError(ix, iy, h2.GetBinError(ix,iy) * factor / 
w);
 
  769       for (Int_t iy = 1; iy <= h2.GetYaxis()->GetNbins(); ++iy) {
 
  775           for (Int_t ix = 1; ix <= h2.GetXaxis()->GetNbins(); ++ix) {
 
  776             W += h2.GetBinContent(ix,iy);
 
  782           for (Int_t ix = 1; ix <= h2.GetXaxis()->GetNbins(); ++ix) {
 
  784             const Double_t 
w = W * (bin_width ? h2.GetXaxis()->GetBinWidth(ix) : 1.0);
 
  786             h2.SetBinContent(ix, iy, h2.GetBinContent(ix,iy) * factor / 
w);
 
  789               h2.SetBinError(ix, iy, h2.GetBinError(ix,iy) * factor / 
w);
 
  797       for (Int_t ix = 1; ix <= h2.GetXaxis()->GetNbins(); ++ix) {
 
  803           for (Int_t iy = 1; iy <= h2.GetYaxis()->GetNbins(); ++iy) {
 
  804             W += h2.GetBinContent(ix,iy);
 
  810           for (Int_t iy = 1; iy <= h2.GetYaxis()->GetNbins(); ++iy) {
 
  812             const Double_t 
w = W * (bin_width ? h2.GetYaxis()->GetBinWidth(iy) : 1.0);
 
  814             h2.SetBinContent(ix, iy, h2.GetBinContent(ix,iy) / 
w);
 
  817               h2.SetBinError(ix, iy, h2.GetBinError(ix,iy) / 
w);
 
  835     Double_t ymin = numeric_limits<Double_t>::max();
 
  836     Double_t ymax = numeric_limits<Double_t>::lowest();
 
  838     for (Int_t i = 0; i != g1.GetN(); ++i) {
 
  840       const Double_t y = g1.GetY()[i];
 
  842       if (y > ymax) { ymax = y; }
 
  843       if (y < ymin) { ymin = y; }
 
  860     Double_t zmin = numeric_limits<Double_t>::max();
 
  861     Double_t zmax = numeric_limits<Double_t>::lowest();
 
  863     for (Int_t i = 0; i != g2.GetN(); ++i) {
 
  865       const Double_t z = g2.GetZ()[i];
 
  867       if (z > zmax) { zmax = z; }
 
  868       if (z < zmin) { zmin = z; }
 
  892     double dx = (xmax - xmin) * 0.1;
 
  894     if (xmin > dx || xmin < 0.0)
 
  926     if (axis->GetNbins() == (int) memo.size()) {
 
  928       for (
int i = 0; i != axis->GetNbins(); ++i) {
 
  930         const JPMTPhysicalAddress& address = memo[i];
 
  932         axis->SetBinLabel(i + 1, address.toString().c_str());
 
  959     if      (axis == 
"x" || axis == 
"X") 
 
  961     else if (axis == 
"y" || axis == 
"Y") 
 
  963     else if (axis == 
"z" || axis == 
"Z") 
 
  968     if (pax->GetNbins() == (int) memo.size()) {
 
  970       for (
int i = 0; i != pax->GetNbins(); ++i) {
 
  974         pax->SetBinLabel(i + 1, address.toString().c_str());
 
  977       h1.LabelsOption(
"a", axis.c_str());       
 
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. 
 
static const char *const SAME_AS_INPUT()
Set name of output histogram to name of input histogram. 
 
void setLogarithmicX(TF1 *f1)
Make parameter x of function logarithmic (e.g. after filling with log10()). 
 
#define THROW(JException_t, A)
Marco for throwing exception with std::ostream compatible message. 
 
static const char *const Replace()
Set contents to associated function. 
 
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 set_variable FORMULA *[0] exp(-0.5 *(x-[1])*(x-[1])/([2]*[2]))*exp(-0.5 *(y-[1])*(y-[1])/([2]*[2]))" JF2 -o $WORKDIR/f2.root -F "$FORMULA" -@ "p0
 
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 filling with 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. 
 
Double_t getResult(const TString &text, TObject *object=NULL)
Get result of given textual formula. 
 
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 . 
 
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 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. 
 
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. 
 
void setLogarithmicY(TF2 *f2)
Make parameter y of function logarithmic (e.g. after filling with log10()). 
 
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 filling with 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 typeset A TRIPODS get_tripods $WORKDIR tripod txt TRIPODS for EMITTER in
 
static const char *const TIMESTAMP
Time stamp of earliest UTC time. 
 
then usage $script[input file[working directory[option]]] nWhere option can be N
 
Double_t g1(const Double_t x)
Function.