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

void AddRsnPairsRho(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  = 113;
   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) {
      AddPairOutputMiniRho(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 AddPairOutputRho(AliRsnLoopPair *pair)
{
   Bool_t valid;
   Int_t isFullOutput = AliAnalysisManager::GetGlobalInt("rsnOutputFull",valid);
   // axes
   AliRsnValuePair *axisIM = new AliRsnValuePair("IM", AliRsnValuePair::kInvMass);
   AliRsnValuePair *axisPt = new AliRsnValuePair("PT", AliRsnValuePair::kPt);
   AliRsnValuePair *axisEta = new AliRsnValuePair("ETA", AliRsnValuePair::kEta);
   axisIM     ->SetBins(1000, 0.2, 1.2);
//   axisIM     ->SetBins(1000, 0.9, 1.9);
   axisPt     ->SetBins(120, 0.0, 12.0);
   axisEta    ->SetBins(400, -2.0, 2.0);

   // 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);
      outPair->AddValue(axisEta);
   }
   // add outputs to loop
   pair->AddOutput(outPair);
}

void AddPairOutputMiniRho(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);

   AliRsnMiniAnalysisTask *taskRsnMini =  (AliRsnMiniAnalysisTask *)task;

   /* 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);


   // 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   = 1000; Double_t minIM   = 0.2, maxIM =  1.2;
   Int_t nEta   = 400; Double_t minEta   = -2.0, maxEta =  2.0;
//   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  = 113;
   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::kPion);
      out->SetDaughter(1, AliRsnDaughter::kPion);
      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);

         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("rho_Res%s", suffix.Data()), outputType.Data(), "TRUE");
      // selection settings
      outRes->SetCutID(0, listID1);
      outRes->SetCutID(1, listID1);
      outRes->SetDaughter(0, AliRsnDaughter::kPion);
      outRes->SetDaughter(1, AliRsnDaughter::kPion);
      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);
         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("rho_MCGen%s", suffix.Data()), outputType.Data(), "MOTHER");
      // selection settings
      outMC->SetDaughter(0, AliRsnDaughter::kPion);
      outMC->SetDaughter(1, AliRsnDaughter::kPion);
      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);
         outMC->AddAxis(etaID, nEta, minEta, maxEta);
         // axis Z: centrality
         if (!isPP) outMC->AddAxis(centID, nCent, minCent, maxCent);
      }
   }


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