ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

// B2 as a function of multiplicity
// author: Eulogio Serradilla <eulogio.serradilla@cern.ch>

#if !defined(__CINT__) || defined(__MAKECINT__)
#include <Riostream.h>
#include <TSystem.h>
#include <TROOT.h>
#include <TFileMerger.h>
#include <TString.h>
#include <TFile.h>
#include <TGraphErrors.h>
#include "AliLnBA.h"
#endif

#include "B2.h"
#include "Config.h"

Double_t GetCd(Double_t z)
{
//
// parameterization of <Cd> as a function of multiplicity
// from ALICE Rlong and Rside measurements
//
	return 0.046133 + 0.0484458*z;
}

extern void RatioMult(  const TString&, const TString&, const TString&, const TString&, const Int_t, const TString*, const Double_t*, const Double_t*, const TString&, const Bool_t, const TString& , const TString& );

Int_t B2Mult(  const TString& pSpectra     = "~/alice/output/Proton-lhc10d-Mult-Spectra.root"
             , const TString& ptag         = "lhc10d"
             , const TString& dSpectra     = "~/alice/output/Deuteron-lhc10d-Mult-Spectra.root"
             , const TString& dtag         = "lhc10d"
             , const TString& outputMultPt = "~/alice/output/B2-lhc10d-MultPt.root"
             , const TString& outputPtMult = "~/alice/output/B2-lhc10d-PtMult.root"
             , const TString& otag         = "lhc10d"
             , const Bool_t qTsallis       = 0
             , const TString& tsallisTag   = "Tsallis"
             , const TString& oratio       = "~/alice/output/Particle-Ratios-lhc10d-Tsallis.root")
{
//
// B2 as a function of multiplicity
//
	using namespace B2mult;
	using namespace std;
	
	const Int_t kNpart = 2;
	
	const Int_t kNMinPt = 0;
	const Int_t kNMaxPt = 6;
	
	const TString kNucleus[kNpart] = { "Deuteron", "AntiDeuteron" };
	
	// B2 as a function of pt for each multiplicity class
	
	for(Int_t i=0; i<kNmult; ++i)
	{
		TFileMerger m;
		
		const Int_t kZ[kNpart] = { 1, -1 };
		const TString kB2File[kNpart] = {"B2.root", "AntiB2.root" };
		
		for(Int_t j=0; j<kNpart; ++j)
		{
			cout << kMultTag[i] << endl;
			
			AliLnBA b2(pSpectra, ptag + kMultTag[i], dSpectra, dtag + kMultTag[i], kB2File[j], otag + kMultTag[i], 2, kZ[j]);
			
			b2.SetCd(GetCd(kKNOmult[i]));
			
			b2.Run();
			
			m.AddFile(kB2File[j].Data(),0);
		}
		
		// merge B2 and B2bar
		
		TString outputfile = otag + kMultTag[i] + "-B2.root";
		
		m.OutputFile(outputfile.Data());
		m.Merge();
		
		gSystem->Exec(Form("rm -f %s %s",kB2File[0].Data(),kB2File[1].Data()));
	}
	
	// merge multiplicity classes
	
	TFileMerger m;
	
	for(Int_t i=0; i<kNmult; ++i)
	{
		TString b2 = otag + kMultTag[i] + "-B2.root";
		m.AddFile(b2.Data(),0);
	}
	
	m.OutputFile(outputMultPt.Data());
	m.Merge();
	
	// delete tmp files
	
	for(Int_t i=0; i<kNmult; ++i)
	{
		gSystem->Exec(Form("rm -f %s%s-B2.root",otag.Data(),kMultTag[i].Data()));
	}
	
	// B2 as a function of multiplicity for each pt
	
	TFile* finput = new TFile(outputMultPt.Data());
	if (finput->IsZombie()) exit(1);
	
	TGraphErrors* grB2pt[kNpart][kNmult];
	TGraphErrors* grR3pt[kNpart][kNmult];
	TGraphErrors* grSysB2pt[kNpart][kNmult];
	TGraphErrors* grSysR3pt[kNpart][kNmult];
	
	for(Int_t i=0; i<kNpart; ++i)
	{
		for(Int_t j=0; j<kNmult; ++j)
		{
			grB2pt[i][j] = FindObj<TGraphErrors>(finput, otag + kMultTag[j], kNucleus[i] + "_B2_Pt");
			grR3pt[i][j] = FindObj<TGraphErrors>(finput, otag + kMultTag[j], kNucleus[i] + "_R3_Pt");
			
			grSysB2pt[i][j] = FindObj<TGraphErrors>(finput, otag + kMultTag[j], kNucleus[i] + "_SystErr_B2_Pt");
			grSysR3pt[i][j] = FindObj<TGraphErrors>(finput, otag + kMultTag[j], kNucleus[i] + "_SystErr_R3_Pt");
		}
	}
	
	TFile* foutput = new TFile(outputPtMult.Data(),"recreate");
	
	Double_t* pt = grB2pt[0][0]->GetX();
	TString ptLabel[kNMaxPt];
	
	if(kNMaxPt > grB2pt[0][0]->GetN())
	{
		std::cerr << "max pt too big" << std::endl;
		exit(1);
	}
	
	for(Int_t i=kNMinPt; i<kNMaxPt; ++i)
	{
		ptLabel[i] = Form("pT %.02fA",pt[i]);
		foutput->mkdir(ptLabel[i].Data());
	}
	
	for(Int_t i=0; i<kNpart; ++i)
	{
		for(Int_t j=kNMinPt; j<kNMaxPt; ++j)
		{
			Double_t B2[kNmult];
			Double_t B2StatErr[kNmult];
			Double_t B2SystErr[kNmult];
			
			Double_t R3[kNmult];
			Double_t R3StatErr[kNmult];
			Double_t R3SystErr[kNmult];
			
			for(Int_t k=0; k<kNmult; ++k)
			{
				Double_t x, y, staterr, systerr;
				grB2pt[i][k]->GetPoint(j,x,y);
				staterr = grB2pt[i][k]->GetErrorY(j);
				systerr = grSysB2pt[i][k]->GetErrorY(j);
				
				B2[k] = y;
				B2StatErr[k] = staterr;
				B2SystErr[k] = systerr;
				
				grR3pt[i][k]->GetPoint(j,x,y);
				staterr = grR3pt[i][k]->GetErrorY(j);
				systerr = grSysR3pt[i][k]->GetErrorY(j);
				
				R3[k] = y;
				R3StatErr[k] = staterr;
				R3SystErr[k] = systerr;
			}
			
			TGraphErrors* grB2Mult = new TGraphErrors(kNmult, kKNOmult, B2, kKNOmultErr, B2StatErr);
			grB2Mult->SetName(Form("%s_B2_Zmult", kNucleus[i].Data()));
			
			TGraphErrors* grR3Mult = new TGraphErrors(kNmult, kKNOmult, R3, kKNOmultErr, R3StatErr);
			grR3Mult->SetName(Form("%s_R3_Zmult", kNucleus[i].Data()));
			
			Double_t zMultSystErr[kNmult];
			for(Int_t k=0; k<kNmult; ++k) zMultSystErr[k]=0.07;
			
			TGraphErrors* grSysB2Mult = new TGraphErrors(kNmult, kKNOmult, B2, zMultSystErr, B2SystErr);
			grSysB2Mult->SetName(Form("%s_SystErr_B2_Zmult", kNucleus[i].Data()));
			
			TGraphErrors* grSysR3Mult = new TGraphErrors(kNmult, kKNOmult, R3, zMultSystErr, R3SystErr);
			grSysR3Mult->SetName(Form("%s_SystErr_R3_Zmult", kNucleus[i].Data()));
			
			foutput->cd(ptLabel[j].Data());
			
			grB2Mult->Write();
			grR3Mult->Write();
			grSysB2Mult->Write();
			grSysR3Mult->Write();
			
			delete grB2Mult;
			delete grR3Mult;
			delete grSysB2Mult;
			delete grSysR3Mult;
		}
	}
	
	delete foutput;
	delete finput;
	
	//
	// Particle ratios
	// -----------------------------------
	
	RatioMult(pSpectra, dSpectra, ptag, dtag, kNmult, kMultTag, kKNOmult, kKNOmultErr, kKNOmultName, qTsallis, oratio, tsallisTag);
	
	
	// draw B2 as a function of pt
	
	for(Int_t i=0; i<kNpart; ++i)
	{
		gROOT->ProcessLine(Form(".x DrawDir.C+g(\"%s\",\"%s_B2_Pt\",\"\",0,2, 1.e-3, 7.e-2,\"p_{T}/A (GeV/c)\",\"B_{2} (GeV^{2}/c^{3})\", 0,\"c%d.B2pt\",\"%s_B2_Pt\")", outputMultPt.Data(), kNucleus[i].Data(), i, kNucleus[i].Data()));
		
		gROOT->ProcessLine(Form(".x DrawDir.C+g(\"%s\",\"%s_R3_Pt\",\"\",0,2, 0, 1.7,\"p_{T}/A (GeV/c)\",\"R_{side}^{2} R_{long} (fm^{3})\", 0,\"c%d.R3pt\",\"%s_R3_Pt\")", outputMultPt.Data(), kNucleus[i].Data(), i, kNucleus[i].Data()));
	}
	
	// draw B2 as a function of z
	
	for(Int_t i=0; i<kNpart; ++i)
	{
		gROOT->ProcessLine(Form(".x DrawDir.C+g(\"%s\",\"%s_B2_Zmult\",\"\",0,5, 3.e-3, 6.e-2,\"z\",\"B_{2} (GeV^{2}/c^{3})\", 0,\"c%d.B2z\",\"%s_B2_Zmult\")", outputPtMult.Data(), kNucleus[i].Data(), i, kNucleus[i].Data()));
		
		gROOT->ProcessLine(Form(".x DrawDir.C+g(\"%s\",\"%s_R3_Zmult\",\"\",0,5, 0, 4,\"z\",\"R_{side}^{2} R_{long} (fm^{3})\", 0,\"c%d.R3z\",\"%s_R3_Zmult\")", outputPtMult.Data(), kNucleus[i].Data(), i, kNucleus[i].Data()));
	}
	
	return 0;
}
 B2Mult.C:1
 B2Mult.C:2
 B2Mult.C:3
 B2Mult.C:4
 B2Mult.C:5
 B2Mult.C:6
 B2Mult.C:7
 B2Mult.C:8
 B2Mult.C:9
 B2Mult.C:10
 B2Mult.C:11
 B2Mult.C:12
 B2Mult.C:13
 B2Mult.C:14
 B2Mult.C:15
 B2Mult.C:16
 B2Mult.C:17
 B2Mult.C:18
 B2Mult.C:19
 B2Mult.C:20
 B2Mult.C:21
 B2Mult.C:22
 B2Mult.C:23
 B2Mult.C:24
 B2Mult.C:25
 B2Mult.C:26
 B2Mult.C:27
 B2Mult.C:28
 B2Mult.C:29
 B2Mult.C:30
 B2Mult.C:31
 B2Mult.C:32
 B2Mult.C:33
 B2Mult.C:34
 B2Mult.C:35
 B2Mult.C:36
 B2Mult.C:37
 B2Mult.C:38
 B2Mult.C:39
 B2Mult.C:40
 B2Mult.C:41
 B2Mult.C:42
 B2Mult.C:43
 B2Mult.C:44
 B2Mult.C:45
 B2Mult.C:46
 B2Mult.C:47
 B2Mult.C:48
 B2Mult.C:49
 B2Mult.C:50
 B2Mult.C:51
 B2Mult.C:52
 B2Mult.C:53
 B2Mult.C:54
 B2Mult.C:55
 B2Mult.C:56
 B2Mult.C:57
 B2Mult.C:58
 B2Mult.C:59
 B2Mult.C:60
 B2Mult.C:61
 B2Mult.C:62
 B2Mult.C:63
 B2Mult.C:64
 B2Mult.C:65
 B2Mult.C:66
 B2Mult.C:67
 B2Mult.C:68
 B2Mult.C:69
 B2Mult.C:70
 B2Mult.C:71
 B2Mult.C:72
 B2Mult.C:73
 B2Mult.C:74
 B2Mult.C:75
 B2Mult.C:76
 B2Mult.C:77
 B2Mult.C:78
 B2Mult.C:79
 B2Mult.C:80
 B2Mult.C:81
 B2Mult.C:82
 B2Mult.C:83
 B2Mult.C:84
 B2Mult.C:85
 B2Mult.C:86
 B2Mult.C:87
 B2Mult.C:88
 B2Mult.C:89
 B2Mult.C:90
 B2Mult.C:91
 B2Mult.C:92
 B2Mult.C:93
 B2Mult.C:94
 B2Mult.C:95
 B2Mult.C:96
 B2Mult.C:97
 B2Mult.C:98
 B2Mult.C:99
 B2Mult.C:100
 B2Mult.C:101
 B2Mult.C:102
 B2Mult.C:103
 B2Mult.C:104
 B2Mult.C:105
 B2Mult.C:106
 B2Mult.C:107
 B2Mult.C:108
 B2Mult.C:109
 B2Mult.C:110
 B2Mult.C:111
 B2Mult.C:112
 B2Mult.C:113
 B2Mult.C:114
 B2Mult.C:115
 B2Mult.C:116
 B2Mult.C:117
 B2Mult.C:118
 B2Mult.C:119
 B2Mult.C:120
 B2Mult.C:121
 B2Mult.C:122
 B2Mult.C:123
 B2Mult.C:124
 B2Mult.C:125
 B2Mult.C:126
 B2Mult.C:127
 B2Mult.C:128
 B2Mult.C:129
 B2Mult.C:130
 B2Mult.C:131
 B2Mult.C:132
 B2Mult.C:133
 B2Mult.C:134
 B2Mult.C:135
 B2Mult.C:136
 B2Mult.C:137
 B2Mult.C:138
 B2Mult.C:139
 B2Mult.C:140
 B2Mult.C:141
 B2Mult.C:142
 B2Mult.C:143
 B2Mult.C:144
 B2Mult.C:145
 B2Mult.C:146
 B2Mult.C:147
 B2Mult.C:148
 B2Mult.C:149
 B2Mult.C:150
 B2Mult.C:151
 B2Mult.C:152
 B2Mult.C:153
 B2Mult.C:154
 B2Mult.C:155
 B2Mult.C:156
 B2Mult.C:157
 B2Mult.C:158
 B2Mult.C:159
 B2Mult.C:160
 B2Mult.C:161
 B2Mult.C:162
 B2Mult.C:163
 B2Mult.C:164
 B2Mult.C:165
 B2Mult.C:166
 B2Mult.C:167
 B2Mult.C:168
 B2Mult.C:169
 B2Mult.C:170
 B2Mult.C:171
 B2Mult.C:172
 B2Mult.C:173
 B2Mult.C:174
 B2Mult.C:175
 B2Mult.C:176
 B2Mult.C:177
 B2Mult.C:178
 B2Mult.C:179
 B2Mult.C:180
 B2Mult.C:181
 B2Mult.C:182
 B2Mult.C:183
 B2Mult.C:184
 B2Mult.C:185
 B2Mult.C:186
 B2Mult.C:187
 B2Mult.C:188
 B2Mult.C:189
 B2Mult.C:190
 B2Mult.C:191
 B2Mult.C:192
 B2Mult.C:193
 B2Mult.C:194
 B2Mult.C:195
 B2Mult.C:196
 B2Mult.C:197
 B2Mult.C:198
 B2Mult.C:199
 B2Mult.C:200
 B2Mult.C:201
 B2Mult.C:202
 B2Mult.C:203
 B2Mult.C:204
 B2Mult.C:205
 B2Mult.C:206
 B2Mult.C:207
 B2Mult.C:208
 B2Mult.C:209
 B2Mult.C:210
 B2Mult.C:211
 B2Mult.C:212
 B2Mult.C:213
 B2Mult.C:214
 B2Mult.C:215
 B2Mult.C:216
 B2Mult.C:217
 B2Mult.C:218
 B2Mult.C:219
 B2Mult.C:220
 B2Mult.C:221
 B2Mult.C:222
 B2Mult.C:223
 B2Mult.C:224
 B2Mult.C:225
 B2Mult.C:226
 B2Mult.C:227
 B2Mult.C:228
 B2Mult.C:229
 B2Mult.C:230
 B2Mult.C:231
 B2Mult.C:232
 B2Mult.C:233
 B2Mult.C:234
 B2Mult.C:235
 B2Mult.C:236
 B2Mult.C:237
 B2Mult.C:238
 B2Mult.C:239
 B2Mult.C:240
 B2Mult.C:241
 B2Mult.C:242
 B2Mult.C:243
 B2Mult.C:244
 B2Mult.C:245
 B2Mult.C:246
 B2Mult.C:247
 B2Mult.C:248
 B2Mult.C:249
 B2Mult.C:250