dt_DrawTest.C

Go to the documentation of this file.
00001 #include "TTree.h"
00002 #include "TFile.h"
00003 #include "TList.h"
00004 #include "TROOT.h"
00005 #include <TBenchmark.h>
00006 
00007 int gHasLibrary = kFALSE;
00008 int gBranchStyle = 1;
00009 TList gSkipped;
00010 
00011 void DrawSkippable(TTree* tree, const char* what, const char* where, Bool_t draw = true) {
00012   //cerr << "Doing " << what << " which is " << skip << endl;
00013    if (draw) {
00014       TString cut = what;
00015       cut.Append(">>");
00016       cut.Append(where);
00017       tree->Draw(cut.Data(),"","goff");
00018       TH1* h = (TH1*)gDirectory->FindObject(where);
00019       if (h) h->SetTitle(Form("histo made from T->Draw(\"%s\")",what));
00020    } else {
00021       gSkipped.Add(new TNamed(where,where));
00022    }
00023 };
00024 
00025 void DrawSkippable(TTree* tree, const char* what, const char* cond,
00026                    const char* where, Bool_t draw = true) {
00027    //cerr << "Doing " << what << " which is " << skip << endl;
00028    if (draw) { 
00029       TString cut = what;
00030       cut.Append(">>");
00031       cut.Append(where);
00032       tree->Draw(cut.Data(),cond,"goff");
00033       TH1* h = (TH1*)gDirectory->FindObject(where);
00034       if (h) h->SetTitle(Form("histo made from T->Draw(\"%s\",\"%s\")",what,cond));
00035    } else {
00036       gSkipped.Add(new TNamed(where,where));
00037    }
00038 };
00039 
00040 // Rootmarks for fcdflnx1 is 153.4
00041 void DrawMarks() {
00042 
00043   // The base is currently: RunDrawTest.C++("Event.old.split.root",0)
00044   Float_t rt_base = 2.33/10.0;
00045   Float_t cp_base = 2.34/10.0;
00046 
00047   Float_t rt = gBenchmark->GetRealTime("DrawTest");
00048   Float_t ct = gBenchmark->GetCpuTime("DrawTest");
00049 
00050   // gBenchmark->Print("DrawTest");
00051   
00052   Float_t rootmarks = 200*(rt_base + cp_base)/(rt + ct);
00053   
00054   printf("*  ROOTMARKS =%6.1f   *  Root%-8s  %d/%d\n",rootmarks,gROOT->GetVersion(),gROOT->GetVersionDate(),gROOT->GetVersionTime());
00055  
00056 }
00057 
00058 
00059 //_______________________________________________________________
00060 TDirectory* GenerateDrawHist(TTree *tree, int quietLevel = 0, int level = 3)
00061 {
00062 // Test selections via TreeFormula
00063 // tree is a TTree when called by stress9
00064 // tree is a TChain when called from stres11
00065 // This is a quite complex test checking the results of TTree::Draw
00066 // or TChain::Draw with an explicit loop on events.
00067 // Also a good test for the interpreter
00068 
00069    gROOT->cd();
00070    TDirectory *hfile = gDirectory;
00071 
00072    gBenchmark = new TBenchmark();
00073    gBenchmark->Start("DrawTest");
00074    
00075    // Each tree->Draw generates an histogram
00076    DrawSkippable(tree,"GetNtrack()","hGetNtrack",(level>0 && gHasLibrary));
00077 
00078    //gBenchmark->Show("DrawTest");  gBenchmark->Start("DrawTest");
00079 
00080    DrawSkippable(tree,"fNtrack","hNtrack");
00081    DrawSkippable(tree,"fNseg","hNseg");
00082    DrawSkippable(tree,"fTemperature","hTemp");
00083 
00084    DrawSkippable(tree,"fH.GetMean()","hHmean");
00085    if (level>0) DrawSkippable(tree,"fH.fXaxis.fXmax","hHAxisMax");
00086    if (level>0) DrawSkippable(tree,"fH.fXaxis.GetXmax()","hHAxisGetMax");
00087    DrawSkippable(tree,"fH.GetXaxis().GetXmax()","hHGetAxisGetMax",(level>0));
00088    DrawSkippable(tree,"fH.GetXaxis().fXmax","hHGetAxisMax",(level>0));
00089    DrawSkippable(tree,"GetHistogram().GetXaxis().GetXmax()","hGetHGetAxisMax",
00090                  (level>0&&gHasLibrary));
00091    DrawSkippable(tree,"event.GetHistogram().GetXaxis().GetXmax()",
00092                  "hGetRefHGetAxisMax",(level>0&&gHasLibrary));
00093 
00094    DrawSkippable(tree,"fTracks.fPx","fEvtHdr.fEvtNum%10 == 0","hPx");
00095    DrawSkippable(tree,"fTracks.fPy","fEvtHdr.fEvtNum%10 == 0","hPy");
00096    DrawSkippable(tree,"fTracks.fPz","fEvtHdr.fEvtNum%10 == 0","hPz");
00097    DrawSkippable(tree,"fRandom","3*(fEvtHdr.fEvtNum%10 == 1)","hRandom");
00098    DrawSkippable(tree,"fMass2",  "fEvtHdr.fEvtNum%10 == 1","hMass2");
00099    DrawSkippable(tree,"fBx",        "fEvtHdr.fEvtNum%10 == 1","hBx");
00100    DrawSkippable(tree,"fBy",        "fEvtHdr.fEvtNum%10 == 1","hBy");
00101    DrawSkippable(tree,"fXfirst","fEvtHdr.fEvtNum%10 == 2","hXfirst");
00102    DrawSkippable(tree,"fYfirst","fEvtHdr.fEvtNum%10 == 2","hYfirst");
00103    DrawSkippable(tree,"fZfirst","fEvtHdr.fEvtNum%10 == 2","hZfirst");
00104    DrawSkippable(tree,"fXlast",  "fEvtHdr.fEvtNum%10 == 3","hXlast");
00105    DrawSkippable(tree,"fYlast",  "fEvtHdr.fEvtNum%10 == 3","hYlast");
00106    DrawSkippable(tree,"fZlast",  "fEvtHdr.fEvtNum%10 == 3","hZlast");
00107    DrawSkippable(tree,"fCharge","fPx < 0","hCharge");
00108    DrawSkippable(tree,"fNpoint","fPx < 0","hNpoint");
00109    DrawSkippable(tree,"fValid",  "fPx < 0","hValid");
00110    DrawSkippable(tree,"fPointValue","hPointValue", gBranchStyle!=0);
00111    tree->SetAlias("mult","fPx*fPy");
00112    DrawSkippable(tree,"fEvtHdr.fEvtNum*6+mult", "hAlias", 1);
00113    tree->SetAlias("track","event.fTracks");
00114    DrawSkippable(tree,"track.fPx+track.fPy", "hAliasSymbol", 1);
00115    DrawSkippable(tree,"track.GetPx()+track.GetPy()","hAliasSymbolFunc", gBranchStyle!=0 && gHasLibrary);
00116 
00117    DrawSkippable(tree,"fIsValid","hBool");
00118 
00119    DrawSkippable(tree,"fMatrix","hFullMatrix");
00120    DrawSkippable(tree,"fMatrix[][0]","hColMatrix");
00121    DrawSkippable(tree,"fMatrix[1][]","hRowMatrix");
00122    DrawSkippable(tree,"fMatrix[2][2]","hCellMatrix");
00123 
00124    DrawSkippable(tree,"fMatrix - fVertex","hFullOper");
00125    DrawSkippable(tree,"fMatrix[2][1] - fVertex[5][1]","hCellOper");
00126    DrawSkippable(tree,"fMatrix[][1]  - fVertex[5][1]","hColOper");
00127    DrawSkippable(tree,"fMatrix[2][]  - fVertex[5][2]","hRowOper");
00128    DrawSkippable(tree,"fMatrix[2][]  - fVertex[5][]","hMatchRowOper");
00129    DrawSkippable(tree,"fMatrix[][2]  - fVertex[][1]","hMatchColOper");
00130    DrawSkippable(tree,"fMatrix[][2]  - fVertex[][]","hRowMatOper");
00131    DrawSkippable(tree,"fMatrix[][2]  - fVertex[5][]","hMatchDiffOper");
00132    DrawSkippable(tree,"fMatrix[][]   - fVertex[][]","hFullOper2");
00133 
00134    // Test on variable arrays
00135    DrawSkippable(tree,"fClosestDistance","hClosestDistance",gBranchStyle!=0);
00136    DrawSkippable(tree,"fClosestDistance[2]","hClosestDistance2",gBranchStyle!=0);
00137    DrawSkippable(tree,"fClosestDistance[9]","hClosestDistance9",gBranchStyle!=0);
00138 
00139    // Test variable indexing
00140    DrawSkippable(tree,"fClosestDistance[fNvertex/2]","hClosestDistanceIndex",
00141                  (level>0)&&gBranchStyle!=0);
00142    DrawSkippable(tree,"fPx:fPy[fNpoint/6]","fPy[fNpoint/6]>0","hPxInd",(level>0));
00143 
00144    // Test of simple function calls
00145    DrawSkippable(tree,"sqrt(fNtrack)","hSqrtNtrack",(level>0));   
00146 
00147    // Test string operations
00148    DrawSkippable(tree,"fEvtHdr.fEvtNum","fType==\"type1\" ","hString",(level>0));
00149    DrawSkippable(tree,"fEvtHdr.fEvtNum","1 && strstr(fType,\"1\") ","+hString",(level>0));
00150    tree->SetAlias("typ","fType");
00151    DrawSkippable(tree,"strstr(typ,\"1\") ", "hAliasStr", 1);
00152    DrawSkippable(tree,"fH.fTitle.fData==\"Event Histogram\"","hStringSpace",1);
00153 
00154    // Test binary operators
00155    DrawSkippable(tree,"fValid<<4","hShiftValid",(level>0));
00156    DrawSkippable(tree,"((fValid<<4)>>2)","+hShiftValid",(level>0));
00157    DrawSkippable(tree,"fValid&0x1","(fNvertex>10) && (fNseg<=6000)"
00158                  ,"hAndValid",(level>0));
00159 
00160    // Test weight
00161    DrawSkippable(tree,"fPx","(fBx>.15) || (fBy<=-.15)","hPxBx",(level>0));
00162    DrawSkippable(tree,"fPx","fBx*fBx*(fBx>.15) + fBy*fBy*(fBy<=-.15)",
00163                  "hPxBxWeight",(level>0));
00164 
00165    DrawSkippable(tree,"event.fTriggerBits",
00166                  "hTriggerBits",level>1 && gBranchStyle!=0);
00167    DrawSkippable(tree,"event.fTriggerBits.fNbits",
00168                  "event.fTriggerBits.TestBitNumber(28)",
00169                  "hFiltTriggerBits",level>1 && gBranchStyle!=0);
00170 
00171    DrawSkippable(tree,"event.GetTriggerBits()",
00172                  "hTriggerBitsFunc",level>1 && gBranchStyle!=0 && gHasLibrary );
00173 
00174    DrawSkippable(tree,"fTracks.fTriggerBits",
00175                  "hTrackTrigger", level>1 && gBranchStyle!=0);
00176    DrawSkippable(tree,"fPx",
00177                  "fTracks.fTriggerBits.TestBitNumber(5)",
00178                  "hFiltTrackTrigger", level>1 && gBranchStyle!=0);
00179 
00180    DrawSkippable(tree,"TMath::BreitWigner(fPx,3,2)",
00181                  "",
00182                  "hBreit", level>1 && gBranchStyle!=0);
00183 
00184    // Test on alternate value
00185    DrawSkippable(tree,"fMatrix-Alt$(fClosestDistance,0)",
00186                  "",
00187                  "hAlt", level>1 && gBranchStyle!=0);
00188 
00189    // Test on the @ notation to access the collection object itself
00190    DrawSkippable(tree,"event.@fTracks.size()","","hSize",level>2 && !(gBranchStyle==0 && !gHasLibrary));
00191    DrawSkippable(tree,"event.fTracks@.size()","","+hSize",level>2 && !(gBranchStyle==0 && !gHasLibrary));
00192    DrawSkippable(tree,"@fTracks.size()","","hSize2",level>2 && gBranchStyle!=0);
00193    DrawSkippable(tree,"fTracks@.size()","","+hSize2",level>2 && gBranchStyle!=0);
00194    DrawSkippable(tree,"Sum$(fPx)","","hSumPx",level>2);
00195    DrawSkippable(tree,"MaxIf$(fPx,fPy>1.0):Max$(fPy)","Sum$(fPy>1.0)>0","hMaxPx",level>2);
00196    DrawSkippable(tree,"MinIf$(fPx,fPy>1.0):Min$(fPy)","Sum$(fPy>1.0)>0","hMinPx",level>2);
00197 
00198    if (quietLevel<2) gBenchmark->Show("DrawTest");   
00199    else gBenchmark->Stop("DrawTest");  
00200    gBenchmark->Start("DrawTest");
00201 
00202    return hfile;
00203 
00204 }
00205 

Generated on Tue Jul 5 15:14:48 2011 for ROOT_528-00b_version by  doxygen 1.5.1