21 Int_t TTreeDrawArgsParser::fgMaxDimension = 4;
22 Int_t TTreeDrawArgsParser::fgMaxParameters = 9;
25 ClassImp(TTreeDrawArgsParser);
30 TTreeDrawArgsParser::TTreeDrawArgsParser()
38 TTreeDrawArgsParser::~TTreeDrawArgsParser()
45 Int_t TTreeDrawArgsParser::GetMaxDimension()
47 return fgMaxDimension;
53 void TTreeDrawArgsParser::ClearPrevious()
60 for (i = 0; i < fgMaxDimension; i++) {
66 for (i = 0; i < fgMaxParameters; i++) {
67 fParameterGiven[i] = kFALSE;
72 fDrawProfile = kFALSE;
75 fOutputType = kUNKNOWN;
95 Bool_t TTreeDrawArgsParser::SplitVariables(TString variables)
98 if (variables.Length() == 0)
103 for (i = 0; i < variables.Length() && fDimension < fgMaxDimension; i++) {
104 if (variables[i] ==
':'
105 && !( (i > 0 && variables[i - 1] ==
':')
106 || (i + 1 < variables.Length() && variables[i + 1] ==
':') ) ) {
107 fVarExp[fDimension] = variables(prev, i - prev);
112 if (fDimension < fgMaxDimension && i != prev)
113 fVarExp[fDimension++] = variables(prev, i - prev);
131 Bool_t TTreeDrawArgsParser::ParseName(TString name)
133 name.ReplaceAll(
" ",
"");
135 if (name.Length() != 0 && name[0] ==
'+') {
137 name = name (1, name.Length() - 1);
141 Bool_t result = kTRUE;
144 for (
int i = 0; i < fgMaxParameters; i++)
145 fParameterGiven[i] = kFALSE;
147 if (
char *p = (
char*)strstr(name.Data(),
"(")) {
148 fName = name(0, p - name.Data());
150 char* end = p + strlen(p);
152 for (
int i = 0; i < fgMaxParameters; i++) {
154 while (p < end && *p !=
',' && *p !=
')')
157 if (sscanf(s.Data(),
"%lf", &fParameters[i]) == 1) {
158 fParameterGiven[i] = kTRUE;
162 Error(
"ParseName",
"expected \')\'");
171 Error(
"ParseName",
"impossible value for *q!");
186 Bool_t TTreeDrawArgsParser::ParseVarExp()
188 char* gg = (
char*)strstr(fExp.Data(),
">>");
193 variables = fExp(0, gg - fExp.Data());
194 name = fExp(gg+2 - fExp.Data(), fExp.Length() - (gg + 2 - fExp.Data()));
200 Bool_t result = SplitVariables(variables) && ParseName(name);
202 Error(
"ParseVarExp",
"error parsing variable expression");
212 Bool_t TTreeDrawArgsParser::ParseOption()
216 if (fOption.Contains(
"goff")) {
217 fShouldDraw = kFALSE;
219 if (fOption.Contains(
"prof")) {
220 fDrawProfile = kTRUE;
222 if (fOption.Contains(
"same")) {
225 if (fOption.Contains(
"entrylist")){
237 Bool_t TTreeDrawArgsParser::Parse(
const char *varexp,
const char *selection, Option_t *option)
242 fSelection = selection;
245 Bool_t success = ParseVarExp();
246 success &= ParseOption();
253 fOriginal = gDirectory->Get(fName);
266 TTreeDrawArgsParser::EOutputType TTreeDrawArgsParser::DefineType()
268 if (fDimension == 0){
270 return fOutputType = kENTRYLIST;
272 return fOutputType = kEVENTLIST;
274 if (fDimension == 2 && fDrawProfile)
275 return fOutputType = kPROFILE;
276 if (fDimension == 3 && fDrawProfile)
277 return fOutputType = kPROFILE2D;
279 if (fDimension == 2) {
280 Bool_t graph = kFALSE;
285 if (fOption.Contains(
"same")) graph = kTRUE;
286 if (fOption.Contains(
"p") || fOption.Contains(
"*") || fOption.Contains(
"l")) graph = kTRUE;
287 if (fOption.Contains(
"surf") || fOption.Contains(
"lego") || fOption.Contains(
"cont")) graph = kFALSE;
288 if (fOption.Contains(
"col") || fOption.Contains(
"hist") || fOption.Contains(
"scat")) graph = kFALSE;
289 if (fOption.Contains(
"box")) graph = kFALSE;
291 return fOutputType = kGRAPH;
293 return fOutputType = kHISTOGRAM2D;
295 if (fDimension == 3) {
296 if (fOption.Contains(
"col"))
297 return fOutputType = kLISTOFGRAPHS;
299 return fOutputType = kHISTOGRAM3D;
305 return fOutputType = kHISTOGRAM1D;
307 return fOutputType = kLISTOFPOLYMARKERS3D;
315 TString TTreeDrawArgsParser::GetProofSelectorName()
const
317 switch (fOutputType) {
321 return "TProofDrawEventList";
323 return "TProofDrawEntryList";
325 return "TProofDrawProfile";
327 return "TProofDrawProfile2D";
329 return "TProofDrawGraph";
331 return "TProofDrawPolyMarker3D";
333 return "TProofDrawListOfGraphs";
337 return "TProofDrawHist";
338 case kLISTOFPOLYMARKERS3D:
339 return "TProofDrawListOfPolyMarkers3D";
350 Double_t TTreeDrawArgsParser::GetParameter(Int_t num)
const
352 if (num >= 0 && num <= fgMaxParameters && fParameterGiven[num])
353 return fParameters[num];
355 Error(
"GetParameter",
"wrong arguments");
366 Double_t TTreeDrawArgsParser::GetIfSpecified(Int_t num, Double_t def)
const
368 if (num >= 0 && num <= fgMaxParameters && fParameterGiven[num])
369 return fParameters[num];
380 Bool_t TTreeDrawArgsParser::IsSpecified(
int num)
const
382 if (num >= 0 && num <= fgMaxParameters)
383 return fParameterGiven[num];
385 Error(
"Specified",
"wrong parameter %d; fgMaxParameters: %d", num, fgMaxParameters);
393 TString TTreeDrawArgsParser::GetVarExp(Int_t num)
const
395 if (num >= 0 && num < fDimension)
398 Error(
"GetVarExp",
"wrong Parameters %d; fDimension = %d", num, fDimension);
405 TString TTreeDrawArgsParser::GetVarExp()
const
409 TString exp = fVarExp[0];
410 for (
int i = 1; i < fDimension; i++) {
421 TString TTreeDrawArgsParser::GetObjectTitle()
const
423 if (fSelection !=
"")
424 return Form(
"%s {%s}", GetVarExp().Data(), fSelection.Data());