ROOT logo
//========================================================//
//Macro that reads the output of the hydro calculations 
//(Therminator) using the format that can be found at
//arXiv:1102.0273
//Author: Panos.Christakoglou@nikhef.nl
//========================================================//

//========================================================//
//Event structure
struct StructEvent {
  UInt_t eventID;//unique identifier of the event (random number)
  UInt_t entries;//number of particles of each event
  UInt_t entriesprev;//set to 0 by default
};
//========================================================//

//========================================================//
//Particle structure
//Primordial particles: fathereid==-1 ==> 
//pid==fatherpid==rootpid
struct StructParticle {
  Float_t mass;//the mass of the particle (in GeV)
  Float_t t;//the time coordinate of the particle in fm/c
  Float_t x;//the spacial coordinate x in fm/c
  Float_t y;//the spacial coordinate y in fm/c
  Float_t z;//the spacial coordinate z in fm/c
  Float_t e;//the energy in GeV
  Float_t px;//the x-coordinate of the particle's momentum in GeV
  Float_t py;//the y-coordinate of the particle's momentum in GeV
  Float_t pz;//the z-coordinate of the particle's momentum in GeV
  Int_t decayed;//decay flag (1: decayed, 0: no decay)
  Int_t pid;//PDG of particle
  Int_t fatherpid;//PDG of parent
  Int_t rootpid;//root (primordial) particle PDG number
  Int_t eid;//sequence number in the event
  Int_t fathereid;//parent sequence number in the event
  UInt_t eventid;//unique identifier of the event (random number)
};
//========================================================//

//========================================================//
//Balance function analysis variables
Bool_t gRunShuffling=kFALSE;
Bool_t gRunMixing=kTRUE;
Bool_t gRunMixingWithEventPlane=kFALSE;

Double_t gEtaMin = -0.8;
Double_t gEtaMax = 0.8;
Double_t gPtMin = 0.2;
Double_t gPtMax = 20.0;
//========================================================//


void runBalanceFunctionOnHydro(TString aEventDir = ".", 
			       Int_t aEventFiles = 9) {
  //Macro that reads the themrinator events
  //Author: Panos.Christakoglou@nikhef.nl
  // Time:
  TStopwatch timer;
  timer.Start();

  //========================================================//
  //Load the aliroot libraries
  gSystem->Load("libSTEERBase.so");
  gSystem->Load("libESD.so");
  gSystem->Load("libAOD.so");
  gSystem->Load("libANALYSIS.so");
  gSystem->Load("libANALYSISalice.so");
  gSystem->Load("libEventMixing.so");
  gSystem->Load("libCORRFW.so");
  gSystem->Load("libPWGTools.so");
  gSystem->Load("libPWGCFebye.so");
  //========================================================//

  //========================================================//
  //Configure the bf objects
  AliBalancePsi *bf = new AliBalancePsi();
  bf->SetAnalysisLevel("MC");
  bf->SetShuffle(gRunShuffling);
  bf->SetEventClass("EventPlane");
  bf->SetDeltaEtaMax(TMath::Abs(gEtaMax-gEtaMin));
  bf->InitHistograms();

  AliBalancePsi *bfs = 0x0;
  if(gRunShuffling) {
    bfs = new AliBalancePsi();
    bfs->SetAnalysisLevel("MC");
    bfs->SetEventClass("EventPlane");
    bfs->SetDeltaEtaMax(TMath::Abs(gEtaMax-gEtaMin));
    bfs->InitHistograms();
  }

  AliBalancePsi *bfm = 0x0;
  if(gRunMixing) {
    bfm = new AliBalancePsi();
    bfm->SetAnalysisLevel("MC");
    bfm->SetShuffle(gRunShuffling);
    bfm->SetEventClass("EventPlane");
    bfm->SetDeltaEtaMax(TMath::Abs(gEtaMax-gEtaMin));
    bfm->InitHistograms();
  }
  //========================================================//

  //========================================================//
  //Output objects
  //QA list
  fList = new TList();
  fList->SetName("listQA");
  fList->SetOwner();

  //Balance Function list
  TList *fListBF = new TList();
  fListBF->SetName("listBF");
  fListBF->SetOwner();
  fListBF->Add(bf->GetHistNp());
  fListBF->Add(bf->GetHistNn());
  fListBF->Add(bf->GetHistNpn());
  fListBF->Add(bf->GetHistNnn());
  fListBF->Add(bf->GetHistNpp());
  fListBF->Add(bf->GetHistNnp());
 
  //Balance function list: shuffling
  TList *fListBFS = 0x0;
  if(gRunShuffling) {
    fListBFS = new TList();
    fListBFS->SetName("listBFShuffled");
    fListBFS->SetOwner();
    fListBFS->Add(bfs->GetHistNp());
    fListBFS->Add(bfs->GetHistNn());
    fListBFS->Add(bfs->GetHistNpn());
    fListBFS->Add(bfs->GetHistNnn());
    fListBFS->Add(bfs->GetHistNpp());
    fListBFS->Add(bfs->GetHistNnp());
  }

  //Balance function list: event mixing
  TList *fListBFM = 0x0;
  if(gRunMixing) {
    fListBFM = new TList();
    fListBFM->SetName("listBFMixed");
    fListBFM->SetOwner();
    fListBFM->Add(bfm->GetHistNp());
    fListBFM->Add(bfm->GetHistNn());
    fListBFM->Add(bfm->GetHistNpn());
    fListBFM->Add(bfm->GetHistNnn());
    fListBFM->Add(bfm->GetHistNpp());
    fListBFM->Add(bfm->GetHistNnp());
  }
  //========================================================//

  //========================================================//
  //Event Mixing
  if(gRunMixing){
    Int_t trackDepth = 50000;
    Int_t poolsize   = 1000;  // Maximum number of events, ignored in the present implemented of AliEventPoolManager
        
    // centrality bins
    Double_t centralityBins[] = {0.,100.};
    Double_t* centbins        = centralityBins;
    Int_t nCentralityBins     = sizeof(centralityBins) / sizeof(Double_t) - 1;
    
    // Zvtx bins
    Double_t vertexBins[] = {-10., 10.}; 
    Double_t* vtxbins     = vertexBins;
    Int_t nVertexBins     = sizeof(vertexBins) / sizeof(Double_t) - 1;
    
    AliEventPoolManager *fPoolMgr = 0x0;
    fPoolMgr = new AliEventPoolManager(poolsize, trackDepth, nCentralityBins, centbins, nVertexBins, vtxbins);
  }
  //========================================================//

  //========================================================//
  //Create the TChain object: events
  TChain *eventChain = new TChain("events");
  StructEvent tStructEvents;
  eventChain->SetBranchAddress("event",&tStructEvents);
  //========================================================//

  //========================================================//
  //Create the TChain object: particles 
  TChain *particleChain = new TChain("particles");
  StructParticle tStructParticles;
  particleChain->SetBranchAddress("particle",&tStructParticles);
  //========================================================//

  //========================================================//
  //Fill the TChain with the files in the directory
  for(Int_t iFile = 1; iFile <= aEventFiles; iFile++) {
    TString filename = aEventDir.Data();
    filename += "/event00"; filename += iFile;
    filename += ".root";
    cout<<"Adding file "<<filename.Data()<<" to the chain..."<<endl;
    eventChain->Add(filename.Data());
    particleChain->Add(filename.Data());
  }
  //========================================================//
 
  //========================================================//
  //QA histograms
  //Event stats.
  TString gCutName[5] = {"Total","Offline trigger",
                         "Vertex","Analyzed","sel. Centrality"};
  TH1F *fHistEventStats = new TH1F("fHistEventStats",
				   "Event statistics;;N_{events}",
				   5,0.5,5.5);
  for(Int_t i = 1; i <= 5; i++)
    fHistEventStats->GetXaxis()->SetBinLabel(i,gCutName[i-1].Data());
  fList->Add(fHistEventStats);

  //Number of accepted particles
  TH1F *fHistNumberOfAcceptedTracks = new TH1F("fHistNumberOfAcceptedTracks",";N_{acc.};Entries",4001,-0.5,4000.5);
  fList->Add(fHistNumberOfAcceptedTracks);

  //Particle level: eta-phi
  TH2F *fHistEtaPhiPositive  = new TH2F("fHistEtaPhiPositive",";#eta;#varphi (rad)",80,gEtaMin,gEtaMax,72,0.0,2.*TMath::Pi());
  fList->Add(fHistEtaPhiPositive);
  TH2F *fHistEtaPhiNegative  = new TH2F("fHistEtaPhiNegative",";#eta;#varphi (rad)",80,gEtaMin,gEtaMax,72,0.0,2.*TMath::Pi());
  fList->Add(fHistEtaPhiNegative);

  //Particle level: pt
  TH1F *fHistPtPositive  = new TH1F("fHistPtPositive",";p_{T} (GeV/c)",100,0.01,30.01);
  fList->Add(fHistPtPositive);
  TH1F *fHistPtNegative  = new TH1F("fHistPtNegative",";p_{T} (GeV/c)",100,0.01,30.01);
  fList->Add(fHistPtNegative);
  //========================================================//

  //========================================================//
  //loop over the events
  Int_t nEvents = eventChain->GetEntries();
  cout<<"========================================="<<endl;
  cout<<"Number of events in the chain: "<<nEvents<<endl;
  cout<<"========================================="<<endl;
  Int_t iParticleCounter = 0;
  Int_t nTotalParticles = 0;
  
  for(Int_t iEvent = 0; iEvent < nEvents; iEvent++) {
    //for(Int_t iEvent = 0; iEvent < 1; iEvent++) {
    eventChain->GetEntry(iEvent);

    //========================================================//
    //Create the TObjArray object to store the particles
    TObjArray* tracksAccepted = new TObjArray;
    tracksAccepted->SetOwner(kTRUE);
    //========================================================//

    Int_t nParticles = tStructEvents.entries;
    if(((iEvent+1)%100)==0)
      cout<<"Event: "<<iEvent+1<<" - ID: "<<tStructEvents.eventID<<" - Entries: "<<tStructEvents.entries<<endl;

    //========================================================//
    //Filling event level histos
    fHistEventStats->Fill(1);
    fHistEventStats->Fill(2);
    fHistEventStats->Fill(3);
    fHistEventStats->Fill(4);
    fHistEventStats->Fill(5);

    Int_t gNumberOfAcceptedParticles = 0;
    Double_t gReactionPlane = 0.;
    Double_t gCharge = 0.;
    //========================================================//
    //loop over particles
    for(Int_t iParticle = 0; iParticle < nParticles; iParticle++) {
      particleChain->GetEntry(nTotalParticles+iParticle);
      
      //========================================================//
      //consider only primordial particles
      if(!IsPhysicalPrimary(tStructParticles.pid,
			    tStructParticles.fathereid,
			    gCharge)) continue;

      //========================================================//
      //Calculate kinematic variables
      Double_t gPt = TMath::Sqrt(TMath::Power(tStructParticles.px,2) + 
				 TMath::Power(tStructParticles.py,2));
      Double_t gP = TMath::Sqrt(TMath::Power(tStructParticles.px,2) + 
				TMath::Power(tStructParticles.py,2) + 
				TMath::Power(tStructParticles.pz,2) );
      Double_t gEta = -100.;
      if(gP != tStructParticles.pz)
	gEta = 0.5*TMath::Log((gP + tStructParticles.pz)/(gP - tStructParticles.pz));
      Double_t gPhi = TMath::Pi()+TMath::ATan2(-tStructParticles.py,-tStructParticles.px);

      //========================================================//
      //Fill QA
      if(gCharge > 0) {
	fHistEtaPhiPositive->Fill(gEta,gPhi);
	fHistPtPositive->Fill(gPt);
      }
      else if(gCharge < 0) {
	fHistEtaPhiNegative->Fill(gEta,gPhi);
	fHistPtNegative->Fill(gPt);
      }
      //========================================================//

      //========================================================//
      //Apply cuts
      if((gEta > gEtaMax)||(gEta < gEtaMin)) continue;
      if((gPt > gPtMax)||(gPt < gPtMin)) continue;
      
      tracksAccepted->Add(new AliBFBasicParticle(gEta,gPhi,gPt,gCharge, 1.));
      gNumberOfAcceptedParticles += 1;
      
      iParticleCounter += 1;
      //cout<<"\t Particle counter: "<<iParticleCounter<<" - Particle in the event: "<<iParticle+1<<" - eventID: "<<tStructParticles.eventid<<" - pid: "<<tStructParticles.pid<<" - fatherpid: "<<tStructParticles.fatherpid<<" - rootpid: "<<tStructParticles.rootpid<<" - fathereid: "<<tStructParticles.fathereid<<" - eid: "<<tStructParticles.eid<<endl;
    }//particle loop
    
    //========================================================//
    // Event mixing (borrowed code from the task) 
    if (gRunMixing) {
      Int_t fMixingTracks = 50000;
      AliEventPool* pool = fPoolMgr->GetEventPool(1.,0.,0.);
      
      if (!pool) {
	AliFatal(Form("No pool found"));
      }
      else {
	//pool->SetDebug(1);
	if (pool->IsReady() || pool->NTracksInPool() > fMixingTracks / 10 || pool->GetCurrentNEvents() >= 5){ 
	  
	  Int_t nMix = pool->GetCurrentNEvents();
	  //cout << "nMix = " << nMix << " tracks in pool = " << pool->NTracksInPool() << endl;
	  	  
	  // Fill mixed-event histos here  
	  for (Int_t jMix=0; jMix<nMix; jMix++) {
	    TObjArray* tracksMixed = pool->GetEvent(jMix);
	    bfm->CalculateBalance(gReactionPlane,tracksAccepted,tracksMixed,1.,0.);
	  }
	}
      
	// Update the Event pool
	pool->UpdatePool(tracksAccepted);
	//pool->PrintInfo();
	
      }//pool NULL check  
    }//run mixing
      //========================================================//

    //========================================================//
    // calculate balance function
    bf->CalculateBalance(gReactionPlane,tracksAccepted,NULL,1.,0.);

    fHistNumberOfAcceptedTracks->Fill(gNumberOfAcceptedParticles);
    nTotalParticles += nParticles;
  }

  //========================================================//
  //Output file
  TFile *f = TFile::Open("AnalysisResults.root","recreate");
   TDirectoryFile *dir = new TDirectoryFile("PWGCFEbyE.outputBalanceFunctionPsiAnalysis","PWGCFEbyE.outputBalanceFunctionPsiAnalysis");
  
  fList->SetName("listQA");
  fList->SetOwner(kTRUE);
  dir->Add(fList);

  fListBF->SetName("listBF");
  fListBF->SetOwner(kTRUE);
  dir->Add(fListBF);

  if(gRunMixing) {
    fListBFM->SetName("listBFMixed");
    fListBFM->SetOwner(kTRUE);
    dir->Add(fListBFM);
  }
  
  dir->Write(dir->GetName(),TObject::kSingleKey);
  f->Close();  
  //========================================================//

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

//______________________________________________________________//
Bool_t IsPhysicalPrimary(Int_t gPDGCode,
			 Int_t gFathereid,
			 Double_t &gCharge) {
  //Check whether the primordial particle belongs to the list 
  //of known particles
  Bool_t kStatus = kFALSE;
  if(gFathereid != -1) 
    return kStatus;

  //List of stable particles
  const Int_t kNstable = 3;
  Int_t pdgStable[kNstable] = {
    211,         // Pion
    321,         // Kaon
    2212,        // Proton 
  };
  
  if(gPDGCode < 0) gCharge = -1;
  else if(gPDGCode > 0) gCharge = 1;

  for(Int_t iParticle = 0; iParticle < kNstable; iParticle++) {
    if((TMath::Abs(gPDGCode) == pdgStable[iParticle])) {
      kStatus = kTRUE;
      return kStatus;
    }
  }

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