ROOT logo
#ifndef __CINT__
#include <AliRsnListOutput.h>
#include <AliRsnValuePair.h>
#include <AliRsnValueEvent.h>
#include <AliRsnMiniAnalysisTask.h>
#endif

void AddRsnPairsPhi(AliAnalysisTaskSE *task,
                    Bool_t isMC,
                    Bool_t isMixing,
                    AliPID::EParticleType pType1,
                    Int_t listID1,
                    AliPID::EParticleType pType2,
                    Int_t listID2,
                    AliRsnCutSet *cutsEvent=0,
                    AliRsnCutSet *cutsPair=0,
                    TString suffix = "") {

   Printf("id1=%d id2=%d",listID1,listID2);

   // retrieve mass from PDG database
   Int_t         pdg  = 333;
   TDatabasePDG *db   = TDatabasePDG::Instance();
   TParticlePDG *part = db->GetParticle(pdg);
   Double_t mass = part->Mass();
   Bool_t valid;
   Int_t isRsnMini = AliAnalysisManager::GetGlobalInt("rsnUseMiniPackage",valid);

   if (isRsnMini) {
      AddPairOutputMiniPhi(task,isMC,isMixing,pType1,listID1,pType2,listID2,pdg,mass,cutsPair,suffix);
   } else {
      // this function is common and it is located in RsnConfig.C
      // as ouptup AddPairOutputPhi from this macro will be taken
      AddPair(task,isMC,isMixing,pType1,listID1,pType2,listID2,pdg,mass,cutsEvent,cutsPair,suffix);
   }
}
void AddPairOutputPhi(AliRsnLoopPair *pair)
{
   Bool_t valid;
   Int_t isFullOutput = AliAnalysisManager::GetGlobalInt("rsnOutputFull",valid);
   Int_t isPP = AliAnalysisManager::GetGlobalInt("rsnIsPP",valid);
   Int_t useRapidity = AliAnalysisManager::GetGlobalInt("rsnUseRapidity",valid);

   // axes
   AliRsnValuePair *axisIM = new AliRsnValuePair("IM", AliRsnValuePair::kInvMass);
   AliRsnValuePair *axisPt = new AliRsnValuePair("PT", AliRsnValuePair::kPt);
   AliRsnValuePair *axisEta = new AliRsnValuePair("ETA", AliRsnValuePair::kEta);
   AliRsnValuePair *axisRapidity = new AliRsnValuePair("Y", AliRsnValuePair::kY);

   AliRsnValueEvent *axisCentrality = 0;
   if (!isPP) axisCentrality = new AliRsnValueEvent("MULTI",AliRsnValueEvent::kCentralityV0);

   axisIM     ->SetBins(300, 0.9, 1.2);
//   axisIM     ->SetBins(1000, 0.9, 1.9);
   axisPt     ->SetBins(120, 0.0, 12.0);
//    axisEta    ->SetBins(400, -2.0, 2.0);
   axisEta    ->SetBins(400, -0.5, 0.5);
   axisRapidity    ->SetBins(10, -0.5, 0.5);

   if (axisCentrality) axisCentrality->SetBins(20,0,100);

   // output: 2D histogram of inv. mass vs. pt
   AliRsnListOutput *outPair = 0;
   if (!isFullOutput) {
      outPair = new AliRsnListOutput("pair", AliRsnListOutput::kHistoDefault);
      outPair->AddValue(axisIM);
   } else {
      outPair = new AliRsnListOutput("pair", AliRsnListOutput::kHistoSparse);
      outPair->AddValue(axisIM);
      outPair->AddValue(axisPt);
      if (useRapidity) outPair->AddValue(axisRapidity);
      else outPair->AddValue(axisEta);
      if (axisCentrality) outPair->AddValue(axisCentrality);
   }
   // add outputs to loop
   pair->AddOutput(outPair);
}

void AddPairOutputMiniPhi(AliAnalysisTaskSE *task, Bool_t isMC,Bool_t isMixing, AliPID::EParticleType pType1,Int_t listID1, AliPID::EParticleType pType2,Int_t listID2, Int_t pdgMother,Double_t massMother, AliRsnCutSet *cutsPair=0,TString suffix = "") {

   Bool_t valid;
   Int_t isFullOutput = AliAnalysisManager::GetGlobalInt("rsnOutputFull",valid);
   Int_t useMixing = AliAnalysisManager::GetGlobalInt("rsnUseMixing",valid);
   Int_t isPP = AliAnalysisManager::GetGlobalInt("rsnIsPP",valid);

   Int_t useRapidity = AliAnalysisManager::GetGlobalInt("rsnUseRapidity",valid);

   AliRsnMiniAnalysisTask *taskRsnMini =  (AliRsnMiniAnalysisTask *)task;

   if (isPP) taskRsnMini->UseMultiplicity("QUALITY");
   else {
      taskRsnMini->UseCentrality("V0M");
      Int_t multID = taskRsnMini->CreateValue(AliRsnMiniValue::kMult, kFALSE);
      AliRsnMiniOutput *outMult = taskRsnMini->CreateOutput("eventMult", "HIST", "EVENT");
      outMult->AddAxis(multID, 100, 0.0, 100.0);
      Int_t paID = taskRsnMini->CreateValue(AliRsnMiniValue::kPlaneAngle, kFALSE);
      AliRsnMiniOutput *outPa = taskRsnMini->CreateOutput("planeAngle", "HIST", "EVENT");
      outPa->AddAxis(paID, 100, 0, TMath::Pi());
   }


   /* invariant mass   */ Int_t imID   = taskRsnMini->CreateValue(AliRsnMiniValue::kInvMass, kFALSE);
   /* IM resolution    */ Int_t resID  = taskRsnMini->CreateValue(AliRsnMiniValue::kInvMassDiff, kTRUE);
   /* transv. momentum */ Int_t ptID   = taskRsnMini->CreateValue(AliRsnMiniValue::kPt, kFALSE);
   /* centrality       */ Int_t centID = taskRsnMini->CreateValue(AliRsnMiniValue::kMult, kFALSE);
   /* eta              */ Int_t etaID = taskRsnMini->CreateValue(AliRsnMiniValue::kEta, kFALSE);
   /* rapidity         */ Int_t yID = taskRsnMini->CreateValue(AliRsnMiniValue::kY, kFALSE);


   // use an array for more compact writing, which are different on mixing and charges
   // [0] = unlike
   // [1] = mixing
   // [2] = like ++
   // [3] = like --
   Bool_t  use     [5] = { 1      ,  useMixing      ,  1      ,  1      ,  isMC  };
   TString name    [5] = {"Unlike", "Mixing", "LikePP", "LikeMM", "Trues"};
   TString comp    [5] = {"PAIR"  , "MIX"   , "PAIR"  , "PAIR"  , "TRUE" };
   Char_t  charge1 [5] = {'+'     , '+'     , '+'     , '-'     , '+'    };
   Char_t  charge2 [5] = {'-'     , '-'     , '+'     , '-'     , '-'    };

   // common definitions
   TString outputType = "HIST";
   if (isFullOutput) outputType = "SPARSE";

   Int_t nIM   = 300; Double_t minIM   = 0.9, maxIM =  1.2;
//    Int_t nEta   = 400; Double_t minEta   = -2.0, maxEta =  2.0;
   Int_t nEta   = 400; Double_t minEta   = -0.5, maxEta =  0.5;
   Int_t nY   = 10; Double_t minY   = -0.5, maxY =  0.5;
//   Int_t nIM   = 1000; Double_t minIM   = 0.9, maxIM =  1.9;
   Int_t nPt   = 120; Double_t minPt   = 0.0, maxPt = 12.0;
   Int_t nCent = 100; Double_t minCent = 0.0, maxCent = 100.0;
   Int_t nRes  = 200; Double_t maxRes  = 0.01;

   // retrieve mass from PDG database
   Int_t         pdg  = 333;
   TDatabasePDG *db   = TDatabasePDG::Instance();
   TParticlePDG *part = db->GetParticle(pdg);


   Printf(suffix.Data());
   // create standard outputs
   for (Int_t i = 0; i < 5; i++) {
      if (!use[i]) continue;
      // create output
      AliRsnMiniOutput *out = taskRsnMini->CreateOutput(Form("%s_%s", suffix.Data(),name[i].Data() ), outputType.Data(), comp[i].Data());
      // selection settings
      out->SetCutID(0, listID1);
      out->SetCutID(1, listID1);
      out->SetDaughter(0, AliRsnDaughter::kKaon);
      out->SetDaughter(1, AliRsnDaughter::kKaon);
      out->SetCharge(0, charge1[i]);
      out->SetCharge(1, charge2[i]);
      out->SetMotherPDG(pdg);
      out->SetMotherMass(part->Mass());
      // pair cuts
      if (cutsPair) out->SetPairCuts(cutsPair);
      // axis X: invmass
      out->AddAxis(imID, nIM, minIM, maxIM);

      if (isFullOutput) {
         // axis Y: transverse momentum
         out->AddAxis(ptID, nPt, minPt, maxPt);

         if (useRapidity) out->AddAxis(yID, nY, minY, maxY);
         else  out->AddAxis(etaID, nEta, minEta, maxEta);
         // axis Z: centrality
         if (!isPP) out->AddAxis(centID, nCent, minCent, maxCent);
      }
   }

   // add output for resolution
   if (isMC) {
      AliRsnMiniOutput *outRes = taskRsnMini->CreateOutput(Form("phi_Res%s", suffix.Data()), outputType.Data(), "TRUE");
      // selection settings
      outRes->SetCutID(0, listID1);
      outRes->SetCutID(1, listID1);
      outRes->SetDaughter(0, AliRsnDaughter::kKaon);
      outRes->SetDaughter(1, AliRsnDaughter::kKaon);
      outRes->SetCharge(0, '+');
      outRes->SetCharge(1, '-');
      outRes->SetMotherPDG(pdg);
      outRes->SetMotherMass(part->Mass());
      // pair cuts
      if (cutsPair) outRes->SetPairCuts(cutsPair);
      // axis X: resolution
      outRes->AddAxis(resID, nRes, -maxRes, maxRes);

      if (isFullOutput) {
         // axis Y: transverse momentum
         outRes->AddAxis(ptID, nPt, minPt, maxPt);
         if (useRapidity) outRes->AddAxis(yID, nY, minY, maxY);
         else  outRes->AddAxis(etaID, nEta, minEta, maxEta);
         // axis Z: centrality
         if (!isPP) outRes->AddAxis(centID, nCent, minCent, maxCent);
      }
   }

   //
   // -- Create output for MC generated ------------------------------------------------------------
   //

   if (isMC) {
      // create ouput
      AliRsnMiniOutput *outMC = taskRsnMini->CreateOutput(Form("phi_MCGen%s", suffix.Data()), outputType.Data(), "MOTHER");
      // selection settings
      outMC->SetDaughter(0, AliRsnDaughter::kKaon);
      outMC->SetDaughter(1, AliRsnDaughter::kKaon);
      outMC->SetMotherPDG(pdg);
      outMC->SetMotherMass(part->Mass());
      // pair cuts
      if (cutsPair) outMC->SetPairCuts(cutsPair);
      // axis X: invmass
      outMC->AddAxis(imID, nIM, minIM, maxIM);
      if (isFullOutput) {
         // axis Y: transverse momentum
         outMC->AddAxis(ptID, nPt, minPt, maxPt);
         if (useRapidity) outMC->AddAxis(yID, nY, minY, maxY);
         else  outMC->AddAxis(etaID, nEta, minEta, maxEta);
         // axis Z: centrality
         if (!isPP) outMC->AddAxis(centID, nCent, minCent, maxCent);
      }
   }


}



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