return d;
};
-Int_t triggerInfo(Int_t run, TString refClassName, TString ocdbStorage, Double_t* par){
+TObjArray GetClasses(Int_t run, TString ocdbStorage, ULong64_t* L0B, ULong64_t* L0A, ULong64_t* L1B, ULong64_t* L1A, ULong64_t* L2B, ULong64_t* L2A){
AliCDBManager* man = AliCDBManager::Instance();
man->SetDefaultStorage(ocdbStorage.Data());
man->SetRun(run);
- AliLHCData* lhc = (AliLHCData*) man->Get("GRP/GRP/LHCData")->GetObject();
- par[0] = lhc->GetFillNumber();
+ // Get scalers
+ AliTriggerConfiguration* cfg = (AliTriggerConfiguration*) man->Get("GRP/CTP/Config")->GetObject();
+ if (!cfg) { printf("No GRP/CTP/Config object for run %i\n",run); return TObjArray(); }
+
+ TObjArray classes = cfg->GetClasses();
+ AliTriggerRunScalers* scalers = (AliTriggerRunScalers*) man->Get("GRP/CTP/Scalers")->GetObject();
+ if (!scalers) { printf("No GRP/CTP/Scalers object for run %i\n",run); return TObjArray(); }
+ Int_t nEntries = scalers->GetScalersRecords()->GetEntriesFast();
+
+ for (Int_t r=0;r<nEntries-1;r++){
+ // Get SOR and EOR scaler records
+ AliTriggerScalersRecord* record1 = scalers->GetScalersRecord(r);
+ AliTriggerScalersRecord* record2 = scalers->GetScalersRecord(r+1);
+ if (!record1) { printf("Null pointer to scalers record\n"); return TObjArray(); }
+ if (!record2) { printf("Null pointer to scalers record\n"); return TObjArray(); }
+ for (Int_t i=0;i<classes.GetEntriesFast();i++){
+ // Extract SOR and EOR trigger counts
+ Int_t classId = cfg->GetClassIndexFromName(classes.At(i)->GetName());
+ const AliTriggerScalers* scaler1 = record1->GetTriggerScalersForClass(classId);
+ const AliTriggerScalers* scaler2 = record2->GetTriggerScalersForClass(classId);
+ if (!scaler1) { printf("Null pointer to scalers for class\n"); return TObjArray(); }
+ if (!scaler2) { printf("Null pointer to scalers for class\n"); return TObjArray(); }
+ L0B[i] += dif(scaler2->GetLOCB(),scaler1->GetLOCB());
+ L0A[i] += dif(scaler2->GetLOCA(),scaler1->GetLOCA());
+ L1B[i] += dif(scaler2->GetL1CB(),scaler1->GetL1CB());
+ L1A[i] += dif(scaler2->GetL1CA(),scaler1->GetL1CA());
+ L2B[i] += dif(scaler2->GetL2CB(),scaler1->GetL2CB());
+ L2A[i] += dif(scaler2->GetL2CA(),scaler1->GetL2CA());
+ }
+ }
+ return classes;
+}
+
+
+Int_t triggerInfo(Int_t run, TString refClassName, TString ocdbStorage, TString &activeDetectors, Double_t* par){
+ AliCDBManager* man = AliCDBManager::Instance();
+ man->SetDefaultStorage(ocdbStorage.Data());
+ man->SetRun(run);
+ if (run!=189694) { // No GRP/GRP/LHCData for this run
+ AliLHCData* lhc = (AliLHCData*) man->Get("GRP/GRP/LHCData")->GetObject();
+ if (!lhc) { printf("No GRP/GRP/LHCData object for run %i\n",run); return 1; }
+ par[0] = lhc->GetFillNumber();
+ }
AliTriggerConfiguration* cfg = (AliTriggerConfiguration*) man->Get("GRP/CTP/Config")->GetObject();
+ if (!cfg) { printf("No GRP/CTP/Config object for run %i\n",run); return 1; }
+ activeDetectors = cfg->GetActiveDetectors().Data();
// Get scalers
AliTriggerRunScalers* scalers = (AliTriggerRunScalers*) man->Get("GRP/CTP/Scalers")->GetObject();
+ if (!scalers) { printf("No GRP/CTP/Scalers object for run %i\n",run); return 1; }
Int_t nEntries = scalers->GetScalersRecords()->GetEntriesFast();
-
- // Get SOR and EOR scaler records
- AliTriggerScalersRecord* record1 = scalers->GetScalersRecord(0);
- AliTriggerScalersRecord* record2 = scalers->GetScalersRecord(nEntries-1);
- if (!record1) { printf("Null pointer to start scalers record\n"); return 1; }
- if (!record2) { printf("Null pointer to stop scalers record\n"); return 1; }
- // Extract SOR and EOR times
- const AliTimeStamp* stemp1 = record1->GetTimeStamp();
- const AliTimeStamp* stemp2 = record2->GetTimeStamp();
- if (!stemp1) { printf("Null pointer to start timestemp\n"); return 1; }
- if (!stemp2) { printf("Null pointer to stop timestemp\n"); return 1; }
- Double_t duration = stemp2->GetSeconds()-stemp1->GetSeconds();
- par[1] = duration;
- if (TMath::Abs(duration)<1) return 2;
+ Double_t run_duration = 0;
+ ULong64_t l0b = 0;
+ ULong64_t l0bempty = 0;
+ Int_t classId = cfg->GetClassIndexFromName(refClassName);
+ Int_t emptyclassid = cfg->GetClassIndexFromName("CBEAMB-ABCE-NOPF-ALL");
+ for (Int_t r=0;r<nEntries-1;r++){
+ // Get SOR and EOR scaler records
+ AliTriggerScalersRecord* record1 = scalers->GetScalersRecord(r);
+ AliTriggerScalersRecord* record2 = scalers->GetScalersRecord(r+1);
+ if (!record1) { printf("Null pointer to scalers record\n"); return 2; }
+ if (!record2) { printf("Null pointer to scalers record\n"); return 2; }
+ const AliTimeStamp* stamp1 = record1->GetTimeStamp();
+ const AliTimeStamp* stamp2 = record2->GetTimeStamp();
+ const AliTriggerScalers* scaler1 = record1->GetTriggerScalersForClass(classId);
+ const AliTriggerScalers* scaler2 = record2->GetTriggerScalersForClass(classId);
+ if (!stamp1 ) { printf("Null pointer to start timestamp\n"); return 2; }
+ if (!stamp2 ) { printf("Null pointer to stop timestamp\n"); return 2; }
+ if (!scaler1) { printf("Null pointer to scalers for class %s\n",refClassName.Data()); return 2; }
+ if (!scaler2) { printf("Null pointer to scalers for class %s\n",refClassName.Data()); return 2; }
+// run_duration += dif(stamp2->GetSeconds(),stamp1->GetSeconds());
+ l0b += dif(scaler2->GetLOCB() ,scaler1->GetLOCB());
+ if (emptyclassid<0) continue;
+ const AliTriggerScalers* emptyScaler1 = record1->GetTriggerScalersForClass(emptyclassid);
+ const AliTriggerScalers* emptyScaler2 = record2->GetTriggerScalersForClass(emptyclassid);
+ if (!emptyScaler1) { printf("Null pointer to scalers for empty class\n"); return 2; }
+ if (!emptyScaler2) { printf("Null pointer to scalers for empty class\n"); return 2; }
+ l0bempty+=dif(emptyScaler2->GetLOCB(),emptyScaler1->GetLOCB());
+ }
+ UInt_t t1 = scalers->GetScalersRecord(0 )->GetTimeStamp()->GetSeconds();
+ UInt_t t2 = scalers->GetScalersRecord(nEntries-1)->GetTimeStamp()->GetSeconds();
+ run_duration = dif(t2,t1);
+
+ for (Int_t r=0;r<nEntries-1;r++){
+ // Get SOR and EOR scaler records
+ AliTriggerScalersRecord* record1 = scalers->GetScalersRecord(r);
+ const AliTimeStamp* stamp1 = record1->GetTimeStamp();
+ Int_t period = stamp1->GetPeriod();
+ Int_t orbit = stamp1->GetOrbit();
+ printf("%5i %5i %5i %ll\n",r,period,orbit);
+ }
- // Extract SOR and EOR trigger counts
- Int_t classid = cfg->GetClassIndexFromName(refClassName);
- const AliTriggerScalers* scaler1 = record1->GetTriggerScalersForClass(classid);
- const AliTriggerScalers* scaler2 = record2->GetTriggerScalersForClass(classid);
- if (!scaler1) { printf("Null pointer to start scalers for reference class\n"); return 1; }
- if (!scaler2) { printf("Null pointer to stop scalers for reference class\n"); return 1; }
- UInt_t l0b = dif(scaler2->GetLOCB(),scaler1->GetLOCB());
+
+ par[1] = run_duration;
par[2] = l0b;
+ if (TMath::Abs(run_duration)<1) return 3;
// Get number of colliding bunches per orbit
- Double_t orbitRate = 11245.; // Hz
Double_t nBCsPerOrbit = -1;
+ Double_t orbitRate = 11245.;
if (refClassName.Contains("1B-ABCE-")){
nBCsPerOrbit = lhc->GetNInteractingBunchesMeasured();
Printf("Number of BCs from LHC data=%i",nBCsPerOrbit);
- if (nBCsPerOrbit<0) {
- Int_t emptyclassid = cfg->GetClassIndexFromName("CBEAMB-ABCE-NOPF-ALL");
- if (emptyclassid<0) return 3;
- const AliTriggerScalers* emptyScaler1 = record1->GetTriggerScalersForClass(emptyclassid);
- const AliTriggerScalers* emptyScaler2 = record2->GetTriggerScalersForClass(emptyclassid);
- if (!scaler1) { printf("Null pointer to start scalers for reference class\n"); return 1; }
- if (!scaler2) { printf("Null pointer to stop scalers for reference class\n"); return 1; }
- UInt_t l0bempty = dif(emptyScaler2->GetLOCB(),emptyScaler1->GetLOCB());
- if (l0bempty==0) return 4;
- nBCsPerOrbit = l0bempty/orbitRate/duration;
- }
- }
- else {
+ if (nBCsPerOrbit<0 && l0bempty>0) nBCsPerOrbit = Double_t(l0bempty)/orbitRate/run_duration;
+ } else {
// Extract number of bunches per orbit
- AliTriggerClass* cl = cfg->GetTriggerClass(classid);
+ AliTriggerClass* cl = cfg->GetTriggerClass(classId);
AliTriggerBCMask* mask = cl->GetBCMask();
nBCsPerOrbit = mask->GetNUnmaskedBCs();
}
par[3] = nBCsPerOrbit;
- Double_t totalBCs = duration*orbitRate*nBCsPerOrbit;
- par[4] = -TMath::Log(1-l0b/totalBCs); // mu
+ Double_t totalBCs = orbitRate*run_duration*nBCsPerOrbit;
+ if (totalBCs<1 || l0b<1) return 4;
+ par[4] = -TMath::Log(1-Double_t(l0b)/totalBCs); // mu
return 0;
}