return bSelected;
}
+Bool_t AliAnalysisHelperJetTasks::IsCosmic(){
+ return ((SelectInfo()&kIsCosmic)==kIsCosmic);
+}
+
+Bool_t AliAnalysisHelperJetTasks::IsPileUp(){
+ return ((SelectInfo()&kIsPileUp)==kIsPileUp);
+}
+
+
+UInt_t AliAnalysisHelperJetTasks::SelectInfo(Bool_t bSet,UInt_t iNew){
+ static UInt_t iSelectInfo = 0; //
+ if(bSet){
+ iSelectInfo = iNew;
+ }
+ return iSelectInfo;
+}
+
+
//___________________________________________________________________________________________________________
Bool_t AliAnalysisHelperJetTasks::GetEventShapes(TVector3 &n01, TVector3 * pTrack, Int_t nTracks, Double_t * eventShapes)
enum {kMaxJets = 6}; // needed for array size not to fragemnt memory on the heap by many new/delete
+ enum { kNone = 1<<0,kBunchBunch = 1<<1,kBunchEmpty = 1<<2,kEmptyEmpty= 1<<3,
+ kPhysicsSelection = 1<<4, kVertexIn = 1<<5, kIsCosmic = 1<<6, kIsPileUp = 1<<7,kTotalSelections = (1<<8) - 1};
enum Trigger {kAcceptAll = 0,kMB1,kMB2,kMB3,kSPDGFO,kTrigger}; //
static Bool_t Selected(Bool_t bSet = kFALSE,Bool_t bNew = kTRUE); // static function to store the state of selection from service task
+
+ static Bool_t IsPileUp(); // Wrapper for SelectInfo with PileUp
+ static Bool_t IsCosmic(); // Wrapper for SelectInfo with cosmic
+
+ static UInt_t SelectInfo(Bool_t bSet = kFALSE,UInt_t iNew = 0); // static function to store the state bitmask of the selection from service task
// these methods have been essentially copied from PWG0/AliTriggerAnalysis and expanded to use with AOD
static Bool_t IsTriggerFired(const AliVEvent* aEsd, Trigger trigger);
private:
- ClassDef(AliAnalysisHelperJetTasks, 1)
+ ClassDef(AliAnalysisHelperJetTasks, 2)
};
#endif // ALIANALYSISHELPERJETTASKS_H
fUseAODInput(kFALSE),
fUsePhysicsSelection(kFALSE),
fRealData(kFALSE),
+ fSelectionInfoESD(0),
fAvgTrials(1),
fVtxXMean(0),
fVtxYMean(0),
fh1Trials(0x0),
fh1PtHard(0x0),
fh1PtHardTrials(0x0),
+ fh1SelectionInfoESD(0x0),
fh2TriggerCount(0x0),
fh2ESDTriggerCount(0x0),
fh2TriggerVtx(0x0),
fUseAODInput(kFALSE),
fUsePhysicsSelection(kFALSE),
fRealData(kFALSE),
+ fSelectionInfoESD(0),
fAvgTrials(1),
fVtxXMean(0),
fVtxYMean(0),
fh1Trials(0x0),
fh1PtHard(0x0),
fh1PtHardTrials(0x0),
+ fh1SelectionInfoESD(0x0),
fh2TriggerCount(0x0),
fh2ESDTriggerCount(0x0),
fh2TriggerVtx(0x0),
fHistList->Add(fh1PtHard);
fh1PtHardTrials = new TH1F("fh1PtHardTrials","PYTHIA Pt hard weight with trials;p_{T,hard}",nBinPt,binLimitsPt);
fHistList->Add(fh1PtHardTrials);
+ fh1SelectionInfoESD = new TH1F("fh1SelectionInfoESD","Bit Masks that satisfy the selection info",
+ AliAnalysisHelperJetTasks::kTotalSelections,0.5,AliAnalysisHelperJetTasks::kTotalSelections+0.5);
+ fHistList->Add(fh1SelectionInfoESD);
// 3 decisions, 0 trigger X, X + SPD vertex, X + SPD vertex in range
// 3 triggers BB BE/EB EE
AliESDEvent *esd = 0;
AliAnalysisHelperJetTasks::Selected(kTRUE,kFALSE); // set slection to false
+ fSelectionInfoESD = 0; // reset
+ AliAnalysisHelperJetTasks::SelectInfo(kTRUE,fSelectionInfoESD); // set slection to false
+
if(fUseAODInput){
aod = dynamic_cast<AliAODEvent*>(InputEvent());
esd = dynamic_cast<AliESDEvent*>(InputEvent());
}
+ fSelectionInfoESD |= AliAnalysisHelperJetTasks::kNone;
+
if(esd){
Float_t run = (Float_t)esd->GetRunNumber();
const AliESDVertex *vtxESD = esd->GetPrimaryVertex();
||esd->GetFiredTriggerClasses().Contains("MB1")
||esd->GetFiredTriggerClasses().Contains("CINT6B")){
iTrig = 0;
+ fSelectionInfoESD |= AliAnalysisHelperJetTasks::kBunchBunch;
}
else if(esd->GetFiredTriggerClasses().Contains("CINT1A")
||esd->GetFiredTriggerClasses().Contains("CSMBA")
||esd->GetFiredTriggerClasses().Contains("CINT6C")){
// empty bunch or bunch empty
iTrig = 1;
+ fSelectionInfoESD |= AliAnalysisHelperJetTasks::kBunchEmpty;
}
- if(esd->GetFiredTriggerClasses().Contains("CINT1-E")
+ else if(esd->GetFiredTriggerClasses().Contains("CINT1-E")
||esd->GetFiredTriggerClasses().Contains("CINT6-E")){
iTrig = 2;
+ fSelectionInfoESD |= AliAnalysisHelperJetTasks::kEmptyEmpty;
}
// Apply additional constraints
Bool_t esdEventSelected = IsEventSelectedESD(esd);
+ Bool_t esdEventPileUp = IsEventPileUpESD(esd);
+ Bool_t esdEventCosmic = IsEventCosmicESD(esd);
+
Bool_t aodEventSelected = IsEventSelectedAOD(aod);
-
+
+ Bool_t physicsSelection = fInputHandler->IsEventSelected();
+
+ if(esdEventSelected) fSelectionInfoESD |= AliAnalysisHelperJetTasks::kVertexIn;
+ if(esdEventPileUp) fSelectionInfoESD |= AliAnalysisHelperJetTasks::kIsPileUp;
+ if(esdEventCosmic) fSelectionInfoESD |= AliAnalysisHelperJetTasks::kIsCosmic;
+ if(physicsSelection) fSelectionInfoESD |= AliAnalysisHelperJetTasks::kPhysicsSelection;
+
+
+ // here we have all selection information, fill histogram
+ for(unsigned int i = 1;i<(UInt_t)fh1SelectionInfoESD->GetNbinsX();i++){
+ if((i&fSelectionInfoESD)==i)fh1SelectionInfoESD->Fill(i);
+ }
+ AliAnalysisHelperJetTasks::SelectInfo(kTRUE,fSelectionInfoESD); // set slection to false
if(esd&&aod&&fDebug){
if(esdEventSelected&&!aodEventSelected){
return eventSel;
}
+Bool_t AliAnalysisTaskJetServices::IsEventPileUpESD(AliESDEvent* esd){
+ if(!esd)return kFALSE;
+ return esd->IsPileupFromSPD();
+}
+
+Bool_t AliAnalysisTaskJetServices::IsEventCosmicESD(AliESDEvent* esd){
+ if(!esd)return kFALSE;
+ // add track cuts for which we look for cosmics...
+ return kTRUE;
+}
+
+
Bool_t AliAnalysisTaskJetServices::IsEventSelectedAOD(AliAODEvent* aod){
if(!aod)return kFALSE;
const AliAODVertex *vtx = aod->GetPrimaryVertex();
+
void AliAnalysisTaskJetServices::Terminate(Option_t */*option*/)
{
// Terminate analysis
virtual void SetRealData(Bool_t b){fRealData = b;}
virtual void SetUsePhysicsSelection(Bool_t b){fUsePhysicsSelection = b;}
Bool_t IsEventSelectedESD(AliESDEvent* esd);
+ Bool_t IsEventPileUpESD(AliESDEvent* esd);
+ Bool_t IsEventCosmicESD(AliESDEvent* esd);
Bool_t IsEventSelectedAOD(AliAODEvent* aod);
enum { kAllTriggered = 0,kTriggeredVertex,kTriggeredVertexIn,kSelectedALICE,kSelectedALICEVertexIn,kSelected,kConstraints};
+
+
private:
AliAnalysisTaskJetServices(const AliAnalysisTaskJetServices&);
Bool_t fUseAODInput; // take jet from input AOD not from ouptu AOD
Bool_t fUsePhysicsSelection;// decide wether we take into account physicsselction task
Bool_t fRealData; // true for real data to allow correct trigger slection
+ UInt_t fSelectionInfoESD; // slection info bit mask
Float_t fAvgTrials; // Average number of trials
Float_t fVtxXMean; // mean x for cuts
Float_t fVtxYMean; // mean y for cuts
TH1F* fh1Trials; // trials are added
TH1F* fh1PtHard; // Pt har of the event...
TH1F* fh1PtHardTrials; // Number of trials
+ TH1F* fh1SelectionInfoESD; // Masks that satisfy fSelectionInfo
TH2F* fh2TriggerCount; // number of fire triggers in each case
TH2F* fh2ESDTriggerCount; // number of fire triggers in each case
TH2F* fh2TriggerVtx; // vtx. position vs. trigger decision
TH2F* fh2VtxXY; // XY position of VTX were available
TList *fHistList; // Output list
- ClassDef(AliAnalysisTaskJetServices,4)
+ ClassDef(AliAnalysisTaskJetServices,5)
};
#endif
fUseExternalWeightOnly(kFALSE),
fLimitGenJetEta(kFALSE),
fFilterMask(0),
+ fEventSelectionMask(0),
fAnalysisType(0),
fTrackTypeRec(kTrackUndef),
fTrackTypeGen(kTrackUndef),
fUseExternalWeightOnly(kFALSE),
fLimitGenJetEta(kFALSE),
fFilterMask(0),
+ fEventSelectionMask(0),
fAnalysisType(0),
fTrackTypeRec(kTrackUndef),
fTrackTypeGen(kTrackUndef),
void AliAnalysisTaskJetSpectrum2::UserExec(Option_t */*option*/)
{
- if(!AliAnalysisHelperJetTasks::Selected()&&fUseGlobalSelection){
+ Bool_t selected = kTRUE;
+
+ if(fUseGlobalSelection&&fEventSelectionMask==0){
+ selected = AliAnalysisHelperJetTasks::Selected();
+ }
+ else if(fUseGlobalSelection&&fEventSelectionMask>0){
+ selected = ((AliAnalysisHelperJetTasks::SelectInfo()&fEventSelectionMask)==fEventSelectionMask);
+ }
+
+ if(!selected){
// no selection by the service task, we continue
if (fDebug > 1)Printf("Not selected %s:%d",(char*)__FILE__,__LINE__);
PostData(1, fHistList);
return;
}
+
//
// Execute analysis for current event
//
virtual void SetTrackTypeGen(Int_t i){fTrackTypeGen = i;}
virtual void SetTrackTypeRec(Int_t i){fTrackTypeRec = i;}
virtual void SetFilterMask(UInt_t i){fFilterMask = i;}
+ virtual void SetEventSelectionMask(UInt_t i){fEventSelectionMask = i;}
// use for the CF
Bool_t fUseGlobalSelection; // Limit the eta of the generated jets
Bool_t fUseExternalWeightOnly; // use only external weight
Bool_t fLimitGenJetEta; // Limit the eta of the generated jets
- UInt_t fFilterMask; // filter bit for slecected tracks
+ UInt_t fFilterMask; // filter bit for slecected tracks
+ UInt_t fEventSelectionMask; // Selection information used to filter events
Int_t fAnalysisType; // Analysis type
Int_t fTrackTypeRec; // type of tracks used for FF
Int_t fTrackTypeGen; // type of tracks used for FF
TList *fHistList; // Output list
- ClassDef(AliAnalysisTaskJetSpectrum2, 4) // Analysis task for standard jet analysis
+ ClassDef(AliAnalysisTaskJetSpectrum2, 5) // Analysis task for standard jet analysis
};
#endif
-AliAnalysisTaskJetSpectrum2 *AddTaskJetSpectrum2(const char* bRec = "jets",const char* bGen = "jetsAODMC_UA104",UInt_t filterMask = 16, Int_t iPhysicsSelection = 1);\r
+AliAnalysisTaskJetSpectrum2 *AddTaskJetSpectrum2(const char* bRec = "jets",const char* bGen = "jetsAODMC_UA104",UInt_t filterMask = 16, Int_t iPhysicsSelection = 1,UInt_t iEventSelectionMask = 0);\r
\r
\r
-AliAnalysisTaskJetSpectrum2 *AddTaskJetSpectrum2Delta(UInt_t filterMask = 16,Bool_t kUseAODMC = kFALSE,Int_t iPhysicsSelection = 1,UInt_t iFlag){\r
+AliAnalysisTaskJetSpectrum2 *AddTaskJetSpectrum2Delta(UInt_t filterMask = 16,Bool_t kUseAODMC = kFALSE,Int_t iPhysicsSelection = 1,UInt_t iFlag = 0xfffffff, UInt_t iEventSelectionMask = 0){\r
AliAnalysisTaskJetSpectrum2 *js = 0;\r
if(kUseAODMC){\r
- if(iFlag&(1<<0))js = AddTaskJetSpectrum2("jets","jetsAODMC_UA104",filterMask,iPhysicsSelection);\r
- if(iFlag&(1<<1))js = AddTaskJetSpectrum2("jets","jetsAODMC2_UA104",filterMask,iPhysicsSelection);\r
+ if(iFlag&(1<<0))js = AddTaskJetSpectrum2("jets","jetsAODMC_UA104",filterMask,iPhysicsSelection, iEventSelectionMask);\r
+ if(iFlag&(1<<1))js = AddTaskJetSpectrum2("jets","jetsAODMC2_UA104",filterMask,iPhysicsSelection, iEventSelectionMask);\r
\r
- if(iFlag&(1<<2))js = AddTaskJetSpectrum2("jetsAOD_FASTJET04","jetsAODMC_FASTJET04",filterMask,iPhysicsSelection);\r
- if(iFlag&(1<<3))js = AddTaskJetSpectrum2("jetsAOD_FASTJET04","jetsAODMC2_FASTJET04",filterMask,iPhysicsSelection);\r
+ if(iFlag&(1<<2))js = AddTaskJetSpectrum2("jetsAOD_FASTJET04","jetsAODMC_FASTJET04",filterMask,iPhysicsSelection, iEventSelectionMask);\r
+ if(iFlag&(1<<3))js = AddTaskJetSpectrum2("jetsAOD_FASTJET04","jetsAODMC2_FASTJET04",filterMask,iPhysicsSelection, iEventSelectionMask);\r
\r
if(iFlag&(1<<4)){\r
- js = AddTaskJetSpectrum2("jetsAOD_FASTKT04","jetsAODMC_FASTKT04",filterMask,iPhysicsSelection);\r
+ js = AddTaskJetSpectrum2("jetsAOD_FASTKT04","jetsAODMC_FASTKT04",filterMask,iPhysicsSelection,iEventSelectionMask);\r
}\r
- if(iFlag&(1<<5))js = AddTaskJetSpectrum2("jetsAOD_FASTKT04","jetsAODMC2_FASTKT04",filterMask,iPhysicsSelection);\r
- if(iFlag&(1<<6))js = AddTaskJetSpectrum2("jetsAOD_UA107","jetsAODMC_UA107",filterMask,iPhysicsSelection);\r
+ if(iFlag&(1<<5))js = AddTaskJetSpectrum2("jetsAOD_FASTKT04","jetsAODMC2_FASTKT04",filterMask,iPhysicsSelection, iEventSelectionMask);\r
+ if(iFlag&(1<<6))js = AddTaskJetSpectrum2("jetsAOD_UA107","jetsAODMC_UA107",filterMask,iPhysicsSelection, iEventSelectionMask);\r
}\r
\r
- if(iFlag&(1<<7))js = AddTaskJetSpectrum2("jets","jetsAOD_FASTJET04",filterMask,iPhysicsSelection);\r
+ if(iFlag&(1<<7))js = AddTaskJetSpectrum2("jets","jetsAOD_FASTJET04",filterMask,iPhysicsSelection, iEventSelectionMask);\r
\r
- if(iFlag&(1<<8))js = AddTaskJetSpectrum2("jetsAOD_FASTJET04","",filterMask,iPhysicsSelection);\r
- if(iFlag&(1<<9))js = AddTaskJetSpectrum2("jetsAOD_FASTKT04","",filterMask,iPhysicsSelection);\r
- if(iFlag&(1<<10))js = AddTaskJetSpectrum2("jetsAOD_SISCONE04","",filterMask,iPhysicsSelection);\r
+ if(iFlag&(1<<8))js = AddTaskJetSpectrum2("jetsAOD_FASTJET04","",filterMask,iPhysicsSelection, iEventSelectionMask);\r
+ if(iFlag&(1<<9))js = AddTaskJetSpectrum2("jetsAOD_FASTKT04","",filterMask,iPhysicsSelection, iEventSelectionMask);\r
+ if(iFlag&(1<<10))js = AddTaskJetSpectrum2("jetsAOD_SISCONE04","",filterMask,iPhysicsSelection, iEventSelectionMask);\r
\r
if(iFlag&(1<<11)){\r
- js = AddTaskJetSpectrum2("jetsAOD_UA107","",filterMask,iPhysicsSelection);\r
+ js = AddTaskJetSpectrum2("jetsAOD_UA107","",filterMask,iPhysicsSelection, iEventSelectionMask);\r
js->SetRecEtaWindow(0.2);\r
}\r
if(iFlag&(1<<12)){\r
- js = AddTaskJetSpectrum2("jetsAOD_FASTJET07","",filterMask,iPhysicsSelection);\r
+ js = AddTaskJetSpectrum2("jetsAOD_FASTJET07","",filterMask,iPhysicsSelection, iEventSelectionMask);\r
js->SetRecEtaWindow(0.2);\r
}\r
if(iFlag&(1<<13)){\r
- js = AddTaskJetSpectrum2("jetsAOD_FASTKT07","",filterMask,iPhysicsSelection);\r
+ js = AddTaskJetSpectrum2("jetsAOD_FASTKT07","",filterMask,iPhysicsSelection, iEventSelectionMask);\r
js->SetRecEtaWindow(0.2);\r
}\r
if(iFlag&(1<<14)){\r
- js = AddTaskJetSpectrum2("jetsAOD_SISCONE07","",filterMask,iPhysicsSelection);\r
+ js = AddTaskJetSpectrum2("jetsAOD_SISCONE07","",filterMask,iPhysicsSelection, iEventSelectionMask);\r
js->SetRecEtaWindow(0.2);\r
}\r
return js;\r
}\r
\r
\r
-AliAnalysisTaskJetSpectrum2 *AddTaskJetSpectrum2(const char* bRec,const char* bGen ,UInt_t filterMask,Int_t iPhysicsSelection)\r
+AliAnalysisTaskJetSpectrum2 *AddTaskJetSpectrum2(const char* bRec,const char* bGen ,UInt_t filterMask,Int_t iPhysicsSelection,UInt_t iEventSelectionMask)\r
{\r
// Creates a jet fider task, configures it and adds it to the analysis manager.\r
// Get the pointer to the existing analysis manager via the static access method.\r
// Create the task and configure it.\r
//===========================================================================\r
\r
- AliAnalysisTaskJetSpectrum2* pwg4spec = new AliAnalysisTaskJetSpectrum2(Form("JetSpectrum2%s%s",bRec,bGen));\r
+ AliAnalysisTaskJetSpectrum2* pwg4spec = new AliAnalysisTaskJetSpectrum2(Form("JetSpectrum2%s%s_%010d",bRec,bGen,iEventSelectionMask));\r
\r
// or a config file\r
// pwg4spec->SetAnalysisType(AliAnalysisTaskJetSpectrum2::kAnaMC);\r
}\r
\r
if(iPhysicsSelection)pwg4spec->SelectCollisionCandidates();\r
+ if(iEventSelectionMask)pwg4spec->SetEventSelectionMask(iEventSelectionMask);\r
\r
mgr->AddTask(pwg4spec);\r
\r
// Create ONLY the output containers for the data produced by the task.\r
// Get and connect other common input/output containers via the manager as below\r
//==============================================================================\r
- AliAnalysisDataContainer *coutput1_Spec = mgr->CreateContainer(Form("pwg4spec2_%s_%s",bRec,bGen), TList::Class(),AliAnalysisManager::kOutputContainer,Form("%s:PWG4_spec2_%s_%s",AliAnalysisManager::GetCommonFileName(),bRec,bGen));\r
+ AliAnalysisDataContainer *coutput1_Spec = mgr->CreateContainer(Form("pwg4spec2_%s_%s_%010d",bRec,bGen,iEventSelectionMask),TList::Class(),AliAnalysisManager::kOutputContainer,Form("%s:PWG4_spec2_%s_%s_%010d",AliAnalysisManager::GetCommonFileName(),bRec,bGen,iEventSelectionMask));\r
\r
mgr->ConnectInput (pwg4spec, 0, mgr->GetCommonInputContainer());\r
mgr->ConnectOutput (pwg4spec, 0, mgr->GetCommonOutputContainer());\r
if(iJETAN&2){
UInt_t selection = 0;
if(!kFillAOD) selection = 0xffffff&~(1<<13)&~(1<<5)&~(1<<6);
- else selection = 0xffffff&~(1<<13);// selection = 1<<0|1<<1|1<<2|1<<5|1<<6|1<<7|1<<8|1<<9|1<<10|1<<11|1<<12;
+ else selection = 0xffffff&~(1<<13); // selection = 1<<0|1<<1|1<<2|1<<5|1<<6|1<<7|1<<8|1<<9|1<<10|1<<11|1<<12; (DA takes quite long....)
AddTaskJetsDelta(kDeltaAODJetName.Data(),kHighPtFilterMask,kUseAODMC,selection);
}
if (!taskjets) ::Warning("AnalysisTrainPWG4Jets", "AliAnalysisTaskJets cannot run for this train conditions - EXCLUDED");
if(!iAODanalysis){
// taskjetSpectrum = AddTaskJetSpectrum2("jets","tracks32",32,iPhysicsSelection); // tmp hack to give it a different name
// taskjetSpectrum = AddTaskJetSpectrum2("jets","tracks64",64,iPhysicsSelection);
+ taskjetSpectrum = AddTaskJetSpectrum2("jetsAOD_FASTJET04","",kHighPtFilterMask,iPhysicsSelection, AliAnalysisHelperJetTasks::kIsPileUp|AliAnalysisHelperJetTasks::kPhysicsSelection);
+ taskjetSpectrum = AddTaskJetSpectrum2("jetsAOD_FASTJET04","",kHighPtFilterMask,iPhysicsSelection,AliAnalysisHelperJetTasks::kNone);
+ if(kIsMC){
+ taskjetSpectrum = AddTaskJetSpectrum2("jetsAOD_FASTJET04","jetsAODMC_FASTJET04",kHighPtFilterMask,iPhysicsSelection,AliAnalysisHelperJetTasks::kNone);
+ taskjetSpectrum = AddTaskJetSpectrum2("jetsAOD_FASTJET04","jetsAODMC2_FASTJET04",kHighPtFilterMask,iPhysicsSelection,AliAnalysisHelperJetTasks::kNone);
+ }
}
if (!taskjetSpectrum) ::Warning("AnalysisTrainPWG4Jets", "AliAnalysisTaskJetSpectrum2 cannot run for this train conditions - EXCLUDED");
taskjetSpectrum->SetDebugLevel(1);