ROOT logo
const Int_t nCentralityBins = 20;

void calculateNuDyn(Int_t runNumber = 1) {
  //macro to read the output of the fluctuations task
  //calculate nu_dyn for each centrality bin 
  //and draw the centrality dependence
  TString filename = "mergedOutputCentrality.Pass1_4Plus."; filename += runNumber; filename += ".root";
  TString outputFileName = "output."; outputFileName += runNumber; outputFileName += ".txt";

  //===============================================================//
  Double_t nEvents[nCentralityBins] = {1.,1.,1.,1.,1.,1.,1.,1.,1.};
  Double_t nMeanPlus[nCentralityBins] = {1.,1.,1.,1.,1.,1.,1.,1.,1.};
  Double_t nMeanMinus[nCentralityBins] = {1.,1.,1.,1.,1.,1.,1.,1.,1.};
  Double_t gNuStat[nCentralityBins] = {1.,1.,1.,1.,1.,1.,1.,1.,1.};
  Double_t gNu[nCentralityBins] = {1.,1.,1.,1.,1.,1.,1.,1.,1.};
  Double_t gNuDyn[nCentralityBins] = {1.,1.,1.,1.,1.,1.,1.,1.,1.};
  //===============================================================//

  //_______________________________________________________________//
  //Open the input file
  TFile *f = TFile::Open(filename.Data());
  if(!f->IsOpen()) {
    Printf("File not found!!!");
    break;
  }

  //_______________________________________________________________//
  //Get the TDirectoryFile
  TDirectoryFile *dir = dynamic_cast<TDirectoryFile *>(f->Get("outputFluctuationAnalysis.root"));
  if(!dir) {
    Printf("TDirectoryFile not found!!!");
    break;
  }

  //_______________________________________________________________//
  //Get the TList
  TList *list = dynamic_cast<TList *>(dir->Get("fluctuationsOutput"));
  if(!list) {
    Printf("TList not found!!!");
    break;
  }

  //_______________________________________________________________//
  //Get the histograms
  TH1F *gHistEventStats = dynamic_cast<TH1F *>(list->FindObject("fHistEventStats"));
  PrintEventStats(gHistEventStats);
  TH1F *gHistCentrality = dynamic_cast<TH1F *>(list->FindObject("fHistCentrality"));
  GetCentralityStats(gHistCentrality,nEvents);

  TH2F *gHistNPlusNMinus[nCentralityBins];
  TH1F *gHistNetCharge[nCentralityBins];
  TCanvas *c[nCentralityBins];
  TString histName;

  ofstream outputAscii;
  outputAscii.open(outputFileName.Data());

  for(Int_t iBin = 1; iBin <= nCentralityBins; iBin++) {
    histName = "fHistNPlusNMinusCentrality"; histName += iBin;
    gHistNPlusNMinus[iBin-1] = dynamic_cast<TH2F *>(list->FindObject(histName.Data()));
    histName = "fHistNetChargeCentrality"; histName += iBin;
    gHistNetCharge[iBin-1] = new TH1F(histName.Data(),
				      "Net Charge;#Delta Q = N_{+} - N_{-};Entries",100,-100,100);
    gHistNetCharge[iBin-1]->SetStats(kFALSE);
    //Printf("%s",gHistNPlusNMinus[iBin-1]->GetName());
    if(nEvents[iBin-1] != 0) {
      gNuDyn[iBin-1] = GetNuDun(gHistNPlusNMinus[iBin-1],
				gHistNetCharge[iBin-1],
				nEvents[iBin-1]);
      cout<<"Centrality: "<<iBin<<" - nuDyn: "<<gNuDyn[iBin-1]<<endl;
      outputAscii << iBin<<" "<<gNuDyn[iBin-1]<<" "<<gHistNetCharge[iBin-1]->GetMean()<<" "<<gHistNetCharge[iBin-1]->GetRMS()<<" "<<nEvents[iBin-1]<<endl;

      //c[iBin-1] = new TCanvas(histName.Data(),histName.Data(),
      //(iBin-1)*50,(iBin-1)*50,600,500);
      //c[iBin-1]->SetFillColor(10); c[iBin-1]->SetHighLightColor(10);
      //gHistNetCharge[iBin-1]->Draw("E");
    }//centrality with events
  }//centrality loop
  outputAscii.close();
}

//_______________________________________________________________//
void PrintEventStats(TH1F *gHistEventStats) {
  Printf("================EVENT STATISTICS================");
  Printf("Total events: %d",(Int_t)(gHistEventStats->GetBinContent(1)));  
  Printf("Total triggered events: %d",(Int_t)(gHistEventStats->GetBinContent(2)));
  Printf("Total events with proper vertex: %d",(Int_t)(gHistEventStats->GetBinContent(3)));  
  Printf("Total events analyzed: %d",(Int_t)(gHistEventStats->GetBinContent(4)));
  Printf("================EVENT STATISTICS================\n\n\n");

  return;
}

//_______________________________________________________________//
void GetCentralityStats(TH1F *gHistCentrality,
			Double_t *nEvents) {
  Printf("================CENTRALITY STATISTICS================");
  for(Int_t iBin = 1; iBin <= gHistCentrality->GetNbinsX(); iBin++) {
    nEvents[iBin-1] = gHistCentrality->GetBinContent(iBin);  
    Printf("Centrality %d: %d",iBin,
	   (Int_t)(gHistCentrality->GetBinContent(iBin)));  
  }
  Printf("================CENTRALITY STATISTICS================");

  return;
}

//_______________________________________________________________//
Double_t GetNuDun(TH2F *gHistNPlusNMinus,
		  TH1F *gHistNetCharge,
		  Int_t numberOfEvents) {
  Double_t avgNPlus = gHistNPlusNMinus->GetMean(1);
  Double_t avgNMinus = gHistNPlusNMinus->GetMean(2);
  Double_t gNuStat = (1./avgNPlus) + (1./avgNMinus);
  Double_t gNuDyn = 0., gNu = 0.;

  for(Int_t iBinX = 1; iBinX <= gHistNPlusNMinus->GetNbinsX(); iBinX++) {
    for(Int_t iBinY = 1; iBinY <= gHistNPlusNMinus->GetNbinsY(); iBinY++) {
      if(gHistNPlusNMinus->GetBinContent(iBinX,iBinY) != 0) {
	for(Int_t nEvents = 0; nEvents < gHistNPlusNMinus->GetBinContent(iBinX,iBinY); nEvents++) {
	  Int_t nPlus = (Int_t)(gHistNPlusNMinus->GetXaxis()->GetBinCenter(iBinX));
	  Int_t nMinus = (Int_t)(gHistNPlusNMinus->GetYaxis()->GetBinCenter(iBinY));
	  if((avgNPlus != 0)&&(avgNMinus != 0)) {
	    gHistNetCharge->Fill(nPlus-nMinus);
	    gNu += TMath::Power(((nPlus/avgNPlus)-(nMinus/avgNMinus)),2); 
	  }
	}
      }
    }
  }

  gNu /= numberOfEvents;
  gNuDyn = gNu - gNuStat;

  return gNuDyn;
}
 calculateNuDyn.C:1
 calculateNuDyn.C:2
 calculateNuDyn.C:3
 calculateNuDyn.C:4
 calculateNuDyn.C:5
 calculateNuDyn.C:6
 calculateNuDyn.C:7
 calculateNuDyn.C:8
 calculateNuDyn.C:9
 calculateNuDyn.C:10
 calculateNuDyn.C:11
 calculateNuDyn.C:12
 calculateNuDyn.C:13
 calculateNuDyn.C:14
 calculateNuDyn.C:15
 calculateNuDyn.C:16
 calculateNuDyn.C:17
 calculateNuDyn.C:18
 calculateNuDyn.C:19
 calculateNuDyn.C:20
 calculateNuDyn.C:21
 calculateNuDyn.C:22
 calculateNuDyn.C:23
 calculateNuDyn.C:24
 calculateNuDyn.C:25
 calculateNuDyn.C:26
 calculateNuDyn.C:27
 calculateNuDyn.C:28
 calculateNuDyn.C:29
 calculateNuDyn.C:30
 calculateNuDyn.C:31
 calculateNuDyn.C:32
 calculateNuDyn.C:33
 calculateNuDyn.C:34
 calculateNuDyn.C:35
 calculateNuDyn.C:36
 calculateNuDyn.C:37
 calculateNuDyn.C:38
 calculateNuDyn.C:39
 calculateNuDyn.C:40
 calculateNuDyn.C:41
 calculateNuDyn.C:42
 calculateNuDyn.C:43
 calculateNuDyn.C:44
 calculateNuDyn.C:45
 calculateNuDyn.C:46
 calculateNuDyn.C:47
 calculateNuDyn.C:48
 calculateNuDyn.C:49
 calculateNuDyn.C:50
 calculateNuDyn.C:51
 calculateNuDyn.C:52
 calculateNuDyn.C:53
 calculateNuDyn.C:54
 calculateNuDyn.C:55
 calculateNuDyn.C:56
 calculateNuDyn.C:57
 calculateNuDyn.C:58
 calculateNuDyn.C:59
 calculateNuDyn.C:60
 calculateNuDyn.C:61
 calculateNuDyn.C:62
 calculateNuDyn.C:63
 calculateNuDyn.C:64
 calculateNuDyn.C:65
 calculateNuDyn.C:66
 calculateNuDyn.C:67
 calculateNuDyn.C:68
 calculateNuDyn.C:69
 calculateNuDyn.C:70
 calculateNuDyn.C:71
 calculateNuDyn.C:72
 calculateNuDyn.C:73
 calculateNuDyn.C:74
 calculateNuDyn.C:75
 calculateNuDyn.C:76
 calculateNuDyn.C:77
 calculateNuDyn.C:78
 calculateNuDyn.C:79
 calculateNuDyn.C:80
 calculateNuDyn.C:81
 calculateNuDyn.C:82
 calculateNuDyn.C:83
 calculateNuDyn.C:84
 calculateNuDyn.C:85
 calculateNuDyn.C:86
 calculateNuDyn.C:87
 calculateNuDyn.C:88
 calculateNuDyn.C:89
 calculateNuDyn.C:90
 calculateNuDyn.C:91
 calculateNuDyn.C:92
 calculateNuDyn.C:93
 calculateNuDyn.C:94
 calculateNuDyn.C:95
 calculateNuDyn.C:96
 calculateNuDyn.C:97
 calculateNuDyn.C:98
 calculateNuDyn.C:99
 calculateNuDyn.C:100
 calculateNuDyn.C:101
 calculateNuDyn.C:102
 calculateNuDyn.C:103
 calculateNuDyn.C:104
 calculateNuDyn.C:105
 calculateNuDyn.C:106
 calculateNuDyn.C:107
 calculateNuDyn.C:108
 calculateNuDyn.C:109
 calculateNuDyn.C:110
 calculateNuDyn.C:111
 calculateNuDyn.C:112
 calculateNuDyn.C:113
 calculateNuDyn.C:114
 calculateNuDyn.C:115
 calculateNuDyn.C:116
 calculateNuDyn.C:117
 calculateNuDyn.C:118
 calculateNuDyn.C:119
 calculateNuDyn.C:120
 calculateNuDyn.C:121
 calculateNuDyn.C:122
 calculateNuDyn.C:123
 calculateNuDyn.C:124
 calculateNuDyn.C:125
 calculateNuDyn.C:126
 calculateNuDyn.C:127
 calculateNuDyn.C:128
 calculateNuDyn.C:129
 calculateNuDyn.C:130
 calculateNuDyn.C:131
 calculateNuDyn.C:132
 calculateNuDyn.C:133
 calculateNuDyn.C:134
 calculateNuDyn.C:135
 calculateNuDyn.C:136
 calculateNuDyn.C:137