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