ROOT logo
// @(#)root/treeplayer:$Id: TTreeDrawArgsParser.cxx 20882 2007-11-19 11:31:26Z rdm $
// Author: Marek Biskup   24/01/2005

/*************************************************************************
 * Copyright (C) 1995-2005, Rene Brun and Fons Rademakers.               *
 * All rights reserved.                                                  *
 *                                                                       *
 * For the licensing terms see $ROOTSYS/LICENSE.                         *
 * For the list of contributors see $ROOTSYS/README/CREDITS.             *
 *************************************************************************/

//////////////////////////////////////////////////////////////////////////
//                                                                      //
// TTreeDrawArgsParser                                                  //
//                                                                      //
// A class that parses all parameters for TTree::Draw().                //
// See TTree::Draw() for the format description.                        //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

#include "TTreeDrawArgsParser.h"
#include "TDirectory.h"


Int_t TTreeDrawArgsParser::fgMaxDimension = 4;
Int_t TTreeDrawArgsParser::fgMaxParameters = 9;


ClassImp(TTreeDrawArgsParser)

//______________________________________________________________________________
TTreeDrawArgsParser::TTreeDrawArgsParser()
{
   // Constructor - cleans all the class variables.

   ClearPrevious();
}


//______________________________________________________________________________
TTreeDrawArgsParser::~TTreeDrawArgsParser()
{
   // Destructor.
}

//______________________________________________________________________________
Int_t TTreeDrawArgsParser::GetMaxDimension()
{
   // return fgMaxDimension (cannot be inline)
   return fgMaxDimension;
}

//______________________________________________________________________________
void TTreeDrawArgsParser::ClearPrevious()
{
   // Resets all the variables of the class.

   fExp = "";
   fSelection = "";
   fOption = "";
   fDimension = -1;
   int i;
   for (i = 0; i < fgMaxDimension; i++) {
      fVarExp[i] = "";
   }
   fAdd = kFALSE;
   fName = "";
   fNoParameters = 0;
   for (i = 0; i < fgMaxParameters; i++) {
      fParameterGiven[i] = kFALSE;
      fParameters[i] = 0;
   }
   fShouldDraw = kTRUE;
   fOriginal = 0;
   fDrawProfile = kFALSE;
   fOptionSame = kFALSE;
   fEntryList = kFALSE;
   fOutputType = kUNKNOWN;
}

//______________________________________________________________________________
Bool_t TTreeDrawArgsParser::SplitVariables(TString variables)
{
   // Parse expression [var1 [:var2 [:var3] ...]],
   // number of variables cannot be greater than fgMaxDimension.
   // A colon which is followed by (or that follows) another semicolon
   // is not regarded as a separator.
   // If there are more separating : than fgMaxDimension - 1 then
   // all characters after (fgMaxDimension - 1)th colon is put into
   // the last variable.
   // fDimension := <number of variables>
   // fVarExp[0] := <first variable string>
   // fVarExp[1] := <second variable string>
   // ..
   // Returns kFALSE in case of an error.

   fDimension = 0;
   if (variables.Length() == 0)
      return kTRUE;

   int prev = 0;
   int i;
   for (i = 0; i < variables.Length() && fDimension < fgMaxDimension; i++) {
      if (variables[i] == ':'
          && !( (i > 0 && variables[i - 1] == ':')
                || (i + 1 < variables.Length() && variables[i + 1] == ':') ) ) {
         fVarExp[fDimension] = variables(prev, i - prev);
         prev = i+1;
         fDimension++;
      }
   }
   if (fDimension < fgMaxDimension && i != prev)
      fVarExp[fDimension++] = variables(prev, i - prev);
   else
      return kFALSE;

   return kTRUE;
}

//______________________________________________________________________________
Bool_t TTreeDrawArgsParser::ParseName(TString name)
{
   // Syntax:
   // [' '*][[\+][' '*]name[(num1 [, [num2] ] [, [num3] ] ...)]]
   // num's are floating point numbers
   // sets the fileds fNoParameters, fParameterGiven, fParameters, fAdd, fName
   // to apropriate values.
   // Returns kFALSE in case of an error.

   name.ReplaceAll(" ", "");

   if (name.Length() != 0 && name[0] == '+') {
      fAdd = kTRUE;
      name = name (1, name.Length() - 1);
   }
   else
      fAdd = kFALSE;
   Bool_t result = kTRUE;

   fNoParameters = 0;
   for (int i = 0; i < fgMaxParameters; i++)
      fParameterGiven[i] = kFALSE;

   if (char *p = (char*)strstr(name.Data(), "(")) {
      fName = name(0, p - name.Data());
      p++;
      char* end = p + strlen(p);

      for (int i = 0; i < fgMaxParameters; i++) {
         char* q = p;
         while (p < end && *p != ',' && *p != ')')
            p++;
         TString s(q, p - q);
         if (sscanf(s.Data(), "%lf", &fParameters[i]) == 1) {
            fParameterGiven[i] = kTRUE;
            fNoParameters++;
         }
         if (p == end) {
            Error("ParseName", "expected \')\'");
            result = kFALSE;
            break;
         }
         else if (*p == ')')
            break;
         else if (*p == ',')
            p++;
         else {
            Error("ParseName", "impossible value for *q!");
            result = kFALSE;
            break;
         }
      }
   }
   else { // if (char *p = strstr(name.Data(), "("))
      fName = name;
   }
   return result;
}

//______________________________________________________________________________
Bool_t TTreeDrawArgsParser::ParseVarExp()
{
   // Split variables and parse name and parameters in brackets.

   char* gg = (char*)strstr(fExp.Data(), ">>");
   TString variables;
   TString name;

   if (gg) {
      variables = fExp(0, gg - fExp.Data());
      name = fExp(gg+2 - fExp.Data(), fExp.Length() - (gg + 2 - fExp.Data()));
   }
   else {
      variables = fExp;
      name = "";
   }
   Bool_t result = SplitVariables(variables) && ParseName(name);
   if (!result) {
      Error("ParseVarExp", "error parsing variable expression");
      return kFALSE;
   }
   return result;
}

//______________________________________________________________________________
Bool_t TTreeDrawArgsParser::ParseOption()
{
   // Check if options contain some data important for choosing the type of the
   // drawn object.

   fOption.ToLower();

   if (fOption.Contains("goff")) {
      fShouldDraw = kFALSE;
   }
   if (fOption.Contains("prof")) {
      fDrawProfile = kTRUE;
   }
   if (fOption.Contains("same")) {
      fOptionSame = kTRUE;
   }
   if (fOption.Contains("entrylist")){
      fEntryList = kTRUE;
   }
   return true;
}

//______________________________________________________________________________
Bool_t TTreeDrawArgsParser::Parse(const char *varexp, const char *selection, Option_t *option)
{
   // Parses parameters from TTree::Draw().
   // varexp - Variable expression; see TTree::Draw()
   // selection - selection expression; see TTree::Draw()
   // option - Drawnig option; see TTree::Draw

   ClearPrevious();

   // read the data provided and fill class fields
   fSelection = selection;
   fExp = varexp;
   fOption = option;
   Bool_t success = ParseVarExp();
   success &= ParseOption();

   if (!success)
      return kFALSE;

   // if the name was specified find the existing histogram
   if (fName != "") {
      fOriginal = gDirectory->Get(fName);
   }
   else
      fOriginal = 0;

   DefineType();

   return kTRUE;
}

//______________________________________________________________________________
TTreeDrawArgsParser::EOutputType TTreeDrawArgsParser::DefineType()
{
   // Put the type of the draw result into fOutputType and return it.

   if (fDimension == 0){
      if (fEntryList)
         return fOutputType = kENTRYLIST;
      else
         return fOutputType = kEVENTLIST;
   }
   if (fDimension == 2 && fDrawProfile)
      return fOutputType = kPROFILE;
   if (fDimension == 3 && fDrawProfile)
      return fOutputType = kPROFILE2D;

   if (fDimension == 2) {
      Bool_t graph = kFALSE;
      Int_t l = fOption.Length();
      if (l == 0 || fOption.Contains("same")) graph = kTRUE;
      if (fOption.Contains("p")     || fOption.Contains("*")    || fOption.Contains("l"))    graph = kTRUE;
      if (fOption.Contains("surf")  || fOption.Contains("lego") || fOption.Contains("cont")) graph = kFALSE;
      if (fOption.Contains("col")   || fOption.Contains("hist") || fOption.Contains("scat")) graph = kFALSE;
      if (fOption.Contains("box"))                                                   graph = kFALSE;
      if (graph)
         return fOutputType = kGRAPH;
      else
         return fOutputType = kHISTOGRAM2D;
   }
   if (fDimension == 3) {
      if (fOption.Contains("col"))
         return fOutputType = kLISTOFGRAPHS;
      else
         return fOutputType = kPOLYMARKER3D;
   }
   if (fDimension == 1)
      return fOutputType = kHISTOGRAM1D;
   if (fDimension == 4)
      return fOutputType = kLISTOFPOLYMARKERS3D;
   return kUNKNOWN;
}

//______________________________________________________________________________
TString TTreeDrawArgsParser::GetProofSelectorName() const
{
   // Returns apropriate TSelector class name for proof for the object that is to be drawn
   // assumes that Parse() method has been called before.

   switch (fOutputType) {
      case kUNKNOWN:
         return "";
      case kEVENTLIST:
         return "TProofDrawEventList";
      case kENTRYLIST:
         return "TProofDrawEntryList";
      case kPROFILE:
         return "TProofDrawProfile";
      case kPROFILE2D:
         return "TProofDrawProfile2D";
      case kGRAPH:
         return "TProofDrawGraph";
      case kPOLYMARKER3D:
         return "TProofDrawPolyMarker3D";
      case kLISTOFGRAPHS:
         return "TProofDrawListOfGraphs";
      case kHISTOGRAM1D:
      case kHISTOGRAM2D:
         return "TProofDrawHist";
      case kLISTOFPOLYMARKERS3D:
         return "TProofDrawListOfPolyMarkers3D";
      default:
         return "";
   }
}

//______________________________________________________________________________
Double_t TTreeDrawArgsParser::GetParameter(Int_t num) const
{
   // returns *num*-th parameter from brackets in the expression
   // in case of an error (wrong number) returns 0.0
   // num - number of parameter (counted from 0)

   if (num >= 0 && num <= fgMaxParameters && fParameterGiven[num])
      return fParameters[num];
   else {
      Error("GetParameter","wrong arguments");
      return 0.0;
   }
}

//______________________________________________________________________________
Double_t TTreeDrawArgsParser::GetIfSpecified(Int_t num, Double_t def) const
{
   // num - parameter number
   // def - default value of the parameter
   // returns the value of *num*-th parameter from the brackets in the variable expression
   // if the parameter of that number wasn't specified returns *def*.

   if (num >= 0 && num <= fgMaxParameters && fParameterGiven[num])
      return fParameters[num];
   else
      return def;
}

//______________________________________________________________________________
Bool_t TTreeDrawArgsParser::IsSpecified(int num) const
{
   // returns kTRUE if the *num*-th parameter was specified
   // otherwise returns fFALSE
   // in case of an error (wrong num) prints an error message and
   // returns kFALSE.

   if (num >= 0 && num <= fgMaxParameters)
      return fParameterGiven[num];
   else
      Error("Specified", "wrong parameter %d; fgMaxParameters: %d", num, fgMaxParameters);
   return kFALSE;
}

//______________________________________________________________________________
TString TTreeDrawArgsParser::GetVarExp(Int_t num) const
{
   // Returns the *num*-th variable string
   // in case of an error prints an error message and returns an empty string.

   if (num >= 0 && num < fDimension)
      return fVarExp[num];
   else
      Error("GetVarExp", "wrong Parameters %d; fDimension = %d", num, fDimension);
   return "";
}

//______________________________________________________________________________
TString TTreeDrawArgsParser::GetVarExp() const
{
   // Returns the variable string, i.e. [var1[:var2[:var2[:var4]]]].

   if (fDimension <= 0)
      return "";
   TString exp = fVarExp[0];
   for (int i = 1; i < fDimension; i++) {
      exp += ":";
      exp += fVarExp[i];
   }
   return exp;
}


//______________________________________________________________________________
TString TTreeDrawArgsParser::GetObjectTitle() const
{
   // Returns the desired plot title.
   if (fSelection != "")
      return Form("%s {%s}", GetVarExp().Data(), fSelection.Data());
   else
      return GetVarExp();
}

 TTreeDrawArgsParser.cxx:1
 TTreeDrawArgsParser.cxx:2
 TTreeDrawArgsParser.cxx:3
 TTreeDrawArgsParser.cxx:4
 TTreeDrawArgsParser.cxx:5
 TTreeDrawArgsParser.cxx:6
 TTreeDrawArgsParser.cxx:7
 TTreeDrawArgsParser.cxx:8
 TTreeDrawArgsParser.cxx:9
 TTreeDrawArgsParser.cxx:10
 TTreeDrawArgsParser.cxx:11
 TTreeDrawArgsParser.cxx:12
 TTreeDrawArgsParser.cxx:13
 TTreeDrawArgsParser.cxx:14
 TTreeDrawArgsParser.cxx:15
 TTreeDrawArgsParser.cxx:16
 TTreeDrawArgsParser.cxx:17
 TTreeDrawArgsParser.cxx:18
 TTreeDrawArgsParser.cxx:19
 TTreeDrawArgsParser.cxx:20
 TTreeDrawArgsParser.cxx:21
 TTreeDrawArgsParser.cxx:22
 TTreeDrawArgsParser.cxx:23
 TTreeDrawArgsParser.cxx:24
 TTreeDrawArgsParser.cxx:25
 TTreeDrawArgsParser.cxx:26
 TTreeDrawArgsParser.cxx:27
 TTreeDrawArgsParser.cxx:28
 TTreeDrawArgsParser.cxx:29
 TTreeDrawArgsParser.cxx:30
 TTreeDrawArgsParser.cxx:31
 TTreeDrawArgsParser.cxx:32
 TTreeDrawArgsParser.cxx:33
 TTreeDrawArgsParser.cxx:34
 TTreeDrawArgsParser.cxx:35
 TTreeDrawArgsParser.cxx:36
 TTreeDrawArgsParser.cxx:37
 TTreeDrawArgsParser.cxx:38
 TTreeDrawArgsParser.cxx:39
 TTreeDrawArgsParser.cxx:40
 TTreeDrawArgsParser.cxx:41
 TTreeDrawArgsParser.cxx:42
 TTreeDrawArgsParser.cxx:43
 TTreeDrawArgsParser.cxx:44
 TTreeDrawArgsParser.cxx:45
 TTreeDrawArgsParser.cxx:46
 TTreeDrawArgsParser.cxx:47
 TTreeDrawArgsParser.cxx:48
 TTreeDrawArgsParser.cxx:49
 TTreeDrawArgsParser.cxx:50
 TTreeDrawArgsParser.cxx:51
 TTreeDrawArgsParser.cxx:52
 TTreeDrawArgsParser.cxx:53
 TTreeDrawArgsParser.cxx:54
 TTreeDrawArgsParser.cxx:55
 TTreeDrawArgsParser.cxx:56
 TTreeDrawArgsParser.cxx:57
 TTreeDrawArgsParser.cxx:58
 TTreeDrawArgsParser.cxx:59
 TTreeDrawArgsParser.cxx:60
 TTreeDrawArgsParser.cxx:61
 TTreeDrawArgsParser.cxx:62
 TTreeDrawArgsParser.cxx:63
 TTreeDrawArgsParser.cxx:64
 TTreeDrawArgsParser.cxx:65
 TTreeDrawArgsParser.cxx:66
 TTreeDrawArgsParser.cxx:67
 TTreeDrawArgsParser.cxx:68
 TTreeDrawArgsParser.cxx:69
 TTreeDrawArgsParser.cxx:70
 TTreeDrawArgsParser.cxx:71
 TTreeDrawArgsParser.cxx:72
 TTreeDrawArgsParser.cxx:73
 TTreeDrawArgsParser.cxx:74
 TTreeDrawArgsParser.cxx:75
 TTreeDrawArgsParser.cxx:76
 TTreeDrawArgsParser.cxx:77
 TTreeDrawArgsParser.cxx:78
 TTreeDrawArgsParser.cxx:79
 TTreeDrawArgsParser.cxx:80
 TTreeDrawArgsParser.cxx:81
 TTreeDrawArgsParser.cxx:82
 TTreeDrawArgsParser.cxx:83
 TTreeDrawArgsParser.cxx:84
 TTreeDrawArgsParser.cxx:85
 TTreeDrawArgsParser.cxx:86
 TTreeDrawArgsParser.cxx:87
 TTreeDrawArgsParser.cxx:88
 TTreeDrawArgsParser.cxx:89
 TTreeDrawArgsParser.cxx:90
 TTreeDrawArgsParser.cxx:91
 TTreeDrawArgsParser.cxx:92
 TTreeDrawArgsParser.cxx:93
 TTreeDrawArgsParser.cxx:94
 TTreeDrawArgsParser.cxx:95
 TTreeDrawArgsParser.cxx:96
 TTreeDrawArgsParser.cxx:97
 TTreeDrawArgsParser.cxx:98
 TTreeDrawArgsParser.cxx:99
 TTreeDrawArgsParser.cxx:100
 TTreeDrawArgsParser.cxx:101
 TTreeDrawArgsParser.cxx:102
 TTreeDrawArgsParser.cxx:103
 TTreeDrawArgsParser.cxx:104
 TTreeDrawArgsParser.cxx:105
 TTreeDrawArgsParser.cxx:106
 TTreeDrawArgsParser.cxx:107
 TTreeDrawArgsParser.cxx:108
 TTreeDrawArgsParser.cxx:109
 TTreeDrawArgsParser.cxx:110
 TTreeDrawArgsParser.cxx:111
 TTreeDrawArgsParser.cxx:112
 TTreeDrawArgsParser.cxx:113
 TTreeDrawArgsParser.cxx:114
 TTreeDrawArgsParser.cxx:115
 TTreeDrawArgsParser.cxx:116
 TTreeDrawArgsParser.cxx:117
 TTreeDrawArgsParser.cxx:118
 TTreeDrawArgsParser.cxx:119
 TTreeDrawArgsParser.cxx:120
 TTreeDrawArgsParser.cxx:121
 TTreeDrawArgsParser.cxx:122
 TTreeDrawArgsParser.cxx:123
 TTreeDrawArgsParser.cxx:124
 TTreeDrawArgsParser.cxx:125
 TTreeDrawArgsParser.cxx:126
 TTreeDrawArgsParser.cxx:127
 TTreeDrawArgsParser.cxx:128
 TTreeDrawArgsParser.cxx:129
 TTreeDrawArgsParser.cxx:130
 TTreeDrawArgsParser.cxx:131
 TTreeDrawArgsParser.cxx:132
 TTreeDrawArgsParser.cxx:133
 TTreeDrawArgsParser.cxx:134
 TTreeDrawArgsParser.cxx:135
 TTreeDrawArgsParser.cxx:136
 TTreeDrawArgsParser.cxx:137
 TTreeDrawArgsParser.cxx:138
 TTreeDrawArgsParser.cxx:139
 TTreeDrawArgsParser.cxx:140
 TTreeDrawArgsParser.cxx:141
 TTreeDrawArgsParser.cxx:142
 TTreeDrawArgsParser.cxx:143
 TTreeDrawArgsParser.cxx:144
 TTreeDrawArgsParser.cxx:145
 TTreeDrawArgsParser.cxx:146
 TTreeDrawArgsParser.cxx:147
 TTreeDrawArgsParser.cxx:148
 TTreeDrawArgsParser.cxx:149
 TTreeDrawArgsParser.cxx:150
 TTreeDrawArgsParser.cxx:151
 TTreeDrawArgsParser.cxx:152
 TTreeDrawArgsParser.cxx:153
 TTreeDrawArgsParser.cxx:154
 TTreeDrawArgsParser.cxx:155
 TTreeDrawArgsParser.cxx:156
 TTreeDrawArgsParser.cxx:157
 TTreeDrawArgsParser.cxx:158
 TTreeDrawArgsParser.cxx:159
 TTreeDrawArgsParser.cxx:160
 TTreeDrawArgsParser.cxx:161
 TTreeDrawArgsParser.cxx:162
 TTreeDrawArgsParser.cxx:163
 TTreeDrawArgsParser.cxx:164
 TTreeDrawArgsParser.cxx:165
 TTreeDrawArgsParser.cxx:166
 TTreeDrawArgsParser.cxx:167
 TTreeDrawArgsParser.cxx:168
 TTreeDrawArgsParser.cxx:169
 TTreeDrawArgsParser.cxx:170
 TTreeDrawArgsParser.cxx:171
 TTreeDrawArgsParser.cxx:172
 TTreeDrawArgsParser.cxx:173
 TTreeDrawArgsParser.cxx:174
 TTreeDrawArgsParser.cxx:175
 TTreeDrawArgsParser.cxx:176
 TTreeDrawArgsParser.cxx:177
 TTreeDrawArgsParser.cxx:178
 TTreeDrawArgsParser.cxx:179
 TTreeDrawArgsParser.cxx:180
 TTreeDrawArgsParser.cxx:181
 TTreeDrawArgsParser.cxx:182
 TTreeDrawArgsParser.cxx:183
 TTreeDrawArgsParser.cxx:184
 TTreeDrawArgsParser.cxx:185
 TTreeDrawArgsParser.cxx:186
 TTreeDrawArgsParser.cxx:187
 TTreeDrawArgsParser.cxx:188
 TTreeDrawArgsParser.cxx:189
 TTreeDrawArgsParser.cxx:190
 TTreeDrawArgsParser.cxx:191
 TTreeDrawArgsParser.cxx:192
 TTreeDrawArgsParser.cxx:193
 TTreeDrawArgsParser.cxx:194
 TTreeDrawArgsParser.cxx:195
 TTreeDrawArgsParser.cxx:196
 TTreeDrawArgsParser.cxx:197
 TTreeDrawArgsParser.cxx:198
 TTreeDrawArgsParser.cxx:199
 TTreeDrawArgsParser.cxx:200
 TTreeDrawArgsParser.cxx:201
 TTreeDrawArgsParser.cxx:202
 TTreeDrawArgsParser.cxx:203
 TTreeDrawArgsParser.cxx:204
 TTreeDrawArgsParser.cxx:205
 TTreeDrawArgsParser.cxx:206
 TTreeDrawArgsParser.cxx:207
 TTreeDrawArgsParser.cxx:208
 TTreeDrawArgsParser.cxx:209
 TTreeDrawArgsParser.cxx:210
 TTreeDrawArgsParser.cxx:211
 TTreeDrawArgsParser.cxx:212
 TTreeDrawArgsParser.cxx:213
 TTreeDrawArgsParser.cxx:214
 TTreeDrawArgsParser.cxx:215
 TTreeDrawArgsParser.cxx:216
 TTreeDrawArgsParser.cxx:217
 TTreeDrawArgsParser.cxx:218
 TTreeDrawArgsParser.cxx:219
 TTreeDrawArgsParser.cxx:220
 TTreeDrawArgsParser.cxx:221
 TTreeDrawArgsParser.cxx:222
 TTreeDrawArgsParser.cxx:223
 TTreeDrawArgsParser.cxx:224
 TTreeDrawArgsParser.cxx:225
 TTreeDrawArgsParser.cxx:226
 TTreeDrawArgsParser.cxx:227
 TTreeDrawArgsParser.cxx:228
 TTreeDrawArgsParser.cxx:229
 TTreeDrawArgsParser.cxx:230
 TTreeDrawArgsParser.cxx:231
 TTreeDrawArgsParser.cxx:232
 TTreeDrawArgsParser.cxx:233
 TTreeDrawArgsParser.cxx:234
 TTreeDrawArgsParser.cxx:235
 TTreeDrawArgsParser.cxx:236
 TTreeDrawArgsParser.cxx:237
 TTreeDrawArgsParser.cxx:238
 TTreeDrawArgsParser.cxx:239
 TTreeDrawArgsParser.cxx:240
 TTreeDrawArgsParser.cxx:241
 TTreeDrawArgsParser.cxx:242
 TTreeDrawArgsParser.cxx:243
 TTreeDrawArgsParser.cxx:244
 TTreeDrawArgsParser.cxx:245
 TTreeDrawArgsParser.cxx:246
 TTreeDrawArgsParser.cxx:247
 TTreeDrawArgsParser.cxx:248
 TTreeDrawArgsParser.cxx:249
 TTreeDrawArgsParser.cxx:250
 TTreeDrawArgsParser.cxx:251
 TTreeDrawArgsParser.cxx:252
 TTreeDrawArgsParser.cxx:253
 TTreeDrawArgsParser.cxx:254
 TTreeDrawArgsParser.cxx:255
 TTreeDrawArgsParser.cxx:256
 TTreeDrawArgsParser.cxx:257
 TTreeDrawArgsParser.cxx:258
 TTreeDrawArgsParser.cxx:259
 TTreeDrawArgsParser.cxx:260
 TTreeDrawArgsParser.cxx:261
 TTreeDrawArgsParser.cxx:262
 TTreeDrawArgsParser.cxx:263
 TTreeDrawArgsParser.cxx:264
 TTreeDrawArgsParser.cxx:265
 TTreeDrawArgsParser.cxx:266
 TTreeDrawArgsParser.cxx:267
 TTreeDrawArgsParser.cxx:268
 TTreeDrawArgsParser.cxx:269
 TTreeDrawArgsParser.cxx:270
 TTreeDrawArgsParser.cxx:271
 TTreeDrawArgsParser.cxx:272
 TTreeDrawArgsParser.cxx:273
 TTreeDrawArgsParser.cxx:274
 TTreeDrawArgsParser.cxx:275
 TTreeDrawArgsParser.cxx:276
 TTreeDrawArgsParser.cxx:277
 TTreeDrawArgsParser.cxx:278
 TTreeDrawArgsParser.cxx:279
 TTreeDrawArgsParser.cxx:280
 TTreeDrawArgsParser.cxx:281
 TTreeDrawArgsParser.cxx:282
 TTreeDrawArgsParser.cxx:283
 TTreeDrawArgsParser.cxx:284
 TTreeDrawArgsParser.cxx:285
 TTreeDrawArgsParser.cxx:286
 TTreeDrawArgsParser.cxx:287
 TTreeDrawArgsParser.cxx:288
 TTreeDrawArgsParser.cxx:289
 TTreeDrawArgsParser.cxx:290
 TTreeDrawArgsParser.cxx:291
 TTreeDrawArgsParser.cxx:292
 TTreeDrawArgsParser.cxx:293
 TTreeDrawArgsParser.cxx:294
 TTreeDrawArgsParser.cxx:295
 TTreeDrawArgsParser.cxx:296
 TTreeDrawArgsParser.cxx:297
 TTreeDrawArgsParser.cxx:298
 TTreeDrawArgsParser.cxx:299
 TTreeDrawArgsParser.cxx:300
 TTreeDrawArgsParser.cxx:301
 TTreeDrawArgsParser.cxx:302
 TTreeDrawArgsParser.cxx:303
 TTreeDrawArgsParser.cxx:304
 TTreeDrawArgsParser.cxx:305
 TTreeDrawArgsParser.cxx:306
 TTreeDrawArgsParser.cxx:307
 TTreeDrawArgsParser.cxx:308
 TTreeDrawArgsParser.cxx:309
 TTreeDrawArgsParser.cxx:310
 TTreeDrawArgsParser.cxx:311
 TTreeDrawArgsParser.cxx:312
 TTreeDrawArgsParser.cxx:313
 TTreeDrawArgsParser.cxx:314
 TTreeDrawArgsParser.cxx:315
 TTreeDrawArgsParser.cxx:316
 TTreeDrawArgsParser.cxx:317
 TTreeDrawArgsParser.cxx:318
 TTreeDrawArgsParser.cxx:319
 TTreeDrawArgsParser.cxx:320
 TTreeDrawArgsParser.cxx:321
 TTreeDrawArgsParser.cxx:322
 TTreeDrawArgsParser.cxx:323
 TTreeDrawArgsParser.cxx:324
 TTreeDrawArgsParser.cxx:325
 TTreeDrawArgsParser.cxx:326
 TTreeDrawArgsParser.cxx:327
 TTreeDrawArgsParser.cxx:328
 TTreeDrawArgsParser.cxx:329
 TTreeDrawArgsParser.cxx:330
 TTreeDrawArgsParser.cxx:331
 TTreeDrawArgsParser.cxx:332
 TTreeDrawArgsParser.cxx:333
 TTreeDrawArgsParser.cxx:334
 TTreeDrawArgsParser.cxx:335
 TTreeDrawArgsParser.cxx:336
 TTreeDrawArgsParser.cxx:337
 TTreeDrawArgsParser.cxx:338
 TTreeDrawArgsParser.cxx:339
 TTreeDrawArgsParser.cxx:340
 TTreeDrawArgsParser.cxx:341
 TTreeDrawArgsParser.cxx:342
 TTreeDrawArgsParser.cxx:343
 TTreeDrawArgsParser.cxx:344
 TTreeDrawArgsParser.cxx:345
 TTreeDrawArgsParser.cxx:346
 TTreeDrawArgsParser.cxx:347
 TTreeDrawArgsParser.cxx:348
 TTreeDrawArgsParser.cxx:349
 TTreeDrawArgsParser.cxx:350
 TTreeDrawArgsParser.cxx:351
 TTreeDrawArgsParser.cxx:352
 TTreeDrawArgsParser.cxx:353
 TTreeDrawArgsParser.cxx:354
 TTreeDrawArgsParser.cxx:355
 TTreeDrawArgsParser.cxx:356
 TTreeDrawArgsParser.cxx:357
 TTreeDrawArgsParser.cxx:358
 TTreeDrawArgsParser.cxx:359
 TTreeDrawArgsParser.cxx:360
 TTreeDrawArgsParser.cxx:361
 TTreeDrawArgsParser.cxx:362
 TTreeDrawArgsParser.cxx:363
 TTreeDrawArgsParser.cxx:364
 TTreeDrawArgsParser.cxx:365
 TTreeDrawArgsParser.cxx:366
 TTreeDrawArgsParser.cxx:367
 TTreeDrawArgsParser.cxx:368
 TTreeDrawArgsParser.cxx:369
 TTreeDrawArgsParser.cxx:370
 TTreeDrawArgsParser.cxx:371
 TTreeDrawArgsParser.cxx:372
 TTreeDrawArgsParser.cxx:373
 TTreeDrawArgsParser.cxx:374
 TTreeDrawArgsParser.cxx:375
 TTreeDrawArgsParser.cxx:376
 TTreeDrawArgsParser.cxx:377
 TTreeDrawArgsParser.cxx:378
 TTreeDrawArgsParser.cxx:379
 TTreeDrawArgsParser.cxx:380
 TTreeDrawArgsParser.cxx:381
 TTreeDrawArgsParser.cxx:382
 TTreeDrawArgsParser.cxx:383
 TTreeDrawArgsParser.cxx:384
 TTreeDrawArgsParser.cxx:385
 TTreeDrawArgsParser.cxx:386
 TTreeDrawArgsParser.cxx:387
 TTreeDrawArgsParser.cxx:388
 TTreeDrawArgsParser.cxx:389
 TTreeDrawArgsParser.cxx:390
 TTreeDrawArgsParser.cxx:391
 TTreeDrawArgsParser.cxx:392
 TTreeDrawArgsParser.cxx:393
 TTreeDrawArgsParser.cxx:394
 TTreeDrawArgsParser.cxx:395
 TTreeDrawArgsParser.cxx:396
 TTreeDrawArgsParser.cxx:397
 TTreeDrawArgsParser.cxx:398
 TTreeDrawArgsParser.cxx:399
 TTreeDrawArgsParser.cxx:400
 TTreeDrawArgsParser.cxx:401
 TTreeDrawArgsParser.cxx:402
 TTreeDrawArgsParser.cxx:403
 TTreeDrawArgsParser.cxx:404
 TTreeDrawArgsParser.cxx:405
 TTreeDrawArgsParser.cxx:406
 TTreeDrawArgsParser.cxx:407
 TTreeDrawArgsParser.cxx:408
 TTreeDrawArgsParser.cxx:409
 TTreeDrawArgsParser.cxx:410
 TTreeDrawArgsParser.cxx:411
 TTreeDrawArgsParser.cxx:412
 TTreeDrawArgsParser.cxx:413
 TTreeDrawArgsParser.cxx:414
 TTreeDrawArgsParser.cxx:415
 TTreeDrawArgsParser.cxx:416
 TTreeDrawArgsParser.cxx:417