10#define ProofSimple_cxx
36ProofSimple::ProofSimple()
54ProofSimple::~ProofSimple()
66void ProofSimple::Begin(
TTree * )
76 if (fInput->FindObject(
"ProofSimple_NHist")) {
79 fNhist = (
p) ? (
Int_t)
p->GetVal() : fNhist;
80 }
else if ((iopt =
option.Index(
"nhist=")) !=
kNPOS) {
82 Ssiz_t from = iopt + strlen(
"nhist=");
86 Abort(
"fNhist must be > 0! Hint: proof->SetParameter(\"ProofSimple_NHist\","
87 " (Long_t) <nhist>)", kAbortProcess);
91 if (fInput->FindObject(
"ProofSimple_NHist3")) {
94 fNhist3 = (
p) ? (
Int_t)
p->GetVal() : fNhist3;
95 }
else if ((iopt =
option.Index(
"nhist3=")) !=
kNPOS) {
97 Ssiz_t from = iopt + strlen(
"nhist3=");
102 TNamed *nm =
dynamic_cast<TNamed *
>(fInput->FindObject(
"ProofSimple_Ntuple"));
117 if (ontp.Contains(
"|plot") || ontp ==
"plot") {
119 ontp.ReplaceAll(
"|plot",
"");
120 if (ontp ==
"plot") ontp =
"";
122 if (ontp.BeginsWith(
"dataset")) fHasNtuple = 2;
127void ProofSimple::SlaveBegin(
TTree * )
137 if (fInput->FindObject(
"ProofSimple_NHist")) {
140 fNhist = (
p) ? (
Int_t)
p->GetVal() : fNhist;
141 }
else if ((iopt =
option.Index(
"nhist=")) !=
kNPOS) {
143 Ssiz_t from = iopt + strlen(
"nhist=");
147 Abort(
"fNhist must be > 0! Hint: proof->SetParameter(\"ProofSimple_NHist\","
148 " (Long_t) <nhist>)", kAbortProcess);
151 fHist =
new TH1F*[fNhist];
155 for (
Int_t i=0; i < fNhist; i++) {
157 fHist[i] =
new TH1F(hn.
Data(), hn.
Data(), 100, -3., 3.);
158 fHist[i]->SetFillColor(
kRed);
159 fOutput->Add(fHist[i]);
163 if (fInput->FindObject(
"ProofSimple_NHist3")) {
166 fNhist3 = (
p) ? (
Int_t)
p->GetVal() : fNhist3;
167 }
else if ((iopt =
option.Index(
"nhist3=")) !=
kNPOS) {
169 Ssiz_t from = iopt + strlen(
"nhist3=");
173 fHist3 =
new TH3F*[fNhist3];
174 Info(
"Begin",
"%d 3D histograms requested", fNhist3);
176 for (
Int_t i=0; i < fNhist3; i++) {
179 100, -3., 3., 100, -3., 3., 100, -3., 3.);
180 fOutput->Add(fHist3[i]);
185 if (fInput->FindObject(
"ProofSimple_TestLabelMerging")) {
186 fHLab =
new TH1F(
"hlab",
"Test merging of histograms with automatic labels", 10, 0., 10.);
191 TNamed *nm =
dynamic_cast<TNamed *
>(fInput->FindObject(
"ProofSimple_Ntuple"));
206 if (ontp.Contains(
"|plot") || ontp ==
"plot") {
208 ontp.ReplaceAll(
"|plot",
"");
209 if (ontp ==
"plot") ontp =
"";
211 TString locfn(
"SimpleNtuple.root");
212 if (ontp.BeginsWith(
"merge")) {
213 ontp.Replace(0,5,
"");
218 fProofFile->SetRetrieve(
kTRUE);
220 if ((iret = ontp.Index(
"|retrieve=")) !=
kNPOS) {
222 fn = ontp(iret + rettag.Length(), ontp.Length() - iret - rettag.Length());
229 if (iof !=
kNPOS) ontp.Remove(0, iof + 1);
230 if (!ontp.IsNull()) {
231 fProofFile->SetOutputFileName(ontp.Data());
234 if (fn.
IsNull()) fn = locfn;
236 fProofFile->SetTitle(fn);
237 }
else if (ontp.BeginsWith(
"dataset")) {
240 if (iof !=
kNPOS) ontp.Remove(0, iof + 1);
241 TString dsname = (!ontp.IsNull()) ? ontp.
Data() :
"dataset_ntuple";
246 }
else if (!ontp.IsNull()) {
247 Warning(
"SlaveBegin",
"ntuple options unknown: ignored (%s)", ontp.Data());
253 fFile = fProofFile->OpenFile(
"RECREATE");
254 if (fFile && fFile->IsZombie())
SafeDelete(fFile);
258 Info(
"SlaveBegin",
"could not create '%s': instance is invalid!", fProofFile->GetName());
264 fNtp =
new TNtuple(
"ntuple",
"Demo ntuple",
"px:py:pz:random:i");
267 fNtp->SetDirectory(fFile);
299 for (
Int_t i=0; i < fNhist; i++) {
300 if (fRandom && fHist[i]) {
305 for (
Int_t i=0; i < fNhist3; i++) {
306 if (fRandom && fHist3[i]) {
308 fHist3[i]->Fill(
x,
x,
x);
311 if (fHLab && fRandom) {
314 fRandom->RndmArray(10, rr);
315 for (
Int_t i=0; i < 10; i++) {
324 if (fNtp) FillNtuple(entry);
330void ProofSimple::FillNtuple(
Long64_t entry)
355 fRandom->Rannor(px,py);
356 random = fRandom->Rndm();
358 Abort(
"no way to get random numbers! Stop processing", kAbortProcess);
363 fNtp->Fill(px,py,pz,random,i);
370void ProofSimple::SlaveTerminate()
379 Error(
"SlaveTerminate",
"'ntuple' is undefined!");
384 if (fNtp->GetEntries() > 0) {
388 fOutput->Add(fProofFile);
392 fNtp->SetDirectory(
nullptr);
397 TUrl uf(*(fFile->GetEndpointUrl()));
406void ProofSimple::Terminate()
420 c1 =
new TCanvas(
"c1",
"Proof ProofSimple canvas",200,10,700,700);
422 nside = (nside*nside < fNhist) ? nside+1 : nside;
423 c1->Divide(nside,nside,0,0);
427 for (
Int_t i=0; i < fNhist; i++) {
438 if (tryfc && GetHistosFromFC(
c1) != 0) {
439 Warning(
"Terminate",
"histograms not found");
447 if (fHLab && !
gROOT->IsBatch()) {
449 Int_t nb = fHLab->GetNbinsX();
451 Double_t entb = fHLab->GetEntries() / nb;
453 for (
Int_t i = 0; i < nb; i++) {
455 Int_t ib = fHLab->GetXaxis()->FindBin(lab);
456 Info(
"Terminate",
" %s [%d]:\t%f", lab.
Data(), ib, fHLab->GetBinContent(ib)/entb);
459 Warning(
"Terminate",
"no entries in the hlab histogram!");
464 if (fHasNtuple != 1 || !fPlotNtuple)
return;
469 dynamic_cast<TProofOutputFile*
>(fOutput->FindObject(
"SimpleNtuple.root")))) {
471 TString outputFile(fProofFile->GetOutputFileName());
472 TString outputName(fProofFile->GetName());
473 outputName +=
".root";
474 Printf(
"outputFile: %s", outputFile.Data());
479 Printf(
"Managed to open file: %s", outputFile.Data());
480 fNtp = (
TNtuple *) fFile->Get(
"ntuple");
482 Error(
"Terminate",
"could not open file: %s", outputFile.Data());
487 Error(
"Terminate",
"TProofOutputFile not found");
492 if (fNtp) PlotNtuple(fNtp,
"proof ntuple");
496void ProofSimple::PlotNtuple(
TNtuple *ntp,
const char *ntptitle)
517 ntp->
Draw(
"3*px+2",
"px**2+py**2>1");
519 ntp->
Draw(
"2*px+2",
"pz>2",
"same");
521 ntp->
Draw(
"1.3*px+2",
"(px^2+py^2>4) && py>0",
"same");
527 ntp->
Draw(
"pz:py:px",
"(pz<10 && pz>6)+(pz<4 && pz>3)");
529 ntp->
Draw(
"pz:py:px",
"pz<6 && pz>4",
"same");
531 ntp->
Draw(
"pz:py:px",
"pz<4 && pz>3",
"same");
535 l2->
AddText(
"You can interactively rotate this view in 2 ways:");
536 l2->
AddText(
" - With the RotateCube in clicking in this pad");
537 l2->
AddText(
" - Selecting View with x3d in the View menu");
554 if (strcmp(fc->
ClassName(),
"TFileCollection"))
continue;
557 fHist =
new TH1F*[fNhist];
558 for (
Int_t i = 0; i < fNhist; i++) { fHist[i] =
nullptr; }
568 for (
Int_t i = 0; i < fNhist; i++) {
575 fHist[i]->SetDirectory(
nullptr);
580 Error(
"GetHistosFromFC",
"histo '%s' not found in file '%s'",
591 if (!fc_found)
return -1;
592 if (!hs_found)
return -1;
594 for (
Int_t i = 0; i < fNhist; i++) {
597 fHist[i]->DrawCopy();
600 Info(
"GetHistosFromFC",
"histograms read from %d files in TFileCollection '%s'",
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 composed of a header, followed by consecutive data records (TKey instances) with a wel...
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.