]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGPP/EVS/triggerInfo.C
Merge branch 'master' into TPCdev
[u/mrichter/AliRoot.git] / PWGPP / EVS / triggerInfo.C
1 #ifndef __CINT__
2 #include "TMath.h"
3 #include "AliCDBManager.h"
4 #include "AliTriggerScalers.h"
5 #include "AliTriggerRunScalers.h"
6 #include "AliTimeStamp.h"
7 #include "AliTriggerScalersRecord.h"
8 #include "AliTriggerConfiguration.h"
9 #include "AliLHCData.h"
10 #include "AliTriggerClass.h"
11 #include "AliTriggerBCMask.h"
12 #include "AliCDBPath.h"
13 #include "AliCDBEntry.h"
14 #endif
15
16 UInt_t dif(UInt_t stop, UInt_t start){
17   UInt_t d;
18   if(stop >= start) d=stop-start;
19   else d = stop+(0xffffffff-start)+1;
20   return d;
21 };
22
23 Int_t triggerInfo(Int_t run, TString refClassName, TString ocdbStorage, Double_t* par){
24   AliCDBManager* man = AliCDBManager::Instance();
25   man->SetDefaultStorage(ocdbStorage.Data());
26   man->SetRun(run);
27   AliLHCData* lhc = (AliLHCData*) man->Get("GRP/GRP/LHCData")->GetObject();
28   par[0] = lhc->GetFillNumber();
29   
30   AliTriggerConfiguration* cfg = (AliTriggerConfiguration*) man->Get("GRP/CTP/Config")->GetObject();
31
32   // Get scalers 
33   AliTriggerRunScalers* scalers = (AliTriggerRunScalers*) man->Get("GRP/CTP/Scalers")->GetObject();
34   Int_t nEntries = scalers->GetScalersRecords()->GetEntriesFast();
35   
36   // Get SOR and EOR scaler records
37   AliTriggerScalersRecord* record1 = scalers->GetScalersRecord(0);
38   AliTriggerScalersRecord* record2 = scalers->GetScalersRecord(nEntries-1);
39   if (!record1) { printf("Null pointer to start scalers record\n"); return 1; }
40   if (!record2) { printf("Null pointer to  stop scalers record\n"); return 1; }
41
42   // Extract SOR and EOR times
43   const AliTimeStamp* stemp1 = record1->GetTimeStamp();
44   const AliTimeStamp* stemp2 = record2->GetTimeStamp();
45   if (!stemp1) { printf("Null pointer to start timestemp\n"); return 1; }
46   if (!stemp2) { printf("Null pointer to stop timestemp\n");  return 1; }
47   Double_t duration = stemp2->GetSeconds()-stemp1->GetSeconds();
48   par[1] = duration;
49   if (TMath::Abs(duration)<1) return 2;
50
51   // Extract SOR and EOR trigger counts
52   Int_t classid = cfg->GetClassIndexFromName(refClassName);
53   const AliTriggerScalers* scaler1 = record1->GetTriggerScalersForClass(classid);
54   const AliTriggerScalers* scaler2 = record2->GetTriggerScalersForClass(classid);
55   if (!scaler1) { printf("Null pointer to start scalers for reference class\n"); return 1; }
56   if (!scaler2) { printf("Null pointer to stop scalers for reference class\n");  return 1; }
57   UInt_t l0b = dif(scaler2->GetLOCB(),scaler1->GetLOCB());
58   par[2] = l0b;
59
60   // Get number of colliding bunches per orbit
61   Double_t orbitRate = 11245.; // Hz
62   Double_t nBCsPerOrbit = -1;
63   if (refClassName.Contains("1B-ABCE-")){
64     nBCsPerOrbit = lhc->GetNInteractingBunchesMeasured();
65     Printf("Number of BCs from LHC data=%i",nBCsPerOrbit);
66     if (nBCsPerOrbit<0) {
67       Int_t emptyclassid = cfg->GetClassIndexFromName("CBEAMB-ABCE-NOPF-ALL");
68       if (emptyclassid<0) return 3;
69       const AliTriggerScalers* emptyScaler1 = record1->GetTriggerScalersForClass(emptyclassid);
70       const AliTriggerScalers* emptyScaler2 = record2->GetTriggerScalersForClass(emptyclassid);
71       if (!scaler1) { printf("Null pointer to start scalers for reference class\n"); return 1; }
72       if (!scaler2) { printf("Null pointer to stop scalers for reference class\n");  return 1; }
73       UInt_t l0bempty = dif(emptyScaler2->GetLOCB(),emptyScaler1->GetLOCB());
74       if (l0bempty==0) return 4;
75       nBCsPerOrbit = l0bempty/orbitRate/duration;
76     }
77   }
78   else {
79     // Extract number of bunches per orbit
80     AliTriggerClass* cl = cfg->GetTriggerClass(classid);
81     AliTriggerBCMask* mask = cl->GetBCMask();
82     nBCsPerOrbit = mask->GetNUnmaskedBCs();
83   }
84   par[3] = nBCsPerOrbit;
85   
86   Double_t totalBCs = duration*orbitRate*nBCsPerOrbit;
87   par[4] = -TMath::Log(1-l0b/totalBCs); // mu
88   return 0;
89 }