#include "QFramework/TQAnalysisSampleVisitor.h"

#include "QFramework/TQCounter.h"
#include "QFramework/TQUtils.h"
#include "QFramework/TQSample.h"
#include "QFramework/TQCut.h"
#include "QFramework/TQStringUtils.h"
#include "QFramework/TQIterator.h"
#include "QFramework/TQToken.h"

#include "TList.h"
#include "TObjString.h"
#include "TStopwatch.h"

#include "QFramework/TQAlgorithm.h"

// #define _DEBUG_
#include "QFramework/TQLibrary.h"

#include <iostream>
#include <fstream>
#include <sstream>
#include <cstdlib>

////////////////////////////////////////////////////////////////////////////////////////////////
//
// TQAnalysisSampleVisitor:
//
// Visit samples and execute analysis jobs at cuts.
//
////////////////////////////////////////////////////////////////////////////////////////////////

ClassImp(TQAnalysisSampleVisitor)


//__________________________________________________________________________________|___________

TQAnalysisSampleVisitor::TQAnalysisSampleVisitor() :
TQAnalysisSampleVisitorBase("asv",false)
{
  // Default constructor of the TQAnalysisSampleVisitor class
  this->setVisitTraceID("analysis");
}

//__________________________________________________________________________________|___________

TQAnalysisSampleVisitor::~TQAnalysisSampleVisitor(){
  // default destructor
}

//__________________________________________________________________________________|___________

TQAnalysisSampleVisitor::TQAnalysisSampleVisitor(TQCut* base, bool verbose) :
  TQAnalysisSampleVisitorBase("asv",verbose),
  fBaseCut(base)
{
  // constructor with base cut
  this->setVisitTraceID("analysis");
}



//__________________________________________________________________________________|___________

int TQAnalysisSampleVisitor::visitFolder(TQSampleFolder * sampleFolder, TString& /*message*/) {
  // visit an instance of TQSampleFolder
  if(!fBaseCut)
    return visitFAILED;

  if(!fBaseCut->initializeSampleFolder(sampleFolder))
    return visitFAILED;
  if(!this->initializeAlgorithms(sampleFolder))
    return visitFAILED;

  this->stamp(sampleFolder);

  return visitLISTONLY;
}

//__________________________________________________________________________________|___________

int TQAnalysisSampleVisitor::revisitSample(TQSample * /*sample*/, TString& /*message*/) {
  // revisit an instance of TQSample on the way out
  return visitIGNORE;
}



//__________________________________________________________________________________|___________

int TQAnalysisSampleVisitor::revisitFolder(TQSampleFolder * sampleFolder, TString& message) {
  // revisit an instance of TQSampleFolder on the way out
  bool finalized = fBaseCut->finalizeSampleFolder(sampleFolder);
  finalized = this->finalizeAlgorithmsSampleFolder(sampleFolder) && finalized;

  bool generalizeHistograms = false;
  bool generalizeCounter = false;
  //@tag: [.asv.generalize.<objectType>] These folder tags determine if objects of type "<objectType>" (=histograms,counter,countergrid) should be generalized using TQSampleFolder::generalizeObjects. Default: true
  sampleFolder->getTagBool("generalize.histograms", generalizeHistograms, true);
  sampleFolder->getTagBool("generalize.counter", generalizeCounter, true);

  bool generalized = false;
  bool doGeneralize = generalizeHistograms || generalizeCounter;

  if (doGeneralize){

    /* start the stop watch */
    TStopwatch * timer = new TStopwatch();

    /* generalize all histograms */
    int nHistos = 0;
    if (generalizeHistograms)
      nHistos = sampleFolder->generalizeHistograms();

    /* generalize all counter */
    int nCounter = 0;
    if (generalizeCounter)
      nCounter = sampleFolder->generalizeCounters();

    /* stop the timer */
    timer->Stop();

    message.Append(" ");
    message.Append(TQStringUtils::fixedWidth("--", 12,"r"));
    message.Append(TQStringUtils::fixedWidth(TString::Format("%.2f", timer->RealTime()), 12,"r"));
    message.Append(" ");

    if (nHistos == 0 && nCounter == 0)
      message.Append("nothing to generalize");
    else{
      message.Append("generalized: ");
      if(nHistos > 0){
        if (generalizeHistograms) message.Append(TString::Format("%d histograms", nHistos));
      }
      if(nCounter > 0 && nHistos > 0){
        message.Append(", ");
      }
      if(nCounter > 0){
        message.Append(TString::Format("%d counters", nCounter));
      }
    }

    /* delete the timer */
    delete timer;

    if (nHistos > 0 || nCounter > 0)
      generalized = true;

  } else {
    if(finalized)
      return visitIGNORE;
  }
  if(generalized || !doGeneralize){
    if(finalized){
      return visitOK;
    } else
      return visitWARN;
  } else {
    if(finalized)
      return visitWARN;
  }
  return visitFAILED;
}


//__________________________________________________________________________________|___________

int TQAnalysisSampleVisitor::visitSample(TQSample * sample, TString& message) {
  // visit an instance of TQSample
  TStopwatch * timer = new TStopwatch();

  /* analyse the tree */
  TString analysisMessage;
  #ifndef _DEBUG_
  TQLibrary::redirect_stderr("/dev/null");
  #endif
  DEBUGclass("analysing tree");
  int nEntries = analyseTree(sample, analysisMessage);
  #ifndef _DEBUG_
  TQLibrary::restore_stderr();
  #endif
  /* stop the timer */
  timer->Stop();

  /* compile the message */
  message.Append(" ");

  //@tag: [.asv.analysis.nentries] This sample tag is set by TQAnalysisSampleVisitor, containing the (raw) number of events analyzed in a tree.
  /* save the number of entries in tree analyzed */
  sample->setTagInteger(".asv.analysis.nentries", nEntries);

  if (nEntries >= 0) {
    message.Append(TQStringUtils::fixedWidth(TQStringUtils::getThousandsSeparators(nEntries), 12,"r"));
  } else {
    message.Append(TQStringUtils::fixedWidth("--", 12,"r"));
  }

  message.Append(TQStringUtils::fixedWidth(TString::Format("%.2f", timer->RealTime()), 12,"r"));
  message.Append(" ");
  message.Append(TQStringUtils::fixedWidth(analysisMessage, 40, "l"));

  /* delete the timer */
  delete timer;

  if(nEntries > 0){
    //this->stamp(sample); //moved to analyseTree to improve variant support
    return visitOK;
  }
  else if (nEntries == 0)
    return visitWARN;

  return visitFAILED;

}


//__________________________________________________________________________________|___________

void TQAnalysisSampleVisitor::setBaseCut(TQCut * baseCut) {
  // set the base cut
  if (baseCut) fBaseCut = baseCut;
  else WARNclass("attempt to set baseCut=NULL");
}


//__________________________________________________________________________________|___________

TQCut * TQAnalysisSampleVisitor::getBaseCut() {
  // get the base cut
  return fBaseCut;
}


//__________________________________________________________________________________|___________

int TQAnalysisSampleVisitor::analyseTree(TQSample * sample, TString& message) {
  // analyse the tree in this sample
  DEBUGclass("entering function");
  DEBUGclass("testing sample");
  if (!sample) {
    message = TString("sample is NULL");
    DEBUGclass(message);
    return -1;
  }

  DEBUGclass("testing basecut");
  if (!fBaseCut) {
    message = TString("no base cut given!");
    DEBUGclass(message);
    return -1;
  }

  /* try to get tree token */
  DEBUGclass("obtaining tree token");
  TQToken * treeToken = sample->getTreeToken();
  if(!treeToken){
    message = TString("failed to get tree token");
    DEBUGclass(message);
    return -1;
  }
  DEBUGclass("retrieving tree");
  TTree * tree = (TTree*)(treeToken->getContent());
  if(!tree){
    message = TString("failed to retrieve tree");
    DEBUGclass(message);
    sample->returnToken(treeToken);
    return -1;
  }

  DEBUGclass("owning tree token");
  treeToken->setOwner(this);

  Long64_t nEntries = -1;

  DEBUGclass("initializing sample '%s'",sample->GetName());
  if (fBaseCut->initialize(sample)) {
    /* initialize the tree */
    TObjArray* branchNames = fBaseCut->getListOfBranches();
    branchNames->SetOwner(true);
    tree->SetBranchStatus("*", 0);
    this->setupBranches(tree,branchNames);
    delete branchNames;

    DEBUGclass("retrieving number of entries");
    Long64_t nEntriesOrig = tree->GetEntries();

    nEntries = std::min(nEntriesOrig, this->fMaxEvents);
    if (this->fSkipEvents > nEntries) {
      WARNclass("Number of skipped events (%d) greater than number of entries (%d), will skip executing algorithm for sample %s",
                this->fSkipEvents, nEntries, sample->GetName());
      // make sure everything that needs to get finalized is finalized
      if (!fBaseCut->finalize()) { ERRORclass("failed to finalize analysis chain"); }
      return 0;  // indicates warning
    }

    /* check wether to use MC weights */
    DEBUGclass("testing for usemcweights tag");
    bool useWeights = false;
    //@tag: [usemcweights] This sample tag controlls if (MC) weights are applied for the respective sample.
    sample->getTagBool("usemcweights", useWeights, true);

    if(fDebugMode && useWeights){
      // due to popular request, we want to normalization be correct even when *only doing debugging*
      double norm = double(nEntriesOrig)/double(nEntries);
      sample->setNormalisation(sample->getNormalisation() * norm);
    }

    if(this->initializeAlgorithms(sample)){
      /* loop over tree entries */
      DEBUGclass("entering event loop");
      for (Long64_t i = this->fSkipEvents; i < nEntries; ++i) {
        tree->GetEntry(i);
        DEBUGclass(" visiting entry %d, executing algorithms",i);
        if(!this->executeAlgorithms()){
          nEntries = -1;
          message = TString("failure in algorithm execute");
        } else {
          DEBUGclass(" analysing entry %d",i);
          this->fBaseCut->analyse(1., useWeights);
          this->cleanupAlgorithms();
        }
      }
      if(!this->finalizeAlgorithms()){
        message = TString("failure in algorithm finalize");
      }
    } else {
      message = TString("failure in algorithm initialize");
    }


  #ifdef _DEBUG_
    TQObservable::printObservables();
    TQUtils::printActiveBranches(tree);
    fBaseCut->printCuts();
  #endif

  } else {
    message =TString("failed to initialize analysis chain");
    DEBUGclass(message);
  }

  if(nEntries > 0){
    //stamp (if applicable) before finalizing cuts (-> cuts propagate the stamp to variants)
    this->stamp(sample);
  }

  if (fBaseCut && !fBaseCut->finalize()) {
    message = TString("failed to finalize analysis chain");
  }

  sample->returnTreeToken(treeToken);

  DEBUGclass("finished analyzing sample '%s'",sample->GetName());

  if (sample->getNTreeTokens() > 0) {
    std::cout << std::endl;
    message=TString("sample left with # tree tokens > 0");
    sample->printTreeTokens();
    std::cout << std::endl;
  }

  return nEntries;
}

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