X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=ANALYSIS%2FAliPhysicsSelection.cxx;h=db8662faf4d0c938eb7b0f92625baf8176f21388;hb=37d558fcaf481909a83d4d3089d35c0c663d1908;hp=ef9306edc982476522f0fe10d67a8d8c7c103a66;hpb=eeaab745d1ee54c96f3ff65986408e4a2786e675;p=u%2Fmrichter%2FAliRoot.git diff --git a/ANALYSIS/AliPhysicsSelection.cxx b/ANALYSIS/AliPhysicsSelection.cxx index ef9306edc98..db8662faf4d 100644 --- a/ANALYSIS/AliPhysicsSelection.cxx +++ b/ANALYSIS/AliPhysicsSelection.cxx @@ -141,7 +141,6 @@ AliPhysicsSelection::AliPhysicsSelection() : fSkipTriggerClassSelection(0), fUsingCustomClasses(0), fSkipV0(0), - fSkipZDCTime(0), fBIFactorA(-1), fBIFactorC(-1), fBIFactorAC(-1), @@ -506,9 +505,9 @@ UInt_t AliPhysicsSelection::IsCollisionCandidate(const AliESDEvent* aEsd) Bool_t v0BG = v0ABG || v0CBG; // fmd - Bool_t fmdA = triggerAnalysis->EvaluateTrigger(aEsd, (AliTriggerAnalysis::Trigger) (AliTriggerAnalysis::kOfflineFlag | AliTriggerAnalysis::kFMDA)); - Bool_t fmdC = triggerAnalysis->EvaluateTrigger(aEsd, (AliTriggerAnalysis::Trigger) (AliTriggerAnalysis::kOfflineFlag | AliTriggerAnalysis::kFMDC)); - Bool_t fmd = fmdA || fmdC; + // Bool_t fmdA = triggerAnalysis->EvaluateTrigger(aEsd, (AliTriggerAnalysis::Trigger) (AliTriggerAnalysis::kOfflineFlag | AliTriggerAnalysis::kFMDA)); + // Bool_t fmdC = triggerAnalysis->EvaluateTrigger(aEsd, (AliTriggerAnalysis::Trigger) (AliTriggerAnalysis::kOfflineFlag | AliTriggerAnalysis::kFMDC)); + // Bool_t fmd = fmdA || fmdC; // SSD //Int_t ssdClusters = triggerAnalysis->SSDClusters(aEsd); @@ -520,6 +519,8 @@ UInt_t AliPhysicsSelection::IsCollisionCandidate(const AliESDEvent* aEsd) Bool_t zdcC = triggerAnalysis->EvaluateTrigger(aEsd, (AliTriggerAnalysis::Trigger) (AliTriggerAnalysis::kOfflineFlag | AliTriggerAnalysis::kZDCTDCC)); Bool_t zdcTime = triggerAnalysis->EvaluateTrigger(aEsd, (AliTriggerAnalysis::Trigger) (AliTriggerAnalysis::kOfflineFlag | AliTriggerAnalysis::kZDCTime)); + Bool_t laserCut = triggerAnalysis->EvaluateTrigger(aEsd, (AliTriggerAnalysis::Trigger) (AliTriggerAnalysis::kOfflineFlag | AliTriggerAnalysis::kTPCLaserWarmUp)); + // Some "macros" Bool_t mb1 = (fastOROffline > 0 || v0A || v0C) && (!v0BG); Bool_t mb1prime = (fastOROffline > 1 || (fastOROffline > 0 && (v0A || v0C)) || (v0A && v0C) ) && (!v0BG); @@ -591,8 +592,8 @@ UInt_t AliPhysicsSelection::IsCollisionCandidate(const AliESDEvent* aEsd) if (mb1prime) fHistStatistics[iHistStat]->Fill(kStatMB1Prime, i); - if (fmd) - fHistStatistics[iHistStat]->Fill(kStatFMD, i); + if (laserCut) + fHistStatistics[iHistStat]->Fill(kStatLaserCut, i); //if(ntrig >= 2 && !v0BG) // fHistStatistics[iHistStat]->Fill(kStatAny2Hits, i); @@ -641,6 +642,10 @@ UInt_t AliPhysicsSelection::IsCollisionCandidate(const AliESDEvent* aEsd) AliDebug(AliLog::kDebug, Form("Accepted event for histograms with trigger logic %d", triggerLogic)); fHistStatistics[iHistStat]->Fill(kStatAccepted, i); + + if (aEsd->IsPileupFromSPD()) + fHistStatistics[iHistStat]->Fill(kStatAcceptedPileUp, i); + // if(iHistStat == kStatIdxAll) fHistBunchCrossing->Fill(aEsd->GetBunchCrossNumber(), i); // Fill only for all (avoid double counting) if((i < fCollTrigClasses.GetEntries() || fSkipTriggerClassSelection) && (iHistStat==kStatIdxAll)) accept |= singleTriggerResult; // only set for "all" (should not really matter) @@ -871,7 +876,7 @@ Bool_t AliPhysicsSelection::Initialize(Int_t runNumber) /// Open OADB file and fetch OADB objects TString oadbfilename = AliPhysicsSelection::GetOADBFileName(); - TFile * foadb = new TFile (oadbfilename); + TFile * foadb = TFile::Open(oadbfilename); if(!foadb->IsOpen()) AliFatal(Form("Cannot open OADB file %s", oadbfilename.Data())); @@ -1091,7 +1096,7 @@ TH2F * AliPhysicsSelection::BookHistStatistics(const char * tag) { #else Int_t extrarows = fComputeBG != 0 ? 6 : 0; #endif - TH2F * h = new TH2F(Form("fHistStatistics%s",tag), Form("fHistStatistics - %s ;;",tag), kStatAccepted, 0.5, kStatAccepted+0.5, count+extrarows, -0.5, -0.5 + count+extrarows); + TH2F * h = new TH2F(Form("fHistStatistics%s",tag), Form("fHistStatistics - %s ;;",tag), kStatAcceptedPileUp, 0.5, kStatAcceptedPileUp+0.5, count+extrarows, -0.5, -0.5 + count+extrarows); h->GetXaxis()->SetBinLabel(kStatTriggerClass, "Trigger class"); h->GetXaxis()->SetBinLabel(kStatHWTrig, "Hardware trigger"); @@ -1100,7 +1105,7 @@ TH2F * AliPhysicsSelection::BookHistStatistics(const char * tag) { h->GetXaxis()->SetBinLabel(kStatFO2L1, "FO (L1) >= 2"); h->GetXaxis()->SetBinLabel(kStatV0A, "V0A"); h->GetXaxis()->SetBinLabel(kStatV0C, "V0C"); - h->GetXaxis()->SetBinLabel(kStatFMD, "FMD"); + h->GetXaxis()->SetBinLabel(kStatLaserCut, "TPC Laser Wup Cut"); h->GetXaxis()->SetBinLabel(kStatV0ABG, "V0A BG"); h->GetXaxis()->SetBinLabel(kStatV0CBG, "V0C BG"); h->GetXaxis()->SetBinLabel(kStatZDCA, "ZDCA"); @@ -1115,6 +1120,8 @@ TH2F * AliPhysicsSelection::BookHistStatistics(const char * tag) { //h->GetXaxis()->SetBinLabel(kStatAny2Hits, "2 Hits & !V0 BG"); h->GetXaxis()->SetBinLabel(kStatBG, "Background identification"); h->GetXaxis()->SetBinLabel(kStatAccepted, "Accepted"); + h->GetXaxis()->SetBinLabel(kStatAcceptedPileUp, "Pile up (in accepted)"); + Int_t n = 1; for (Int_t i=0; i < fCollTrigClasses.GetEntries(); i++) @@ -1173,19 +1180,83 @@ void AliPhysicsSelection::Print(const Option_t *option) const Printf("\nTotal available events:"); triggerAnalysis->PrintTriggerClasses(); + // Check if all triggers with counts are known to the physics selection. If not, print a WARNING (only for MC) + if(!fMC) { + TMap * triggers = triggerAnalysis->GetTriggerClasses(); + TIterator* iter = triggers->MakeIterator(); + TObjString* obj = 0; + static TString alreadyFoundTriggers; + while ((obj = dynamic_cast (iter->Next()))) + { + TString strTrigger = obj->GetString(); + TParameter* param = static_cast*> (triggers->GetValue(obj)); + Long_t counts = (Long_t)param->GetVal(); + TObjArray* tokens = obj->String().Tokenize(" "); + for (Int_t i=0; iGetEntries(); i++) + { + TString singleTrigStr = ((TObjString*) tokens->At(i))->String(); + singleTrigStr.Strip(TString::kBoth, ' ' ); + const char * singleTrig = singleTrigStr.Data(); + // Printf("%s", singleTrig); + TString singleTrigStrFull; + Bool_t found = kFALSE; + Int_t nCollTriggers = fCollTrigClasses.GetEntries(); + for(Int_t iCollTriggers = 0; iCollTriggers < nCollTriggers; iCollTriggers++){ + singleTrigStrFull = ((TObjString*)fCollTrigClasses.At(iCollTriggers))->String(); + if(singleTrigStrFull.Contains(singleTrigStr)) { + found = kTRUE; + break; + } + singleTrigStrFull = singleTrigStr; + } + Int_t nBGTriggers = fBGTrigClasses.GetEntries(); + for(Int_t iBGTriggers = 0; iBGTriggers < nBGTriggers; iBGTriggers++){ + singleTrigStrFull = ((TObjString*)fBGTrigClasses.At(iBGTriggers))->String(); + if(singleTrigStrFull.Contains(singleTrigStr)) { + found = kTRUE; + break; + } + singleTrigStrFull = singleTrigStr; + } + + TString blacklist = "CEMC7WU-B-NOPF-ALL, CEMC7WU-AC-NOPF-ALL CEMC7WU-E-NOPF-ALL"; // We know we dont support those, so we print no warning + if(counts>0 && !found && !blacklist.Contains(singleTrig) && !singleTrigStr.Contains("WU") && !alreadyFoundTriggers.Contains(singleTrig)) { + Printf("WARNING: Found unknown trigger [%s] with %ld counts in the ESD!", singleTrig, counts); + alreadyFoundTriggers += singleTrig; // Avoid printing warning twice for the same trigger + } + } + delete tokens; + } + delete iter; + } } if (fHistStatistics[kStatIdxAll]) { + static TString alreadyFoundTriggers; // avoids printing twice the same warning + for (Int_t i=0; iString().Data()); msg += Form("\nSelection statistics for collision trigger %s:\n", ((TObjString*) fCollTrigClasses.At(i))->String().Data()); + Float_t allEvents = fHistStatistics[kStatIdxAll]->GetBinContent(1, i+1); + Float_t triggeredEvents = fHistStatistics[kStatIdxAll]->GetBinContent(fHistStatistics[kStatIdxAll]->GetXaxis()->FindBin("Accepted"), i+1); + Printf("Total events with correct trigger class: %d", (Int_t) fHistStatistics[kStatIdxAll]->GetBinContent(1, i+1)); msg += Form("Total events with correct trigger class: %d\n", (Int_t) fHistStatistics[kStatIdxAll]->GetBinContent(1, i+1)); Printf("Selected collision candidates: %d", (Int_t) fHistStatistics[kStatIdxAll]->GetBinContent(fHistStatistics[kStatIdxAll]->GetXaxis()->FindBin("Accepted"), i+1)); msg += Form("Selected collision candidates: %d\n", (Int_t) fHistStatistics[kStatIdxAll]->GetBinContent(fHistStatistics[kStatIdxAll]->GetXaxis()->FindBin("Accepted"), i+1)); + + // If the fraction of accepted events is too low, print a warning. + Float_t eff = allEvents > 0 ? triggeredEvents/allEvents : 0; + if(allEvents > 0 && (eff < 0.5) && // FIXME: make threshold programmable in OADB + !alreadyFoundTriggers.Contains(((TObjString*) fCollTrigClasses.At(i))->String().Data())) { + Printf("WARNING: Trigger class %s has a very low efficiency (%d/%d=%.2f)",((TObjString*) fCollTrigClasses.At(i))->String().Data(), (Int_t) triggeredEvents, (Int_t) allEvents, eff); + alreadyFoundTriggers += ((TObjString*) fCollTrigClasses.At(i))->String().Data(); + Printf("%s", alreadyFoundTriggers.Data()); + } + } } @@ -1290,22 +1361,23 @@ Long64_t AliPhysicsSelection::Merge(TCollection* list) // With the same strategy update fBGStatOffset Int_t bgstatoffset = entry->GetBGStatOffset(); - // Nothing to merge with since run number was not initialized. - if (bgstatoffset < 0) continue; - if (fBGStatOffset < 0) - { - fBGStatOffset = bgstatoffset; + // Nothing to merge with since BG was not initialized. + if (!(bgstatoffset < 0)){ + if (fBGStatOffset < 0) + { + fBGStatOffset = bgstatoffset; + } } if (fBGStatOffset != bgstatoffset) - AliWarning(Form("Current run %d not matching the one to be merged with %d", fBGStatOffset, bgstatoffset)); + AliWarning(Form("Current run %d not matching the one to be merged with %d", fBGStatOffset, bgstatoffset)); // Merge the OADBs (Take just the first instance you find - if (!fPSOADB) { + if (!fPSOADB && entry->GetOADBPhysicsSelection()) { fPSOADB = (AliOADBPhysicsSelection*) entry->GetOADBPhysicsSelection()->Clone(); } - if (!fFillOADB){ + if (!fFillOADB && entry->GetOADBFillingScheme()){ fFillOADB = (AliOADBFillingScheme*) entry->GetOADBFillingScheme()->Clone(); }