]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGLF/RESONANCES/macros/lego_train/AddRsnPairsRho.C
Merge branch 'feature-movesplit'
[u/mrichter/AliRoot.git] / PWGLF / RESONANCES / macros / lego_train / AddRsnPairsRho.C
1 #ifndef __CINT__
2 #include <AliRsnValuePair.h>
3 #endif
4
5 void AddRsnPairsRho(AliAnalysisTaskSE *task,
6                     Bool_t isMC,
7                     Bool_t isMixing,
8                     AliPID::EParticleType pType1,
9                     Int_t listID1,
10                     AliPID::EParticleType pType2,
11                     Int_t listID2,
12                     AliRsnCutSet *cutsEvent=0,
13                     AliRsnCutSet *cutsPair=0,
14                     TString suffix = "") {
15
16    Printf("id1=%d id2=%d",listID1,listID2);
17
18    // retrieve mass from PDG database
19
20    // pdg rho = 133
21    // pdg omega = 223
22    // pdg eta = 221
23    // pdg eta' = 331
24    // pdg kshort = 310
25
26    Int_t         pdg  = 113;
27    TDatabasePDG *db   = TDatabasePDG::Instance();
28    TParticlePDG *part = db->GetParticle(pdg);
29    Double_t mass = part->Mass();
30    Bool_t valid;
31    Int_t isRsnMini = AliRsnTrainManager::GetGlobalInt("IsRsnMini",valid);
32
33    if (isRsnMini) {
34       AddPairOutputMiniRho(task,isMC,isMixing,pType1,listID1,pType2,listID2,pdg,mass,cutsPair,suffix);
35    } else {
36       // this function is common and it is located in RsnConfig.C
37       // as ouptup AddPairOutputPhi from this macro will be taken
38       AddPair(task,isMC,isMixing,pType1,listID1,pType2,listID2,pdg,mass,cutsEvent,cutsPair,suffix);
39    }
40 }
41 void AddPairOutputRho(AliRsnLoopPair *pair)
42 {
43    Bool_t valid;
44    Int_t isFullOutput = AliRsnTrainManager::GetGlobalInt("RsnOutputFull",valid);
45
46    // axes
47    AliRsnValuePair *axisIM = new AliRsnValuePair("IM", AliRsnValuePair::kInvMass);
48    AliRsnValuePair *axisPt = new AliRsnValuePair("PT", AliRsnValuePair::kPt);
49    AliRsnValuePair *axisEta = new AliRsnValuePair("ETA", AliRsnValuePair::kEta);
50    axisIM     ->SetBins(180, 0.2, 2.0);
51 //   axisIM     ->SetBins(1000, 0.9, 1.9);
52    axisPt     ->SetBins(100, 0.0, 12.0);
53    axisEta    ->SetBins(100, -2.0, 2.0);
54    axisY      ->SetBins(100,-2.0, 2.0);
55
56    // output: 2D histogram of inv. mass vs. pt
57    AliRsnListOutput *outPair = 0;
58    if (!isFullOutput) {
59       outPair = new AliRsnListOutput("pair", AliRsnListOutput::kHistoDefault);
60       outPair->AddValue(axisIM);
61    } else {
62       outPair = new AliRsnListOutput("pair", AliRsnListOutput::kHistoSparse);
63       outPair->AddValue(axisIM);
64       outPair->AddValue(axisPt);
65       outPair->AddValue(axisEta);
66       outPair->AddValue(axisY);
67    }
68    // add outputs to loop
69    pair->AddOutput(outPair);
70 }
71
72 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 = "") {
73
74    Bool_t valid;
75    Int_t isFullOutput = AliRsnTrainManager::GetGlobalInt("RsnOutputFull",valid);
76    Int_t useMixing = AliRsnTrainManager::GetGlobalInt("IsMixing",valid);
77    Int_t collisionType = AliRsnTrainManager::GetGlobalInt("IsCollisionType",valid);
78
79    AliRsnMiniAnalysisTask *taskRsnMini =  (AliRsnMiniAnalysisTask *)task;
80
81    /* invariant mass   */ Int_t imID   = taskRsnMini->CreateValue(AliRsnMiniValue::kInvMass, kFALSE);
82    /* IM resolution    */ Int_t resID  = taskRsnMini->CreateValue(AliRsnMiniValue::kInvMassDiff, kTRUE);
83    /* transv. momentum */ Int_t ptID   = taskRsnMini->CreateValue(AliRsnMiniValue::kPt, kFALSE);
84    /* centrality       */ Int_t centID = taskRsnMini->CreateValue(AliRsnMiniValue::kMult, kFALSE);
85    /* eta              */ Int_t etaID = taskRsnMini->CreateValue(AliRsnMiniValue::kEta, kFALSE);
86    /* y                */ Int_t yID    = taskRsnMini->CreateValue(AliRsnMiniValue::kY, kFALSE);
87
88
89    // use an array for more compact writing, which are different on mixing and charges
90    // [0] = unlike
91    // [1] = mixing
92    // [2] = like ++
93    // [3] = like --
94    Bool_t  use     [5] = { 1      ,  useMixing      ,  1      ,  1      ,  isMC  };
95    TString name    [5] = {"Unlike", "Mixing", "LikePP", "LikeMM", "Trues"};
96    TString comp    [5] = {"PAIR"  , "MIX"   , "PAIR"  , "PAIR"  , "TRUE" };
97    Char_t  charge1 [5] = {'+'     , '+'     , '+'     , '-'     , '+'    };
98    Char_t  charge2 [5] = {'-'     , '-'     , '+'     , '-'     , '-'    };
99
100    // common definitions
101    TString outputType = "HIST";
102    if (isFullOutput) outputType = "SPARSE";
103
104    Int_t nIM   = 1000; Double_t minIM   = 0.2, maxIM =  1.2;
105    Int_t nEta   = 100; Double_t minEta   = -2.0, maxEta =  2.0;
106    Int_t nY    = 100;  Double_t minY    = -2.0,maxY =  2.0;
107 //   Int_t nIM   = 1000; Double_t minIM   = 0.9, maxIM =  1.9;
108    Int_t nPt   = 100; Double_t minPt   = 0.0, maxPt = 12.0;
109    Int_t nCent = 100; Double_t minCent = 0.0, maxCent = 100.0;
110    Int_t nRes  = 200; Double_t maxRes  = 0.01;
111
112    // retrieve mass from PDG database
113    Int_t         pdg  = 113;
114    TDatabasePDG *db   = TDatabasePDG::Instance();
115    TParticlePDG *part = db->GetParticle(pdg);
116
117
118    Printf(suffix.Data());
119    // create standard outputs
120    for (Int_t i = 0; i < 5; i++) {
121       if (!use[i]) continue;
122       // create output
123       AliRsnMiniOutput *out = taskRsnMini->CreateOutput(Form("%s_%s", suffix.Data(),name[i].Data() ), outputType.Data(), comp[i].Data());
124       // selection settings
125       out->SetCutID(0, listID1);
126       out->SetCutID(1, listID1);
127       out->SetDaughter(0, AliRsnDaughter::kPion);
128       out->SetDaughter(1, AliRsnDaughter::kPion);
129       out->SetCharge(0, charge1[i]);
130       out->SetCharge(1, charge2[i]);
131       out->SetMotherPDG(pdg);
132       out->SetMotherMass(part->Mass());
133       // pair cuts
134       if (cutsPair) out->SetPairCuts(cutsPair);
135       // axis X: invmass
136       out->AddAxis(imID, nIM, minIM, maxIM);
137
138       if (isFullOutput) {
139          // axis Y: transverse momentum
140          out->AddAxis(ptID, nPt, minPt, maxPt);
141          out->AddAxis(etaID, nEta, minEta, maxEta);
142          out->AddAxis(yID, nY, minY, maxY);
143
144          // axis Z: centrality
145          if (collisionType==1) out->AddAxis(centID, nCent, minCent, maxCent);
146       }
147    }
148
149    // add output for resolution
150    if (isMC) {
151       AliRsnMiniOutput *outRes = taskRsnMini->CreateOutput(Form("rho_Res%s", suffix.Data()), outputType.Data(), "TRUE");
152       // selection settings
153       outRes->SetCutID(0, listID1);
154       outRes->SetCutID(1, listID1);
155       outRes->SetDaughter(0, AliRsnDaughter::kPion);
156       outRes->SetDaughter(1, AliRsnDaughter::kPion);
157       outRes->SetCharge(0, '+');
158       outRes->SetCharge(1, '-');
159       outRes->SetMotherPDG(pdg);
160       outRes->SetMotherMass(part->Mass());
161       // pair cuts
162       if (cutsPair) outRes->SetPairCuts(cutsPair);
163       // axis X: resolution
164       outRes->AddAxis(resID, nRes, -maxRes, maxRes);
165
166       if (isFullOutput) {
167          // axis Y: transverse momentum
168          outRes->AddAxis(ptID, nPt, minPt, maxPt);
169          outRes->AddAxis(etaID, nEta, minEta, maxEta);
170          // axis Z: centrality
171          if (collisionType==1) outRes->AddAxis(centID, nCent, minCent, maxCent);
172       }
173    }
174
175    //
176    // -- Create output for MC generated ------------------------------------------------------------
177    //
178
179    if (isMC) {
180       // create ouput
181       AliRsnMiniOutput *outMC = taskRsnMini->CreateOutput(Form("rho_MCGen%s", suffix.Data()), outputType.Data(), "MOTHER");
182       // selection settings
183       outMC->SetDaughter(0, AliRsnDaughter::kPion);
184       outMC->SetDaughter(1, AliRsnDaughter::kPion);
185       outMC->SetMotherPDG(pdg);
186       outMC->SetMotherMass(part->Mass());
187       // pair cuts
188       if (cutsPair) outMC->SetPairCuts(cutsPair);
189       // axis X: invmass
190       outMC->AddAxis(imID, nIM, minIM, maxIM);
191       if (isFullOutput) {
192          // axis Y: transverse momentum
193          outMC->AddAxis(ptID, nPt, minPt, maxPt);
194          outMC->AddAxis(etaID, nEta, minEta, maxEta);
195          outRes->AddAxis(yID, nY, minY, maxY);
196          // axis Z: centrality
197          if (collisionType==1) outMC->AddAxis(centID, nCent, minCent, maxCent);
198       }
199    }
200
201
202 }