ROOT logo
enum anaModes {mLocal,mLocalPAR,mPROOF,mGrid,mGridPAR};
//mLocal: Analyze locally files in your computer using aliroot
//mLocalPAR: Analyze locally files in your computer using root + PAR files
//mPROOF: Analyze CAF files with PROOF
//mGrid: Analyze files on Grid via AliEn plug-in and using precompiled FLOW libraries
//       (Remark: When using this mode set also Bool_t bUseParFiles = kFALSE; in CreateAlienHandler.C)
//mGrid + par files: Analyze files on Grid via AliEn plug-in and using par files for FLOW package.
//                   Simply set Int_t mode = mGrid and Bool_t useFlowParFiles = kTRUE as arguments.
 
// CENTRALITY DEFINITION
Bool_t kUseCentrality = kFALSE;
Int_t binfirst = -1; //if kUseCentrality then change accordingly
Int_t binlast = -1;  //if kUseCentrality then change accordingly
const Int_t numberOfCentralityBins = 9;
Float_t centralityArray[numberOfCentralityBins+1] = {0.,5.,10.,20.,30.,40.,50.,60.,70.,80.}; // in centrality percentile
//Int_t centralityArray[numberOfCentralityBins+1] = {41,80,146,245,384,576,835,1203,1471,10000}; // in terms of TPC only reference multiplicity

TString commonOutputFileName = "AnalysisResults"; // e.g.: result for centrality bin 0 will be in the file "outputCentrality0.root", etc


//void runFlowTask(Int_t mode=mLocal, Int_t nRuns = 10, 
//Bool_t DATA = kFALSE, const Char_t* dataDir="/Users/snelling/alice_data/Therminator_midcentral", Int_t offset = 0)

//void runFlowTask(Int_t mode = mGridPAR, Int_t nRuns = 50000000, 
//		 Bool_t DATA = kTRUE, const Char_t* dataDir="/alice/data/LHC10h_000137161_p1_plusplusplus", Int_t offset=0) 
//void runFlowTask(Int_t mode = mLocal, Int_t nRuns = 50000000, 
//		 Bool_t DATA = kTRUE, const Char_t* dataDir="./data/", Int_t offset=0) 
//void runFlowTask(Int_t mode = mGridPAR, Bool_t DATA = kTRUE)
void runFlowTask(Int_t mode = mGrid,
                 Bool_t useFlowParFiles = kFALSE,
                 Bool_t DATA = kTRUE,
                 Bool_t useTender = kFALSE)
{
  // Time:
  TStopwatch timer;
  timer.Start();
  // Cross-check user settings before starting:
  //  CrossCheckUserSettings(DATA);
  // Load needed libraries:
  LoadLibraries(mode,useFlowParFiles);
  // Create and configure the AliEn plug-in:
  if(mode == mGrid || mode == mGridPAR) 
    {    
      gROOT->LoadMacro("CreateAlienHandler.C");
      AliAnalysisGrid *alienHandler = CreateAlienHandler(useFlowParFiles);  
      if(!alienHandler) return;
    }
  // Chains: 
  if(mode == mLocal || mode == mLocalPAR) {
    TChain *chain = new TChain("esdTree");
    //chain->Add("/home/pchrist/ALICE/HeavyIons/Data/137161/Set1/AliESDs.root");
    TChain* chain = CreateESDChain(dataDir, nRuns, offset);
    //TChain* chain = CreateAODChain(dataDir, nRuns, offset);
  }
  
  // Create analysis manager:
  AliAnalysisManager *mgr = new AliAnalysisManager("FlowAnalysisManager"); 
  // Connect plug-in to the analysis manager:
  if(mode == mGrid || mode == mGridPAR) 
    { 
      mgr->SetGridHandler(alienHandler);
    }
  
  // Event handlers:
  AliVEventHandler* esdH = new AliESDInputHandler;
  mgr->SetInputEventHandler(esdH);
  if (!DATA) {
    AliMCEventHandler *mc = new AliMCEventHandler();
    mgr->SetMCtruthEventHandler(mc); 
  }

  // Task to check the offline trigger:
  gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPhysicsSelection.C"); 
  AddTaskPhysicsSelection(!DATA);

  //Add the centrality determination task
  if(kUseCentrality) {
    gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskCentrality.C");
    AddTaskCentrality();
  }

  //Add the TOF tender
  //gROOT->LoadMacro("$ALICE_ROOT/PWG/FLOW/macros/AddTaskTenderFlow.C");
  //AddTaskTenderFlow();

  // Setup analysis and usage of centrality bins
  gROOT->LoadMacro("AddTaskFlow.C");
  Float_t kLowCentralityBin = -1.;
  Float_t kHighCentralityBin = -1;
  if(kUseCentrality) {
    kLowCentralityBin = centralityArray[binfirst];
    kHighCentralityBin = centralityArray[binlast];
  }
  AddTaskFlow(kLowCentralityBin,
	      kHighCentralityBin,
	      commonOutputFileName);

  // Enable debug printouts:
  mgr->SetDebugLevel(2);
  // Run the analysis:
  if(!mgr->InitAnalysis()) return;  
  mgr->PrintStatus();
  if(mode == mLocal || mode == mLocalPAR) {
    mgr->StartAnalysis("local",chain);
  } else if(mode == mPROOF) {
    mgr->StartAnalysis("proof",dataDir,nRuns,offset);
  } else if(mode == mGrid || mode == mGridPAR) { 
    mgr->StartAnalysis("grid");
  }

  // Print real and CPU time used for analysis:
  timer.Stop();
  timer.Print();  
  
} // end of void runFlowTask(...)

//===============================================================================================
/*
void CrossCheckUserSettings(Bool_t bData) 
{
 // Check in this method if the user settings make sense. 
 if(LYZ1SUM && LYZ2SUM) {cout<<" WARNING: You cannot run LYZ1 and LYZ2 at the same time! LYZ2 needs the output from LYZ1 !!!!"<<endl; exit(0); }
 if(LYZ1PROD && LYZ2PROD) {cout<<" WARNING: You cannot run LYZ1 and LYZ2 at the same time! LYZ2 needs the output from LYZ1 !!!!"<<endl; exit(0); }
 if(LYZ2SUM && LYZEP) {cout<<" WARNING: You cannot run LYZ2 and LYZEP at the same time! LYZEP needs the output from LYZ2 !!!!"<<endl; exit(0); }
 if(LYZ1SUM && LYZEP) {cout<<" WARNING: You cannot run LYZ1 and LYZEP at the same time! LYZEP needs the output from LYZ2 !!!!"<<endl; exit(0); }
} // end of void CrossCheckUserSettings()
*/
//===============================================================================================

void LoadLibraries(const anaModes mode, Bool_t useFlowParFiles )
{
  //--------------------------------------
  // Load the needed libraries most of them already loaded by aliroot
  //--------------------------------------

  gSystem->Load("libCore");
  gSystem->Load("libTree");
  gSystem->Load("libGeom");
  gSystem->Load("libVMC");
  gSystem->Load("libXMLIO");
  gSystem->Load("libPhysics");
  gSystem->Load("libXMLParser");
  gSystem->Load("libProof");
  gSystem->Load("libMinuit");

  if (mode==mLocal || mode==mGrid)
  {
    gSystem->Load("libSTEERBase");
    gSystem->Load("libCDB");
    gSystem->Load("libRAWDatabase");
    gSystem->Load("libRAWDatarec");
    gSystem->Load("libESD");
    gSystem->Load("libAOD");
    gSystem->Load("libSTEER");
    gSystem->Load("libANALYSIS");
    gSystem->Load("libANALYSISalice");
    gSystem->Load("libTPCbase");
    gSystem->Load("libTOFbase");
    gSystem->Load("libTOFrec");
    gSystem->Load("libTRDbase");
    gSystem->Load("libVZERObase");
    gSystem->Load("libVZEROrec");
    gSystem->Load("libT0base");
    gSystem->Load("libT0rec");
    gSystem->Load("libTENDER");
    gSystem->Load("libTENDERSupplies");

    if (useFlowParFiles)
    {
      AliAnalysisAlien::SetupPar("PWGflowBase");
      AliAnalysisAlien::SetupPar("PWGflowTasks");
    }
    else
    {
      gSystem->Load("libPWGflowBase");
      gSystem->Load("libPWGflowTasks");
    }
  }
  else if (mode==mPROOF)
  {
    TList* list = new TList();
    list->Add(new TNamed("ALIROOT_MODE", "ALIROOT"));
    if (useFlowParFiles)
      list->Add(new TNamed("ALIROOT_EXTRA_LIBS", "ANALYSIS:ANALYSISalice:TENDER:TENDERSupplies"));
    else
      list->Add(new TNamed("ALIROOT_EXTRA_LIBS", "ANALYSIS:ANALYSISalice:TENDER:TENDERSupplies:PWGflowBase:PWGflowTasks"));

    //list->Add(new TNamed("ALIROOT_EXTRA_INCLUDES","PWG/FLOW/Base:PWG/FLOW/Tasks"));

    // Connect to proof
    printf("*** Connect to PROOF ***\n");
    gEnv->SetValue("XSec.GSI.DelegProxy","2");
    //TProof* proof = TProof::Open("alice-caf.cern.ch");
    TProof* proof = TProof::Open("skaf.saske.sk");

    // list the data available
    //gProof->ShowDataSets("/*/*");
    //gProof->ShowDataSets("/alice/sim/"); //for MC Data
    //gProof->ShowDataSets("/alice/data/"); //for REAL Data

    proof->ClearPackages();
    proof->EnablePackage("VO_ALICE@AliRoot::v4-21-14-AN",list);

    if (useFlowParFiles)
    {
      gProof->UploadPackage("PWGflowBase.par");
      gProof->UploadPackage("PWGflowTasks.par");
    }

    // Show enables Packages
    gProof->ShowEnabledPackages();
  }
} // end of void LoadLibraries(const anaModes mode)

// Helper macros for creating chains
// from: CreateESDChain.C,v 1.10 jgrosseo Exp

TChain* CreateESDChain(const char* aDataDir, Int_t aRuns, Int_t offset)
{
  // creates chain of files in a given directory or file containing a list.
  // In case of directory the structure is expected as:
  // <aDataDir>/<dir0>/AliESDs.root
  // <aDataDir>/<dir1>/AliESDs.root
  // ...
  
  if (!aDataDir)
    return 0;
  
  Long_t id, size, flags, modtime;
  if (gSystem->GetPathInfo(aDataDir, &id, &size, &flags, &modtime))
    {
      printf("%s not found.\n", aDataDir);
      return 0;
    }
  
  TChain* chain = new TChain("esdTree");
  TChain* chaingAlice = 0;
  
  if (flags & 2)
    {
      TString execDir(gSystem->pwd());
      TSystemDirectory* baseDir = new TSystemDirectory(".", aDataDir);
      TList* dirList            = baseDir->GetListOfFiles();
      Int_t nDirs               = dirList->GetEntries();
      gSystem->cd(execDir);
      
      Int_t count = 0;
      
      for (Int_t iDir=0; iDir<nDirs; ++iDir)
	{
	  TSystemFile* presentDir = (TSystemFile*) dirList->At(iDir);
	  if (!presentDir || !presentDir->IsDirectory() || strcmp(presentDir->GetName(), ".") == 0 || strcmp(presentDir->GetName(), "..") == 0)
	    continue;
	  
	  if (offset > 0)
	    {
	      --offset;
	      continue;
	    }
	  
	  if (count++ == aRuns)
	    break;
	  
	  TString presentDirName(aDataDir);
	  presentDirName += "/";
	  presentDirName += presentDir->GetName();	  
	  chain->Add(presentDirName + "/AliESDs.root/esdTree");
	  //  cerr<<presentDirName<<endl;
	}
      
    }
  else
    {
      // Open the input stream
      ifstream in;
      in.open(aDataDir);
      
      Int_t count = 0;
      
      // Read the input list of files and add them to the chain
      TString esdfile;
      while(in.good()) {
	in >> esdfile;
	if (!esdfile.Contains("root")) continue; // protection
	
	if (offset > 0)
	  {
	    --offset;
	    continue;
	  }
	
	if (count++ == aRuns)
	  break;
	
	// add esd file
	chain->Add(esdfile);
      }
      
      in.close();
    }
  
  return chain;

} // end of TChain* CreateESDChain(const char* aDataDir, Int_t aRuns, Int_t offset)

//===============================================================================================

TChain* CreateAODChain(const char* aDataDir, Int_t aRuns, Int_t offset)
{
  // creates chain of files in a given directory or file containing a list.
  // In case of directory the structure is expected as:
  // <aDataDir>/<dir0>/AliAOD.root
  // <aDataDir>/<dir1>/AliAOD.root
  // ...
  
  if (!aDataDir)
    return 0;
  
  Long_t id, size, flags, modtime;
  if (gSystem->GetPathInfo(aDataDir, &id, &size, &flags, &modtime))
    {
      printf("%s not found.\n", aDataDir);
      return 0;
    }
  
  TChain* chain = new TChain("aodTree");
  TChain* chaingAlice = 0;
  
  if (flags & 2)
    {
      TString execDir(gSystem->pwd());
      TSystemDirectory* baseDir = new TSystemDirectory(".", aDataDir);
      TList* dirList            = baseDir->GetListOfFiles();
      Int_t nDirs               = dirList->GetEntries();
      gSystem->cd(execDir);
      
      Int_t count = 0;
      
      for (Int_t iDir=0; iDir<nDirs; ++iDir)
	{
	  TSystemFile* presentDir = (TSystemFile*) dirList->At(iDir);
	  if (!presentDir || !presentDir->IsDirectory() || strcmp(presentDir->GetName(), ".") == 0 || strcmp(presentDir->GetName(), "..") == 0)
	    continue;
	  
	  if (offset > 0)
	    {
	      --offset;
	      continue;
	    }
	  
	  if (count++ == aRuns)
	    break;
	  
	  TString presentDirName(aDataDir);
	  presentDirName += "/";
	  presentDirName += presentDir->GetName();	  
	  chain->Add(presentDirName + "/AliAOD.root/aodTree");
	  // cerr<<presentDirName<<endl;
	}
      
    }
  else
    {
      // Open the input stream
      ifstream in;
      in.open(aDataDir);
      
      Int_t count = 0;
      
      // Read the input list of files and add them to the chain
      TString aodfile;
      while(in.good()) {
	in >> aodfile;
	if (!aodfile.Contains("root")) continue; // protection
	
	if (offset > 0)
	  {
	    --offset;
	    continue;
	  }
	
	if (count++ == aRuns)
	  break;
	
	// add aod file
	chain->Add(aodfile);
      }
      
      in.close();
    }
  
  return chain;

} // end of TChain* CreateAODChain(const char* aDataDir, Int_t aRuns, Int_t offset)

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