ROOT logo

#include "AliMassFitControl.h"

// Two functions now.
// MultYields3 takes a 3D histogram and calls the 2D function MultYields2
// MultYields2 could be called directly if we only have a 2D histogram

void MultYields3(TH3F *PtMassMult, Int_t particleMode, Int_t MultBin, Char_t* label){

  // Leave open possibility to choose different values depending on MultBin - LSB
  Float_t MultLo[1] = {0};
  Float_t MultHi[1] = {300};

  //Make 2D projections from the 3D histogram
  PtMassMult->GetZaxis()->SetRange(MultLo[MultBin],MultHi[MultBin]);
  TH2F* hPtMass = (TH2F*)PtMassMult->Project3D("XY");// FIX:MF
  hPtMass->SetTitle("PtMass");
  
  //hPtMass->Draw(); // Drawing invokes default c1 canvas making it inaccessible in MultYields2 - TO FIX
  MultYields2(hPtMass, particleMode,MultBin,label);
  
}

void MultYields2(TH2F *hPtMass, Int_t particleMode, Int_t MultBin, Char_t* label){

  hPtMass->Draw();
  
    // Do .L on command line first
    //gROOT->LoadMacro("macros/PtMassAna2.C");
/* Modifications to produce a single uncorrected spectrum in a particular mult. bin for K0 or Lambda
Old ratio code preserved in MultYieldsRatio.C
Dec 2003 */
  Char_t* part; //for name of particle
  Float_t BR; //branching ratio - check them
  if (particleMode==0){
    part = "K0";
      BR=0.686;
  } else if (particleMode==1){
    part = "Lambda";
    BR=0.639;
  } else if (particleMode==2){
      part = "AntiLambda";
      BR=0.639;
  } else if (particleMode==3){
    part = "Lambda+antiLambda";
    BR=0.639;
  } else if (particleMode==4){
    part = "Xi";
    BR=1.0; // Should be Lam ->p pi Br
  } else if (particleMode ==6){
    part = "Omega";
    BR=1.0; // Should be Lam->p pi  * Om -> K Lam
  }

  
 
 
TString title[1]={"MinimumBias"};
  //Make 2D projections from the 3D histogram
  //Minbias (i.e. everything)
  
  TObjArray *controllerArray = new TObjArray(40,1); // 2nd arg means can count from 1!

  //Here probably need switch-case, depending on mult bin and particle
  // LoPt, HiPt, polynomial order, rebinning factor

  /////  LAMBDA and LAMBDA+ANTILAMBDA (Combination)

  if(particleMode == 1 || particleMode == 3){ // Lambda or Lambda+Anti-Lambda
  //  controllerArray->AddLast(new AliMassFitControl(0.1,0.2, 1,2));
  //  controllerArray->AddLast(new AliMassFitControl(0.2,0.3, 1,2));
  //  controllerArray->AddLast(new AliMassFitControl(0.3,0.4, 1,1, 1.096,1.16))
  //  controllerArray->AddLast(new AliMassFitControl(0.4,0.5, 2,1, 1.095,1.15));
  //  controllerArray->AddLast(new AliMassFitControl(0.5,0.6, 2,1, 1.095,1.15));
  //  controllerArray->AddLast(new AliMassFitControl(0.6,0.7, 2,1, 1.095,1.15));
  //  controllerArray->AddLast(new AliMassFitControl(0.7,0.8, 2,1, 1.095,1.15));
      controllerArray->AddLast(new AliMassFitControl(0.8,1.0, 2,1, 1.095,1.15));
      controllerArray->AddLast(new AliMassFitControl(1.0,1.2, 2,1, 1.095,1.17));
      controllerArray->AddLast(new AliMassFitControl(1.2,1.4, 2,1));
      controllerArray->AddLast(new AliMassFitControl(1.4,1.6, 2,1));
      controllerArray->AddLast(new AliMassFitControl(1.6,1.8, 2,1));
      controllerArray->AddLast(new AliMassFitControl(1.8,2.0, 2,1));
      controllerArray->AddLast(new AliMassFitControl(2.0,2.2, 2,1, 1.095,1.17));
      controllerArray->AddLast(new AliMassFitControl(2.2,2.4, 2,1, 1.095,1.16));
      controllerArray->AddLast(new AliMassFitControl(2.4,2.6, 2,1, 1.095,1.17));
      controllerArray->AddLast(new AliMassFitControl(2.6,2.8, 1,2, 1.095,1.17));
      controllerArray->AddLast(new AliMassFitControl(2.8,3.0, 1,2, 1.095,1.17));
      controllerArray->AddLast(new AliMassFitControl(3.0,3.5, 1,2, 1.098,1.16));
      controllerArray->AddLast(new AliMassFitControl(3.5,4.0, 1,2, 1.095,1.17));
      controllerArray->AddLast(new AliMassFitControl(4.0,4.5, 1,2, 1.095,1.17));
      controllerArray->AddLast(new AliMassFitControl(4.5,5.0, 1,2, 1.095,1.165));
      controllerArray->AddLast(new AliMassFitControl(5.0,5.5, 1,2, 1.095,1.17));
 //     controllerArray->AddLast(new AliMassFitControl(5.5,6.0, 1,2, 1.095,1.17));
 //   controllerArray->AddLast(new AliMassFitControl(6.0,6.5, 1,2, 1.095,1.17));
 //   controllerArray->AddLast(new AliMassFitControl(6.5,7.0, 1,2, 1.095,1.17));
 //   controllerArray->AddLast(new AliMassFitControl(7.0,7.5, 1,2, 1.095,1.17));
 //   controllerArray->AddLast(new AliMassFitControl(7.5,8.0, 1,2, 1.095,1.17));
 //   controllerArray->AddLast(new AliMassFitControl(8.0,9.0, 1,2, 1.095,1.17));
 //   controllerArray->AddLast(new AliMassFitControl(9.0,10.0, 1,2, 1.090,1.17));
 //   controllerArray->AddLast(new AliMassFitControl(10.0,12.0, 1,2, 1.082,1.165));
 }
  /// ANTI LAMBDA ---->
  else if (particleMode == 2){ // Anti-Lambdas
  controllerArray->AddLast(new AliMassFitControl(0.3,0.4, 2,1, 1.095,1.15));
  controllerArray->AddLast(new AliMassFitControl(0.4,0.5, 2,1, 1.095,1.15));
  controllerArray->AddLast(new AliMassFitControl(0.5,0.6, 2,1, 1.095,1.15));
  controllerArray->AddLast(new AliMassFitControl(0.6,0.7, 2,1, 1.095,1.15));
  controllerArray->AddLast(new AliMassFitControl(0.7,0.8, 2,1, 1.090,1.15));
  controllerArray->AddLast(new AliMassFitControl(0.8,1.0, 2,1, 1.095,1.15));
  controllerArray->AddLast(new AliMassFitControl(1.0,1.2, 2,1, 1.090,1.17));
  controllerArray->AddLast(new AliMassFitControl(1.2,1.4, 2,1, 1.090,1.16));
  controllerArray->AddLast(new AliMassFitControl(1.4,1.6, 2,1, 1.090,1.17));
  controllerArray->AddLast(new AliMassFitControl(1.6,1.8, 2,1, 1.090,1.17));
  controllerArray->AddLast(new AliMassFitControl(1.8,2.0, 2,1, 1.090,1.17));
  controllerArray->AddLast(new AliMassFitControl(2.0,2.2, 2,1, 1.095,1.17));
  controllerArray->AddLast(new AliMassFitControl(2.2,2.4, 2,1, 1.095,1.16));
  controllerArray->AddLast(new AliMassFitControl(2.4,2.6, 1,1, 1.095,1.17));
  controllerArray->AddLast(new AliMassFitControl(2.6,2.8, 1,2, 1.095,1.17));
  controllerArray->AddLast(new AliMassFitControl(2.8,3.0, 1,2, 1.095,1.17));
  controllerArray->AddLast(new AliMassFitControl(3.0,3.5, 1,2, 1.095,1.17));
  controllerArray->AddLast(new AliMassFitControl(3.5,4.0, 1,2, 1.095,1.17));
  controllerArray->AddLast(new AliMassFitControl(4.0,4.5, 1,2, 1.090,1.17));
  controllerArray->AddLast(new AliMassFitControl(4.5,5.0, 0,4, 1.095,1.17));
  controllerArray->AddLast(new AliMassFitControl(5.0,5.5, 0,4, 1.095,1.17));
  controllerArray->AddLast(new AliMassFitControl(5.5,6.0, 0,6, 1.085,1.17));
  } // end if anti-Lambda
  else if (particleMode == 0){ // K0s case
      //controllerArray->AddLast(new AliMassFitControl(0.1,0.2, 1,2, 0.44,0.56));
      //controllerArray->AddLast(new AliMassFitControl(0.2,0.3, 1,2, 0.44,0.56));
      //controllerArray->AddLast(new AliMassFitControl(0.3,0.4, 1,1, 0.442,0.559));
      //controllerArray->AddLast(new AliMassFitControl(0.4,0.5, 1,1, 0.44,0.56));
      //controllerArray->AddLast(new AliMassFitControl(0.5,0.6, 1,1, 0.442,0.559));
      //controllerArray->AddLast(new AliMassFitControl(0.6,0.7, 1,1, 0.442,0.558));
      //controllerArray->AddLast(new AliMassFitControl(0.7,0.8, 1,1, 0.44,0.56));
      controllerArray->AddLast(new AliMassFitControl(0.8,1.0, 2,1, 0.44,0.56));
      controllerArray->AddLast(new AliMassFitControl(1.0,1.2, 2,1, 0.45,0.56));
      controllerArray->AddLast(new AliMassFitControl(1.2,1.4, 2,1, 0.44,0.56));
      controllerArray->AddLast(new AliMassFitControl(1.4,1.6, 2,1, 0.45,0.56));
      controllerArray->AddLast(new AliMassFitControl(1.6,1.8, 2,1, 0.44,0.56));
      controllerArray->AddLast(new AliMassFitControl(1.8,2.0, 1,1, 0.44,0.56));
      controllerArray->AddLast(new AliMassFitControl(2.0,2.2, 1,1, 0.44,0.56));
      controllerArray->AddLast(new AliMassFitControl(2.2,2.4, 1,1, 0.44,0.56));
      controllerArray->AddLast(new AliMassFitControl(2.4,2.6, 1,1, 0.44,0.56));
      controllerArray->AddLast(new AliMassFitControl(2.6,2.8, 1,2, 0.44,0.54));
      controllerArray->AddLast(new AliMassFitControl(2.8,3.0, 1,2, 0.44,0.56));
      controllerArray->AddLast(new AliMassFitControl(3.0,3.5, 1,2, 0.44,0.56));
      controllerArray->AddLast(new AliMassFitControl(3.5,4.0, 1,2, 0.46,0.56));
      controllerArray->AddLast(new AliMassFitControl(4.0,4.5, 1,2, 0.46,0.56));
      controllerArray->AddLast(new AliMassFitControl(4.5,5.0, 1,2, 0.418,0.52));
      //controllerArray->AddLast(new AliMassFitControl(5.0,5.5, 0,4, 0.418,0.53));
//      controllerArray->AddLast(new AliMassFitControl(5.5,6.0, 1,4, 0.418,0.54));
//      controllerArray->AddLast(new AliMassFitControl(6.0,6.5, 1,4, 0.418,0.56));
      //controllerArray->AddLast(new AliMassFitControl(6.5,7.0, 0,4, 0.418,0.578));
  }  else if (particleMode == 4) { //Xi case
    //controllerArray->AddLast(new AliMassFitControl(0.5,0.7, 1,1, 1.28,1.45)); //signal not visible with 
    controllerArray->AddLast(new AliMassFitControl(0.7,0.9, 1,1, 1.285,1.45));
    controllerArray->AddLast(new AliMassFitControl(0.9,1.1, 1,1, 1.285,1.45));
    controllerArray->AddLast(new AliMassFitControl(1.1,1.3, 1,1, 1.27,1.45));
    controllerArray->AddLast(new AliMassFitControl(1.3,1.5, 1,1, 1.27,1.45));
    controllerArray->AddLast(new AliMassFitControl(1.5,1.7, 1,1, 1.27,1.45));
    controllerArray->AddLast(new AliMassFitControl(1.7,2.0, 1,1, 1.27,1.45));
    controllerArray->AddLast(new AliMassFitControl(2.0,2.5, 1,1, 1.27,1.44));
    controllerArray->AddLast(new AliMassFitControl(2.5,3.0, 1,1, 1.27,1.45));
    controllerArray->AddLast(new AliMassFitControl(3.0,3.5, 1,1, 1.27,1.44));
    controllerArray->AddLast(new AliMassFitControl(3.5,4.0, 1,1, 1.27,1.45));
    controllerArray->AddLast(new AliMassFitControl(4.0,4.5, 2,1, 1.27,1.44));
    controllerArray->AddLast(new AliMassFitControl(4.5,5.0, 2,1, 1.27,1.45));
  }
  controllerArray->Sort();

  // Make the proper label to pass in for use in labelling the diagnostics
  // saved canvas files and histos
  Char_t fulllabel[80];
  sprintf(fulllabel,"%s%s",title[MultBin].Data(),label);

  //Slice up projection into mass histograms to extract yield
TH1F* hYield = (TH1F*)PtMassAna2(hPtMass,particleMode,controllerArray->GetEntries(),controllerArray,fulllabel);

// CORRECTIONS
  Int_t Nev = 2800;  // Obviously we need a better way to access the proper number FIX ME
 hYield->Scale(1.0/Nev); //Divide by the number of events
// Better not to hide these other corrections deep in here
  //hYield->Scale(Veff[MultBin]); //Multiply by the vertex efficiency effectively increaing number of events 
                              //(since Veff<1) therefore decreases yield
//hYield->Scale(1.0/BR);  //Divide by branching ratio (again increases yield since BR<1)
 //hYield->Scale(1.0/(2*TMath::Pi())); // Always plot 1/2pi ...

Char_t yieldTitle[80];
sprintf(yieldTitle,"Uncorrected %s yield: %s",part,title[MultBin].Data());
hYield->SetTitle(yieldTitle);
hYield->SetXTitle("p_{t} / [GeV/c]");
hYield->SetYTitle("1/Nev.dN/dp_{t}");

// Create plots

Char_t fileNameBase[80];
sprintf(fileNameBase,"Masses%s_%s%s",part,title[MultBin].Data(),label);
Char_t fileNamePng[80];
sprintf(fileNamePng,"%s.png",fileNameBase);
Char_t fileNameEps[80];
sprintf(fileNameEps,"%s.eps",fileNameBase);
Char_t fileNamePdf[80];
sprintf(fileNamePdf,"%s.pdf",fileNameBase);

c1->SaveAs(fileNamePng);
c1->SaveAs(fileNameEps);
c1->SaveAs(fileNamePdf);

//c1->Clear();

//c1->SetLogy();
TCanvas *cYield = new TCanvas("Yield","Corrected Yield",600,400);
cYield->cd();
//cYield->SetLogy();
hYield->SetStats(kFALSE);
hYield->Draw();
 cYield->SetLogy();
 cYield->Update();
//  hRC_MB->SetMarkerStyle(20);
//  hRC_MB->SetMarkerColor(4);
//  hRC_MB->Scale(NBinMB/NBin3);
Char_t fnametext[80];
sprintf(fnametext,"Yield%s_%s%s",part,title[MultBin].Data(),label);
Char_t fnamePng[80];
sprintf(fnamePng,"%s.png",fnametext);
c1->SaveAs(fnamePng);
Char_t fnameEps[80];
sprintf(fnameEps,"%s.eps",fnametext);
c1->SaveAs(fnameEps);

// This section for yield scaled by number of binary collisions.
// Could add array of values and do scaling according to 'MultBin' index
TH1F* hScYield = hYield->Clone("ScYield");
Char_t scYieldTitle[80];
sprintf(scYieldTitle,"<N_{bin}> Scaled %s",hYield->GetTitle());
hScYield->SetTitle(scYieldTitle);
//SCALING for scaled yield only  divide by mean Nbin (scaled yield is therefore smaller)
//hScYield->Scale(1/NBin[MultBin]);

Char_t fnameRoot[80];
sprintf(fnameRoot,"%s.root",fnametext);
TFile *YieldFile = new TFile(fnameRoot,"RECREATE");
hYield->Write();
hScYield->Write();
YieldFile->Close();

 controllerArray->Delete();
}
 MultYields2.C:1
 MultYields2.C:2
 MultYields2.C:3
 MultYields2.C:4
 MultYields2.C:5
 MultYields2.C:6
 MultYields2.C:7
 MultYields2.C:8
 MultYields2.C:9
 MultYields2.C:10
 MultYields2.C:11
 MultYields2.C:12
 MultYields2.C:13
 MultYields2.C:14
 MultYields2.C:15
 MultYields2.C:16
 MultYields2.C:17
 MultYields2.C:18
 MultYields2.C:19
 MultYields2.C:20
 MultYields2.C:21
 MultYields2.C:22
 MultYields2.C:23
 MultYields2.C:24
 MultYields2.C:25
 MultYields2.C:26
 MultYields2.C:27
 MultYields2.C:28
 MultYields2.C:29
 MultYields2.C:30
 MultYields2.C:31
 MultYields2.C:32
 MultYields2.C:33
 MultYields2.C:34
 MultYields2.C:35
 MultYields2.C:36
 MultYields2.C:37
 MultYields2.C:38
 MultYields2.C:39
 MultYields2.C:40
 MultYields2.C:41
 MultYields2.C:42
 MultYields2.C:43
 MultYields2.C:44
 MultYields2.C:45
 MultYields2.C:46
 MultYields2.C:47
 MultYields2.C:48
 MultYields2.C:49
 MultYields2.C:50
 MultYields2.C:51
 MultYields2.C:52
 MultYields2.C:53
 MultYields2.C:54
 MultYields2.C:55
 MultYields2.C:56
 MultYields2.C:57
 MultYields2.C:58
 MultYields2.C:59
 MultYields2.C:60
 MultYields2.C:61
 MultYields2.C:62
 MultYields2.C:63
 MultYields2.C:64
 MultYields2.C:65
 MultYields2.C:66
 MultYields2.C:67
 MultYields2.C:68
 MultYields2.C:69
 MultYields2.C:70
 MultYields2.C:71
 MultYields2.C:72
 MultYields2.C:73
 MultYields2.C:74
 MultYields2.C:75
 MultYields2.C:76
 MultYields2.C:77
 MultYields2.C:78
 MultYields2.C:79
 MultYields2.C:80
 MultYields2.C:81
 MultYields2.C:82
 MultYields2.C:83
 MultYields2.C:84
 MultYields2.C:85
 MultYields2.C:86
 MultYields2.C:87
 MultYields2.C:88
 MultYields2.C:89
 MultYields2.C:90
 MultYields2.C:91
 MultYields2.C:92
 MultYields2.C:93
 MultYields2.C:94
 MultYields2.C:95
 MultYields2.C:96
 MultYields2.C:97
 MultYields2.C:98
 MultYields2.C:99
 MultYields2.C:100
 MultYields2.C:101
 MultYields2.C:102
 MultYields2.C:103
 MultYields2.C:104
 MultYields2.C:105
 MultYields2.C:106
 MultYields2.C:107
 MultYields2.C:108
 MultYields2.C:109
 MultYields2.C:110
 MultYields2.C:111
 MultYields2.C:112
 MultYields2.C:113
 MultYields2.C:114
 MultYields2.C:115
 MultYields2.C:116
 MultYields2.C:117
 MultYields2.C:118
 MultYields2.C:119
 MultYields2.C:120
 MultYields2.C:121
 MultYields2.C:122
 MultYields2.C:123
 MultYields2.C:124
 MultYields2.C:125
 MultYields2.C:126
 MultYields2.C:127
 MultYields2.C:128
 MultYields2.C:129
 MultYields2.C:130
 MultYields2.C:131
 MultYields2.C:132
 MultYields2.C:133
 MultYields2.C:134
 MultYields2.C:135
 MultYields2.C:136
 MultYields2.C:137
 MultYields2.C:138
 MultYields2.C:139
 MultYields2.C:140
 MultYields2.C:141
 MultYields2.C:142
 MultYields2.C:143
 MultYields2.C:144
 MultYields2.C:145
 MultYields2.C:146
 MultYields2.C:147
 MultYields2.C:148
 MultYields2.C:149
 MultYields2.C:150
 MultYields2.C:151
 MultYields2.C:152
 MultYields2.C:153
 MultYields2.C:154
 MultYields2.C:155
 MultYields2.C:156
 MultYields2.C:157
 MultYields2.C:158
 MultYields2.C:159
 MultYields2.C:160
 MultYields2.C:161
 MultYields2.C:162
 MultYields2.C:163
 MultYields2.C:164
 MultYields2.C:165
 MultYields2.C:166
 MultYields2.C:167
 MultYields2.C:168
 MultYields2.C:169
 MultYields2.C:170
 MultYields2.C:171
 MultYields2.C:172
 MultYields2.C:173
 MultYields2.C:174
 MultYields2.C:175
 MultYields2.C:176
 MultYields2.C:177
 MultYields2.C:178
 MultYields2.C:179
 MultYields2.C:180
 MultYields2.C:181
 MultYields2.C:182
 MultYields2.C:183
 MultYields2.C:184
 MultYields2.C:185
 MultYields2.C:186
 MultYields2.C:187
 MultYields2.C:188
 MultYields2.C:189
 MultYields2.C:190
 MultYields2.C:191
 MultYields2.C:192
 MultYields2.C:193
 MultYields2.C:194
 MultYields2.C:195
 MultYields2.C:196
 MultYields2.C:197
 MultYields2.C:198
 MultYields2.C:199
 MultYields2.C:200
 MultYields2.C:201
 MultYields2.C:202
 MultYields2.C:203
 MultYields2.C:204
 MultYields2.C:205
 MultYields2.C:206
 MultYields2.C:207
 MultYields2.C:208
 MultYields2.C:209
 MultYields2.C:210
 MultYields2.C:211
 MultYields2.C:212
 MultYields2.C:213
 MultYields2.C:214
 MultYields2.C:215
 MultYields2.C:216
 MultYields2.C:217
 MultYields2.C:218
 MultYields2.C:219
 MultYields2.C:220
 MultYields2.C:221
 MultYields2.C:222
 MultYields2.C:223
 MultYields2.C:224
 MultYields2.C:225
 MultYields2.C:226
 MultYields2.C:227
 MultYields2.C:228
 MultYields2.C:229
 MultYields2.C:230
 MultYields2.C:231
 MultYields2.C:232
 MultYields2.C:233
 MultYields2.C:234
 MultYields2.C:235
 MultYields2.C:236
 MultYields2.C:237
 MultYields2.C:238
 MultYields2.C:239
 MultYields2.C:240
 MultYields2.C:241
 MultYields2.C:242
 MultYields2.C:243
 MultYields2.C:244
 MultYields2.C:245
 MultYields2.C:246
 MultYields2.C:247
 MultYields2.C:248
 MultYields2.C:249