ROOT logo
Double_t rpol2(Double_t *x, Double_t *par)
{
  Double_t rp2 = par[0] + par[1]*x[0] + par[2]*x[0]*x[0];
  return rp2;
}

TF1* InitPol2()
{
  TF1* f1 = new TF1("rpol2",rpol2,0.,300.,3); 
  f1->SetParNames("p0","p1","p2");

  f1->SetParameter("p0",1.);
  f1->SetParameter("p1",1.);
  f1->SetParameter("p2",1.);

  return f1;
}

Double_t gausPol2(Double_t *x, Double_t *par)
{
  //gaus+second order polynomial.
  
  Double_t gp2 = par[0] * TMath::Exp( -(x[0]-par[1])*(x[0]-par[1]) /
                                      (2*par[2]*par[2]) ) /
    + par[3] + par[4]*x[0] + par[5]*x[0]*x[0]; 
  
  return gp2;
}



void pi0Calib(const char* file="Sum_All_Emc.root")
{

  AliCDBManager::Instance()->SetDefaultStorage("local://$ALICE_ROOT");
  AliCDBManager::Instance()->SetSpecificStorage("PHOS/*","local://./");

  AliPHOSCalibData cdb(0);

  Int_t fMinEntr = 50; // min 50 pi0 canditates per cell
  Double_t xmin = 100; // fit range lower end
  Double_t xmax = 170; // fit range upper end

  const Float_t pi0m = 134.98; 
  Double_t pi0f;
  const Int_t fMod=2;
  char hname[128];
  TH1F* h1=0;
  Double_t cc_i, cc_ii;
  
  TH1F* hPi0Mass = new TH1F("pi0_mass","#pi^{0} mass in calibrated cells",100,0.,300.);
  
  TFile f(file);
  
  for(Int_t iMod=0; iMod<5; iMod++) {
    for(Int_t iX=0; iX<64; iX++) {
      for(Int_t iZ=0; iZ<56; iZ++) {

	sprintf(hname,"%d_%d_%d",iMod,iX,iZ);
	h1 = (TH1F*)f.Get(hname);
	if(!h1) continue;
	if(h1->GetEntries()<fMinEntr) continue;
	
	TF1* rp2 = InitPol2();
	rp2->SetRange(180,260);
// 	rp2->SetRange(50.,110.);
	h1->Fit(rp2,"RNQ");
	rp2->Print();
	
	h1->GetXaxis()->SetRange(17,210);
	Double_t max = h1->GetBinCenter(h1->GetMaximumBin()); // peak

	TF1* f1 = new TF1("gpol2",gausPol2,xmin,xmax,6);
	f1->SetParNames("Constant","Mean","Sigma","p0","p1","p2");

	printf("Trying to fit %s, %d entries, peak at %.3f\n",
	       h1->GetName(),h1->GetEntries(),max);

	f1->SetParameter("Constant",h1->GetMaximum());
	f1->SetParameter("Mean",max);
	f1->SetParameter("Sigma",1.);
	f1->SetParameter("p0",rp2->GetParameter("p0"));
	f1->SetParameter("p1",rp2->GetParameter("p1"));
	f1->SetParameter("p2",rp2->GetParameter("p2"));
 
	f1->SetLineColor(kBlue);
	h1->Fit(f1,"R+");
	
	pi0f = f1->GetParameter("Mean");
	hPi0Mass->Fill(pi0f);

	//CC from the previous iteration.
	cc_i = cdb.GetADCchannelEmc(iMod+1,iZ+1,iX+1);

	if(pi0f>100. && pi0f<200.) {
	  Double_t k = pi0m/pi0f;
	  cc_ii = cc_i*(1+k**2)/2.;
	  cdb.SetADCchannelEmc(iMod+1,iZ+1,iX+1,cc_ii);
	}
	
	printf("%s: %d entries, mean=%.3f, peak=%.3f, rms= %.3f. pi0 = %.3f,
             cc_i=%f, cc_ii=%f\n",
	       h1->GetName(),h1->GetEntries(),h1->GetMean(),max,h1->GetRMS(),
	       pi0f,cc_i,cc_ii);

      }
    }
  }
  
  TFile ff("pi0Calib.root","recreate");
  hPi0Mass->Write();
  
  //Writing new calibration coefficients (CCs) to OCDB
  
  AliCDBMetaData *md= new AliCDBMetaData();
  md->SetResponsible("Boris Polishchuk");
  
  cdb.WriteEmc(0,999999,md);
  cdb.WriteCpv(0,999999,md);
  
}
 pi0Calib.C:1
 pi0Calib.C:2
 pi0Calib.C:3
 pi0Calib.C:4
 pi0Calib.C:5
 pi0Calib.C:6
 pi0Calib.C:7
 pi0Calib.C:8
 pi0Calib.C:9
 pi0Calib.C:10
 pi0Calib.C:11
 pi0Calib.C:12
 pi0Calib.C:13
 pi0Calib.C:14
 pi0Calib.C:15
 pi0Calib.C:16
 pi0Calib.C:17
 pi0Calib.C:18
 pi0Calib.C:19
 pi0Calib.C:20
 pi0Calib.C:21
 pi0Calib.C:22
 pi0Calib.C:23
 pi0Calib.C:24
 pi0Calib.C:25
 pi0Calib.C:26
 pi0Calib.C:27
 pi0Calib.C:28
 pi0Calib.C:29
 pi0Calib.C:30
 pi0Calib.C:31
 pi0Calib.C:32
 pi0Calib.C:33
 pi0Calib.C:34
 pi0Calib.C:35
 pi0Calib.C:36
 pi0Calib.C:37
 pi0Calib.C:38
 pi0Calib.C:39
 pi0Calib.C:40
 pi0Calib.C:41
 pi0Calib.C:42
 pi0Calib.C:43
 pi0Calib.C:44
 pi0Calib.C:45
 pi0Calib.C:46
 pi0Calib.C:47
 pi0Calib.C:48
 pi0Calib.C:49
 pi0Calib.C:50
 pi0Calib.C:51
 pi0Calib.C:52
 pi0Calib.C:53
 pi0Calib.C:54
 pi0Calib.C:55
 pi0Calib.C:56
 pi0Calib.C:57
 pi0Calib.C:58
 pi0Calib.C:59
 pi0Calib.C:60
 pi0Calib.C:61
 pi0Calib.C:62
 pi0Calib.C:63
 pi0Calib.C:64
 pi0Calib.C:65
 pi0Calib.C:66
 pi0Calib.C:67
 pi0Calib.C:68
 pi0Calib.C:69
 pi0Calib.C:70
 pi0Calib.C:71
 pi0Calib.C:72
 pi0Calib.C:73
 pi0Calib.C:74
 pi0Calib.C:75
 pi0Calib.C:76
 pi0Calib.C:77
 pi0Calib.C:78
 pi0Calib.C:79
 pi0Calib.C:80
 pi0Calib.C:81
 pi0Calib.C:82
 pi0Calib.C:83
 pi0Calib.C:84
 pi0Calib.C:85
 pi0Calib.C:86
 pi0Calib.C:87
 pi0Calib.C:88
 pi0Calib.C:89
 pi0Calib.C:90
 pi0Calib.C:91
 pi0Calib.C:92
 pi0Calib.C:93
 pi0Calib.C:94
 pi0Calib.C:95
 pi0Calib.C:96
 pi0Calib.C:97
 pi0Calib.C:98
 pi0Calib.C:99
 pi0Calib.C:100
 pi0Calib.C:101
 pi0Calib.C:102
 pi0Calib.C:103
 pi0Calib.C:104
 pi0Calib.C:105
 pi0Calib.C:106
 pi0Calib.C:107
 pi0Calib.C:108
 pi0Calib.C:109
 pi0Calib.C:110
 pi0Calib.C:111
 pi0Calib.C:112
 pi0Calib.C:113
 pi0Calib.C:114
 pi0Calib.C:115
 pi0Calib.C:116
 pi0Calib.C:117
 pi0Calib.C:118
 pi0Calib.C:119
 pi0Calib.C:120
 pi0Calib.C:121
 pi0Calib.C:122