1 // Macro to calculate pileup factor
2 // evgeny.kryshen@cern.ch
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).
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.
13 UInt_t dif(UInt_t stop, UInt_t start);
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.;
20 AliCDBManager* man = AliCDBManager::Instance();
21 man->SetDefaultStorage("raw://");
23 AliTriggerConfiguration* cfg = (AliTriggerConfiguration*) man->Get("GRP/CTP/Config")->GetObject();
26 AliTriggerRunScalers* scalers = (AliTriggerRunScalers*) man->Get("GRP/CTP/Scalers")->GetObject();
27 Int_t nEntries = scalers->GetScalersRecords()->GetEntries();
29 // Get SOR and EOR scaler records
30 AliTriggerScalersRecord* record1 = scalers->GetScalersRecord(0);
31 AliTriggerScalersRecord* record2 = scalers->GetScalersRecord(nEntries-1);
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());
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());
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();
58 totalBCs = duration*orbitRate*nBCsPerOrbit;
61 Double_t mu = -TMath::Log(1-l0b/totalBCs);
62 printf("l0b=%i totalBCs=%.0f mu=%f\n",l0b,totalBCs,mu);
66 UInt_t dif(UInt_t stop, UInt_t start){
68 if(stop >= start) d=stop-start;
69 else d = stop+(0xffffffff-start)+1;