Selector to fill a set of histograms. 
 
#define ProofSimple_cxx
 
#include <TFormula.h>
 
ProofSimple::ProofSimple()
{
   
 
   fNhist = -1;
   fHist = 0;
   fNhist3 = -1;
   fHist3 = 0;
   fRandom = 0;
   fHLab = 0;
   fFile = 0;
   fProofFile = 0;
   fNtp = 0;
   fHasNtuple = 0;
}
 
ProofSimple::~ProofSimple()
{
   
 
   if (fFile) {
   }
}
 
void ProofSimple::Begin(
TTree * )
 
{
   
   
   
 
 
   
   if (fInput->FindObject("ProofSimple_NHist")) {
      fNhist = (
p) ? (
Int_t) 
p->GetVal() : fNhist;
 
      Ssiz_t from = iopt + strlen(
"nhist=");
 
   }
   if (fNhist < 1) {
      Abort("fNhist must be > 0! Hint: proof->SetParameter(\"ProofSimple_NHist\","
            " (Long_t) <nhist>)", kAbortProcess);
      return;
   }
 
   if (fInput->FindObject("ProofSimple_NHist3")) {
      fNhist3 = (
p) ? (
Int_t) 
p->GetVal() : fNhist3;
 
   } 
else if ((iopt = 
option.Index(
"nhist3=")) != 
kNPOS) {
 
      Ssiz_t from = iopt + strlen(
"nhist3=");
 
   }
 
   
   TNamed *nm = 
dynamic_cast<TNamed *
>(fInput->FindObject(
"ProofSimple_Ntuple"));
 
   if (nm) {
 
      
      
      
      
      
      
      
      
 
      fHasNtuple = 1;
 
      if (ontp.Contains("|plot") || ontp == "plot") {
         ontp.ReplaceAll("|plot", "");
         if (ontp == "plot") ontp = "";
      }
      if (ontp.BeginsWith("dataset")) fHasNtuple = 2;
   }
}
 
void ProofSimple::SlaveBegin(
TTree * )
 
{
   
   
   
 
 
   
   if (fInput->FindObject("ProofSimple_NHist")) {
      fNhist = (
p) ? (
Int_t) 
p->GetVal() : fNhist;
 
      Ssiz_t from = iopt + strlen(
"nhist=");
 
   }
   if (fNhist < 1) {
      Abort("fNhist must be > 0! Hint: proof->SetParameter(\"ProofSimple_NHist\","
            " (Long_t) <nhist>)", kAbortProcess);
      return;
   }
   fHist = 
new TH1F*[fNhist];
 
 
   
   for (
Int_t i=0; i < fNhist; i++) {
 
      fHist[i]->SetFillColor(
kRed);
 
      fOutput->Add(fHist[i]);
   }
 
   
   if (fInput->FindObject("ProofSimple_NHist3")) {
      fNhist3 = (
p) ? (
Int_t) 
p->GetVal() : fNhist3;
 
   } 
else if ((iopt = 
option.Index(
"nhist3=")) != 
kNPOS) {
 
      Ssiz_t from = iopt + strlen(
"nhist3=");
 
   }
   if (fNhist3 > 0) {
      fHist3 = 
new TH3F*[fNhist3];
 
      Info(
"Begin", 
"%d 3D histograms requested", fNhist3);
 
      
      for (
Int_t i=0; i < fNhist3; i++) {
 
                              100, -3., 3., 100, -3., 3., 100, -3., 3.);
         fOutput->Add(fHist3[i]);
      }
   }
 
   
   if (fInput->FindObject("ProofSimple_TestLabelMerging")) {
      fHLab = 
new TH1F(
"hlab", 
"Test merging of histograms with automatic labels", 10, 0., 10.);
 
      fOutput->Add(fHLab);
   }
 
   
   TNamed *nm = 
dynamic_cast<TNamed *
>(fInput->FindObject(
"ProofSimple_Ntuple"));
 
   if (nm) {
 
      
      
      
      
      
      
      
      
 
      fHasNtuple = 1;
 
      if (ontp.Contains("|plot") || ontp == "plot") {
         ontp.ReplaceAll("|plot", "");
         if (ontp == "plot") ontp = "";
      }
      TString locfn(
"SimpleNtuple.root");
 
      if (ontp.BeginsWith("merge")) {
         ontp.Replace(0,5,"");
            fProofFile->SetRetrieve(
kTRUE);
 
            if ((iret = ontp.Index(
"|retrieve=")) != 
kNPOS) {
 
               rettag += "=";
               fn = ontp(iret + rettag.Length(), ontp.Length() - iret - rettag.Length());
               rettag += fn;
            }
         }
         if (iof != 
kNPOS) ontp.Remove(0, iof + 1);
 
         if (!ontp.IsNull()) {
            fProofFile->SetOutputFileName(ontp.Data());
         }
         
         fProofFile->SetTitle(fn);
      } else if (ontp.BeginsWith("dataset")) {
         if (iof != 
kNPOS) ontp.Remove(0, iof + 1);
 
         TString dsname = (!ontp.IsNull()) ? ontp.
Data() : 
"dataset_ntuple";
 
         fHasNtuple = 2;
      } else if (!ontp.IsNull()) {
         Warning(
"SlaveBegin", 
"ntuple options unknown: ignored (%s)", ontp.Data());
 
      }
 
      
      if (fProofFile) {
         
         fFile = fProofFile->OpenFile("RECREATE");
         if (fFile && fFile->IsZombie()) 
SafeDelete(fFile);
 
 
         
         if (!fFile) {
            Info(
"SlaveBegin", 
"could not create '%s': instance is invalid!", fProofFile->GetName());
 
            return;
         }
      }
 
      
      fNtp = 
new TNtuple(
"ntuple",
"Demo ntuple",
"px:py:pz:random:i");
 
      
      if (fFile) {
         fNtp->SetDirectory(fFile);
         fNtp->AutoSave();
      } else {
         fOutput->Add(fNtp);
      }
   }
 
   
}
 
{
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 
   for (
Int_t i=0; i < fNhist; i++) {
 
      if (fRandom && fHist[i]) {
      }
   }
   for (
Int_t i=0; i < fNhist3; i++) {
 
      if (fRandom && fHist3[i]) {
      }
   }
   if (fHLab && fRandom) {
      fRandom->RndmArray(10, rr);
      for (
Int_t i=0; i < 10; i++) {
 
      }
      }
   }
   if (fNtp) FillNtuple(entry);
 
}
 
void ProofSimple::FillNtuple(
Long64_t entry)
 
{
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 
   if (!fNtp) return;
 
   
   if (fRandom) {
      fRandom->Rannor(px,py);
      random = fRandom->Rndm();
   } else {
      Abort("no way to get random numbers! Stop processing", kAbortProcess);
      return;
   }
   fNtp->Fill(px,py,pz,random,i);
 
   return;
}
 
 
void ProofSimple::SlaveTerminate()
{
   
   
   
 
   
   if (fFile) {
      if (!fNtp) {
         Error(
"SlaveTerminate", 
"'ntuple' is undefined!");
 
         return;
      }
      if (fNtp->GetEntries() > 0) {
         fNtp->Write();
         fProofFile->Print();
         fOutput->Add(fProofFile);
      } else {
      }
      fNtp->SetDirectory(0);
      
         TUrl uf(*(fFile->GetEndpointUrl()));
 
      }
   }
}
 
void ProofSimple::Terminate()
{
   
   
   
 
   
   
   
   }
   c1 = 
new TCanvas(
"c1",
"Proof ProofSimple canvas",200,10,700,700);
 
   nside = (nside*nside < fNhist) ? nside+1 : nside;
   c1->Divide(nside,nside,0,0);
 
 
   for (
Int_t i=0; i < fNhist; i++) {
 
         
         break;
      }
   }
 
   
   if (tryfc && GetHistosFromFC(
c1) != 0) {
 
      Warning(
"Terminate", 
"histograms not found");
 
   } else {
      
   }
 
   
   if (fHLab && !
gROOT->IsBatch()) {
 
      
      Int_t nb = fHLab->GetNbinsX();
 
      if (nb > 0) {
         Double_t entb = fHLab->GetEntries() / nb;
 
         if (entb) {
            for (
Int_t i = 0; i < nb; i++) {
 
               Int_t ib = fHLab->GetXaxis()->FindBin(lab);
 
               Info(
"Terminate",
"  %s [%d]:\t%f", lab.
Data(), ib, fHLab->GetBinContent(ib)/entb);
 
            }
         } else
            Warning(
"Terminate", 
"no entries in the hlab histogram!");
 
      }
   }
 
   
   if (fHasNtuple != 1 || !fPlotNtuple) return;
 
      
      if ((fProofFile =
 
         TString outputFile(fProofFile->GetOutputFileName());
 
         TString outputName(fProofFile->GetName());
 
         outputName += ".root";
         Printf(
"outputFile: %s", outputFile.Data());
 
 
         
         if (fFile) {
            Printf(
"Managed to open file: %s", outputFile.Data());
 
            fNtp = (
TNtuple *) fFile->Get(
"ntuple");
 
         } else {
            Error(
"Terminate", 
"could not open file: %s", outputFile.Data());
 
         }
         if (!fFile) return;
 
      } else {
         Error(
"Terminate", 
"TProofOutputFile not found");
 
         return;
      }
   }
   
   if (fNtp) PlotNtuple(fNtp, "proof ntuple");
}
 
void ProofSimple::PlotNtuple(
TNtuple *ntp, 
const char *ntptitle)
 
{
   
 
   
   
   
   
   
   
   ntp->
Draw(
"3*px+2",
"px**2+py**2>1");
 
   ntp->
Draw(
"2*px+2",
"pz>2",
"same");
 
   ntp->
Draw(
"1.3*px+2",
"(px^2+py^2>4) && py>0",
"same");
 
 
   
   
   ntp->
Draw(
"pz:py:px",
"(pz<10 && pz>6)+(pz<4 && pz>3)");
 
   ntp->
Draw(
"pz:py:px",
"pz<6 && pz>4",
"same");
 
   ntp->
Draw(
"pz:py:px",
"pz<4 && pz>3",
"same");
 
   l2->
AddText(
"You can interactively rotate this view in 2 ways:");
 
   l2->
AddText(
"  - With the RotateCube in clicking in this pad");
 
   l2->
AddText(
"  - Selecting View with x3d in the View menu");
 
 
   
}
 
{
   
 
      if (strcmp(fc->
ClassName(), 
"TFileCollection")) 
continue;
 
      if (!fHist) {
         fHist = 
new TH1F*[fNhist];
 
         for (
Int_t i = 0; i < fNhist; i++) { fHist[i] = 0; }
 
      } else {
      }
      
            for (
Int_t i = 0; i < fNhist; i++) {
 
                  if (!fHist[i]) {
                     fHist[i]->SetDirectory(0);
                  } else {
                  }
               } else {
                  Error(
"GetHistosFromFC", 
"histo '%s' not found in file '%s'",
 
               }
            }
         } else {
         }
      }
      if (hs_found) break;
   }
   if (!fc_found) return -1;
   if (!hs_found) return -1;
 
   for (
Int_t i = 0; i < fNhist; i++) {
 
      if (fHist[i]) {
         fHist[i]->DrawCopy();
      }
   }
   Info(
"GetHistosFromFC", 
"histograms read from %d files in TFileCollection '%s'",
 
   
   return 0;
}
Selector to fill a set of histograms.
 
void Info(const char *location, const char *msgfmt,...)
Use this function for informational messages.
 
void Error(const char *location, const char *msgfmt,...)
Use this function in case an error occurred.
 
void Warning(const char *location, const char *msgfmt,...)
Use this function in warning situations.
 
winID h TVirtualViewer3D TVirtualGLPainter p
 
char * Form(const char *fmt,...)
Formats a string in a circular formatting buffer.
 
void Printf(const char *fmt,...)
Formats a string in a circular formatting buffer and prints the string.
 
R__EXTERN TSystem * gSystem
 
virtual void SetFillColor(Color_t fcolor)
Set the fill area color.
 
virtual void SetFillStyle(Style_t fstyle)
Set the fill area style.
 
virtual void SetLineColor(Color_t lcolor)
Set the line color.
 
virtual void SetMarkerColor(Color_t mcolor=1)
Set the marker color.
 
virtual void SetTextAlign(Short_t align=11)
Set the text alignment.
 
TVirtualPad * cd(Int_t subpadnumber=0) override
Set current canvas & pad.
 
virtual Int_t GetSize() const
Return the capacity of the collection, i.e.
 
Describe directory structure in memory.
 
virtual void Close(Option_t *option="")
Delete all objects from memory and directory structure itself.
 
virtual Bool_t cd()
Change current directory to "this" directory.
 
Class that contains a list of TFileInfo's and accumulated meta data information about its entries.
 
Class describing a generic file including meta information.
 
TUrl * GetCurrentUrl() const
Return the current url.
 
A ROOT file is a suite of consecutive data records (TKey instances) with a well defined format.
 
static TFile * Open(const char *name, Option_t *option="", const char *ftitle="", Int_t compress=ROOT::RCompressionSetting::EDefaults::kUseCompiledDefault, Int_t netopt=0)
Create / open a file.
 
1-D histogram with a float per channel (see TH1 documentation)}
 
virtual TH1 * DrawCopy(Option_t *option="", const char *name_postfix="_copy") const
Copy this histogram and Draw in the current pad.
 
TObject * Clone(const char *newname="") const override
Make a complete copy of the underlying object.
 
3-D histogram with a float per channel (see TH1 documentation)}
 
The TNamed class is the base class for all named ROOT classes.
 
const char * GetName() const override
Returns name of object.
 
const char * GetTitle() const override
Returns title of object.
 
A simple TTree restricted to a list of float variables only.
 
virtual const char * ClassName() const
Returns name of class to which the object belongs.
 
The most important graphics class in the ROOT system.
 
void SetGrid(Int_t valuex=1, Int_t valuey=1) override
 
void SetLogy(Int_t value=1) override
Set Lin/Log scale for Y.
 
void RedrawAxis(Option_t *option="") override
Redraw the frame axis.
 
TObject * FindObject(const char *name) const override
Search if object named name is inside this pad or in pads inside this pad.
 
TVirtualPad * cd(Int_t subpadnumber=0) override
Set Current pad.
 
TFrame * GetFrame() override
Get frame.
 
TVirtualPad * GetPad(Int_t subpadnumber) const override
Get a pointer to subpadnumber of this pad.
 
Named parameter, streamable and storable.
 
const AParamType & GetVal() const
 
A Pave (see TPave) with text, lines or/and boxes inside.
 
virtual TText * AddText(Double_t x1, Double_t y1, const char *label)
Add a new Text line to this pavetext at given coordinates.
 
void Draw(Option_t *option="") override
Draw this pavetext with its current attributes.
 
Class to steer the merging of files produced on the workers.
 
TObject * GetOutput(const char *name)
Get specified object that has been produced during the processing (see Process()).
 
Random number generator class based on M.
 
A sorted doubly linked list.
 
void Add(TObject *obj) override
Add object in sorted list.
 
Int_t Atoi() const
Return integer value of string.
 
TString & Replace(Ssiz_t pos, Ssiz_t n, const char *s)
 
const char * Data() const
 
Bool_t IsDigit() const
Returns true if all characters in string are digits (0-9) or white spaces, i.e.
 
TString & ReplaceAll(const TString &s1, const TString &s2)
 
TString & Remove(Ssiz_t pos)
 
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString.
 
void Form(const char *fmt,...)
Formats a string using a printf style format descriptor.
 
Ssiz_t Index(const char *pat, Ssiz_t i=0, ECaseCompare cmp=kExact) const
 
virtual const char * BaseName(const char *pathname)
Base name of a file name. Base name of /user/root is root.
 
virtual int Unlink(const char *name)
Unlink, i.e.
 
A TTree represents a columnar dataset.
 
void Draw(Option_t *opt) override
Default Draw method for all objects.
 
This class represents a WWW compatible URL.
 
const char * GetUrl(Bool_t withDeflt=kFALSE) const
Return full URL.
 
const char * GetFile() const
 
Double_t Sqrt(Double_t x)
Returns the square root of x.