TString GetTriggerClass(AliRawReaderChain* rawChain) { ULong64_t triggerMask = rawChain->GetClassMask(); // Convert a trigger mask to a trigger class AliCentralTrigger aCTP; TString configstr(""); TString trclasses; if (!aCTP.LoadConfiguration(configstr)) { // Load CTP config from OCDB AliInfoGeneral("","No trigger configuration found in OCDB! The trigger configuration information will not be used!"); return trclasses; } aCTP.SetClassMask(triggerMask); AliTriggerConfiguration *config = aCTP.GetConfiguration(); const TObjArray& classesArray = config->GetClasses(); Int_t nclasses = classesArray.GetEntriesFast(); for( Int_t iclass=0; iclass < nclasses; iclass++ ) { AliTriggerClass* trclass = (AliTriggerClass*)classesArray.At(iclass); if (trclass && trclass->GetMask()>0) { Int_t trindex = TMath::Nint(TMath::Log2(trclass->GetMask())); rawChain->LoadTriggerClass(trclass->GetName(),trindex); if (triggerMask & (1ull << trindex)) { trclasses += " "; trclasses += trclass->GetName(); trclasses += " "; } } } return trclasses; }
const AliEventInfo* GetEventInfo() { // Fill the event info object AliCentralTrigger *aCTP = NULL; if (AliEveEventManager::AssertRawReader()) { fEventInfo.SetEventType(AliEveEventManager::AssertRawReader()->GetType()); ULong64_t mask = AliEveEventManager::AssertRawReader()->GetClassMask(); fEventInfo.SetTriggerMask(mask); UInt_t clmask = AliEveEventManager::AssertRawReader()->GetDetectorPattern()[0]; fEventInfo.SetTriggerCluster(AliDAQ::ListOfTriggeredDetectors(clmask)); aCTP = new AliCentralTrigger(); TString configstr(""); if (!aCTP->LoadConfiguration(configstr)) { // Load CTP config from OCDB printf("No trigger configuration found in OCDB! The trigger configuration information will not be used!"); // delete aCTP; return 0; } aCTP->SetClassMask(mask); aCTP->SetClusterMask(clmask); if (AliEveEventManager::AssertRunLoader()) { AliCentralTrigger* rlCTP = AliEveEventManager::AssertRunLoader()->GetTrigger(); if (rlCTP) { rlCTP->SetClassMask(mask); rlCTP->SetClusterMask(clmask); } } } else { fEventInfo.SetEventType(AliRawEventHeaderBase::kPhysicsEvent); if (AliEveEventManager::AssertRunLoader() && (!AliEveEventManager::AssertRunLoader()->LoadTrigger())) { aCTP = AliEveEventManager::AssertRunLoader()->GetTrigger(); fEventInfo.SetTriggerMask(aCTP->GetClassMask()); // get inputs from actp - just get AliESDEvent *esdEvent = AliEveEventManager::Instance()->GetESD(); if(esdEvent) { AliESDHeader* esdheader = esdEvent->GetHeader(); esdheader->SetL0TriggerInputs(aCTP->GetL0TriggerInputs()); esdheader->SetL1TriggerInputs(aCTP->GetL1TriggerInputs()); esdheader->SetL2TriggerInputs(aCTP->GetL2TriggerInputs()); fEventInfo.SetTriggerCluster(AliDAQ::ListOfTriggeredDetectors(aCTP->GetClusterMask())); } else { cout<<"tpc_raw -- no ESD event"<<endl; } } else { printf("No trigger can be loaded! The trigger information will not be used!"); return 0; } } AliTriggerConfiguration *config = aCTP->GetConfiguration(); if (!config) { printf("No trigger configuration has been found! The trigger configuration information will not be used!"); // if (AliEveEventManager::AssertRawReader()) delete aCTP; return 0; } TString declTriggerClasses; // Load trigger aliases and declare the trigger classes included in aliases AliCDBEntry * entry = AliCDBManager::Instance()->Get("GRP/CTP/Aliases"); if (entry) { THashList * lst = dynamic_cast<THashList*>(entry->GetObject()); if (lst) { lst->Sort(kFALSE); // to avoid problems with substrings if (AliEveEventManager::AssertRawReader()) AliEveEventManager::AssertRawReader()->LoadTriggerAlias(lst); // Now declare all the triggers present in the aliases TIter iter(lst); TNamed *nmd = 0; while((nmd = dynamic_cast<TNamed*>(iter.Next()))){ declTriggerClasses += " "; declTriggerClasses += nmd->GetName(); } } else { printf("Cannot cast the object with trigger aliases to THashList!"); } } else { printf("No OCDB entry for the trigger aliases!"); } // Load trigger classes for this run UChar_t clustmask = 0; TString trclasses; ULong64_t trmask = fEventInfo.GetTriggerMask(); const TObjArray& classesArray = config->GetClasses(); Int_t nclasses = classesArray.GetEntriesFast(); for( Int_t iclass=0; iclass < nclasses; iclass++ ) { AliTriggerClass* trclass = (AliTriggerClass*)classesArray.At(iclass); if (trclass && trclass->GetMask()>0) { Int_t trindex = TMath::Nint(TMath::Log2(trclass->GetMask())); if (AliEveEventManager::AssertESD()) AliEveEventManager::AssertESD()->SetTriggerClass(trclass->GetName(),trindex); if (AliEveEventManager::AssertRawReader()) AliEveEventManager::AssertRawReader()->LoadTriggerClass(trclass->GetName(),trindex); if (trmask & (1ull << trindex)) { trclasses += " "; trclasses += trclass->GetName(); trclasses += " "; clustmask |= trclass->GetCluster()->GetClusterMask(); } } } fEventInfo.SetTriggerClasses(trclasses); if (!aCTP->CheckTriggeredDetectors()) { // if (AliEveEventManager::AssertRawReader()) delete aCTP; cout<<"Check trigger detectors failed"<<endl; return 0; } // if (AliEveEventManager::AssertRawReader()) delete aCTP; // everything went ok, return pointer return (&fEventInfo); }
void TriggerInputsForMuonEventCuts ( TString runListFilename, TString selectedInputs="", TString defaultStorage = "raw://" ) { AliCDBManager::Instance()->SetDefaultStorage(defaultStorage.Data()); TObjArray inputsList; inputsList.SetOwner(); TObjArray* selectedInputsList = selectedInputs.Tokenize(","); // Read input run list ifstream inFile(runListFilename.Data()); TString srun = ""; if ( inFile.is_open() ) { while ( ! inFile.eof() ) { srun.ReadLine(inFile,kFALSE); if ( ! srun.IsDigit() ) continue; // For each run, read trigger inputs from OCDB Int_t runNumber = srun.Atoi(); AliCDBManager::Instance()->SetRun(runNumber); // Get trigger class configuration AliCDBEntry* entry = AliCDBManager::Instance()->Get("GRP/CTP/Config"); if ( ! entry ) continue; THashList* runInputs = new THashList(); runInputs->SetOwner(); runInputs->SetUniqueID((UInt_t)runNumber); AliTriggerConfiguration* trigConf = (AliTriggerConfiguration*)entry->GetObject(); const TObjArray& trigInputsArray = trigConf->GetInputs(); AliTriggerInput* trigInput = 0x0; TIter next(&trigInputsArray); while ( ( trigInput = static_cast<AliTriggerInput*>(next()) ) ) { if ( selectedInputsList->GetEntriesFast() > 0 && ! selectedInputsList->FindObject(trigInput->GetName()) ) continue; Int_t inputId = (Int_t)TMath::Log2(trigInput->GetMask()); TObjString* currInput = new TObjString(trigInput->GetName()); currInput->SetUniqueID(inputId); runInputs->Add(currInput); } inputsList.Add(runInputs); } inFile.close(); } delete selectedInputsList; // Loop on the trigger inputs // and group runs with an equal list of inputs Int_t nentries = inputsList.GetEntries(); TArrayI checkMask(nentries); checkMask.Reset(1); for ( Int_t irun=0; irun<nentries; irun++ ) { if ( checkMask[irun] == 0 ) continue; THashList* currList = static_cast<THashList*>(inputsList.At(irun)); TString runRange = Form("Run range: %u", currList->GetUniqueID()); for ( Int_t jrun=irun+1; jrun<nentries; jrun++ ) { if ( checkMask[jrun] == 0 ) continue; THashList* checkList = static_cast<THashList*>(inputsList.At(jrun)); Bool_t isDifferent = kFALSE; for ( Int_t itrig=0; itrig<currList->GetEntries(); itrig++ ) { TObjString* currInput = static_cast<TObjString*>(currList->At(itrig)); TObject* checkInput = checkList->FindObject(currInput->GetName()); if ( ! checkInput || checkInput->GetUniqueID() != currInput->GetUniqueID() ) { isDifferent = kTRUE; break; } } // loop on trigger inputs if ( isDifferent ) continue; checkMask[jrun] = 0; runRange += Form(",%u", checkList->GetUniqueID()); } // loop on runs TString outString = "\nSetTrigInputsMap(\""; for ( Int_t itrig=0; itrig<currList->GetEntries(); itrig++ ) { TObjString* currInput = static_cast<TObjString*>(currList->At(itrig)); outString += Form("%s:%u,",currInput->GetString().Data(), currInput->GetUniqueID()); } outString.Append("\");\n"); outString.ReplaceAll(",\"","\""); outString += runRange; printf("%s\n", outString.Data()); } // loop on runs }