59 Int_t DrawCanvas(TObject *obj)
63 if (TCanvas* c = dynamic_cast<TCanvas *> (obj)) {
75 Int_t GetDrawArgs(
const char *var,
const char *sel, Option_t *opt,
76 TString &selector, TString &objname)
80 TTreeDrawArgsParser info;
81 info.Parse(var, sel, opt);
82 selector = info.GetProofSelectorName();
83 objname = info.GetObjectName();
92 void FeedBackCanvas(
const char *name, Bool_t create)
97 new TCanvas(name,
"FeedBack", 800,30,700,500);
99 TCanvas *c = (gROOT->GetListOfCanvases()) ?
100 (TCanvas *) gROOT->GetListOfCanvases()->FindObject(name) : 0;
108 ClassImp(TProofDraw);
113 TProofDraw::TProofDraw()
114 : fStatus(0), fManager(0), fTree(0)
132 TProofDraw::~TProofDraw()
141 void TProofDraw::Init(TTree *tree)
143 PDB(kDraw,1) Info("Init","Enter tree = %p", tree);
152 Bool_t TProofDraw::Notify()
154 PDB(kDraw,1) Info("Notify","Enter");
156 if (!fOutput || (fOutput &&
157 !(fStatus = dynamic_cast<TStatus*>(fOutput->FindObject(
"PROOF_Status")))))
160 if (!fStatus->IsOk())
return kFALSE;
162 fAbort = TSelector::kAbortProcess;
165 fManager->UpdateFormulaLeaves();
172 void TProofDraw::Begin(TTree *tree)
174 PDB(kDraw,1) Info("Begin","Enter tree = %p", tree);
176 TObject *os = fInput->FindObject("selection");
177 TObject *ov = fInput->FindObject("varexp");
180 fSelection = os->GetTitle();
181 fInitialExp = ov->GetTitle();
182 fTreeDrawArgsParser.Parse(fInitialExp, fSelection, fOption);
183 if (fTreeDrawArgsParser.GetObjectName() ==
"")
184 fTreeDrawArgsParser.SetObjectName(
"htemp");
187 PDB(kDraw,1) Info("Begin","selection: %s", fSelection.Data());
188 PDB(kDraw,1) Info("Begin","varexp: %s", fInitialExp.Data());
196 void TProofDraw::SlaveBegin(TTree* )
199 TProofDraw::FillWeight();
205 void TProofDraw::FillWeight()
208 if (TProof::GetParameter(fInput,
"PROOF_ChainWeight", ww) == 0)
210 PDB(kDraw,1) Info("FillWeight","fWeight= %f", fWeight);
217 Bool_t TProofDraw::ProcessSingle(Long64_t entry, Int_t i)
223 w = fWeight * fSelect->EvalInstance(i);
227 PDB(kDraw,3) Info("ProcessSingle","w[%d] = %f", i, w);
230 R__ASSERT(fDimension <= TTreeDrawArgsParser::GetMaxDimension());
231 for (
int j = 0; j < fDimension; j++)
232 v[j] = fVar[j]->EvalInstance(i);
234 PDB(kDraw,4) Info("Process","v[0] = %f", v[0]);
244 Bool_t TProofDraw::Process(Long64_t entry)
246 PDB(kDraw,3) Info("Process", "enter entry = %lld", entry);
248 fTree->LoadTree(entry);
249 Int_t ndata = fManager->GetNdata();
251 PDB(kDraw,3) Info("Process","ndata = %d", ndata);
253 for (Int_t i=0;i<ndata;i++) {
254 ProcessSingle(entry, i);
264 void TProofDraw::SlaveTerminate(
void)
266 PDB(kDraw,1) Info("SlaveTerminate","Enter");
273 void TProofDraw::Terminate(
void)
275 PDB(kDraw,1) Info("Terminate","Enter");
277 fStatus =
dynamic_cast<TStatus*
>(fOutput->FindObject(
"PROOF_Status"));
284 if (!fStatus->IsOk()) {
294 void TProofDraw::ClearFormula()
297 for (Int_t i = 0; i < 4; i++)
310 void TProofDraw::SetCanvas(
const char *objname)
312 TString name = objname;
314 gROOT->MakeDefCanvas();
316 PDB(kDraw,2) Info("SetCanvas", "created canvas %s", name.Data());
319 Info("SetCanvas", "using canvas %s", gPad->GetName());
326 void TProofDraw::SetDrawAtt(TObject *o)
329 PDB(kDraw,2) Info("SetDrawAtt", "setting attributes for %s", o->GetName());
332 TAttLine *al = dynamic_cast<TAttLine *> (o);
335 if (TProof::GetParameter(fInput,
"PROOF_LineColor", att) == 0)
336 al->SetLineColor((Color_t)att);
338 if (TProof::GetParameter(fInput,
"PROOF_LineStyle", att) == 0)
339 al->SetLineStyle((Style_t)att);
341 if (TProof::GetParameter(fInput,
"PROOF_LineWidth", att) == 0)
342 al->SetLineWidth((Width_t)att);
343 PDB(kDraw,2) Info("SetDrawAtt", "line: c:%d, s:%d, wd:%d",
344 al->GetLineColor(), al->GetLineStyle(), al->GetLineWidth());
348 TAttMarker *am = dynamic_cast<TAttMarker *> (o);
351 if (TProof::GetParameter(fInput,
"PROOF_MarkerColor", att) == 0)
352 am->SetMarkerColor((Color_t)att);
354 if (TProof::GetParameter(fInput,
"PROOF_MarkerSize", att) == 0) {
355 Info(
"SetDrawAtt",
"att: %d", att);
356 Float_t msz = (Float_t)att / 1000.;
357 am->SetMarkerSize((Size_t)msz);
360 if (TProof::GetParameter(fInput,
"PROOF_MarkerStyle", att) == 0)
361 am->SetMarkerStyle((Style_t)att);
362 PDB(kDraw,2) Info("SetDrawAtt", "marker: c:%d, s:%d, sz:%f",
363 am->GetMarkerColor(), am->GetMarkerStyle(), am->GetMarkerSize());
367 TAttFill *af = dynamic_cast<TAttFill *> (o);
370 if (TProof::GetParameter(fInput,
"PROOF_FillColor", att) == 0)
371 af->SetFillColor((Color_t)att);
373 if (TProof::GetParameter(fInput,
"PROOF_FillStyle", att) == 0)
374 af->SetFillStyle((Style_t)att);
375 PDB(kDraw,2) Info("SetDrawAtt", "area: c:%d, s:%d",
376 af->GetFillColor(), af->GetFillStyle());
383 void TProofDraw::SetError(const
char *sub, const
char *mesg)
386 if (!(fStatus = dynamic_cast<TStatus*>(fOutput->FindObject(
"PROOF_Status"))))
392 m.Form(
"%s::%s: %s", IsA()->GetName(), sub, mesg);
394 m.Form(
"TProofDraw::%s: %s", sub, mesg);
403 Bool_t TProofDraw::CompileVariables()
406 TNamed *nms = (TNamed *) fInput->FindObject(
"PROOF_ListOfAliases");
408 TString names = nms->GetTitle(), n, na;
410 while(names.Tokenize(n, from,
",")) {
412 na.Form(
"alias:%s", n.Data());
413 TNamed *nm = (TNamed *) fInput->FindObject(na);
414 if (na) fTree->SetAlias(n.Data(), nm->GetTitle());
419 if (fTree->GetListOfAliases()) fTree->GetListOfAliases()->Print();
421 fDimension = fTreeDrawArgsParser.GetDimension();
424 if (strlen(fTreeDrawArgsParser.GetSelection())) {
425 fSelect =
new TTreeFormula(
"Selection", fTreeDrawArgsParser.GetSelection(), fTree);
426 fSelect->SetQuickLoad(kTRUE);
427 if (!fSelect->GetNdim()) {
delete fSelect; fSelect = 0;
return kFALSE; }
430 fManager =
new TTreeFormulaManager();
431 if (fSelect) fManager->Add(fSelect);
432 fTree->ResetBit(TTree::kForceRead);
434 for (
int i = 0; i < fDimension; i++) {
435 fVar[i] =
new TTreeFormula(Form(
"Var%d", i),fTreeDrawArgsParser.GetVarExp(i),fTree);
436 fVar[i]->SetQuickLoad(kTRUE);
437 if (!fVar[i]->GetNdim()) {
439 Error(
"CompileVariables",
"Error compiling expression");
440 SetError(
"CompileVariables",
"Error compiling variables");
444 fManager->Add(fVar[i]);
448 if (fManager->GetMultiplicity()==-1) fTree->SetBit(TTree::kForceRead);
449 if (fManager->GetMultiplicity()>=1) fMultiplicity = fManager->GetMultiplicity();
456 TClass *cl = fVar[0]->EvalClass();
466 ClassImp(TProofDrawHist);
472 void TProofDrawHist::Begin1D(TTree *)
474 R__ASSERT(fTreeDrawArgsParser.GetDimension() == 1);
475 TObject* orig = fTreeDrawArgsParser.GetOriginal();
477 if (fTreeDrawArgsParser.GetNoParameters() == 0 && (hold =
dynamic_cast<TH1*
> (orig))) {
490 void TProofDrawHist::Begin2D(TTree *)
492 R__ASSERT(fTreeDrawArgsParser.GetDimension() == 2);
493 TObject* orig = fTreeDrawArgsParser.GetOriginal();
495 if (fTreeDrawArgsParser.GetNoParameters() == 0 && (hold =
dynamic_cast<TH2*
> (orig))) {
508 void TProofDrawHist::Begin3D(TTree *)
510 R__ASSERT(fTreeDrawArgsParser.GetDimension() == 3);
511 TObject* orig = fTreeDrawArgsParser.GetOriginal();
513 if ((hold = dynamic_cast<TH3*> (orig)) && fTreeDrawArgsParser.GetNoParameters() == 0) {
525 void TProofDrawHist::Begin(TTree *tree)
527 PDB(kDraw,1) Info("Begin","Enter tree = %p", tree);
529 TObject *os = fInput->FindObject("selection");
530 TObject *ov = fInput->FindObject("varexp");
533 fSelection = os->GetTitle();
534 fInitialExp = ov->GetTitle();
536 fTreeDrawArgsParser.Parse(fInitialExp, fSelection, fOption);
537 if (fTreeDrawArgsParser.GetObjectName() ==
"")
538 fTreeDrawArgsParser.SetObjectName(
"htemp");
540 switch (fTreeDrawArgsParser.GetDimension()) {
551 Error(
"Begin",
"Wrong dimension");
555 PDB(kDraw,1) Info("Begin","selection: %s", fSelection.Data());
556 PDB(kDraw,1) Info("Begin","varexp: %s", fInitialExp.Data());
563 void TProofDrawHist::DefVar1D()
565 R__ASSERT(fTreeDrawArgsParser.GetDimension() == 1);
567 fTreeDrawArgsParser.SetOriginal(0);
568 TString exp = fTreeDrawArgsParser.GetVarExp();
570 double binsx, minx, maxx;
571 if (fTreeDrawArgsParser.IsSpecified(0))
572 gEnv->SetValue(
"Hist.Binning.1D.x", fTreeDrawArgsParser.GetParameter(0));
573 binsx = gEnv->GetValue(
"Hist.Binning.1D.x",100);
574 minx = fTreeDrawArgsParser.GetIfSpecified(1, 0);
575 maxx = fTreeDrawArgsParser.GetIfSpecified(2, 0);
576 exp += fTreeDrawArgsParser.GetObjectName();
586 TNamed *n =
dynamic_cast<TNamed*
> (fInput->FindObject(
"varexp"));
590 Error(
"DefVar1D",
"Cannot find varexp on the fInput");
591 if (fTreeDrawArgsParser.GetNoParameters() != 3)
592 fInput->Add(
new TNamed(
"PROOF_OPTIONS",
"rebin"));
598 void TProofDrawHist::DefVar2D()
600 R__ASSERT(fTreeDrawArgsParser.GetDimension() == 2);
602 fTreeDrawArgsParser.SetOriginal(0);
603 TString exp = fTreeDrawArgsParser.GetVarExp();
605 double binsx, minx, maxx;
606 double binsy, miny, maxy;
607 if (fTreeDrawArgsParser.IsSpecified(0))
608 gEnv->SetValue(
"Hist.Binning.2D.x", fTreeDrawArgsParser.GetParameter(0));
609 if (fTreeDrawArgsParser.IsSpecified(3))
610 gEnv->SetValue(
"Hist.Binning.2D.y", fTreeDrawArgsParser.GetParameter(3));
611 binsx = gEnv->GetValue(
"Hist.Binning.2D.x",100);
612 minx = fTreeDrawArgsParser.GetIfSpecified(1, 0);
613 maxx = fTreeDrawArgsParser.GetIfSpecified(2, 0);
614 binsy = gEnv->GetValue(
"Hist.Binning.2D.y",100);
615 miny = fTreeDrawArgsParser.GetIfSpecified(4, 0);
616 maxy = fTreeDrawArgsParser.GetIfSpecified(5, 0);
617 exp += fTreeDrawArgsParser.GetObjectName();
632 TNamed *n =
dynamic_cast<TNamed*
> (fInput->FindObject(
"varexp"));
636 Error(
"DefVar2D",
"Cannot find varexp on the fInput");
637 if (fTreeDrawArgsParser.GetNoParameters() != 6)
638 fInput->Add(
new TNamed(
"PROOF_OPTIONS",
"rebin"));
644 void TProofDrawHist::DefVar3D()
646 R__ASSERT(fTreeDrawArgsParser.GetDimension() == 3);
648 fTreeDrawArgsParser.SetOriginal(0);
649 TString exp = fTreeDrawArgsParser.GetVarExp();
651 double binsx, minx, maxx;
652 double binsy, miny, maxy;
653 double binsz, minz, maxz;
654 if (fTreeDrawArgsParser.IsSpecified(0))
655 gEnv->SetValue(
"Hist.Binning.3D.x", fTreeDrawArgsParser.GetParameter(0));
656 if (fTreeDrawArgsParser.IsSpecified(3))
657 gEnv->SetValue(
"Hist.Binning.3D.y", fTreeDrawArgsParser.GetParameter(3));
658 if (fTreeDrawArgsParser.IsSpecified(6))
659 gEnv->SetValue(
"Hist.Binning.3D.z", fTreeDrawArgsParser.GetParameter(6));
660 binsx = gEnv->GetValue(
"Hist.Binning.3D.x",100);
661 minx = fTreeDrawArgsParser.GetIfSpecified(1, 0);
662 maxx = fTreeDrawArgsParser.GetIfSpecified(2, 0);
663 binsy = gEnv->GetValue(
"Hist.Binning.3D.y",100);
664 miny = fTreeDrawArgsParser.GetIfSpecified(4, 0);
665 maxy = fTreeDrawArgsParser.GetIfSpecified(5, 0);
666 binsz = gEnv->GetValue(
"Hist.Binning.3D.z",100);
667 minz = fTreeDrawArgsParser.GetIfSpecified(7, 0);
668 maxz = fTreeDrawArgsParser.GetIfSpecified(8, 0);
669 exp += fTreeDrawArgsParser.GetObjectName();
690 TNamed *n =
dynamic_cast<TNamed*
> (fInput->FindObject(
"varexp"));
694 Error(
"DefVar3D",
"Cannot find varexp on the fInput");
695 if (fTreeDrawArgsParser.GetNoParameters() != 9)
696 fInput->Add(
new TNamed(
"PROOF_OPTIONS",
"rebin"));
702 void TProofDrawHist::DefVar()
704 PDB(kDraw,1) Info("DefVar","Enter");
706 TObject *os = fInput->FindObject("selection");
707 TObject *ov = fInput->FindObject("varexp");
710 fSelection = os->GetTitle();
711 fInitialExp = ov->GetTitle();
713 fTreeDrawArgsParser.Parse(fInitialExp, fSelection, fOption);
714 if (fTreeDrawArgsParser.GetObjectName() ==
"")
715 fTreeDrawArgsParser.SetObjectName(
"htemp");
717 switch (fTreeDrawArgsParser.GetDimension()) {
728 Error(
"DefVar",
"Wrong dimension");
732 PDB(kDraw,1) Info("DefVar","selection: %s", fSelection.Data());
733 PDB(kDraw,1) Info("DefVar","varexp: %s", fInitialExp.Data());
740 void TProofDrawHist::Init(TTree *tree)
742 PDB(kDraw,1) Info("Init","Enter tree = %p", tree);
744 if (!dynamic_cast<TH1*> (fTreeDrawArgsParser.GetOriginal())) {
745 fHistogram->SetLineColor(tree->GetLineColor());
746 fHistogram->SetLineWidth(tree->GetLineWidth());
747 fHistogram->SetLineStyle(tree->GetLineStyle());
748 fHistogram->SetFillColor(tree->GetFillColor());
749 fHistogram->SetFillStyle(tree->GetFillStyle());
750 fHistogram->SetMarkerStyle(tree->GetMarkerStyle());
751 fHistogram->SetMarkerColor(tree->GetMarkerColor());
752 fHistogram->SetMarkerSize(tree->GetMarkerSize());
763 void TProofDrawHist::SlaveBegin(TTree *tree)
765 PDB(kDraw,1) Info("SlaveBegin","Enter tree = %p", tree);
768 TProofDraw::FillWeight();
770 TObject *os = fInput->FindObject("selection");
771 TObject *ov = fInput->FindObject("varexp");
774 fSelection = os->GetTitle();
775 fInitialExp = ov->GetTitle();
777 SafeDelete(fHistogram);
779 fTreeDrawArgsParser.Parse(fInitialExp, fSelection, fOption);
780 fDimension = fTreeDrawArgsParser.GetDimension();
781 TString exp = fTreeDrawArgsParser.GetExp();
782 const char *objname = fTreeDrawArgsParser.GetObjectName();
783 if (objname && strlen(objname) > 0 && strcmp(objname,
"htemp")) {
784 TH1 *hist =
dynamic_cast<TH1*
> (fInput->FindObject(objname));
786 fHistogram = (TH1 *) hist->Clone();
787 PDB(kDraw,1) Info("SlaveBegin","original histogram found");
789 PDB(kDraw,1) Info("SlaveBegin", "original
object '%s' not found"
790 " or it is not a histogram", objname);
796 Int_t countx = 100;
double minx = 0, maxx = 0;
797 Int_t county = 100;
double miny = 0, maxy = 0;
798 Int_t countz = 100;
double minz = 0, maxz = 0;
799 if (fTreeDrawArgsParser.GetNoParameters() != 0) {
800 countx = (Int_t) fTreeDrawArgsParser.GetIfSpecified(0, countx);
801 county = (Int_t) fTreeDrawArgsParser.GetIfSpecified(3, county);
802 countz = (Int_t) fTreeDrawArgsParser.GetIfSpecified(6, countz);
803 minx = fTreeDrawArgsParser.GetIfSpecified(1, minx);
804 maxx = fTreeDrawArgsParser.GetIfSpecified(2, maxx);
805 miny = fTreeDrawArgsParser.GetIfSpecified(4, miny);
806 maxy = fTreeDrawArgsParser.GetIfSpecified(5, maxy);
807 minz = fTreeDrawArgsParser.GetIfSpecified(7, minz);
808 maxz = fTreeDrawArgsParser.GetIfSpecified(8, maxz);
810 if (fTreeDrawArgsParser.GetNoParameters() != 3*fDimension)
811 Error(
"SlaveBegin",
"Impossible - Wrong number of parameters");
814 fHistogram =
new TH1F(fTreeDrawArgsParser.GetObjectName(),
815 fTreeDrawArgsParser.GetObjectTitle(),
817 else if (fDimension == 2){
818 fHistogram =
new TH2F(fTreeDrawArgsParser.GetObjectName(),
819 fTreeDrawArgsParser.GetObjectTitle(),
823 else if (fDimension == 3) {
824 fHistogram =
new TH3F(fTreeDrawArgsParser.GetObjectName(),
825 fTreeDrawArgsParser.GetObjectTitle(),
830 Info(
"Begin",
"Wrong dimension");
834 fHistogram->SetBuffer(TH1::GetDefaultBufferSize());
835 if (TNamed *opt = dynamic_cast<TNamed*> (fInput->FindObject(
"PROOF_OPTIONS"))) {
836 if (strstr(opt->GetTitle(),
"rebin"))
837 fHistogram->SetCanExtend(TH1::kAllAxes);
840 fHistogram->SetDirectory(0);
841 fOutput->Add(fHistogram);
845 PDB(kDraw,1) Info("Begin","selection: %s", fSelection.Data());
846 PDB(kDraw,1) Info("Begin","varexp: %s", fInitialExp.Data());
853 void TProofDrawHist::DoFill(Long64_t, Double_t w, const Double_t *v)
856 fHistogram->Fill(v[0], w);
857 else if (fDimension == 2)
858 ((TH2F *)fHistogram)->Fill(v[1], v[0], w);
859 else if (fDimension == 3)
860 ((TH3F *)fHistogram)->Fill(v[2], v[1], v[0], w);
867 void TProofDrawHist::Terminate(
void)
869 PDB(kDraw,1) Info("Terminate","Enter");
870 TProofDraw::Terminate();
874 fHistogram = (TH1F *) fOutput->FindObject(fTreeDrawArgsParser.GetObjectName());
876 SetStatus((Int_t) fHistogram->GetEntries());
878 if ((h = dynamic_cast<TH1*> (fTreeDrawArgsParser.GetOriginal()))) {
879 if (!fTreeDrawArgsParser.GetAdd())
884 l.Remove(fHistogram);
885 fOutput->Remove(fHistogram);
889 fHistogram->SetTitle(fTreeDrawArgsParser.GetObjectTitle());
892 if (fTreeDrawArgsParser.GetShouldDraw()) {
894 SetCanvas(h->GetName());
897 h->Draw(fOption.Data());
903 ClassImp(TProofDrawEventList);
908 void TProofDrawEventList::Init(TTree *tree)
910 PDB(kDraw,1) Info("Init","Enter tree = %p", tree);
914 Error(
"Init",
"Impossible - fElist cannot be 0");
915 fEventLists->Add(fElist);
917 fElist =
new TEventList(tree->GetDirectory()->GetName(), tree->GetName());
926 void TProofDrawEventList::SlaveBegin(TTree *tree)
928 PDB(kDraw,1) Info("SlaveBegin","Enter tree = %p", tree);
931 TProofDraw::FillWeight();
933 TObject *os = fInput->FindObject("selection");
934 TObject *ov = fInput->FindObject("varexp");
937 fSelection = os->GetTitle();
938 fInitialExp = ov->GetTitle();
940 fTreeDrawArgsParser.Parse(fInitialExp, fSelection, fOption);
942 SafeDelete(fEventLists);
946 fEventLists =
new TList();
947 fEventLists->SetName(
"PROOF_EventListsList");
948 fOutput->Add(fEventLists);
951 PDB(kDraw,1) Info("Begin","selection: %s", fSelection.Data());
952 PDB(kDraw,1) Info("Begin","varexp: %s", fInitialExp.Data());
959 void TProofDrawEventList::DoFill(Long64_t entry, Double_t , const Double_t *)
961 fElist->Enter(entry);
968 void TProofDrawEventList::SlaveTerminate(
void)
970 PDB(kDraw,1) Info("SlaveTerminate","Enter");
971 fEventLists->Add(fElist);
978 void TProofDrawEventList::Terminate(
void)
980 TProofDraw::Terminate();
984 fTreeDrawArgsParser.Parse(fInitialExp, fSelection, fOption);
986 TEventList *el =
dynamic_cast<TEventList*
> (fOutput->FindObject(
"PROOF_EventList"));
988 el->SetName(fInitialExp.Data()+2);
989 SetStatus(el->GetN());
990 if (TEventList* old = dynamic_cast<TEventList*> (fTreeDrawArgsParser.GetOriginal())) {
991 if (!fTreeDrawArgsParser.GetAdd())
999 Error(
"Terminate",
"Cannot find output EventList");
1003 ClassImp(TProofDrawEntryList);
1008 void TProofDrawEntryList::Init(TTree *tree)
1010 PDB(kDraw,1) Info("Init","Enter tree = %p", tree);
1019 void TProofDrawEntryList::SlaveBegin(TTree *tree)
1021 PDB(kDraw,1) Info("SlaveBegin","Enter tree = %p", tree);
1024 TProofDraw::FillWeight();
1026 TObject *os = fInput->FindObject("selection");
1027 TObject *ov = fInput->FindObject("varexp");
1030 fSelection = os->GetTitle();
1031 fInitialExp = ov->GetTitle();
1033 fTreeDrawArgsParser.Parse(fInitialExp, fSelection, fOption);
1039 fElist =
new TEntryList(
"PROOF_EntryList",
"PROOF_EntryList");
1040 fOutput->Add(fElist);
1043 PDB(kDraw,1) Info("Begin","selection: %s", fSelection.Data());
1044 PDB(kDraw,1) Info("Begin","varexp: %s", fInitialExp.Data());
1050 void TProofDrawEntryList::DoFill(Long64_t entry, Double_t , const Double_t *)
1052 fElist->Enter(entry);
1058 void TProofDrawEntryList::SlaveTerminate(
void)
1060 PDB(kDraw,1) Info("SlaveTerminate","Enter");
1061 fElist->OptimizeStorage();
1067 void TProofDrawEntryList::Terminate(
void)
1069 TProofDraw::Terminate();
1073 fTreeDrawArgsParser.Parse(fInitialExp, fSelection, fOption);
1075 TEntryList *el =
dynamic_cast<TEntryList*
> (fOutput->FindObject(
"PROOF_EntryList"));
1078 el->SetName(fInitialExp.Data()+2);
1079 SetStatus(el->GetN());
1080 if (TEntryList* old = dynamic_cast<TEntryList*> (fTreeDrawArgsParser.GetOriginal())) {
1081 if (!fTreeDrawArgsParser.GetAdd())
1084 fOutput->Remove(el);
1089 Error(
"Terminate",
"Cannot find output EventList");
1093 ClassImp(TProofDrawProfile);
1098 void TProofDrawProfile::Init(TTree *tree)
1100 PDB(kDraw,1) Info("Init","Enter tree = %p", tree);
1103 if (!dynamic_cast<TProfile*> (fTreeDrawArgsParser.GetOriginal())) {
1104 fProfile->SetLineColor(tree->GetLineColor());
1105 fProfile->SetLineWidth(tree->GetLineWidth());
1106 fProfile->SetLineStyle(tree->GetLineStyle());
1107 fProfile->SetFillColor(tree->GetFillColor());
1108 fProfile->SetFillStyle(tree->GetFillStyle());
1109 fProfile->SetMarkerStyle(tree->GetMarkerStyle());
1110 fProfile->SetMarkerColor(tree->GetMarkerColor());
1111 fProfile->SetMarkerSize(tree->GetMarkerSize());
1121 void TProofDrawProfile::DefVar()
1123 PDB(kDraw,1) Info("DefVar","Enter");
1125 if (fTreeDrawArgsParser.GetDimension() < 0) {
1128 TObject *os = fInput->FindObject(
"selection");
1129 TObject *ov = fInput->FindObject(
"varexp");
1132 fSelection = ov->GetTitle();
1133 fInitialExp = ov->GetTitle();
1135 fTreeDrawArgsParser.Parse(fInitialExp, fSelection, fOption);
1139 R__ASSERT(fTreeDrawArgsParser.GetDimension() == 2);
1141 fTreeDrawArgsParser.SetOriginal(0);
1142 TString exp = fTreeDrawArgsParser.GetVarExp();
1144 double binsx, minx, maxx;
1145 if (fTreeDrawArgsParser.IsSpecified(0))
1146 gEnv->SetValue(
"Hist.Binning.2D.Prof", fTreeDrawArgsParser.GetParameter(0));
1147 binsx = gEnv->GetValue(
"Hist.Binning.2D.Prof",100);
1148 minx = fTreeDrawArgsParser.GetIfSpecified(1, 0);
1149 maxx = fTreeDrawArgsParser.GetIfSpecified(2, 0);
1150 if (fTreeDrawArgsParser.GetObjectName() ==
"")
1151 fTreeDrawArgsParser.SetObjectName(
"htemp");
1152 exp += fTreeDrawArgsParser.GetObjectName();
1161 TNamed *n =
dynamic_cast<TNamed*
> (fInput->FindObject(
"varexp"));
1165 Error(
"DefVar",
"Cannot find varexp on the fInput");
1166 if (fTreeDrawArgsParser.GetNoParameters() != 3)
1167 fInput->Add(
new TNamed(
"PROOF_OPTIONS",
"rebin"));
1173 void TProofDrawProfile::Begin(TTree *tree)
1175 PDB(kDraw,1) Info("Begin","Enter tree = %p", tree);
1178 TObject *os = fInput->FindObject("selection");
1179 TObject *ov = fInput->FindObject("varexp");
1182 fSelection = os->GetTitle();
1183 fInitialExp = ov->GetTitle();
1185 fTreeDrawArgsParser.Parse(fInitialExp, fSelection, fOption);
1187 R__ASSERT(fTreeDrawArgsParser.GetDimension() == 2);
1189 TObject *orig = fTreeDrawArgsParser.GetOriginal();
1191 if ((pold = dynamic_cast<TProfile*> (orig)) && fTreeDrawArgsParser.GetNoParameters() == 0) {
1192 TProfile* pnew = (TProfile*) pold->Clone();
1200 PDB(kDraw,1) Info("Begin","selection: %s", fSelection.Data());
1201 PDB(kDraw,1) Info("Begin","varexp: %s", fInitialExp.Data());
1209 void TProofDrawProfile::SlaveBegin(TTree *tree)
1211 PDB(kDraw,1) Info("SlaveBegin","Enter tree = %p", tree);
1214 TProofDraw::FillWeight();
1217 TObject *os = fInput->FindObject("selection");
1218 TObject *ov = fInput->FindObject("varexp");
1221 fSelection = os->GetTitle();
1222 fInitialExp = ov->GetTitle();
1224 SafeDelete(fProfile);
1227 fTreeDrawArgsParser.Parse(fInitialExp, fSelection, fOption);
1229 TString exp = fTreeDrawArgsParser.GetExp();
1231 if (fTreeDrawArgsParser.GetOriginal()) {
1232 fProfile =
dynamic_cast<TProfile*
> (fTreeDrawArgsParser.GetOriginal());
1234 fOutput->Add(fProfile);
1235 PDB(kDraw,1) Info("SlaveBegin","Original profile histogram found");
1239 Error("SlaveBegin","Original
object found but it is not a histogram");
1241 Int_t countx = 100;
double minx = 0, maxx = 0;
1242 if (fTreeDrawArgsParser.GetNoParameters() != 0) {
1243 countx = (Int_t) fTreeDrawArgsParser.GetIfSpecified(0, countx);
1244 minx = fTreeDrawArgsParser.GetIfSpecified(1, minx);
1245 maxx = fTreeDrawArgsParser.GetIfSpecified(2, maxx);
1247 if (fTreeDrawArgsParser.GetNoParameters() != 3)
1248 Error(
"SlaveBegin",
"Impossible - Wrong number of parameters");
1249 TString constructorOptions =
"";
1250 if (fOption.Contains(
"profs"))
1251 constructorOptions =
"s";
1252 else if (fOption.Contains(
"profi"))
1253 constructorOptions =
"i";
1254 else if (fOption.Contains(
"profg"))
1255 constructorOptions =
"g";
1257 fProfile =
new TProfile(fTreeDrawArgsParser.GetObjectName(),
1258 fTreeDrawArgsParser.GetObjectTitle(),
1260 constructorOptions);
1262 fProfile->SetBuffer(TH1::GetDefaultBufferSize());
1264 if (TNamed *opt = dynamic_cast<TNamed*> (fInput->FindObject(
"PROOF_OPTIONS"))) {
1265 if (strstr(opt->GetTitle(),
"rebin"))
1266 fProfile->SetCanExtend(TH1::kAllAxes);
1268 fProfile->SetDirectory(0);
1269 fOutput->Add(fProfile);
1272 PDB(kDraw,1) Info("Begin","selection: %s", fSelection.Data());
1273 PDB(kDraw,1) Info("Begin","varexp: %s", fInitialExp.Data());
1280 void TProofDrawProfile::DoFill(Long64_t , Double_t w, const Double_t *v)
1282 fProfile->Fill(v[1], v[0], w);
1289 void TProofDrawProfile::Terminate(
void)
1291 PDB(kDraw,1) Info("Terminate","Enter");
1292 TProofDraw::Terminate();
1296 fProfile = (TProfile *) fOutput->FindObject(fTreeDrawArgsParser.GetObjectName());
1298 SetStatus((Int_t) fProfile->GetEntries());
1300 if ((pf = dynamic_cast<TProfile*> (fTreeDrawArgsParser.GetOriginal()))) {
1301 if (!fTreeDrawArgsParser.GetAdd())
1307 fOutput->Remove(fProfile);
1310 fProfile->SetTitle(fTreeDrawArgsParser.GetObjectTitle());
1313 if (fTreeDrawArgsParser.GetShouldDraw()) {
1315 SetCanvas(pf->GetName());
1318 pf->Draw(fOption.Data());
1325 ClassImp(TProofDrawProfile2D);
1330 void TProofDrawProfile2D::Init(TTree *tree)
1332 PDB(kDraw,1) Info("Init","Enter tree = %p", tree);
1334 if (!dynamic_cast<TProfile2D*> (fTreeDrawArgsParser.GetOriginal())) {
1335 fProfile->SetLineColor(tree->GetLineColor());
1336 fProfile->SetLineWidth(tree->GetLineWidth());
1337 fProfile->SetLineStyle(tree->GetLineStyle());
1338 fProfile->SetFillColor(tree->GetFillColor());
1339 fProfile->SetFillStyle(tree->GetFillStyle());
1340 fProfile->SetMarkerStyle(tree->GetMarkerStyle());
1341 fProfile->SetMarkerColor(tree->GetMarkerColor());
1342 fProfile->SetMarkerSize(tree->GetMarkerSize());
1353 void TProofDrawProfile2D::DefVar()
1355 PDB(kDraw,1) Info("DefVar","Enter");
1357 if (fTreeDrawArgsParser.GetDimension() < 0) {
1360 TObject *os = fInput->FindObject(
"selection");
1361 TObject *ov = fInput->FindObject(
"varexp");
1364 fSelection = os->GetTitle();
1365 fInitialExp = ov->GetTitle();
1367 fTreeDrawArgsParser.Parse(fInitialExp, fSelection, fOption);
1370 R__ASSERT(fTreeDrawArgsParser.GetDimension() == 3);
1372 fTreeDrawArgsParser.SetOriginal(0);
1373 TString exp = fTreeDrawArgsParser.GetVarExp();
1375 double binsx, minx, maxx;
1376 double binsy, miny, maxy;
1377 if (fTreeDrawArgsParser.IsSpecified(0))
1378 gEnv->SetValue(
"Hist.Binning.3D.Profx", fTreeDrawArgsParser.GetParameter(0));
1379 if (fTreeDrawArgsParser.IsSpecified(3))
1380 gEnv->SetValue(
"Hist.Binning.3D.Profy", fTreeDrawArgsParser.GetParameter(3));
1381 binsx = gEnv->GetValue(
"Hist.Binning.3D.Profx",20);
1382 minx = fTreeDrawArgsParser.GetIfSpecified(1, 0);
1383 maxx = fTreeDrawArgsParser.GetIfSpecified(2, 0);
1384 binsy = gEnv->GetValue(
"Hist.Binning.3D.Profy",20);
1385 miny = fTreeDrawArgsParser.GetIfSpecified(4, 0);
1386 maxy = fTreeDrawArgsParser.GetIfSpecified(5, 0);
1387 if (fTreeDrawArgsParser.GetObjectName() ==
"")
1388 fTreeDrawArgsParser.SetObjectName(
"htemp");
1389 exp += fTreeDrawArgsParser.GetObjectName();
1404 TNamed *n =
dynamic_cast<TNamed*
> (fInput->FindObject(
"varexp"));
1408 Error(
"DefVar",
"Cannot find varexp on the fInput");
1409 if (fTreeDrawArgsParser.GetNoParameters() != 6)
1410 fInput->Add(
new TNamed(
"PROOF_OPTIONS",
"rebin"));
1416 void TProofDrawProfile2D::Begin(TTree *tree)
1418 PDB(kDraw,1) Info("Begin","Enter tree = %p", tree);
1420 TObject *os = fInput->FindObject("selection");
1421 TObject *ov = fInput->FindObject("varexp");
1424 fSelection = os->GetTitle();
1425 fInitialExp = ov->GetTitle();
1427 fTreeDrawArgsParser.Parse(fInitialExp, fSelection, fOption);
1429 R__ASSERT(fTreeDrawArgsParser.GetDimension() == 3);
1431 TObject *orig = fTreeDrawArgsParser.GetOriginal();
1433 if ((pold = dynamic_cast<TProfile2D*> (orig)) && fTreeDrawArgsParser.GetNoParameters() == 0) {
1434 TProfile2D* pnew = (TProfile2D*) pold->Clone();
1442 PDB(kDraw,1) Info("Begin","selection: %s", fSelection.Data());
1443 PDB(kDraw,1) Info("Begin","varexp: %s", fInitialExp.Data());
1449 void TProofDrawProfile2D::SlaveBegin(TTree *tree)
1451 PDB(kDraw,1) Info("SlaveBegin","Enter tree = %p", tree);
1454 TProofDraw::FillWeight();
1456 TObject *os = fInput->FindObject("selection");
1457 TObject *ov = fInput->FindObject("varexp");
1460 fSelection = os->GetTitle();
1461 fInitialExp = ov->GetTitle();
1463 SafeDelete(fProfile);
1465 fTreeDrawArgsParser.Parse(fInitialExp, fSelection, fOption);
1467 TString exp = fTreeDrawArgsParser.GetExp();
1469 if (fTreeDrawArgsParser.GetOriginal()) {
1470 fProfile =
dynamic_cast<TProfile2D*
> (fTreeDrawArgsParser.GetOriginal());
1472 fOutput->Add(fProfile);
1473 PDB(kDraw,1) Info("SlaveBegin","Original profile histogram found");
1476 Error("SlaveBegin","Original
object found but it is not a histogram");
1478 Int_t countx = 40;
double minx = 0, maxx = 0;
1479 Int_t county = 40;
double miny = 0, maxy = 0;
1480 if (fTreeDrawArgsParser.GetNoParameters() != 0) {
1481 countx = (Int_t) fTreeDrawArgsParser.GetIfSpecified(0, countx);
1482 minx = fTreeDrawArgsParser.GetIfSpecified(1, minx);
1483 maxx = fTreeDrawArgsParser.GetIfSpecified(2, maxx);
1484 county = (Int_t) fTreeDrawArgsParser.GetIfSpecified(3, countx);
1485 miny = fTreeDrawArgsParser.GetIfSpecified(4, minx);
1486 maxy = fTreeDrawArgsParser.GetIfSpecified(5, maxx);
1488 if (fTreeDrawArgsParser.GetNoParameters() != 6)
1489 Error(
"SlaveBegin",
"Impossible - Wrong number of parameters");
1491 TString constructorOptions =
"";
1492 if (fOption.Contains(
"profs"))
1493 constructorOptions =
"s";
1494 else if (fOption.Contains(
"profi"))
1495 constructorOptions =
"i";
1496 else if (fOption.Contains(
"profg"))
1497 constructorOptions =
"g";
1499 fProfile =
new TProfile2D(fTreeDrawArgsParser.GetObjectName(),
1500 fTreeDrawArgsParser.GetObjectTitle(),
1503 constructorOptions);
1505 fProfile->SetBuffer(TH1::GetDefaultBufferSize());
1507 if (TNamed *opt = dynamic_cast<TNamed*> (fInput->FindObject(
"PROOF_OPTIONS"))) {
1508 if (strstr(opt->GetTitle(),
"rebin"))
1509 fProfile->SetCanExtend(TH1::kAllAxes);
1511 fProfile->SetDirectory(0);
1512 fOutput->Add(fProfile);
1515 PDB(kDraw,1) Info("Begin","selection: %s", fSelection.Data());
1516 PDB(kDraw,1) Info("Begin","varexp: %s", fInitialExp.Data());
1523 void TProofDrawProfile2D::DoFill(Long64_t , Double_t w, const Double_t *v)
1525 fProfile->Fill(v[2], v[1], v[0], w);
1532 void TProofDrawProfile2D::Terminate(
void)
1534 PDB(kDraw,1) Info("Terminate","Enter");
1535 TProofDraw::Terminate();
1539 fProfile = (TProfile2D *) fOutput->FindObject(fTreeDrawArgsParser.GetObjectName());
1541 SetStatus((Int_t) fProfile->GetEntries());
1543 if ((pf = dynamic_cast<TProfile2D*> (fTreeDrawArgsParser.GetOriginal()))) {
1544 if (!fTreeDrawArgsParser.GetAdd())
1550 fOutput->Remove(fProfile);
1553 fProfile->SetTitle(fTreeDrawArgsParser.GetObjectTitle());
1556 if (fTreeDrawArgsParser.GetShouldDraw()) {
1558 SetCanvas(pf->GetName());
1561 pf->Draw(fOption.Data());
1568 ClassImp(TProofDrawGraph);
1573 void TProofDrawGraph::Init(TTree *tree)
1575 PDB(kDraw,1) Info("Init","Enter tree = %p", tree);
1579 fGraph->SetMarkerStyle(tree->GetMarkerStyle());
1580 fGraph->SetMarkerColor(tree->GetMarkerColor());
1581 fGraph->SetMarkerSize(tree->GetMarkerSize());
1582 fGraph->SetLineColor(tree->GetLineColor());
1583 fGraph->SetLineStyle(tree->GetLineStyle());
1584 fGraph->SetFillColor(tree->GetFillColor());
1585 fGraph->SetFillStyle(tree->GetFillStyle());
1595 void TProofDrawGraph::SlaveBegin(TTree *tree)
1597 PDB(kDraw,1) Info("SlaveBegin","Enter tree = %p", tree);
1600 TProofDraw::FillWeight();
1602 TObject *os = fInput->FindObject("selection");
1603 TObject *ov = fInput->FindObject("varexp");
1606 fSelection = os->GetTitle();
1607 fInitialExp = ov->GetTitle();
1608 fTreeDrawArgsParser.Parse(fInitialExp, fSelection, fOption);
1613 fGraph =
new TGraph();
1614 fGraph->SetName(
"PROOF_GRAPH");
1615 fOutput->Add(fGraph);
1617 PDB(kDraw,1) Info("Begin","selection: %s", fSelection.Data());
1618 PDB(kDraw,1) Info("Begin","varexp: %s", fInitialExp.Data());
1625 void TProofDrawGraph::DoFill(Long64_t , Double_t , const Double_t *v)
1627 fGraph->SetPoint(fGraph->GetN(), v[1], v[0]);
1634 void TProofDrawGraph::Terminate(
void)
1636 PDB(kDraw,1) Info("Terminate","Enter");
1637 TProofDraw::Terminate();
1641 fGraph = dynamic_cast<TGraph*> (fOutput->FindObject("PROOF_GRAPH"));
1643 SetStatus((Int_t) fGraph->GetN());
1645 TObject *orig = fTreeDrawArgsParser.GetOriginal();
1646 if ( (hist = dynamic_cast<TH2F*> (orig)) == 0 ) {
1648 fTreeDrawArgsParser.SetOriginal(0);
1649 double binsx, minx, maxx;
1650 double binsy, miny, maxy;
1651 if (fTreeDrawArgsParser.IsSpecified(0))
1652 gEnv->SetValue(
"Hist.Binning.2D.x", fTreeDrawArgsParser.GetParameter(0));
1653 if (fTreeDrawArgsParser.IsSpecified(3))
1654 gEnv->SetValue(
"Hist.Binning.2D.y", fTreeDrawArgsParser.GetParameter(3));
1655 binsx = gEnv->GetValue(
"Hist.Binning.2D.x",100);
1656 minx = fTreeDrawArgsParser.GetIfSpecified(1, 0);
1657 maxx = fTreeDrawArgsParser.GetIfSpecified(2, 0);
1658 binsy = gEnv->GetValue(
"Hist.Binning.2D.y",100);
1659 miny = fTreeDrawArgsParser.GetIfSpecified(4, 0);
1660 maxy = fTreeDrawArgsParser.GetIfSpecified(5, 0);
1661 hist =
new TH2F(fTreeDrawArgsParser.GetObjectName(), fTreeDrawArgsParser.GetObjectTitle(),
1662 (Int_t) binsx, minx, maxx, (Int_t) binsy, miny, maxy);
1663 hist->SetBit(TH1::kNoStats);
1664 hist->SetBit(kCanDelete);
1665 if (fTreeDrawArgsParser.GetNoParameters() != 6)
1666 hist->SetCanExtend(TH1::kAllAxes);
1668 hist->SetCanExtend(TH1::kNoAxis);
1672 if (!fTreeDrawArgsParser.GetAdd())
1675 if (hist->CanExtendAllAxes() && hist->TestBit(kCanDelete)) {
1676 Double_t* xArray = fGraph->GetX();
1677 Double_t* yArray = fGraph->GetY();
1678 Double_t xmin = *std::min_element(xArray, xArray+fGraph->GetN());
1679 Double_t xmax = *std::max_element(xArray, xArray+fGraph->GetN());
1680 Double_t ymin = *std::min_element(yArray, yArray+fGraph->GetN());
1681 Double_t ymax = *std::max_element(yArray, yArray+fGraph->GetN());
1682 THLimitsFinder::GetLimitsFinder()->FindGoodLimits(hist,xmin,xmax,ymin,ymax);
1684 if (!hist->TestBit(kCanDelete)) {
1685 TH1 *h2c = hist->DrawCopy(fOption.Data());
1686 h2c->SetStats(kFALSE);
1693 fGraph->SetEditable(kFALSE);
1696 if (fTreeDrawArgsParser.GetShouldDraw()) {
1698 if (fOption ==
"" || strcmp(fOption,
"same") == 0)
1701 fGraph->Draw(fOption);
1704 if (!hist->TestBit(kCanDelete)) {
1705 for (
int i = 0; i < fGraph->GetN(); i++) {
1706 Double_t x = 0, y = 0;
1707 fGraph->GetPoint(i, x, y);
1708 hist->Fill(x, y, 1);
1716 ClassImp(TProofDrawPolyMarker3D);
1721 void TProofDrawPolyMarker3D::Init(TTree *tree)
1723 PDB(kDraw,1) Info("Init","Enter tree = %p", tree);
1726 R__ASSERT(fPolyMarker3D);
1727 fPolyMarker3D->SetMarkerStyle(tree->GetMarkerStyle());
1728 fPolyMarker3D->SetMarkerColor(tree->GetMarkerColor());
1729 fPolyMarker3D->SetMarkerSize(tree->GetMarkerSize());
1738 void TProofDrawPolyMarker3D::SlaveBegin(TTree *tree)
1740 PDB(kDraw,1) Info("SlaveBegin","Enter tree = %p", tree);
1743 TProofDraw::FillWeight();
1745 TObject *os = fInput->FindObject("selection");
1746 TObject *ov = fInput->FindObject("varexp");
1749 fSelection = os->GetTitle();
1750 fInitialExp = ov->GetTitle();
1751 fTreeDrawArgsParser.Parse(fInitialExp, fSelection, fOption);
1752 R__ASSERT(fTreeDrawArgsParser.GetDimension() == 3);
1754 SafeDelete(fPolyMarker3D);
1757 fPolyMarker3D =
new TPolyMarker3D();
1758 fOutput->Add(fPolyMarker3D);
1760 PDB(kDraw,1) Info("Begin","selection: %s", fSelection.Data());
1761 PDB(kDraw,1) Info("Begin","varexp: %s", fInitialExp.Data());
1768 void TProofDrawPolyMarker3D::DoFill(Long64_t , Double_t , const Double_t *v)
1770 fPolyMarker3D->SetNextPoint(v[2], v[1], v[0]);
1777 void TProofDrawPolyMarker3D::Terminate(
void)
1779 PDB(kDraw,1) Info("Terminate","Enter");
1780 TProofDraw::Terminate();
1785 TIter next(fOutput);
1786 while (TObject* o = next()) {
1787 if (dynamic_cast<TPolyMarker3D*> (o)) {
1788 fPolyMarker3D =
dynamic_cast<TPolyMarker3D*
> (o);
1793 Bool_t checkPrevious = kFALSE;
1794 if (fPolyMarker3D) {
1795 SetStatus((Int_t) fPolyMarker3D->Size());
1797 TObject *orig = fTreeDrawArgsParser.GetOriginal();
1798 if ( (hist = dynamic_cast<TH3F*> (orig)) == 0 ) {
1800 fTreeDrawArgsParser.SetOriginal(0);
1801 if (fOption.Contains(
"same")) {
1803 hist =
dynamic_cast<TH3F *
> (gDirectory->Get(fTreeDrawArgsParser.GetObjectName()));
1806 double binsx, minx, maxx;
1807 double binsy, miny, maxy;
1808 double binsz, minz, maxz;
1809 if (fTreeDrawArgsParser.IsSpecified(0))
1810 gEnv->SetValue(
"Hist.Binning.3D.x", fTreeDrawArgsParser.GetParameter(0));
1811 if (fTreeDrawArgsParser.IsSpecified(3))
1812 gEnv->SetValue(
"Hist.Binning.3D.y", fTreeDrawArgsParser.GetParameter(3));
1813 if (fTreeDrawArgsParser.IsSpecified(6))
1814 gEnv->SetValue(
"Hist.Binning.3D.z", fTreeDrawArgsParser.GetParameter(6));
1815 binsx = gEnv->GetValue(
"Hist.Binning.3D.x",100);
1816 minx = fTreeDrawArgsParser.GetIfSpecified(1, 0);
1817 maxx = fTreeDrawArgsParser.GetIfSpecified(2, 0);
1818 binsy = gEnv->GetValue(
"Hist.Binning.3D.y",100);
1819 miny = fTreeDrawArgsParser.GetIfSpecified(4, 0);
1820 maxy = fTreeDrawArgsParser.GetIfSpecified(5, 0);
1821 binsz = gEnv->GetValue(
"Hist.Binning.3D.z",100);
1822 minz = fTreeDrawArgsParser.GetIfSpecified(7, 0);
1823 maxz = fTreeDrawArgsParser.GetIfSpecified(8, 0);
1824 hist =
new TH3F(fTreeDrawArgsParser.GetObjectName(), fTreeDrawArgsParser.GetObjectTitle(),
1825 (Int_t) binsx, minx, maxx,
1826 (Int_t) binsy, miny, maxy,
1827 (Int_t) binsz, minz, maxz);
1828 hist->SetBit(TH1::kNoStats);
1829 hist->SetBit(kCanDelete);
1830 if (fTreeDrawArgsParser.GetNoParameters() != 9)
1831 hist->SetCanExtend(TH1::kAllAxes);
1833 hist->SetCanExtend(TH1::kNoAxis);
1835 checkPrevious = kTRUE;
1837 Info("Terminate", "found histo '%s' in gDirectory",
1838 fTreeDrawArgsParser.GetObjectName().Data());
1841 if (!fTreeDrawArgsParser.GetAdd())
1846 Double_t rmin[3], rmax[3];
1847 if (hist->CanExtendAllAxes() && hist->TestBit(kCanDelete)) {
1848 rmin[0] = rmax[0] = rmin[1] = rmax[1] = rmin[2] = rmax[2] = 0;
1849 if (fPolyMarker3D->Size() > 0) {
1850 fPolyMarker3D->GetPoint(0, rmin[0], rmin[1], rmin[2]);
1851 fPolyMarker3D->GetPoint(0, rmax[0], rmax[1], rmax[2]);
1853 for (
int i = 1; i < fPolyMarker3D->Size(); i++) {
1854 Double_t v[3] = {0};
1855 fPolyMarker3D->GetPoint(i, v[0], v[1], v[2]);
1856 for (
int ii = 0; ii < 3; ii++) {
1857 if (v[ii] < rmin[ii]) rmin[ii] = v[ii];
1858 if (v[ii] > rmax[ii]) rmax[ii] = v[ii];
1862 if (checkPrevious) {
1863 rmin[0] = (hist->GetXaxis()->GetXmin() < rmin[0]) ? hist->GetXaxis()->GetXmin()
1865 rmin[1] = (hist->GetYaxis()->GetXmin() < rmin[1]) ? hist->GetYaxis()->GetXmin()
1867 rmin[2] = (hist->GetZaxis()->GetXmin() < rmin[2]) ? hist->GetZaxis()->GetXmin()
1869 rmax[0] = (hist->GetXaxis()->GetXmax() > rmax[0]) ? hist->GetXaxis()->GetXmax()
1871 rmax[1] = (hist->GetYaxis()->GetXmax() > rmax[1]) ? hist->GetYaxis()->GetXmax()
1873 rmax[2] = (hist->GetZaxis()->GetXmax() > rmax[2]) ? hist->GetZaxis()->GetXmax()
1877 THLimitsFinder::GetLimitsFinder()->FindGoodLimits(hist,
1878 rmin[0], rmax[0], rmin[1], rmax[1], rmin[2], rmax[2]);
1880 if (fTreeDrawArgsParser.GetShouldDraw()) {
1881 if (!hist->TestBit(kCanDelete)) {
1882 TH1 *histcopy = hist->DrawCopy(fOption.Data());
1883 histcopy->SetStats(kFALSE);
1886 hist->Draw(fOption);
1891 gPad->Range(-1,-1,1,1);
1892 TView::CreateView(1,rmin,rmax);
1894 if (fTreeDrawArgsParser.GetShouldDraw()) {
1895 SetDrawAtt(fPolyMarker3D);
1896 fPolyMarker3D->Draw(fOption);
1899 if (!hist->TestBit(kCanDelete)) {
1900 for (
int i = 0; i < fPolyMarker3D->Size(); i++) {
1901 Double_t x = 0, y = 0, z = 0;
1902 fPolyMarker3D->GetPoint(i, x, y, z);
1903 hist->Fill(x, y, z, 1);
1910 ClassImp(TProofDrawListOfGraphs);
1915 void TProofDrawListOfGraphs::SlaveBegin(TTree *tree)
1917 PDB(kDraw,1) Info("SlaveBegin","Enter tree = %p", tree);
1920 TProofDraw::FillWeight();
1922 TObject *os = fInput->FindObject("selection");
1923 TObject *ov = fInput->FindObject("varexp");
1926 fSelection = os->GetTitle();
1927 fInitialExp = ov->GetTitle();
1928 fTreeDrawArgsParser.Parse(fInitialExp, fSelection, fOption);
1929 R__ASSERT(fTreeDrawArgsParser.GetDimension() == 3);
1931 SafeDelete(fPoints);
1935 fPoints =
new TProofVectorContainer<Point3D_t>(
new std::vector<Point3D_t>);
1936 fPoints->SetName(
"PROOF_SCATTERPLOT");
1937 fOutput->Add(fPoints);
1939 PDB(kDraw,1) Info("Begin","selection: %s", fSelection.Data());
1940 PDB(kDraw,1) Info("Begin","varexp: %s", fInitialExp.Data());
1947 void TProofDrawListOfGraphs::DoFill(Long64_t , Double_t , const Double_t *v)
1949 fPoints->GetVector()->push_back(Point3D_t(v[2], v[1], v[0]));
1956 void TProofDrawListOfGraphs::Terminate(
void)
1958 PDB(kDraw,1) Info("Terminate","Enter");
1959 TProofDraw::Terminate();
1963 fPoints = dynamic_cast<TProofVectorContainer<Point3D_t>*>
1964 (fOutput->FindObject("PROOF_SCATTERPLOT"));
1966 std::vector<Point3D_t> *points = fPoints->GetVector();
1968 SetStatus((Int_t) points->size());
1970 TObject *orig = fTreeDrawArgsParser.GetOriginal();
1971 if ( (hist = dynamic_cast<TH2F*> (orig)) == 0 ) {
1973 fTreeDrawArgsParser.SetOriginal(0);
1974 double binsx, minx, maxx;
1975 double binsy, miny, maxy;
1976 if (fTreeDrawArgsParser.IsSpecified(0))
1977 gEnv->SetValue(
"Hist.Binning.2D.x", fTreeDrawArgsParser.GetParameter(0));
1978 if (fTreeDrawArgsParser.IsSpecified(3))
1979 gEnv->SetValue(
"Hist.Binning.2D.y", fTreeDrawArgsParser.GetParameter(3));
1980 binsx = gEnv->GetValue(
"Hist.Binning.2D.x", 40);
1981 minx = fTreeDrawArgsParser.GetIfSpecified(1, 0);
1982 maxx = fTreeDrawArgsParser.GetIfSpecified(2, 0);
1983 binsy = gEnv->GetValue(
"Hist.Binning.2D.y", 40);
1984 miny = fTreeDrawArgsParser.GetIfSpecified(4, 0);
1985 maxy = fTreeDrawArgsParser.GetIfSpecified(5, 0);
1986 hist =
new TH2F(fTreeDrawArgsParser.GetObjectName(), fTreeDrawArgsParser.GetObjectTitle(),
1987 (Int_t) binsx, minx, maxx, (Int_t) binsy, miny, maxy);
1988 hist->SetBit(TH1::kNoStats);
1989 hist->SetBit(kCanDelete);
1990 if (fTreeDrawArgsParser.GetNoParameters() != 6)
1991 hist->SetCanExtend(TH1::kAllAxes);
1993 hist->SetCanExtend(TH1::kNoAxis);
1998 Double_t rmin[3], rmax[3];
2001 rmin[0] = rmax[0] = rmin[1] = rmax[1] = rmin[2] = rmax[2] = 0;
2002 if (points->size() > 0) {
2003 rmin[0] = rmax[0] = (*points)[0].fX;
2004 rmin[1] = rmax[1] = (*points)[0].fY;
2005 rmin[2] = rmax[2] = (*points)[0].fZ;
2007 for (vector<Point3D_t>::const_iterator i = points->begin() + 1; i < points->end(); ++i) {
2008 if (rmax[0] < i->fX) rmax[0] = i->fX;
2009 if (rmax[1] < i->fY) rmax[1] = i->fY;
2010 if (rmax[2] < i->fZ) rmax[2] = i->fZ;
2011 if (rmin[0] > i->fX) rmin[0] = i->fX;
2012 if (rmin[1] > i->fY) rmin[1] = i->fY;
2013 if (rmin[2] > i->fZ) rmin[2] = i->fZ;
2016 if (hist->CanExtendAllAxes() && hist->TestBit(kCanDelete)) {
2017 THLimitsFinder::GetLimitsFinder()->FindGoodLimits(hist,
2018 rmin[1], rmax[1], rmin[2], rmax[2]);
2022 Int_t ncolors = gStyle->GetNumberOfColors();
2023 TObjArray *grs = (TObjArray*)hist->GetListOfFunctions()->FindObject(
"graphs");
2027 grs =
new TObjArray(ncolors);
2029 grs->SetName(
"graphs");
2030 hist->GetListOfFunctions()->Add(grs,
"P");
2031 for (col=0;col<ncolors;col++) {
2033 gr->SetMarkerColor(col);
2040 for (vector<Point3D_t>::const_iterator i = points->begin();
2041 i < points->end(); ++i) {
2042 col = Int_t((ncolors-1)*((i->fX-rmin[0])/(rmax[0]-rmin[0])));
2043 if (col < 0) col = 0;
2044 if (col > ncolors-1) col = ncolors-1;
2045 gr = (TGraph*)grs->UncheckedAt(col);
2046 if (gr) gr->SetPoint(gr->GetN(), i->fY, i->fZ);
2049 for (col=0;col<ncolors;col++) {
2050 gr = (TGraph*)grs->At(col);
2051 if (gr && gr->GetN() <= 0) grs->Remove(gr);
2053 if (fTreeDrawArgsParser.GetShouldDraw()) {
2055 hist->Draw(fOption.Data());
2058 fOutput->Remove(fPoints);
2059 SafeDelete(fPoints);
2064 ClassImp(TProofDrawListOfPolyMarkers3D);
2070 void TProofDrawListOfPolyMarkers3D::SlaveBegin(TTree *tree)
2072 PDB(kDraw,1) Info("SlaveBegin","Enter tree = %p", tree);
2075 TProofDraw::FillWeight();
2077 TObject *os = fInput->FindObject("selection");
2078 TObject *ov = fInput->FindObject("varexp");
2081 fSelection = os->GetTitle();
2082 fInitialExp = ov->GetTitle();
2083 fTreeDrawArgsParser.Parse(fInitialExp, fSelection, fOption);
2084 R__ASSERT(fTreeDrawArgsParser.GetDimension() == 4);
2086 SafeDelete(fPoints);
2090 fPoints =
new TProofVectorContainer<Point4D_t>(
new std::vector<Point4D_t>);
2091 fPoints->SetName(
"PROOF_SCATTERPLOT");
2092 fOutput->Add(fPoints);
2094 PDB(kDraw,1) Info("Begin","selection: %s", fSelection.Data());
2095 PDB(kDraw,1) Info("Begin","varexp: %s", fInitialExp.Data());
2102 void TProofDrawListOfPolyMarkers3D::DoFill(Long64_t , Double_t , const Double_t *v)
2104 fPoints->GetVector()->push_back(Point4D_t(v[3], v[2], v[1], v[0]));
2112 void TProofDrawListOfPolyMarkers3D::Terminate(
void)
2114 PDB(kDraw,1) Info("Terminate","Enter");
2115 TProofDraw::Terminate();
2119 fPoints = dynamic_cast<TProofVectorContainer<Point4D_t>*>
2120 (fOutput->FindObject("PROOF_SCATTERPLOT"));
2122 std::vector<Point4D_t> *points = fPoints->GetVector();
2124 SetStatus((Int_t) points->size());
2126 TObject *orig = fTreeDrawArgsParser.GetOriginal();
2127 if ( (hist = dynamic_cast<TH3F*> (orig)) == 0 || fTreeDrawArgsParser.GetNoParameters() != 0) {
2129 fTreeDrawArgsParser.SetOriginal(0);
2130 double binsx, minx, maxx;
2131 double binsy, miny, maxy;
2132 double binsz, minz, maxz;
2133 if (fTreeDrawArgsParser.IsSpecified(0))
2134 gEnv->SetValue(
"Hist.Binning.3D.x", fTreeDrawArgsParser.GetParameter(0));
2135 if (fTreeDrawArgsParser.IsSpecified(3))
2136 gEnv->SetValue(
"Hist.Binning.3D.y", fTreeDrawArgsParser.GetParameter(3));
2137 if (fTreeDrawArgsParser.IsSpecified(6))
2138 gEnv->SetValue(
"Hist.Binning.3D.z", fTreeDrawArgsParser.GetParameter(3));
2139 binsx = gEnv->GetValue(
"Hist.Binning.3D.x", 20);
2140 minx = fTreeDrawArgsParser.GetIfSpecified(1, 0);
2141 maxx = fTreeDrawArgsParser.GetIfSpecified(2, 0);
2142 binsy = gEnv->GetValue(
"Hist.Binning.3D.y", 20);
2143 miny = fTreeDrawArgsParser.GetIfSpecified(4, 0);
2144 maxy = fTreeDrawArgsParser.GetIfSpecified(5, 0);
2145 binsz = gEnv->GetValue(
"Hist.Binning.3D.z", 20);
2146 minz = fTreeDrawArgsParser.GetIfSpecified(7, 0);
2147 maxz = fTreeDrawArgsParser.GetIfSpecified(8, 0);
2148 hist =
new TH3F(fTreeDrawArgsParser.GetObjectName(), fTreeDrawArgsParser.GetObjectTitle(),
2149 (Int_t) binsx, minx, maxx,
2150 (Int_t) binsy, miny, maxy,
2151 (Int_t) binsz, minz, maxz);
2152 hist->SetBit(TH1::kNoStats);
2153 hist->SetBit(kCanDelete);
2154 if (fTreeDrawArgsParser.GetNoParameters() != 9)
2155 hist->SetCanExtend(TH1::kAllAxes);
2157 hist->SetCanExtend(TH1::kNoAxis);
2162 Double_t rmin[4], rmax[4];
2166 rmin[0] = rmax[0] = rmin[1] = rmax[1] = rmin[2] = rmax[2] = 0;
2167 if (points->size() > 0) {
2168 rmin[0] = rmax[0] = (*points)[0].fX;
2169 rmin[1] = rmax[1] = (*points)[0].fY;
2170 rmin[2] = rmax[2] = (*points)[0].fZ;
2171 rmin[3] = rmax[3] = (*points)[0].fT;
2173 for (vector<Point4D_t>::const_iterator i = points->begin() + 1; i < points->end(); ++i) {
2174 if (rmax[0] < i->fX) rmax[0] = i->fX;
2175 if (rmax[1] < i->fY) rmax[1] = i->fY;
2176 if (rmax[2] < i->fZ) rmax[2] = i->fZ;
2177 if (rmax[3] < i->fT) rmax[3] = i->fT;
2178 if (rmin[0] > i->fX) rmin[0] = i->fX;
2179 if (rmin[1] > i->fY) rmin[1] = i->fY;
2180 if (rmin[2] > i->fZ) rmin[2] = i->fZ;
2181 if (rmin[3] > i->fT) rmin[3] = i->fT;
2184 if (hist->CanExtendAllAxes() && hist->TestBit(kCanDelete)) {
2185 THLimitsFinder::GetLimitsFinder()->FindGoodLimits(hist,
2186 rmin[1], rmax[1], rmin[2], rmax[2], rmin[3], rmax[3]);
2189 Int_t ncolors = gStyle->GetNumberOfColors();
2190 TObjArray *pms = (TObjArray*)hist->GetListOfFunctions()->FindObject(
"polymarkers");
2192 TPolyMarker3D *pm3d;
2194 pms =
new TObjArray(ncolors);
2196 pms->SetName(
"polymarkers");
2197 hist->GetListOfFunctions()->Add(pms);
2198 for (col=0;col<ncolors;col++) {
2199 pm3d =
new TPolyMarker3D();
2200 pm3d->SetMarkerColor(col);
2203 pms->AddAt(pm3d,col);
2206 for (vector<Point4D_t>::const_iterator i = points->begin();
2207 i < points->end(); ++i) {
2209 if (col < 0) col = 0;
2210 if (col > ncolors-1) col = ncolors-1;
2211 pm3d = (TPolyMarker3D*)pms->UncheckedAt(col);
2212 pm3d->SetPoint(pm3d->GetLastPoint()+1, i->fY, i->fZ, i->fT);
2214 if (fTreeDrawArgsParser.GetShouldDraw()) {
2216 hist->Draw(fOption.Data());
2219 fOutput->Remove(fPoints);
2220 SafeDelete(fPoints);