105 fFormulaList =
new TList();
106 fFormulaList->SetOwner(
kTRUE);
108 fSelectorFromFile = 0;
111 fInput =
new TList();
112 fInput->Add(
new TNamed(
"varexp",
""));
113 fInput->Add(
new TNamed(
"selection",
""));
114 fSelector->SetInputList(fInput);
115 gROOT->GetListOfCleanups()->Add(
this);
130 gROOT->GetListOfCleanups()->Remove(
this);
139 if (dynamic_cast<const TChain*>(T)) {
143 Error(
"BuildIndex",
"Creating a TChainIndex unsuccessful - switching to TTreeIndex");
187 if (tree == 0)
return 0;
192 for (
Int_t i = 0; i < nb; ++i) {
206 if (strlen(selection)) {
208 if (!select || !select->
GetNdim()) {
218 for (entry=firstentry;entry<firstentry+
nentries;entry++) {
220 if (entryNumber < 0)
break;
222 if (localEntry < 0)
break;
230 for(
Int_t current = 0; current<ndata && !keep; current++) {
290 const char *macrofilename,
const char *cutfilename,
293 if (!macrofilename || strlen(macrofilename)==0)
return 0;
299 if (cutfilename && strlen(cutfilename))
305 TString selname = wrapperPrefix;
310 if (aclicMode.
Length()==0) {
311 Warning(
"DrawScript",
"TTreeProxy does not work in interpreted mode yet. The script will be compiled.");
314 selname.
Append(aclicMode);
316 Info(
"DrawScript",
"%s",
Form(
"Will process tree/chain using %s",selname.
Data()));
340 TString possibleFilename = varexp0;
342 if ( dot_pos !=
kNPOS 343 && possibleFilename.
Index(
"Alt$")<0 && possibleFilename.
Index(
"Entries$")<0
344 && possibleFilename.
Index(
"LocalEntries$")<0
345 && possibleFilename.
Index(
"Length$")<0 && possibleFilename.
Index(
"Entry$")<0
346 && possibleFilename.
Index(
"LocalEntry$")<0
347 && possibleFilename.
Index(
"Min$")<0 && possibleFilename.
Index(
"Max$")<0
348 && possibleFilename.
Index(
"MinIf$")<0 && possibleFilename.
Index(
"MaxIf$")<0
349 && possibleFilename.
Index(
"Iteration$")<0 && possibleFilename.
Index(
"Sum$")<0
350 && possibleFilename.
Index(
">")<0 && possibleFilename.
Index(
"<")<0
355 "Drawing using a C++ file currently requires that both the expression and the selection are files\n\t\"%s\" is not a file",
359 return DrawScript(
"generatedSel",varexp0,selection,option,nentries,firstentry);
362 possibleFilename = selection;
363 if (possibleFilename.
Index(
"Alt$")<0 && possibleFilename.
Index(
"Entries$")<0
364 && possibleFilename.
Index(
"LocalEntries$")<0
365 && possibleFilename.
Index(
"Length$")<0 && possibleFilename.
Index(
"Entry$")<0
366 && possibleFilename.
Index(
"LocalEntry$")<0
367 && possibleFilename.
Index(
"Min$")<0 && possibleFilename.
Index(
"Max$")<0
368 && possibleFilename.
Index(
"MinIf$")<0 && possibleFilename.
Index(
"MaxIf$")<0
369 && possibleFilename.
Index(
"Iteration$")<0 && possibleFilename.
Index(
"Sum$")<0
370 && possibleFilename.
Index(
">")<0 && possibleFilename.
Index(
"<")<0
374 "Drawing using a C++ file currently requires that both the expression and the selection are files\n\t\"%s\" is not a file",
383 if (evlist && elist){
388 if (cvarexp) cvarexp->
SetTitle(varexp0);
389 if (cselection) cselection->
SetTitle(selection);
406 gROOT->ProcessLineFast(
"new TCanvas();");
447 gPad->DrawFrame(-1.,-1.,1.,1.);
456 Warning(
"DrawSelect",
"The selected TTree subset is empty.");
461 if (
fDimension == 1 && !(optpara||optcandle)) {
466 }
else if (
fDimension == 2 && !(optpara||optcandle)) {
474 if (l == 0 || opt ==
"same") graph =
kTRUE;
485 }
else if (
fDimension == 3 && !(optpara||optcandle)) {
491 }
else if (action == 33) {
498 if (opt.
Contains(
"same")) noscat -= 4;
506 }
else if (
fDimension == 4 && !(optpara||optcandle)) {
513 for (
Int_t col=0;col<ncolors;col++) {
516 if (draw) pm3d->
Draw();
519 }
else if (
fDimension > 1 && (optpara || optcandle)) {
522 fTree->
Draw(
">>enlist",selection,
"entrylist",nentries,firstentry);
524 gROOT->ProcessLine(
Form(
"TParallelCoord::SetEntryList((TParallelCoord*)0x%lx,(TEntryList*)0x%lx)",
561 Int_t nch = option ? strlen(option) + 10 : 10;
562 char *opt =
new char[nch];
563 if (option) strlcpy(opt,option,nch-1);
564 else strlcpy(opt,
"goff",5);
569 Int_t fitResult = -1;
604 Long64_t lastentry = firstentry + nentries - 1;
607 nentries = lastentry - firstentry + 1;
624 TTHREAD_TLS_DECL(std::string,column);
625 if (colindex<0 )
return "";
627 i1 = index[colindex] + 1;
628 n = index[colindex+1] - i1;
629 column = varexp(i1,n).
Data();
631 return column.c_str();
648 const char* ltitle = leaf->
GetTitle();
649 if (mother && mother!=branch) {
650 branchname = mother->
GetName();
651 if (branchname[branchname.Length()-1]!=
'.') {
654 if (strncmp(branchname.Data(),ltitle,branchname.Length())==0) {
660 branchname += ltitle;
665 char *bname = (
char*)branchname.Data();
666 char *twodim = (
char*)strstr(bname,
"[");
667 if (twodim) *twodim = 0;
669 if (*bname ==
'.') *bname=
'_';
670 if (*bname ==
',') *bname=
'_';
671 if (*bname ==
':') *bname=
'_';
672 if (*bname ==
'<') *bname=
'_';
673 if (*bname ==
'>') *bname=
'_';
727 thead.
Form(
"%s.h", classname);
728 FILE *fp = fopen(thead,
"w");
730 Error(
"MakeClass",
"cannot open output file %s", thead.
Data());
734 tcimp.
Form(
"%s.C", classname);
735 FILE *fpc = fopen(tcimp,
"w");
737 Error(
"MakeClass",
"cannot open output file %s", tcimp.
Data());
745 treefile =
"Memory Directory";
760 fprintf(fp,
"//////////////////////////////////////////////////////////\n");
761 fprintf(fp,
"// This class has been automatically generated on\n");
762 fprintf(fp,
"// %s by ROOT version %s\n",td.
AsString(),
gROOT->GetVersion());
765 fprintf(fp,
"// found on file: %s\n",treefile.
Data());
769 fprintf(fp,
"//////////////////////////////////////////////////////////\n");
771 fprintf(fp,
"#ifndef %s_h\n",classname);
772 fprintf(fp,
"#define %s_h\n",classname);
774 fprintf(fp,
"#include <TROOT.h>\n");
775 fprintf(fp,
"#include <TChain.h>\n");
776 fprintf(fp,
"#include <TFile.h>\n");
777 if (isHbook) fprintf(fp,
"#include <THbookFile.h>\n");
778 if (opt.
Contains(
"selector")) fprintf(fp,
"#include <TSelector.h>\n");
782 fprintf(fp,
"\n// Header file for the classes stored in the TTree if any.\n");
785 for (l=0;l<nleaves;l++) {
791 if (declfile && declfile[0]) {
792 static const char *precstl =
"prec_stl/";
793 static const unsigned int precstl_len = strlen(precstl);
794 static const char *rootinclude =
"include/";
795 static const unsigned int rootinclude_len = strlen(rootinclude);
796 if (strncmp(declfile,precstl,precstl_len) == 0) {
797 fprintf(fp,
"#include <%s>\n",declfile+precstl_len);
799 }
else if (strncmp(declfile,
"/usr/include/",13) == 0) {
800 fprintf(fp,
"#include <%s>\n",declfile+strlen(
"/include/c++/"));
801 listOfHeaders.
Add(
new TNamed(cl->
GetName(),declfile+strlen(
"/include/c++/")));
802 }
else if (strstr(declfile,
"/include/c++/") != 0) {
803 fprintf(fp,
"#include <%s>\n",declfile+strlen(
"/include/c++/"));
804 listOfHeaders.
Add(
new TNamed(cl->
GetName(),declfile+strlen(
"/include/c++/")));
805 }
else if (strncmp(declfile,rootinclude,rootinclude_len) == 0) {
806 fprintf(fp,
"#include <%s>\n",declfile+rootinclude_len);
809 fprintf(fp,
"#include \"%s\"\n",declfile);
822 for (l=0;l<nleaves;l++) {
836 for (l=0;l<nleaves;l++) {
849 fprintf(fp,
"class %s : public TSelector {\n",classname);
850 fprintf(fp,
"public :\n");
851 fprintf(fp,
" TTree *fChain; //!pointer to the analyzed TTree or TChain\n");
853 fprintf(fp,
"class %s {\n",classname);
854 fprintf(fp,
"public :\n");
855 fprintf(fp,
" TTree *fChain; //!pointer to the analyzed TTree or TChain\n");
856 fprintf(fp,
" Int_t fCurrent; //!current Tree number in a TChain\n");
859 fprintf(fp,
"\n// Fixed size dimensions of array or collections stored in the TTree if any.\n");
861 for (l=0;l<nleaves;l++) {
863 strlcpy(blen,leaf->
GetName(),
sizeof(blen));
866 if (*bname ==
'.') *bname=
'_';
867 if (*bname ==
',') *bname=
'_';
868 if (*bname ==
':') *bname=
'_';
869 if (*bname ==
'<') *bname=
'_';
870 if (*bname ==
'>') *bname=
'_';
874 if (blen[lenb-1] ==
'_') {
877 if (len <= 0) len = 1;
878 fprintf(fp,
" const Int_t kMax%s = %d;\n",blen,len);
886 fprintf(fp,
"\n // Declaration of leaf types\n");
890 const char *headOK =
" ";
891 const char *headcom =
" //";
893 char branchname[1024];
900 for (l=0;l<nleaves;l++) {
905 len = leaf->
GetLen();
if (len<=0) len = 1;
909 strlcpy(branchname,branch->
GetName(),
sizeof(branchname));
910 strlcpy(aprefix,branch->
GetName(),
sizeof(aprefix));
912 else leafStatus[
l] = 1;
915 strlcat(branchname,
".",
sizeof(branchname));
916 strlcat(branchname,leaf->
GetTitle(),
sizeof(branchname));
919 char *dim = (
char*)strstr(branchname,
"[");
if (dim) dim[0] = 0;
922 strlcpy(branchname,branch->
GetName(),
sizeof(branchname));
924 char *twodim = (
char*)strstr(leaf->
GetTitle(),
"][");
927 if (*bname ==
'.') *bname=
'_';
928 if (*bname ==
',') *bname=
'_';
929 if (*bname ==
':') *bname=
'_';
930 if (*bname ==
'<') *bname=
'_';
931 if (*bname ==
'>') *bname=
'_';
937 if (!leafobj->
GetClass()) {leafStatus[
l] = 1; head = headcom;}
939 if (leafStatus[l] == 0) mustInit.
Add(leafobj);
945 strlcpy(blen,leafcount->
GetName(),
sizeof(blen));
948 if (*bname ==
'.') *bname=
'_';
949 if (*bname ==
',') *bname=
'_';
950 if (*bname ==
':') *bname=
'_';
951 if (*bname ==
'<') *bname=
'_';
952 if (*bname ==
'>') *bname=
'_';
956 if (blen[lenb-1] ==
'_') {blen[lenb-1] = 0; kmax = 1;}
957 else snprintf(blen,
sizeof(blen),
"%d",len);
966 fprintf(fp,
" %-15s %s_;\n",
"Int_t", branchname);
970 fprintf(fp,
" %-15s *%s;\n",bre->
GetClassName(), branchname);
978 fprintf(fp,
"%s%-15s *%s;\n",headcom,bre->
GetClassName(), branchname);
980 fprintf(fp,
"%s%-15s *%s;\n",head,bre->
GetClassName(), branchname);
987 fprintf(fp,
"%s%-15s *%s;\n",head,bre->
GetClassName(), branchname);
988 if (leafStatus[l] == 0) mustInit.
Add(bre);
993 if (!cle) {leafStatus[
l] = 1;
continue;}
996 strlcpy(brename,bre->
GetName(),255);
997 char *bren = brename;
998 char *adot = strrchr(bren,
'.');
999 if (adot) bren = adot+1;
1000 char *brack = strchr(bren,
'[');
1001 if (brack) *brack = 0;
1007 if (leafcount) fprintf(fp,
"%s%-15s %s[kMax%s];\n",head,elem->
GetTypeName(), branchname,blen);
1008 else fprintf(fp,
"%s%-15s %s;\n",head,elem->
GetTypeName(), branchname);
1011 fprintf(fp,
"%s%-15s %s;\n",head,bre->
GetClassName(), branchname);
1016 if (strlen(leaf->
GetTypeName()) == 0) {leafStatus[
l] = 1;
continue;}
1027 const char *stars =
" ";
1034 char *dimInName = (
char*) strstr(branchname,
"[");
1035 if ( twodim || dimInName ) {
1037 dimensions = dimInName;
1040 if (twodim) dimensions += (
char*)(twodim+1);
1042 const char* leafcountName = leafcount->
GetName();
1046 strlcpy(b2len,l2->
GetName(),
sizeof(b2len));
1049 if (*bname ==
'.') *bname=
'_';
1050 if (*bname ==
',') *bname=
'_';
1051 if (*bname ==
':') *bname=
'_';
1052 if (*bname ==
'<') *bname=
'_';
1053 if (*bname ==
'>') *bname=
'_';
1056 leafcountName = b2len;
1058 if (dimensions.
Length()) {
1059 if (kmax) fprintf(fp,
" %-14s %s%s[kMax%s]%s; //[%s]\n",leaf->
GetTypeName(), stars,
1060 branchname,blen,dimensions.
Data(),leafcountName);
1061 else fprintf(fp,
" %-14s %s%s[%d]%s; //[%s]\n",leaf->
GetTypeName(), stars,
1062 branchname,len,dimensions.
Data(),leafcountName);
1064 if (kmax) fprintf(fp,
" %-14s %s%s[kMax%s]; //[%s]\n",leaf->
GetTypeName(), stars, branchname,blen,leafcountName);
1065 else fprintf(fp,
" %-14s %s%s[%d]; //[%s]\n",leaf->
GetTypeName(), stars, branchname,len,leafcountName);
1067 if (stars[0]==
'*') {
1069 if (kmax) n =
new TNamed(branchname,
Form(
"kMax%s",blen));
1070 else n =
new TNamed(branchname,
Form(
"%d",len));
1074 if (strstr(branchname,
"[")) len = 1;
1075 if (len < 2) fprintf(fp,
" %-15s %s;\n",leaf->
GetTypeName(), branchname);
1077 if (twodim) fprintf(fp,
" %-15s %s%s;\n",leaf->
GetTypeName(), branchname,(
char*)strstr(leaf->
GetTitle(),
"["));
1078 else fprintf(fp,
" %-15s %s[%d];\n",leaf->
GetTypeName(), branchname,len);
1085 fprintf(fp,
" // List of branches\n");
1086 for (l=0;l<nleaves;l++) {
1087 if (leafStatus[l])
continue;
1095 fprintf(fp,
" %s(TTree * /*tree*/ =0) : fChain(0) { }\n",classname) ;
1096 fprintf(fp,
" virtual ~%s() { }\n",classname);
1097 fprintf(fp,
" virtual Int_t Version() const { return 2; }\n");
1098 fprintf(fp,
" virtual void Begin(TTree *tree);\n");
1099 fprintf(fp,
" virtual void SlaveBegin(TTree *tree);\n");
1100 fprintf(fp,
" virtual void Init(TTree *tree);\n");
1101 fprintf(fp,
" virtual Bool_t Notify();\n");
1102 fprintf(fp,
" virtual Bool_t Process(Long64_t entry);\n");
1103 fprintf(fp,
" virtual Int_t GetEntry(Long64_t entry, Int_t getall = 0) { return fChain ? fChain->GetTree()->GetEntry(entry, getall) : 0; }\n");
1104 fprintf(fp,
" virtual void SetOption(const char *option) { fOption = option; }\n");
1105 fprintf(fp,
" virtual void SetObject(TObject *obj) { fObject = obj; }\n");
1106 fprintf(fp,
" virtual void SetInputList(TList *input) { fInput = input; }\n");
1107 fprintf(fp,
" virtual TList *GetOutputList() const { return fOutput; }\n");
1108 fprintf(fp,
" virtual void SlaveTerminate();\n");
1109 fprintf(fp,
" virtual void Terminate();\n\n");
1110 fprintf(fp,
" ClassDef(%s,0);\n",classname);
1113 fprintf(fp,
"#endif\n");
1117 fprintf(fp,
" %s(TTree *tree=0);\n",classname);
1118 fprintf(fp,
" virtual ~%s();\n",classname);
1119 fprintf(fp,
" virtual Int_t Cut(Long64_t entry);\n");
1120 fprintf(fp,
" virtual Int_t GetEntry(Long64_t entry);\n");
1121 fprintf(fp,
" virtual Long64_t LoadTree(Long64_t entry);\n");
1122 fprintf(fp,
" virtual void Init(TTree *tree);\n");
1123 fprintf(fp,
" virtual void Loop();\n");
1124 fprintf(fp,
" virtual Bool_t Notify();\n");
1125 fprintf(fp,
" virtual void Show(Long64_t entry = -1);\n");
1128 fprintf(fp,
"#endif\n");
1132 fprintf(fp,
"#ifdef %s_cxx\n",classname);
1134 fprintf(fp,
"%s::%s(TTree *tree) : fChain(0) \n",classname,classname);
1136 fprintf(fp,
"// if parameter tree is not specified (or zero), connect the file\n");
1137 fprintf(fp,
"// used to generate this class and read the Tree.\n");
1138 fprintf(fp,
" if (tree == 0) {\n");
1140 fprintf(fp,
"\n#ifdef SINGLE_TREE\n");
1141 fprintf(fp,
" // The following code should be used if you want this class to access\n");
1142 fprintf(fp,
" // a single tree instead of a chain\n");
1145 fprintf(fp,
" THbookFile *f = (THbookFile*)gROOT->GetListOfBrowsables()->FindObject(\"%s\");\n",
1147 fprintf(fp,
" if (!f) {\n");
1148 fprintf(fp,
" f = new THbookFile(\"%s\");\n",treefile.
Data());
1152 fprintf(fp,
" tree = (TTree*)f->Get(%d);\n\n",hid);
1154 fprintf(fp,
" TFile *f = (TFile*)gROOT->GetListOfFiles()->FindObject(\"%s\");\n",treefile.
Data());
1155 fprintf(fp,
" if (!f || !f->IsOpen()) {\n");
1156 fprintf(fp,
" f = new TFile(\"%s\");\n",treefile.
Data());
1160 fprintf(fp,
" dir->GetObject(\"%s\",tree);\n\n",
fTree->
GetName());
1162 fprintf(fp,
" f->GetObject(\"%s\",tree);\n\n",
fTree->
GetName());
1166 fprintf(fp,
"#else // SINGLE_TREE\n\n");
1167 fprintf(fp,
" // The following code should be used if you want this class to access a chain\n");
1168 fprintf(fp,
" // of trees.\n");
1169 fprintf(fp,
" TChain * chain = new TChain(\"%s\",\"%s\");\n",
1176 fprintf(fp,
" chain->Add(\"%s/%s\");\n",element->
GetTitle(),element->
GetName());
1179 fprintf(fp,
" tree = chain;\n");
1180 fprintf(fp,
"#endif // SINGLE_TREE\n\n");
1183 fprintf(fp,
" Init(tree);\n");
1190 fprintf(fp,
"%s::~%s()\n",classname,classname);
1192 fprintf(fp,
" if (!fChain) return;\n");
1196 fprintf(fp,
" delete fChain->GetCurrentFile();\n");
1203 fprintf(fp,
"Int_t %s::GetEntry(Long64_t entry)\n",classname);
1205 fprintf(fp,
"// Read contents of entry.\n");
1207 fprintf(fp,
" if (!fChain) return 0;\n");
1208 fprintf(fp,
" return fChain->GetEntry(entry);\n");
1213 fprintf(fp,
"Long64_t %s::LoadTree(Long64_t entry)\n",classname);
1215 fprintf(fp,
"// Set the environment to read one entry\n");
1216 fprintf(fp,
" if (!fChain) return -5;\n");
1217 fprintf(fp,
" Long64_t centry = fChain->LoadTree(entry);\n");
1218 fprintf(fp,
" if (centry < 0) return centry;\n");
1219 fprintf(fp,
" if (fChain->GetTreeNumber() != fCurrent) {\n");
1220 fprintf(fp,
" fCurrent = fChain->GetTreeNumber();\n");
1221 fprintf(fp,
" Notify();\n");
1223 fprintf(fp,
" return centry;\n");
1229 fprintf(fp,
"void %s::Init(TTree *tree)\n",classname);
1231 fprintf(fp,
" // The Init() function is called when the selector needs to initialize\n" 1232 " // a new tree or chain. Typically here the branch addresses and branch\n" 1233 " // pointers of the tree will be set.\n" 1234 " // It is normally not necessary to make changes to the generated\n" 1235 " // code, but the routine can be extended by the user if needed.\n" 1236 " // Init() will be called many times when running on PROOF\n" 1237 " // (once per file to be processed).\n\n");
1238 if (mustInit.
Last()) {
1239 TIter next(&mustInit);
1241 fprintf(fp,
" // Set object pointer\n");
1242 while( (obj = next()) ) {
1244 strlcpy(branchname,((
TBranch*)obj)->
GetName(),
sizeof(branchname));
1246 strlcpy(branchname,((
TLeaf*)obj)->
GetName(),
sizeof(branchname));
1251 if (*bname ==
'.') *bname=
'_';
1252 if (*bname ==
',') *bname=
'_';
1253 if (*bname ==
':') *bname=
'_';
1254 if (*bname ==
'<') *bname=
'_';
1255 if (*bname ==
'>') *bname=
'_';
1258 fprintf(fp,
" %s = 0;\n",branchname );
1261 if (mustInitArr.
Last()) {
1262 TIter next(&mustInitArr);
1264 fprintf(fp,
" // Set array pointer\n");
1265 while( (info = (
TNamed*)next()) ) {
1266 fprintf(fp,
" for(int i=0; i<%s; ++i) %s[i] = 0;\n",info->
GetTitle(),info->
GetName());
1270 fprintf(fp,
" // Set branch addresses and branch pointers\n");
1271 fprintf(fp,
" if (!tree) return;\n");
1272 fprintf(fp,
" fChain = tree;\n");
1273 if (!opt.
Contains(
"selector")) fprintf(fp,
" fCurrent = -1;\n");
1274 fprintf(fp,
" fChain->SetMakeClass(1);\n");
1276 for (l=0;l<nleaves;l++) {
1277 if (leafStatus[l])
continue;
1282 strlcpy(aprefix,branch->
GetName(),
sizeof(aprefix));
1286 strlcpy(branchname,branch->
GetName(),
sizeof(branchname));
1287 strlcat(branchname,
".",
sizeof(branchname));
1288 strlcat(branchname,leaf->
GetTitle(),
sizeof(branchname));
1291 char *dim = (
char*)strstr(branchname,
"[");
if (dim) dim[0] = 0;
1294 strlcpy(branchname,branch->
GetName(),
sizeof(branchname));
1297 if (bre->
GetType() == 3 || bre->
GetType()==4) strlcat(branchname,
"_",
sizeof(branchname));
1301 char *brak = strstr(branchname,
"[");
if (brak) *brak = 0;
1302 char *twodim = (
char*)strstr(bname,
"[");
if (twodim) *twodim = 0;
1304 if (*bname ==
'.') *bname=
'_';
1305 if (*bname ==
',') *bname=
'_';
1306 if (*bname ==
':') *bname=
'_';
1307 if (*bname ==
'<') *bname=
'_';
1308 if (*bname ==
'>') *bname=
'_';
1311 const char *maybedisable =
"";
1314 maybedisable =
"// ";
1321 strlcpy(branchname,branch->
GetName(),
sizeof(branchname));
1327 if (leafcount) len = leafcount->
GetMaximum()+1;
1328 if (len > 1) fprintf(fp,
"%s fChain->SetBranchAddress(\"%s\", %s, &b_%s);\n",
1330 else fprintf(fp,
"%s fChain->SetBranchAddress(\"%s\", &%s, &b_%s);\n",
1335 fprintf(fp,
" Notify();\n");
1342 fprintf(fp,
"Bool_t %s::Notify()\n",classname);
1344 fprintf(fp,
" // The Notify() function is called when a new file is opened. This\n" 1345 " // can be either for a new TTree in a TChain or when when a new TTree\n" 1346 " // is started when using PROOF. It is normally not necessary to make changes\n" 1347 " // to the generated code, but the routine can be extended by the\n" 1348 " // user if needed. The return value is currently not used.\n\n");
1349 fprintf(fp,
" return kTRUE;\n");
1355 fprintf(fp,
"void %s::Show(Long64_t entry)\n",classname);
1357 fprintf(fp,
"// Print contents of entry.\n");
1358 fprintf(fp,
"// If entry is not specified, print current entry\n");
1360 fprintf(fp,
" if (!fChain) return;\n");
1361 fprintf(fp,
" fChain->Show(entry);\n");
1366 fprintf(fp,
"Int_t %s::Cut(Long64_t entry)\n",classname);
1368 fprintf(fp,
"// This function may be called from Loop.\n");
1369 fprintf(fp,
"// returns 1 if entry is accepted.\n");
1370 fprintf(fp,
"// returns -1 otherwise.\n");
1372 fprintf(fp,
" return 1;\n");
1375 fprintf(fp,
"#endif // #ifdef %s_cxx\n",classname);
1380 fprintf(fpc,
"#define %s_cxx\n",classname);
1381 fprintf(fpc,
"#include \"%s\"\n",thead.
Data());
1382 fprintf(fpc,
"#include <TH2.h>\n");
1383 fprintf(fpc,
"#include <TStyle.h>\n");
1384 fprintf(fpc,
"#include <TCanvas.h>\n");
1386 fprintf(fpc,
"void %s::Loop()\n",classname);
1388 fprintf(fpc,
"// In a ROOT session, you can do:\n");
1389 fprintf(fpc,
"// root> .L %s.C\n",classname);
1390 fprintf(fpc,
"// root> %s t\n",classname);
1391 fprintf(fpc,
"// root> t.GetEntry(12); // Fill t data members with entry number 12\n");
1392 fprintf(fpc,
"// root> t.Show(); // Show values of entry 12\n");
1393 fprintf(fpc,
"// root> t.Show(16); // Read and show values of entry 16\n");
1394 fprintf(fpc,
"// root> t.Loop(); // Loop on all entries\n");
1395 fprintf(fpc,
"//\n");
1396 fprintf(fpc,
"\n// This is the loop skeleton where:\n");
1397 fprintf(fpc,
"// jentry is the global entry number in the chain\n");
1398 fprintf(fpc,
"// ientry is the entry number in the current Tree\n");
1399 fprintf(fpc,
"// Note that the argument to GetEntry must be:\n");
1400 fprintf(fpc,
"// jentry for TChain::GetEntry\n");
1401 fprintf(fpc,
"// ientry for TTree::GetEntry and TBranch::GetEntry\n");
1402 fprintf(fpc,
"//\n");
1403 fprintf(fpc,
"// To read only selected branches, Insert statements like:\n");
1404 fprintf(fpc,
"// METHOD1:\n");
1405 fprintf(fpc,
"// fChain->SetBranchStatus(\"*\",0); // disable all branches\n");
1406 fprintf(fpc,
"// fChain->SetBranchStatus(\"branchname\",1); // activate branchname\n");
1407 fprintf(fpc,
"// METHOD2: replace line\n");
1408 fprintf(fpc,
"// fChain->GetEntry(jentry); //read all branches\n");
1409 fprintf(fpc,
"//by b_branchname->GetEntry(ientry); //read only this branch\n");
1410 fprintf(fpc,
" if (fChain == 0) return;\n");
1411 fprintf(fpc,
"\n Long64_t nentries = fChain->GetEntriesFast();\n");
1412 fprintf(fpc,
"\n Long64_t nbytes = 0, nb = 0;\n");
1413 fprintf(fpc,
" for (Long64_t jentry=0; jentry<nentries;jentry++) {\n");
1414 fprintf(fpc,
" Long64_t ientry = LoadTree(jentry);\n");
1415 fprintf(fpc,
" if (ientry < 0) break;\n");
1416 fprintf(fpc,
" nb = fChain->GetEntry(jentry); nbytes += nb;\n");
1417 fprintf(fpc,
" // if (Cut(ientry) < 0) continue;\n");
1418 fprintf(fpc,
" }\n");
1423 fprintf(fpc,
"#define %s_cxx\n",classname);
1424 fprintf(fpc,
"// The class definition in %s.h has been generated automatically\n",classname);
1425 fprintf(fpc,
"// by the ROOT utility TTree::MakeSelector(). This class is derived\n");
1426 fprintf(fpc,
"// from the ROOT class TSelector. For more information on the TSelector\n" 1427 "// framework see $ROOTSYS/README/README.SELECTOR or the ROOT User Manual.\n\n");
1428 fprintf(fpc,
"// The following methods are defined in this file:\n");
1429 fprintf(fpc,
"// Begin(): called every time a loop on the tree starts,\n");
1430 fprintf(fpc,
"// a convenient place to create your histograms.\n");
1431 fprintf(fpc,
"// SlaveBegin(): called after Begin(), when on PROOF called only on the\n" 1432 "// slave servers.\n");
1433 fprintf(fpc,
"// Process(): called for each event, in this function you decide what\n");
1434 fprintf(fpc,
"// to read and fill your histograms.\n");
1435 fprintf(fpc,
"// SlaveTerminate: called at the end of the loop on the tree, when on PROOF\n" 1436 "// called only on the slave servers.\n");
1437 fprintf(fpc,
"// Terminate(): called at the end of the loop on the tree,\n");
1438 fprintf(fpc,
"// a convenient place to draw/fit your histograms.\n");
1439 fprintf(fpc,
"//\n");
1440 fprintf(fpc,
"// To use this file, try the following session on your Tree T:\n");
1441 fprintf(fpc,
"//\n");
1442 fprintf(fpc,
"// root> T->Process(\"%s.C\")\n",classname);
1443 fprintf(fpc,
"// root> T->Process(\"%s.C\",\"some options\")\n",classname);
1444 fprintf(fpc,
"// root> T->Process(\"%s.C+\")\n",classname);
1445 fprintf(fpc,
"//\n\n");
1446 fprintf(fpc,
"#include \"%s\"\n",thead.
Data());
1447 fprintf(fpc,
"#include <TH2.h>\n");
1448 fprintf(fpc,
"#include <TStyle.h>\n");
1452 fprintf(fpc,
"void %s::Begin(TTree * /*tree*/)\n",classname);
1454 fprintf(fpc,
" // The Begin() function is called at the start of the query.\n");
1455 fprintf(fpc,
" // When running with PROOF Begin() is only called on the client.\n");
1456 fprintf(fpc,
" // The tree argument is deprecated (on PROOF 0 is passed).\n");
1458 fprintf(fpc,
" TString option = GetOption();\n");
1463 fprintf(fpc,
"void %s::SlaveBegin(TTree * /*tree*/)\n",classname);
1465 fprintf(fpc,
" // The SlaveBegin() function is called after the Begin() function.\n");
1466 fprintf(fpc,
" // When running with PROOF SlaveBegin() is called on each slave server.\n");
1467 fprintf(fpc,
" // The tree argument is deprecated (on PROOF 0 is passed).\n");
1469 fprintf(fpc,
" TString option = GetOption();\n");
1474 fprintf(fpc,
"Bool_t %s::Process(Long64_t entry)\n",classname);
1476 fprintf(fpc,
" // The Process() function is called for each entry in the tree (or possibly\n" 1477 " // keyed object in the case of PROOF) to be processed. The entry argument\n" 1478 " // specifies which entry in the currently loaded tree is to be processed.\n" 1479 " // It can be passed to either %s::GetEntry() or TBranch::GetEntry()\n" 1480 " // to read either all or the required parts of the data. When processing\n" 1481 " // keyed objects with PROOF, the object is already loaded and is available\n" 1482 " // via the fObject pointer.\n" 1484 " // This function should contain the \"body\" of the analysis. It can contain\n" 1485 " // simple or elaborate selection criteria, run algorithms on the data\n" 1486 " // of the event and typically fill histograms.\n" 1488 " // The processing can be stopped by calling Abort().\n" 1490 " // Use fStatus to set the return value of TTree::Process().\n" 1492 " // The return value is currently not used.\n\n", classname);
1494 fprintf(fpc,
" return kTRUE;\n");
1498 fprintf(fpc,
"void %s::SlaveTerminate()\n",classname);
1500 fprintf(fpc,
" // The SlaveTerminate() function is called after all entries or objects\n" 1501 " // have been processed. When running with PROOF SlaveTerminate() is called\n" 1502 " // on each slave server.");
1508 fprintf(fpc,
"void %s::Terminate()\n",classname);
1510 fprintf(fpc,
" // The Terminate() function is the last function to be called during\n" 1511 " // a query. It always runs on the client, it can be used to present\n" 1512 " // the results graphically or save the results to file.");
1518 delete [] leafStatus;
1556 FILE *fp = fopen(tfile,
"w");
1558 Error(
"MakeCode",
"cannot open output file %s", tfile.
Data());
1565 treefile =
"Memory Directory";
1577 fprintf(fp,
"//////////////////////////////////////////////////////////\n");
1578 fprintf(fp,
"// This file has been automatically generated \n");
1579 fprintf(fp,
"// (%s by ROOT version%s)\n",td.
AsString(),
gROOT->GetVersion());
1582 fprintf(fp,
"// found on file: %s\n",treefile.
Data());
1586 fprintf(fp,
"//////////////////////////////////////////////////////////\n");
1592 fprintf(fp,
"//Reset ROOT and connect tree file\n");
1593 fprintf(fp,
" gROOT->Reset();\n");
1595 fprintf(fp,
"\n#ifdef SINGLE_TREE\n");
1596 fprintf(fp,
" // The following code should be used if you want this code to access\n");
1597 fprintf(fp,
" // a single tree instead of a chain\n");
1599 fprintf(fp,
" TFile *f = (TFile*)gROOT->GetListOfFiles()->FindObject(\"%s\");\n",treefile.
Data());
1600 fprintf(fp,
" if (!f) {\n");
1601 fprintf(fp,
" f = new TFile(\"%s\");\n",treefile.
Data());
1605 fprintf(fp,
" dir->GetObject(\"%s\",tree);\n\n",
fTree->
GetName());
1607 fprintf(fp,
" f->GetObject(\"%s\",tree);\n\n",
fTree->
GetName());
1610 fprintf(fp,
"#else // SINGLE_TREE\n\n");
1611 fprintf(fp,
" // The following code should be used if you want this code to access a chain\n");
1612 fprintf(fp,
" // of trees.\n");
1613 fprintf(fp,
" TChain *%s = new TChain(\"%s\",\"%s\");\n",
1623 fprintf(fp,
"#endif // SINGLE_TREE\n\n");
1627 fprintf(fp,
"//Declaration of leaves types\n");
1632 const char *headOK =
" ";
1633 const char *headcom =
" //";
1635 char branchname[1024];
1636 for (l=0;l<nleaves;l++) {
1645 strlcpy(branchname,branch->
GetName(),
sizeof(branchname));
1646 strlcat(branchname,
".",
sizeof(branchname));
1647 strlcat(branchname,leaf->
GetTitle(),
sizeof(branchname));
1650 char *dim = (
char*)strstr(branchname,
"[");
1651 if (dim) dim[0] = 0;
1654 if (leafcount) strlcpy(branchname,branch->
GetName(),
sizeof(branchname));
1655 else strlcpy(branchname,leaf->
GetTitle(),
sizeof(branchname));
1657 char *twodim = (
char*)strstr(leaf->
GetTitle(),
"][");
1660 if (*bname ==
'.') *bname=
'_';
1661 if (*bname ==
',') *bname=
'_';
1662 if (*bname ==
':') *bname=
'_';
1663 if (*bname ==
'<') *bname=
'_';
1664 if (*bname ==
'>') *bname=
'_';
1669 if (leafobj->
GetClass()) head = headOK;
1670 else head = headcom;
1678 char *dimInName = (
char*) strstr(branchname,
"[");
1680 if ( twodim || dimInName ) {
1682 dimensions = dimInName;
1685 if (twodim) dimensions += (
char*)(twodim+1);
1687 if (dimensions.
Length()) {
1688 fprintf(fp,
" %-15s %s[%d]%s;\n",leaf->
GetTypeName(), branchname,len,dimensions.
Data());
1690 fprintf(fp,
" %-15s %s[%d];\n",leaf->
GetTypeName(), branchname,len);
1693 if (strstr(branchname,
"[")) len = 1;
1694 if (len < 2) fprintf(fp,
" %-15s %s;\n",leaf->
GetTypeName(), branchname);
1695 else fprintf(fp,
" %-15s %s[%d];\n",leaf->
GetTypeName(), branchname,len);
1700 fprintf(fp,
"\n // Set branch addresses.\n");
1701 for (l=0;l<nleaves;l++) {
1709 strlcpy(branchname,branch->
GetName(),
sizeof(branchname));
1710 strlcat(branchname,
".",
sizeof(branchname));
1711 strlcat(branchname,leaf->
GetTitle(),
sizeof(branchname));
1714 char *dim = (
char*)strstr(branchname,
"[");
1715 if (dim) dim[0] = 0;
1718 if (leafcount) strlcpy(branchname,branch->
GetName(),
sizeof(branchname));
1719 else strlcpy(branchname,leaf->
GetTitle(),
sizeof(branchname));
1723 if (*bname ==
'.') *bname=
'_';
1724 if (*bname ==
',') *bname=
'_';
1725 if (*bname ==
':') *bname=
'_';
1726 if (*bname ==
'<') *bname=
'_';
1727 if (*bname ==
'>') *bname=
'_';
1730 char *brak = strstr(branchname,
"[");
1731 if (brak) *brak = 0;
1734 strlcpy(branchname,branch->
GetName(),
sizeof(branchname));
1736 if (!leafobj->
GetClass()) head = headcom;
1738 if (leafcount) len = leafcount->
GetMaximum()+1;
1739 if (len > 1 || brak) fprintf(fp,
"%s%s->SetBranchAddress(\"%s\",%s);\n",head,
fTree->
GetName(),branch->
GetName(),branchname);
1740 else fprintf(fp,
"%s%s->SetBranchAddress(\"%s\",&%s);\n",head,
fTree->
GetName(),branch->
GetName(),branchname);
1744 fprintf(fp,
"\n// This is the loop skeleton\n");
1745 fprintf(fp,
"// To read only selected branches, Insert statements like:\n");
1746 fprintf(fp,
"// %s->SetBranchStatus(\"*\",0); // disable all branches\n",
fTree->
GetName());
1747 fprintf(fp,
"// %s->SetBranchStatus(\"branchname\",1); // activate branchname\n",
GetName());
1748 fprintf(fp,
"\n Long64_t nentries = %s->GetEntries();\n",
fTree->
GetName());
1749 fprintf(fp,
"\n Long64_t nbytes = 0;\n");
1750 fprintf(fp,
"// for (Long64_t i=0; i<nentries;i++) {\n");
1751 fprintf(fp,
"// nbytes += %s->GetEntry(i);\n",
fTree->
GetName());
1752 fprintf(fp,
"// }\n");
1755 printf(
"Macro: %s generated from Tree: %s\n",tfile.
Data(),
fTree->
GetName());
1913 const char *macrofilename,
const char *cutfilename,
1914 const char *option,
Int_t maxUnrolling)
1916 if (macrofilename==0 || strlen(macrofilename)==0 ) {
1918 Error(
"MakeProxy",
"A file name for the user script is required");
2002 std::vector<TString> cnames;
2011 if (nleaves < ncols) ncols = nleaves;
2012 nch = varexp ? strlen(varexp) : 0;
2018 if (strlen(selection)) {
2020 if (!select)
return principal;
2021 if (!select->
GetNdim()) {
delete select;
return principal; }
2026 if (varexp && !strcmp(varexp,
"*")) { ncols = nleaves; allvar = 1; }
2027 if (nch == 0 || allvar) {
2028 for (i=0;i<ncols;i++) {
2039 for (i=0;i<ncols;i++) {
2061 for (entry=firstentry;entry<firstentry+
nentries;entry++) {
2063 if (entryNumber < 0)
break;
2065 if (localEntry < 0)
break;
2075 for(
int inst=0;inst<
ndata;inst++) {
2083 if (inst==0) loaded =
kTRUE;
2087 for (i=0;i<ncols;i++) {
2093 for (i=0;i<ncols;i++) {
2096 principal->
AddRow(xvars);
2190 if (!selector)
return -1;
2257 if (tpf) tpf->
SetEntryRange(firstentry,firstentry+nentries);
2264 if (!
gROOT->IsBatch() && interval)
2268 Long64_t entry, entryNumber, localEntry;
2282 for (entry=firstentry;entry<firstentry+
nentries;entry++) {
2284 if (entryNumber < 0)
break;
2286 if (
gROOT->IsInterrupted())
break;
2288 if (localEntry < 0)
break;
2293 selector->
Process(localEntry);
2420 UInt_t colDefaultSize = 9;
2422 std::vector<TString> colFormats;
2423 std::vector<Int_t> colSizes;
2426 int start = opt.
Index(
"lenmax=");
2427 int numpos = start + strlen(
"lenmax=");
2430 while( (numpos+numlen<len) && isdigit(opt[numpos+numlen]) ) numlen++;
2431 TString num = opt(numpos,numlen);
2432 opt.
Remove(start,strlen(
"lenmax")+numlen);
2434 lenmax = atoi(num.
Data());
2437 int start = opt.
Index(
"colsize=");
2438 int numpos = start + strlen(
"colsize=");
2441 while( (numpos+numlen<len) && isdigit(opt[numpos+numlen]) ) numlen++;
2442 TString num = opt(numpos,numlen);
2443 opt.
Remove(start,strlen(
"size")+numlen);
2445 colDefaultSize = atoi(num.
Data());
2446 colPrecision = colDefaultSize;
2447 if (colPrecision>18) colPrecision = 18;
2450 int start = opt.
Index(
"precision=");
2451 int numpos = start + strlen(
"precision=");
2454 while( (numpos+numlen<len) && isdigit(opt[numpos+numlen]) ) numlen++;
2455 TString num = opt(numpos,numlen);
2456 opt.
Remove(start,strlen(
"precision")+numlen);
2458 colPrecision = atoi(num.
Data());
2460 TString defFormat =
Form(
"%d.%d",colDefaultSize,colPrecision);
2462 int start = opt.
Index(
"col=");
2463 int numpos = start + strlen(
"col=");
2466 while( (numpos+numlen<len) &&
2467 (isdigit(opt[numpos+numlen])
2468 || opt[numpos+numlen] ==
'c' 2469 || opt[numpos+numlen] ==
'd' 2470 || opt[numpos+numlen] ==
'i' 2471 || opt[numpos+numlen] ==
'o' 2472 || opt[numpos+numlen] ==
'x' 2473 || opt[numpos+numlen] ==
'X' 2474 || opt[numpos+numlen] ==
'u' 2475 || opt[numpos+numlen] ==
'f' 2476 || opt[numpos+numlen] ==
'e' 2477 || opt[numpos+numlen] ==
'E' 2478 || opt[numpos+numlen] ==
'g' 2479 || opt[numpos+numlen] ==
'G' 2480 || opt[numpos+numlen] ==
'l' 2481 || opt[numpos+numlen] ==
'L' 2482 || opt[numpos+numlen] ==
'h' 2483 || opt[numpos+numlen] ==
's' 2484 || opt[numpos+numlen] ==
'#' 2485 || opt[numpos+numlen]==
'.' 2486 || opt[numpos+numlen]==
':')) numlen++;
2487 TString flist = opt(numpos,numlen);
2488 opt.
Remove(start,strlen(
"col")+numlen);
2491 while(i<flist.
Length() && flist[i]==
':') {
2492 colFormats.push_back(defFormat);
2493 colSizes.push_back(colDefaultSize);
2496 for(; i<flist.
Length(); ++i) {
2497 int next = flist.
Index(
":",i);
2499 colFormats.push_back(defFormat);
2500 }
else if (next==
kNPOS) {
2501 colFormats.push_back(flist(i,flist.
Length()-i));
2504 colFormats.push_back(flist(i,next-i));
2507 UInt_t siz = atoi(colFormats[colFormats.size()-1].Data());
2508 colSizes.push_back( siz ? siz : colDefaultSize );
2513 std::vector<TString> cnames;
2524 if (!fname) fname = (
char*)
"";
2525 lenfile = strlen(fname);
2528 fname =
new char[nch2+10];
2530 strlcat(fname,
"-scan.dat",nch2+10);
2532 out.open(fname, std::ios::out);
2534 if (!lenfile)
delete [] fname;
2535 Error(
"Scan",
"Can not open file for redirection");
2540 if (leaves==0)
return 0;
2542 if (nleaves < ncols) ncols = nleaves;
2543 nch = varexp ? strlen(varexp) : 0;
2549 if (selection && strlen(selection)) {
2551 if (!select)
return -1;
2552 if (!select->
GetNdim()) {
delete select;
return -1; }
2557 if (varexp && !strcmp(varexp,
"*")) { ncols = nleaves; allvar = 1; }
2558 if (nch == 0 || allvar) {
2561 for (ui=0;ui<ncs;++ui) {
2565 if (cnames[ncols] == lf->
GetName() ) {
2567 }
else if (cnames[ncols][cnames[ncols].Length()-1]==
'.') {
2580 cnames[ncols].Append(
'.');
2585 cnames[ncols].Append(
'.');
2586 cnames[ncols].Append( lf->
GetName() );
2598 for(ui=colFormats.size();ui<ncols;++ui) {
2599 colFormats.push_back(defFormat);
2600 colSizes.push_back(colDefaultSize);
2604 for (ui=0;ui<ncols;ui++) {
2642 onerow =
"***********";
2643 if (hasArray) onerow +=
"***********";
2645 for (ui=0;ui<ncols;ui++) {
2646 TString starFormat =
Form(
"*%%%d.%ds",colSizes[ui]+2,colSizes[ui]+2);
2650 out<<onerow.
Data()<<
"*"<<std::endl;
2652 printf(
"%s*\n",onerow.
Data());
2654 if (hasArray) onerow +=
"* Instance ";
2655 for (ui=0;ui<ncols;ui++) {
2656 TString numbFormat =
Form(
"* %%%d.%ds ",colSizes[ui],colSizes[ui]);
2660 out<<onerow.Data()<<
"*"<<std::endl;
2662 printf(
"%s*\n",onerow.Data());
2663 onerow =
"***********";
2664 if (hasArray) onerow +=
"***********";
2665 for (ui=0;ui<ncols;ui++) {
2666 TString starFormat =
Form(
"*%%%d.%ds",colSizes[ui]+2,colSizes[ui]+2);
2670 out<<onerow.Data()<<
"*"<<std::endl;
2672 printf(
"%s*\n",onerow.Data());
2677 for (entry=firstentry;
2678 entry<(firstentry+
nentries) && !exitloop;
2681 if (entryNumber < 0)
break;
2683 if (localEntry < 0)
break;
2704 for (ui=0;ui<ncols;ui++) {
2705 if (ndata < var[ui]->GetNdata() ) {
2709 if (select && select->
GetNdata()==0) ndata = 0;
2714 if (lenmax && ndata>(
int)lenmax) ndata = lenmax;
2716 for(
int inst=0;inst<
ndata;inst++) {
2722 if (inst==0) loaded =
kTRUE;
2726 for (ui=0;ui<ncols;ui++) {
2731 onerow =
Form(
"* %8lld ",entryNumber);
2733 onerow +=
Form(
"* %8d ",inst);
2735 for (ui=0;ui<ncols;++ui) {
2736 TString numbFormat =
Form(
"* %%%d.%ds ",colSizes[ui],colSizes[ui]);
2737 if (var[ui]->GetNdim()) onerow +=
Form(numbFormat.
Data(),var[ui]->
PrintValue(0,inst,colFormats[ui].
Data()));
2739 TString emptyForm =
Form(
"* %%%dc ",colSizes[ui]);
2740 onerow +=
Form(emptyForm.
Data(),
' ');
2745 out<<onerow.Data()<<
"*"<<std::endl;
2747 printf(
"%s*\n",onerow.Data());
2750 fprintf(stderr,
"Type <CR> to continue or q to quit ==> ");
2754 while (readch !=
'\n' && readch != EOF) readch = getchar();
2755 if (answer ==
'q' || answer ==
'Q') {
2763 onerow =
"***********";
2764 if (hasArray) onerow +=
"***********";
2765 for (ui=0;ui<ncols;ui++) {
2766 TString starFormat =
Form(
"*%%%d.%ds",colSizes[ui]+2,colSizes[ui]+2);
2770 out<<onerow.Data()<<
"*"<<std::endl;
2772 printf(
"%s*\n",onerow.Data());
2773 if (select)
Printf(
"==> %lld selected %s", fSelectedRows,
2774 fSelectedRows == 1 ?
"entry" :
"entries");
2795 std::vector<TString> cnames;
2802 if (nleaves < ncols) ncols = nleaves;
2803 nch = varexp ? strlen(varexp) : 0;
2809 if (strlen(selection)) {
2811 if (!select)
return 0;
2812 if (!select->
GetNdim()) {
delete select;
return 0; }
2818 if (varexp && !strcmp(varexp,
"*")) { ncols = nleaves; allvar = 1; }
2819 if (nch == 0 || allvar) {
2820 for (i=0;i<ncols;i++) {
2830 for (i=0;i<ncols;i++) {
2837 for (i = 0; i < ncols; i++) {
2838 res->
AddField(i, var[i]->PrintValue(-1));
2852 const char *aresult;
2854 char *arow =
new char[ncols*50];
2858 for (entry=firstentry;entry<firstentry+
nentries;entry++) {
2860 if (entryNumber < 0)
break;
2862 if (localEntry < 0)
break;
2879 for(
int inst=0;inst<
ndata;inst++) {
2886 if (inst==0) loaded =
kTRUE;
2890 for (i=0;i<ncols;i++) {
2895 for (i=0;i<ncols;i++) {
2897 len = strlen(aresult)+1;
2899 memcpy(arow,aresult,len);
2902 memcpy(arow+fields[i-1],aresult,len);
2903 fields[i] = fields[i-1] + len;
2937 if (
gROOT->IsBatch()) {
2938 Warning(
"StartViewer",
"viewer cannot run in batch mode");
2944 if ((h =
gROOT->GetPluginManager()->FindHandler(
"TVirtualTreeViewer"))) {
3025 TF1* fitfunc = (
TF1*)
gROOT->GetFunction(funcname);
3026 if (!fitfunc) {
Error(
"UnbinnedFit",
"Unknown function: %s",funcname);
return 0; }
3029 if (npar <=0) {
Error(
"UnbinnedFit",
"Illegal number of parameters = %d",npar);
return 0; }
3054 Info(
"UnbinnedFit",
"Ignore option D with more than 4 variables");
3055 nsel =
DrawSelect(varexp, selection,
"goff", nentries, firstentry);
3062 Error(
"UnbinnedFit",
"Cannot fit: no entries selected");
3073 std::vector<double *> vlist(ndim);
3074 for (
int i = 0; i < ndim; ++i)
TClass * GetClass() const
virtual const char * GetName() const
Returns name of object.
void DeleteSelectorFromFile()
Delete any selector created by this object.
virtual const char * GetClassName() const
Return the name of the user class whose content is stored in this branch, if any. ...
virtual void SetLineWidth(Width_t lwidth)
Set the line width.
A TLeaf describes individual elements of a TBranch See TBranch structure in TTree.
static TString R__GetBranchPointerName(TLeaf *leaf, Bool_t replace=kTRUE)
Return the name of the branch pointer needed by MakeClass/MakeSelector.
TBranchElement * GetBranchCount2() const
virtual void Scale(Double_t c1=1, Option_t *option="")
Multiply this histogram by a constant c1.
Principal Components Analysis (PCA)
virtual void Delete(Option_t *option="")
Remove all objects from the list AND delete all heap based objects.
virtual Double_t GetBinCenter(Int_t bin) const
Return bin center for 1D histogram.
virtual Int_t GetAction() const
virtual void Info(const char *method, const char *msgfmt,...) const
Issue info message.
void AddRow(TSQLRow *row)
Adopt a row to result set.
virtual Long64_t GetEntriesToProcess(Long64_t firstentry, Long64_t nentries) const
return the number of entries to be processed this function checks that nentries is not bigger than th...
Bool_t ProcessEvents()
Process events if timer did time out.
virtual Long64_t GetN() const
Abstract interface for Tree Index.
const char * GetDeclFileName() const
virtual Int_t GetScanField() const
virtual Double_t * GetVal(Int_t i) const
Return the last values corresponding to the i-th component of the formula being processed (where the ...
virtual Bool_t Notify()
This method must be overridden to handle object notification.
virtual TLeaf * GetLeaf(const char *branchname, const char *leafname)
Return a pointer to the leaf name in the current tree.
virtual void Print(Option_t *opt="MSE") const
Print the statistics Options are.
virtual Bool_t SendProcessingProgress(Double_t, Double_t, Bool_t=kFALSE)
void AdoptReferenceProxy(TVirtualRefProxy *proxy)
Adopt the Reference proxy pointer to indicate that this class represents a reference.
Collectable string class.
TSelectorDraw * fSelector
Pointer to histogram used for the projection.
const char * GetNameByIndex(TString &varexp, Int_t *index, Int_t colindex)
Set to the selector address when it's entry list needs to be updated by the UpdateFormulaLeaves funct...
virtual void SetEstimate(Long64_t n)
Set number of entries to estimate variable limits.
virtual TString SplitAclicMode(const char *filename, TString &mode, TString &args, TString &io) const
This method split a filename of the form: ~~~ {.cpp} [path/]macro.C[+|++[k|f|g|O|c|s|d|v|-]][(args)]...
virtual void Delete(Option_t *option="")
Remove all objects from the array AND delete all heap based objects.
virtual Bool_t ProcessCut(Long64_t)
A TLeaf for a general object derived from TObject.
TString & ReplaceAll(const TString &s1, const TString &s2)
R__EXTERN TStyle * gStyle
R__EXTERN Foption_t Foption
virtual Int_t Fill()
Fill all branches.
virtual TEntryList * GetEntryList()
Returns the entry list, set to this tree.
virtual void SetOwner(Bool_t enable=kTRUE)
Set whether this collection is the owner (enable==true) of its content.
A specialized TFileCacheRead object for a TTree.
virtual const char * GetTypeName() const
TVirtualStreamerInfo * GetStreamerInfo(Int_t version=0) const
returns a pointer to the TVirtualStreamerInfo object for version If the object does not exist...
virtual Double_t GetSumOfWeights() const
Return the sum of weights excluding under/overflows.
A ROOT file is a suite of consecutive data records (TKey instances) with a well defined format...
void ToUpper()
Change string to upper case.
Ssiz_t Index(const char *pat, Ssiz_t i=0, ECaseCompare cmp=kExact) const
virtual Int_t GetEntry(Long64_t entry=0, Int_t getall=0)
Read all branches of entry and return total number of bytes read.
Int_t LoadPlugin()
Load the plugin library for this handler.
Class describing the unbinned data sets (just x coordinates values) of any dimensions.
Short_t Min(Short_t a, Short_t b)
void ToLower()
Change string to lower-case.
virtual Long64_t GetMaxEntryLoop() const
R__EXTERN TVirtualMutex * gROOTMutex
virtual void Draw(Option_t *option="")
Default Draw method for all objects.
virtual Long64_t Scan(const char *varexp, const char *selection, Option_t *option, Long64_t nentries, Long64_t firstentry)
Loop on Tree and print entries passing selection.
virtual TTree * CloneTree(Long64_t nentries=-1, Option_t *option="")
Create a clone of this tree and copy nentries.
TObject * At(Int_t idx) const
A TChainElement describes a component of a TChain.
virtual Int_t GetDimension() const
A Tree Index with majorname and minorname.
Long64_t * GetTreeOffset() const
virtual void SetTree(const TTree *tree)
If a list for a tree with such name and filename exists, sets it as the current sublist If not...
virtual void SetTree(TTree *t)
void SetBit(UInt_t f, Bool_t set)
Set or unset the user status bits as specified in f.
virtual void Reset(Option_t *option="")
Reset this histogram: contents, errors, etc.
virtual TObject * FindObject(const char *name) const
Find an object in this list using its name.
if object in a list can be deleted
virtual Int_t GetDimension() const
TPrincipal * Principal(const char *varexp, const char *selection, Option_t *option, Long64_t nentries, Long64_t firstentry)
Interface to the Principal Components Analysis class.
TFitResultPtr UnBinFit(ROOT::Fit::UnBinData *data, TF1 *f1, Foption_t &option, const ROOT::Math::MinimizerOptions &moption)
fit an unbin data set (from tree or from histogram buffer) using a TF1 pointer and fit options...
virtual Long64_t DrawSelect(const char *varexp, const char *selection, Option_t *option, Long64_t nentries, Long64_t firstentry)
Draw expression varexp for specified entries that matches the selection.
virtual void SetTextFont(Font_t tfont=62)
Set the text font.
virtual Int_t GetDimension() const
virtual void ProcessFill(Long64_t)
TObject * Last() const
Return the object in the last filled slot. Returns 0 if no entries.
virtual Long64_t GetCacheSize() const
virtual TObjArray * GetListOfBranches()
virtual Long64_t DrawScript(const char *wrapperPrefix, const char *macrofilename, const char *cutfilename, Option_t *option, Long64_t nentries, Long64_t firstentry)
Draw the result of a C++ script.
virtual TTree * CopyTree(const char *selection, Option_t *option, Long64_t nentries, Long64_t firstentry)
Copy a Tree with selection, make a clone of this Tree header, then copy the selected entries...
Class defining interface to a row of a TTree query result.
virtual Long64_t Process(const char *filename, Option_t *option, Long64_t nentries, Long64_t firstentry)
Process this tree executing the TSelector code in the specified filename.
The TNamed class is the base class for all named ROOT classes.
virtual TObject * FindObject(const char *name) const
Find an object in this collection using its name.
TTreeFormula * GetVar2() const
virtual Bool_t Notify()
This method must be overridden to handle object notification.
virtual Long64_t GetStatus() const
virtual Long64_t LoadTree(Long64_t entry)
Set current entry.
static Long64_t GetFileBytesRead()
Static function returning the total number of bytes read from all files.
Bool_t IsLoaded() const
Return true if the shared library of this class is currently in the a process's memory.
R__EXTERN TVirtualMonitoringWriter * gMonitoringWriter
TString & Append(const char *cs)
std::vector< std::vector< double > > Data
Base class for several text objects.
TSelector * fSelectorFromFile
Pointer to current selector.
virtual void Begin(TTree *)
TObjArray * GetListOfBranches()
virtual Long64_t LoadTree(Long64_t entry)
Find the tree which contains entry, and set it as the current tree.
virtual void MakeHistograms(const char *name="pca", Option_t *option="epsdx")
Make histograms of the result of the analysis.
virtual TFile * GetFile() const
virtual void SetTextAlign(Short_t align=11)
Set the text alignment.
virtual ~TTreePlayer()
Tree destructor.
virtual TTree * GetTree() const
virtual void UpdateFormulaLeaves()
this function is called by TChain::LoadTree when a new Tree is loaded.
virtual Int_t GetTreeNumber() const
virtual TBranch * GetBranch(const char *name)
Return pointer to the branch with the given name in this tree or its friends.
virtual void StartViewer(Int_t ww, Int_t wh)
Start the TTreeViewer on this TTree.
void SetCanvasPreferGL(Bool_t prefer=kTRUE)
const char * GetName() const
Returns name of object.
const char * GetFileName()
virtual Int_t UnbinnedFit(const char *formula, const char *varexp, const char *selection, Option_t *option, Long64_t nentries, Long64_t firstentry)
Unbinned fit of one or more variable(s) from a Tree.
virtual void SetEstimate(Long64_t n)
Set number of entries to estimate variable limits.
virtual Long64_t GetEntryNumber(Long64_t entry) const
Return entry number corresponding to entry.
virtual Int_t GetLen() const
Return the number of effective elements of this leaf.
virtual void SetEntryRange(Long64_t emin, Long64_t emax)
Set the minimum and maximum entry number to be processed this information helps to optimize the numbe...
virtual int Version() const
virtual Int_t MakeReader(const char *classname, Option_t *option)
Generate skeleton selector class for this tree.
virtual Bool_t Notify()
This function is called at the first entry of a new tree in a chain.
virtual void SetEstimate(Long64_t nentries=1000000)
Set number of entries to estimate variable limits.
virtual Long64_t GetSelectedRows() const
R__EXTERN TSystem * gSystem
virtual void AddRow(const Double_t *x)
Add a data point and update the covariance matrix.
TClass * fSelectorClass
Pointer to a user defined selector created by this TTreePlayer object.
virtual void Draw(Option_t *option="")
Draw this histogram with options.
const char * fScanFileName
Class defining interface to a TTree query result with the same interface as for SQL databases...
TObject * GetObject() const
virtual Long64_t GetSelectedRows() const
A container proxy, which allows to access references stored in a TRefArray from TTree::Draw.
virtual Int_t MakeProxy(const char *classname, const char *macrofilename=0, const char *cutfilename=0, const char *option=0, Int_t maxUnrolling=3)
Generate a skeleton analysis class for this Tree using TBranchProxy.
Long_t ExecPlugin(int nargs, const T &... params)
virtual void SlaveBegin(TTree *)
Provides an indirection to the TFitResult class and with a semantics identical to a TFitResult pointe...
virtual Bool_t InheritsFrom(const char *classname) const
Returns kTRUE if object inherits from class "classname".
virtual void SetBinContent(Int_t bin, Double_t content)
Set bin content see convention for numbering bins in TH1::GetBin In case the bin number is greater th...
TList * fInput
Pointer to the actual class of the TSelectorFromFile.
virtual void SetNotify(TObject *obj)
void Form(const char *fmt,...)
Formats a string using a printf style format descriptor.
NOTE: Must always be 0 !!!
virtual void LabelsDeflate(Option_t *axis="X")
Reduce the number of bins for the axis passed in the option to the number of bins having a label...
Int_t GetEntriesFast() const
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
TFile * GetCurrentFile() const
Return pointer to the current file.
char * Form(const char *fmt,...)
virtual TLeaf * GetLeafCount() const
virtual Bool_t SendProcessingStatus(const char *, Bool_t=kFALSE)
A TEventList object is a list of selected events (entries) in a TTree.
The ROOT global object gROOT contains a list of all defined classes.
virtual Long64_t GetEstimate() const
virtual Int_t MakeCode(const char *filename)
Generate skeleton function for this Tree.
virtual TObject * At(Int_t idx) const
Returns the object at position idx. Returns 0 if idx is out of range.
virtual void MakePrincipals()
Perform the principal components analysis.
virtual const char * GetPath() const
Returns the full path of the directory.
Int_t GetNumberOfColors() const
Return number of colors in the color palette.
virtual void Draw(Option_t *option="")
Draws 3-D polymarker with its current attributes.
virtual void AddAt(TObject *obj, Int_t idx)
Add object at position ids.
virtual TObjLink * FirstLink() const
A Branch for the case of an object.
A specialized TSelector for TTree::Draw.
virtual void SlaveTerminate()
virtual Long64_t Process(const char *filename, Option_t *option="", Long64_t nentries=kMaxEntries, Long64_t firstentry=0)
Process this tree executing the TSelector code in the specified filename.
static TSelector * GetSelector(const char *filename)
The code in filename is loaded (interpreted or compiled, see below), filename must contain a valid cl...
TString & Remove(Ssiz_t pos)
virtual Int_t GetTimerInterval() const
virtual Double_t Eval(Double_t x, Double_t y=0, Double_t z=0, Double_t t=0) const
Evaluate this function.
TObject * UncheckedAt(Int_t i) const
virtual Int_t GetMaximum() const
virtual void ResetAbort()
virtual void SetEntryList(TEntryList *list, Option_t *opt="")
Set an EntryList.
virtual TObjArray * GetElements() const =0
Ssiz_t Last(char c) const
Find last occurrence of a character c.
TDirectory * GetDirectory() const
virtual const char * GetClassName() const
Return the name of the user class whose content is stored in this branch, if any. ...
Wrapper around a TObject so it can be stored in a TList.
TSelector * fSelectorUpdate
Pointer to a list of coordinated list TTreeFormula (used by Scan and Query)
Bool_t fScanRedirect
Pointer to current Tree.
virtual void Draw(Option_t *opt)
Default Draw method for all objects.
double func(double *x, double *p)
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
TTreeFormula * GetVar3() const
const char * AsString() const
Return the date & time as a string (ctime() format).
#define R__LOCKGUARD(mutex)
virtual Bool_t Process(Long64_t)
TObjArray * GetListOfLeaves()
static TClass * GetClass(const char *name, Bool_t load=kTRUE, Bool_t silent=kFALSE)
Static method returning pointer to TClass of the specified class name.
virtual void Clear(Option_t *option="")
Remove all objects from the list.
virtual Int_t SetCacheSize(Long64_t cachesize=-1)
Set maximum size of the file cache .
virtual void RecursiveRemove(TObject *obj)
cleanup pointers in the player pointing to obj
Bool_t IsBranchFolder() const
The class is derived from the ROOT class TSelector.
virtual Long64_t GetEntries() const
virtual void SetOption(const char *option)
Abstract Base Class for Fitting.
const char * GetTypeName() const
Returns name of leaf type.
virtual UInt_t SetCanExtend(UInt_t extendBitMask)
Make the histogram axes extendable / not extendable according to the bit mask returns the previous bi...
Mother of all ROOT objects.
virtual Bool_t IsFileInIncludePath(const char *name, char **fullpath=0)
Return true if 'name' is a file that can be found in the ROOT include path or the current directory...
virtual Long64_t GetDrawFlag() const
TObject * GetObject() const
virtual Int_t GetNpar() const
virtual Double_t GetBinWidth(Int_t bin) const
Return bin width.
virtual Long64_t GetEntries(const char *selection)
Return the number of entries matching the selection.
const char * GetTypeName() const
virtual void Add(TObject *obj)
Short_t Max(Short_t a, Short_t b)
A chain is a collection of files containg TTree objects.
TObject * Clone(const char *newname=0) const
Make a complete copy of the underlying object.
virtual TVirtualIndex * BuildIndex(const TTree *T, const char *majorname, const char *minorname)
Build the index for the tree (see TTree::BuildIndex)
Int_t GetEntries() const
Return the number of objects in array (i.e.
virtual void SetTextColor(Color_t tcolor=1)
Set the text color.
virtual void MakeCode(const char *filename="pca", Option_t *option="")
Generates the file <filename>, with .C appended if it does argument doesn't end in ...
virtual UInt_t SplitNames(const TString &varexp, std::vector< TString > &names)
Build Index array for names in varexp.
TFileCacheRead * GetCacheRead(TObject *tree=0) const
Return a pointer to the current read cache.
A TTree object has a header with a name and a title.
TH1 * GetOldHistogram() const
TEventList * GetEventList() const
TList * fFormulaList
input list to the selector
virtual void SetTextSize(Float_t tsize=1)
Set the text size.
TBranch * GetBranch() const
Bool_t GetCanvasPreferGL() const
Implement some of the functionality of the class TTree requiring access to extra libraries (Histogram...
virtual const char * GetName() const
Returns name of object.
virtual Int_t GetSize() const
A TTree is a list of TBranches.
virtual Bool_t GetCleanElist() const
A TSelector object is used by the TTree::Draw, TTree::Scan, TTree::Process to navigate in a TTree and...
virtual void SetTitle(const char *title="")
Set the title of the TNamed.
TList * GetListOfFunctions() const
virtual Int_t Fit(const char *formula, const char *varexp, const char *selection, Option_t *option, Option_t *goption, Long64_t nentries, Long64_t firstentry)
Fit a projected item(s) from a Tree.
A List of entry numbers in a TTree or TChain.
virtual TFitResultPtr Fit(const char *formula, Option_t *option="", Option_t *goption="", Double_t xmin=0, Double_t xmax=0)
Fit histogram with function fname.
double norm(double *x, double *p)
virtual Int_t MakeClass(const char *classname, Option_t *option)
Generate skeleton analysis class for this Tree.
virtual void SetScanField(Int_t n=50)
void AddField(Int_t field, const char *fieldname)
Add field name to result set.
Int_t GetStreamerType() const
TBranch * GetMother() const
Get our top-level parent branch in the tree.
virtual EAbort GetAbort() const
virtual void Warning(const char *method, const char *msgfmt,...) const
Issue warning message.
TTreeFormula * GetVar1() const
virtual TList * GetOutputList() const
virtual Long64_t GetEntriesFriend() const
Return pointer to the 1st Leaf named name in any Branch of this Tree or any branch in the list of fri...
if(line.BeginsWith("/*"))
virtual const char * GetTitle() const
Returns title of object.
This class stores the date and time with a precision of one second in an unsigned 32 bit word (950130...
virtual TObjArray * GetListOfLeaves()
virtual void Init(TTree *)
const char * Data() const
virtual TSQLResult * Query(const char *varexp, const char *selection, Option_t *option, Long64_t nentries, Long64_t firstentry)
Loop on Tree and return TSQLResult object containing entries passing selection.