3 AliRsnAnalysisTask *task,
7 // find the index of the corresponding list in the RsnInputHandler
8 const char *listNameQuality = "qualityTPC";
9 const char *listNamePID = "kaonTPC";
12 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
13 AliMultiInputEventHandler *multi = dynamic_cast<AliMultiInputEventHandler*>(mgr->GetInputEventHandler());
15 TObjArray *array = multi->InputEventHandlers();
16 TObjArrayIter next(array);
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);
28 ::Error("RsnConfigTest", "Selector does not contain list for quality only");
32 ::Error("RsnConfigTest", "Selector does not contain list for quality+PID");
35 ::Info("RsnConfigTest", "ID for cut set named '%10s' = %d", listNameQuality, qualityID);
36 ::Info("RsnConfigTest", "ID for cut set named '%10s' = %d", listNamePID, pidID);
38 // add pair computation
39 //AddPairLoop(task, isMC, pidID, pidID, "test");
41 // add monitor computation
42 AddMonitorLoop(task, isMC, qualityID, pidID, "test");
46 AliRsnCutSet* EventCuts()
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);
56 // primary vertex is always used
57 AliRsnCutSet *eventCuts = new AliRsnCutSet("eventCuts", AliRsnTarget::kEvent);
58 eventCuts->AddCut(cutVertex);
59 eventCuts->SetCutScheme(cutVertex->GetName());
64 AliRsnCutSet* PairCuts(AliRsnPairDef *support)
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);
74 AliRsnCutSet *pairCuts = new AliRsnCutSet("pairCuts", AliRsnTarget::kMother);
75 pairCuts->AddCut(cutRapidity);
76 pairCuts->SetCutScheme(cutRapidity->GetName());
79 void AddPairOutput(AliRsnLoopPair *pair)
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 );
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);
90 // add outputs to loop
91 pair->AddOutput(outPair);
94 void AddMonitorOutput(AliRsnLoopDaughter *mon)
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 );
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);
105 // add outputs to loop
106 mon->AddOutput(outMonitor);
109 void AddPairLoop(AliRsnAnalysisTask *task, Bool_t isMC, Int_t listID1, Int_t listID2, const char *suffix = "")
112 AliRsnPairDef *pairDef = new AliRsnPairDef(AliRsnDaughter::kKaon, '+', AliRsnDaughter::kKaon, '-', 333, 1.019455);
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 );
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);
124 // assign cuts for events
125 AliRsnCutSet *eventCuts = EventCuts();
126 loopPhi->SetEventCuts(eventCuts);
127 loopPhiMix->SetEventCuts(eventCuts);
129 // assign cuts for pairs
130 AliRsnCutSet *pairCuts = PairCuts(pairDef);
131 loopPhi->SetPairCuts(eventCuts);
132 loopPhiMix->SetPairCuts(eventCuts);
135 AddPairOutput(loopPhi);
136 AddPairOutput(loopPhiMix);
140 task->Add(loopPhiMix);
143 void AddMonitorLoop(AliRsnAnalysisTask *task, Bool_t isMC, Int_t listID1, Int_t listID2, const char *suffix = "")
145 // monitor definition
146 AliRsnDaughterDef *tracks = new AliRsnDaughterDef(AliRsnDaughter::kTrack /*'+' or '-'*/);
149 AliRsnLoopDaughter *loopMon1 = new AliRsnLoopDaughter(Form("%s_mon1", suffix), listID1, tracks);
150 AliRsnLoopDaughter *loopMon2 = new AliRsnLoopDaughter(Form("%s_mon2", suffix), listID2, tracks);
152 // add cuts on events
153 AliRsnCutSet *eventCuts = EventCuts();
154 loopMon1->SetEventCuts(eventCuts);
155 loopMon2->SetEventCuts(eventCuts);
158 AddMonitorOutput(loopMon1);
159 AddMonitorOutput(loopMon2);