]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGUD/macros/UPC/mu.C
Merge branch 'TPCdev' of https://git.cern.ch/reps/AliRoot into TPCdev
[u/mrichter/AliRoot.git] / PWGUD / macros / UPC / mu.C
1 // Macro to calculate pileup factor
2 // evgeny.kryshen@cern.ch
3 //
4 //Two cases:
5 //1) Reference trigger based on coincidence with beam pick-up counters to trigger beam-beam colliding bunches. 
6 //   Run 120072 is an example. In this case one can get total number of colliding bunches from L0b scalers for 
7 //   "empty" trigger corresponding to coincidence of A and C beam pick-up counters (CBEAMB-ABCE-NOPF-ALL).
8 //
9 //2) Reference trigger based on BC masks to constrain beam-beam colliding bunches (-B- in the class name). 
10 //   In this case total number of bunches can be computed as (run duration)*(orbit rate)*(number of B-like BCs per orbit).
11 //   One can switch to this option setting emptyClassName=NULL. 
12
13 UInt_t dif(UInt_t stop, UInt_t start);
14
15
16 Double_t mu(Int_t run=120072, char* className = "CINT1B-ABCE-NOPF-ALL", char* emptyClassName = "CBEAMB-ABCE-NOPF-ALL"){
17 //void mu(Int_t run=196310, char* className = "CINT7-B-NOPF-ALLNOTRD", char* emptyClassName = NULL){
18   if (!TGrid::Connect("alien://")) return -1.;
19
20   AliCDBManager* man = AliCDBManager::Instance();
21   man->SetDefaultStorage("raw://");
22   man->SetRun(run);
23   AliTriggerConfiguration* cfg = (AliTriggerConfiguration*) man->Get("GRP/CTP/Config")->GetObject();
24
25   // Get scalers
26   AliTriggerRunScalers* scalers = (AliTriggerRunScalers*) man->Get("GRP/CTP/Scalers")->GetObject();
27   Int_t nEntries = scalers->GetScalersRecords()->GetEntries();
28   
29   // Get SOR and EOR scaler records
30   AliTriggerScalersRecord* record1 = scalers->GetScalersRecord(0);
31   AliTriggerScalersRecord* record2 = scalers->GetScalersRecord(nEntries-1);
32   
33   // Extract SOR and EOR trigger counts
34   Int_t classid      = cfg->GetClassIndexFromName(className);
35   AliTriggerScalers* scaler1 = record1->GetTriggerScalersForClass(classid);
36   AliTriggerScalers* scaler2 = record2->GetTriggerScalersForClass(classid);
37   UInt_t l0b = dif(scaler2->GetLOCB(),scaler1->GetLOCB());
38   
39   Double_t totalBCs;
40   if (emptyClassName) {
41     Int_t emptyclassid = cfg->GetClassIndexFromName(emptyClassName);
42     scaler1 = record1->GetTriggerScalersForClass(emptyclassid);
43     scaler2 = record2->GetTriggerScalersForClass(emptyclassid);
44     UInt_t l0bempty = dif(scaler2->GetLOCB(),scaler1->GetLOCB());
45     totalBCs = l0bempty;
46   }
47   else {
48     Double_t orbitRate = 11245.; // Hz
49     // Extract SOR and EOR times
50     AliTimeStamp* stemp1 = record1->GetTimeStamp();
51     AliTimeStamp* stemp2 = record2->GetTimeStamp();
52     UInt_t duration = stemp2->GetSeconds()-stemp1->GetSeconds();
53     // Extract number of bunches per orbit
54     AliTriggerClass* cl = cfg->GetTriggerClass(classid);
55     AliTriggerBCMask* mask = cl->GetBCMask();
56     Int_t nBCsPerOrbit = mask->GetNUnmaskedBCs();
57     
58     totalBCs = duration*orbitRate*nBCsPerOrbit;
59   }
60   
61   Double_t mu = -TMath::Log(1-l0b/totalBCs);
62   printf("l0b=%i totalBCs=%.0f mu=%f\n",l0b,totalBCs,mu);
63   return mu;
64 }
65
66 UInt_t dif(UInt_t stop, UInt_t start){
67   UInt_t d;
68   if(stop >= start) d=stop-start;
69   else d = stop+(0xffffffff-start)+1;
70   return d;
71 };