]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGLF/RESONANCES/macros/train/RsnConfigTest.C
Merge branch 'feature-movesplit'
[u/mrichter/AliRoot.git] / PWGLF / RESONANCES / macros / train / RsnConfigTest.C
1 Bool_t RsnConfigTest
2 (
3    AliRsnAnalysisTask *task,
4    Bool_t              isMC
5 )
6 {
7    // find the index of the corresponding list in the RsnInputHandler
8    const char *listNameQuality = "qualityTPC";
9    const char *listNamePID     = "kaonTPC";
10    Int_t       qualityID       = -1;
11    Int_t       pidID           = -1;
12    AliAnalysisManager        *mgr   = AliAnalysisManager::GetAnalysisManager();
13    AliMultiInputEventHandler *multi = dynamic_cast<AliMultiInputEventHandler*>(mgr->GetInputEventHandler());
14    if (multi) {
15       TObjArray *array = multi->InputEventHandlers();
16       TObjArrayIter next(array);
17       TObject *obj;
18       while ( (obj = next()) ) {
19          if (obj->InheritsFrom(AliRsnInputHandler::Class())) {
20             AliRsnInputHandler *rsn = (AliRsnInputHandler*)obj;
21             AliRsnDaughterSelector *sel = rsn->GetSelector();
22             qualityID = sel->GetID(listNameQuality, kTRUE);
23             pidID = sel->GetID(listNamePID, kTRUE);
24          }
25       }
26    }
27    if (qualityID < 0) {
28       ::Error("RsnConfigTest", "Selector does not contain list for quality only");
29       return kFALSE;
30    }
31    if (pidID < 0) {
32       ::Error("RsnConfigTest", "Selector does not contain list for quality+PID");
33       return kFALSE;
34    }
35    ::Info("RsnConfigTest", "ID for cut set named '%10s' = %d", listNameQuality, qualityID);
36    ::Info("RsnConfigTest", "ID for cut set named '%10s' = %d", listNamePID, pidID);
37    
38    // add pair computation
39    //AddPairLoop(task, isMC, pidID, pidID, "test");
40    
41    // add monitor computation
42    AddMonitorLoop(task, isMC, qualityID, pidID, "test");
43    return kTRUE;
44 }
45
46 AliRsnCutSet* EventCuts() 
47 {
48    // primary vertex:
49    // - 2nd argument --> |Vz| range
50    // - 3rd argument --> minimum required number of contributors
51    // - 4th argument --> tells if TPC stand-alone vertexes must be accepted
52    // we switch on the check for pileup
53    AliRsnCutPrimaryVertex *cutVertex = new AliRsnCutPrimaryVertex("cutVertex", 10.0, 0, kFALSE);
54    cutVertex->SetCheckPileUp(kTRUE);
55       
56    // primary vertex is always used
57    AliRsnCutSet *eventCuts = new AliRsnCutSet("eventCuts", AliRsnTarget::kEvent);
58    eventCuts->AddCut(cutVertex);
59    eventCuts->SetCutScheme(cutVertex->GetName());
60    
61    return eventCuts;
62 }
63
64 AliRsnCutSet* PairCuts(AliRsnPairDef *support)
65 {
66    // for pairs we define a rapidity windows, defined through a cut
67    // --> NOTE: it needs a support AliRsnPairDef from which it takes the mass
68    AliRsnValueStd *valRapidity = new AliRsnValueStd("valY", AliRsnValueStd::kPairY);
69    AliRsnCutValue *cutRapidity = new AliRsnCutValue("cutY", -0.5, 0.5, kFALSE);
70    valRapidity->SetSupportObject(support);
71    cutRapidity->SetValueObj(valRapidity);
72    
73    // cut set
74    AliRsnCutSet *pairCuts = new AliRsnCutSet("pairCuts", AliRsnTarget::kMother);
75    pairCuts->AddCut(cutRapidity);
76    pairCuts->SetCutScheme(cutRapidity->GetName());
77 }
78
79 void AddPairOutput(AliRsnLoopPair *pair)
80 {
81    // axes
82    AliRsnValueStd *axisIM = new AliRsnValueStd("IM", AliRsnValueStd::kPairInvMass, 0.9, 1.4, 0.001);
83    AliRsnValueStd *axisPt = new AliRsnValueStd("PT", AliRsnValueStd::kPairPt     , 0.0, 5.0, 0.1  );
84      
85    // output: 2D histogram of inv. mass vs. pt
86    AliRsnListOutput *outPair = new AliRsnListOutput("pair", AliRsnListOutput::kHistoDefault);
87    outPair->AddValue(axisIM);
88    outPair->AddValue(axisPt);
89    
90    // add outputs to loop
91    pair->AddOutput(outPair);
92 }
93
94 void AddMonitorOutput(AliRsnLoopDaughter *mon)
95 {
96    // axes
97    AliRsnValueStd *axisMomTPC = new AliRsnValueStd("pTPC", AliRsnValueStd::kTrackPtpc     , 0.0,   5.0, 0.01 );
98    AliRsnValueStd *axisSigTPC = new AliRsnValueStd("sTPC", AliRsnValueStd::kTrackTPCsignal, 0.0, 500.0, 2.0  );
99    
100    // output: 2D histogram of TPC signal vs. TPC momentum
101    AliRsnListOutput *outMonitor = new AliRsnListOutput("mon", AliRsnListOutput::kHistoDefault);
102    outMonitor->AddValue(axisMomTPC);
103    outMonitor->AddValue(axisSigTPC);
104    
105    // add outputs to loop
106    mon->AddOutput(outMonitor);
107 }
108
109 void AddPairLoop(AliRsnAnalysisTask *task, Bool_t isMC, Int_t listID1, Int_t listID2, const char *suffix = "")
110 {
111    // pair definition
112    AliRsnPairDef  *pairDef    = new AliRsnPairDef(AliRsnDaughter::kKaon, '+', AliRsnDaughter::kKaon, '-', 333, 1.019455);
113    
114    // loop object creation
115    AliRsnLoopPair *loopPhi    = new AliRsnLoopPair(Form("%s_unlike", suffix), pairDef, kFALSE);
116    AliRsnLoopPair *loopPhiMix = new AliRsnLoopPair(Form("%s_unlike", suffix), pairDef, kTRUE );
117    
118    // assign ID of selector lists to be used (KK --> the same)
119    loopPhi->SetListID(0, listID1);
120    loopPhi->SetListID(1, listID2);
121    loopPhiMix->SetListID(0, listID1);
122    loopPhiMix->SetListID(1, listID2);
123    
124    // assign cuts for events
125    AliRsnCutSet *eventCuts = EventCuts();
126    loopPhi->SetEventCuts(eventCuts);
127    loopPhiMix->SetEventCuts(eventCuts);
128    
129    // assign cuts for pairs
130    AliRsnCutSet *pairCuts = PairCuts(pairDef);
131    loopPhi->SetPairCuts(eventCuts);
132    loopPhiMix->SetPairCuts(eventCuts);
133    
134    // add outputs
135    AddPairOutput(loopPhi);
136    AddPairOutput(loopPhiMix);
137    
138    // add loops to task
139    task->Add(loopPhi);
140    task->Add(loopPhiMix);
141 }
142
143 void AddMonitorLoop(AliRsnAnalysisTask *task, Bool_t isMC, Int_t listID1, Int_t listID2, const char *suffix = "")
144 {
145    // monitor definition
146    AliRsnDaughterDef *tracks = new AliRsnDaughterDef(AliRsnDaughter::kTrack /*'+' or '-'*/);
147    
148    // loop object
149    AliRsnLoopDaughter *loopMon1 = new AliRsnLoopDaughter(Form("%s_mon1", suffix), listID1, tracks);
150    AliRsnLoopDaughter *loopMon2 = new AliRsnLoopDaughter(Form("%s_mon2", suffix), listID2, tracks);
151    
152    // add cuts on events
153    AliRsnCutSet *eventCuts = EventCuts();
154    loopMon1->SetEventCuts(eventCuts);
155    loopMon2->SetEventCuts(eventCuts);
156    
157    // add monitors
158    AddMonitorOutput(loopMon1);
159    AddMonitorOutput(loopMon2);
160    
161    // add loop to task
162    task->Add(loopMon1);
163    task->Add(loopMon2);
164 }