19 #include "AliCounterCollection.h"
20 #include "AliVEvent.h"
21 #include "AliESDEvent.h"
22 #include "AliVParticle.h"
23 #include "AliESDMuonTrack.h"
24 #include "AliInputEventHandler.h"
25 #include "AliCentrality.h"
27 #include "AliAnalysisManager.h"
28 #include "AliAnalysisDataSlot.h"
29 #include "AliAnalysisDataContainer.h"
30 #include "AliAnalysisMuonUtility.h"
38 : AliAnalysisTaskSE(),
56 : AliAnalysisTaskSE(name),
70 DefineOutput(1, AliCounterCollection::Class());
76 if (!AliAnalysisManager::GetAnalysisManager()->IsProofMode())
delete fTriggerCounters;
84 TString centKeys =
"any";
87 fTriggerCounters =
new AliCounterCollection(GetOutputSlot(1)->GetContainer()->GetName());
109 AliVEvent *evt = InputEvent();
110 if (!dynamic_cast<AliESDEvent*>(evt)) {
111 AliFatal(
"can only run on ESDs");
116 if (evt->GetEventType() != 7)
return;
119 TString psKey = (fInputHandler->IsEventSelected()) ?
"ps:yes" :
"ps:no";
122 Float_t cent = evt->GetCentrality()->GetCentralityPercentile(
"V0M");
123 TString centKey =
"";
124 for (Int_t iCent = 0; iCent <
fnCent; iCent++) {
132 TString trigger = evt->GetFiredTriggerClasses();
133 TString onlineMULKey = (trigger.Contains(
fMULPattern.Data())) ?
"mul:yes" :
"mul:no";
134 TString onlineMLLKey = (trigger.Contains(
fMLLPattern.Data())) ?
"mll:yes" :
"mll:no";
135 TString onlineMSLKey = (trigger.Contains(
fMSLPattern.Data())) ?
"msl:yes" :
"msl:no";
136 TString onlineMSHKey = (trigger.Contains(
fMSHPattern.Data())) ?
"msh:yes" :
"msh:no";
139 TString offlineMULKey =
"muloff:no";
140 TString offlineMLLKey =
"mlloff:no";
141 TString offlineMSLKey =
"msloff:no";
142 TString offlineMSHKey =
"mshoff:no";
143 Int_t ntracks = AliAnalysisMuonUtility::GetNTracks(evt);
144 Int_t *loCircuit =
new Int_t[ntracks];
145 Int_t nTrgTracks = 0;
146 for (Int_t i = 0; i < ntracks; ++i) {
148 AliVParticle *tracki = AliAnalysisMuonUtility::GetTrack(i, evt);
149 if (!AliAnalysisMuonUtility::MatchLpt(tracki))
continue;
152 Bool_t trackExist = kFALSE;
153 Int_t loCircuiti = AliAnalysisMuonUtility::GetLoCircuit(tracki);
154 for (Int_t k = 0; k < nTrgTracks; ++k) {
155 if (loCircuiti == loCircuit[k]) {
160 if (trackExist)
continue;
161 loCircuit[nTrgTracks++] = loCircuiti;
164 offlineMSLKey =
"msloff:yes";
165 if (AliAnalysisMuonUtility::MatchHpt(tracki)) offlineMSHKey =
"mshoff:yes";
169 for (Int_t j = i+1; j < ntracks; ++j) {
171 AliVParticle *trackj = AliAnalysisMuonUtility::GetTrack(j, evt);
172 if (!AliAnalysisMuonUtility::MatchLpt(trackj))
continue;
176 Int_t loCircuitj = AliAnalysisMuonUtility::GetLoCircuit(trackj);
177 for (Int_t k = 0; k < nTrgTracks; ++k) {
178 if (loCircuitj == loCircuit[k]) {
183 if (trackExist)
continue;
188 Int_t trgSign = trgDevSigni * trgDevSignj;
189 if (trgSign <= 0) offlineMULKey =
"muloff:yes";
190 if (trgSign >= 0) offlineMLLKey =
"mlloff:yes";
198 fCurrentRunNumber, psKey.Data(),
199 onlineMULKey.Data(), onlineMLLKey.Data(), onlineMSLKey.Data(), onlineMSHKey.Data(),
200 offlineMULKey.Data(), offlineMLLKey.Data(), offlineMSLKey.Data(), offlineMSHKey.Data()));
201 if (!centKey.IsNull())
203 fCurrentRunNumber, psKey.Data(), centKey.Data(),
204 onlineMULKey.Data(), onlineMLLKey.Data(), onlineMSLKey.Data(), onlineMSHKey.Data(),
205 offlineMULKey.Data(), offlineMLLKey.Data(), offlineMSLKey.Data(), offlineMSHKey.Data()));
218 printf(
"\nwithout Physics Selection:\n\n");
221 printf(
"\nwith Physics Selection:\n\n");
224 printf(
"\nwith Physics Selection in 0-90%%:\n\n");
225 PrintRates(
"ps:yes",
"cent:010,1020,2030,3040,4050,5060,6070,7080,8090");
234 for (Int_t iCent = 0; iCent < 10; ++iCent) {
237 fCentBinName[iCent] = Form(
"%d%d", 10*iCent, 10*(iCent+1));
247 AliESDMuonTrack *esdTrack =
dynamic_cast<AliESDMuonTrack*
>(track);
248 if (!esdTrack)
return 0;
250 Int_t deviation = esdTrack->LoDev();
251 if (deviation > 15+((Int_t)deltaDev))
return 1;
252 else if (deviation < 15-((Int_t)deltaDev))
return -1;
262 if (!ps.IsNull()) ps +=
"/";
263 if (!cent.IsNull()) cent +=
"/";
265 const char* sformat =
"%12s";
266 const char* dformat =
"%12ld";
267 const char* fformat =
"%11.1f%%";
271 TString titlei[ni] = {
"MUL",
"MLL",
"MUL|MLL",
"MSL",
"MSLonly",
"MSH",
"MUL|MSH",
"MUL|MLL|MSH"};
272 TString selecti[ni] = {
"mul:yes",
"mll:yes",
"!mul:no/mll:no",
"msl:yes",
"msl:yes/mul:no/mll:no/msh:no",
"msh:yes",
"!mul:no/msh:no",
"!mul:no/mll:no/msh:no"};
276 TString titlej[nj] = {
"any",
"MULonly",
"MLLonly",
"MUL&MLL",
"MUL",
"MLL",
"MUL|MLL",
"MSL",
"MSLonly",
"MSH",
"MUL|MSH",
"MUL|MLL|MSH"};
277 TString selectj[nj] = {
"",
"muloff:yes/mlloff:no",
"muloff:no/mlloff:yes",
"muloff:yes/mlloff:yes",
"muloff:yes",
"mlloff:yes",
"!muloff:no/mlloff:no",
"msloff:yes",
"msloff:yes/muloff:no/mlloff:no/mshoff:no",
"mshoff:yes",
"!muloff:no/mshoff:no",
"!muloff:no/mlloff:no/mshoff:no"};
279 Long_t valij[ni][nj], rvali[ni][nj], rvalj[ni][nj], rvalij[ni][nj], val[ni][nj];
282 for (Int_t j = 0; j < nj; ++j) printf(sformat,titlej[j].
Data());
284 for (Int_t i = 0; i < ni; ++i) {
286 printf(sformat, titlei[i].
Data());
289 TString si = selecti[i];
291 if (si.Contains(
"!")) {
293 ri.ReplaceAll(
"!",
"/");
294 ri.Remove(TString::kLeading,
'/');
295 si.Remove(si.Index(
"!"));
298 for (Int_t j = 0; j < nj; ++j) {
301 TString sj = selectj[j];
303 if (sj.Contains(
"!")) {
305 rj.ReplaceAll(
"!",
"/");
306 rj.Remove(TString::kLeading,
'/');
307 sj.Remove(sj.Index(
"!"));
311 valij[i][j] = (Long_t)
fTriggerCounters->GetSum(Form(
"%s%s%s/%s",ps.Data(),cent.Data(),si.Data(),sj.Data()));
312 rvali[i][j] = (!ri.IsNull()) ? (Long_t)
fTriggerCounters->GetSum(Form(
"%s%s%s/%s",ps.Data(),cent.Data(),ri.Data(),sj.Data())) : 0;
313 rvalj[i][j] = (!rj.IsNull()) ? (Long_t)
fTriggerCounters->GetSum(Form(
"%s%s%s/%s",ps.Data(),cent.Data(),si.Data(),rj.Data())) : 0;
314 rvalij[i][j] = (!ri.IsNull() && !rj.IsNull()) ? (Long_t)
fTriggerCounters->GetSum(Form(
"%s%s%s/%s",ps.Data(),cent.Data(),ri.Data(),rj.Data())) : 0;
315 val[i][j] = valij[i][j]-rvali[i][j]-rvalj[i][j]+rvalij[i][j];
318 else printf(fformat, ((Float_t)val[i][j])/((Float_t)val[i][0])*100.);
AliAnalysisTaskTriggerRates()
ClassImp(AliAnalysisTaskTriggerRates) AliAnalysisTaskTriggerRates
TString fMSHPattern
MSL trigger class pattern.
task to study online/offline trigger combinations
TString fMSLPattern
MLL trigger class pattern.
TString fMLLPattern
MUL trigger class pattern.
Float_t fCentBinRange[10][2]
number of centrality bin used (< 10)
void InitCentralityBins()
virtual void UserExec(Option_t *option)
virtual void UserCreateOutputObjects()
Int_t fnCent
trigger counters
Bool_t fPrinfCounts
MSH trigger class pattern.
Int_t TriggerDevSign(AliVParticle *track, UInt_t deltaDev) const
Bool_t Data(TH1F *h, Double_t *rangefit, Bool_t writefit, Double_t &sgn, Double_t &errsgn, Double_t &bkg, Double_t &errbkg, Double_t &sgnf, Double_t &errsgnf, Double_t &sigmafit, Int_t &status)
void PrintRates(TString ps, TString cent) const
TString fMULPattern
set trgSign = 0 for trigger track with dev = 15 ± fDeltaDev
AliCounterCollection * fTriggerCounters
TString fCentBinName[10]
centrality bin intervals
virtual ~AliAnalysisTaskTriggerRates()
virtual void Terminate(Option_t *)
UInt_t fDeltaDev
centrality bin names