ROOT logo
enum anaModes {mLocal,mPROOF,mGrid};
//mLocal: Analyze locally files in your computer using aliroot
//mPROOF: Analyze CAF files with PROOF
//mGrid: Analyze files on Grid via AliEn plug-in and using precompiled FLOW libraries

// CENTRALITY DEFINITION
//Int_t binfirst = 4;  //where do we start numbering bins
//Int_t binlast = 6;  //where do we stop numbering bins
//const Int_t numberOfCentralityBins = 9;
//Int_t binfirst = 1;  //where do we start numbering bins
//Int_t binlast = 2;  //where do we stop numbering bins
//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 = "output"; // e.g.: result for centrality bin 0 will be in the file "outputCentrality0.root", etc

void runTaskFlowOnMC(Int_t harmonic = 2,
		     Double_t gImpactParameterMin = 0.0,
		     Double_t gImpactParameterMax = 100.0,
		     Int_t gRefMultMin = 0,
		     Int_t gRefMultMax = 100,
		     Double_t etaMax = 1.3,
		     Double_t ptMin = 0.05,
		     Double_t ptMax = 20.0,
		     Int_t chargePOI = 0,
		     Int_t mode = mLocal, 
		     Bool_t useFlowParFiles = kFALSE,
		     Bool_t useTender = kFALSE) {
  // Time:
  TStopwatch timer;
  timer.Start();

  // Load needed libraries:
  LoadLibraries(mode,useFlowParFiles);
  
  //Fix the filename
  commonOutputFileName += ".etaMax.";
  commonOutputFileName += etaMax;
  commonOutputFileName += ".harmonics.";
  commonOutputFileName += harmonic;

  // Create analysis manager:
  AliAnalysisManager *mgr = new AliAnalysisManager("FlowAnalysisManager");

  // Chains:
  if(mode == mLocal) {
    TChain *chain = new TChain("TE");
    chain->Add("galice.root");
  }

  // Connect plug-in to the analysis manager:
  if(mode == mGrid) {
    gROOT->LoadMacro("CreateAlienHandler.C");
    AliAnalysisGrid *alienHandler = CreateAlienHandler();
    if(!alienHandler) return;
    mgr->SetGridHandler(alienHandler);
  }

  // Event handlers:
  AliVEventHandler* esdH = new AliESDInputHandler;
  mgr->SetInputEventHandler(esdH);
  AliMCEventHandler *mc = new AliMCEventHandler();
  mc->SetReadTR(kFALSE);
  mgr->SetMCtruthEventHandler(mc);
  
  if (useTender) {
    //Add the tenders
    gROOT->LoadMacro("$ALICE_ROOT/PWG2/FLOW/macros/AddTaskTenderFlow.C");
    AddTaskTenderFlow();
  }

  // Setup analysis per centrality bin:
  gROOT->LoadMacro("AddTaskFlowOnMC.C");
  AddTaskFlowOnMC(commonOutputFileName,
		  etaMax,
		  ptMin,
		  ptMax,
		  chargePOI,
		  harmonic,
		  gImpactParameterMin,
		  gImpactParameterMax,
		  gRefMultMin,
		  gRefMultMax);

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

  // Print real and CPU time used for analysis:
  timer.Stop();
  timer.Print();

} // end of void runTaskFlowOnMC(...)

//===============================================================================================
/*
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("libTOFsim");
    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:PWG2flowCommon:PWG2flowTasks"));

    //list->Add(new TNamed("ALIROOT_EXTRA_INCLUDES","PWG2/FLOW/AliFlowCommon:PWG2/FLOW/AliFlowTasks"));

    // 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("PWG2flowCommon.par");
      gProof->UploadPackage("PWG2flowTasks.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)

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