#include "AliAODHeader.h"
#include "AliCentrality.h"
#include "AliEventplane.h"
+#include "AliMagF.h"
+#include <TGeoGlobalMagField.h>
#include <TGeoMatrix.h>
#include <TObjString.h>
fCentrality(-999.),
fEventplane(-999.),
fEventplaneMag(-999.),
+ fEventplaneQx(-999.),
+ fEventplaneQy(-999.),
fZDCN1Energy(-999.),
fZDCP1Energy(-999.),
fZDCN2Energy(-999.),
fRefMultNeg(-999),
fNMuons(0),
fNDimuons(0),
+ fNGlobalMuons(0), // AU
+ fNGlobalDimuons(0), // AU
fEventType(0),
fOrbitNumber(0),
fPeriodNumber(0),
fBunchCrossNumber(0),
+ fRefMultComb05(-999),
+ fRefMultComb08(-999),
fTriggerCluster(0),
fDiamondZ(0.),
fDiamondSig2Z(0.),
fOfflineTrigger(0),
fESDFileName(""),
fEventNumberESDFile(-1),
+ fNumberESDTracks(-1),
fL0TriggerInputs(0),
fL1TriggerInputs(0),
fL2TriggerInputs(0),
fTPConlyRefMult(-1),
fCentralityP(0),
- fEventplaneP(0)
+ fEventplaneP(0),
+ fIRInt2InteractionsMap(0),
+ fIRInt1InteractionsMap(0)
{
// default constructor
fCentrality(-999.),
fEventplane(-999.),
fEventplaneMag(-999.),
+ fEventplaneQx(-999.),
+ fEventplaneQy(-999.),
fZDCN1Energy(-999.),
fZDCP1Energy(-999.),
fZDCN2Energy(-999.),
fRefMultNeg(-999),
fNMuons(0),
fNDimuons(0),
+ fNGlobalMuons(0), // AU
+ fNGlobalDimuons(0), // AU
fEventType(0),
fOrbitNumber(nOrbit),
fPeriodNumber(nPeriod),
fBunchCrossNumber(nBunchX),
+ fRefMultComb05(-999),
+ fRefMultComb08(-999),
fTriggerCluster(0),
fDiamondZ(0.),
fDiamondSig2Z(0.),
fOfflineTrigger(0),
fESDFileName(""),
fEventNumberESDFile(-1),
+ fNumberESDTracks(-1),
fL0TriggerInputs(0),
fL1TriggerInputs(0),
fL2TriggerInputs(0),
fTPConlyRefMult(-1),
fCentralityP(0),
- fEventplaneP(0)
+ fEventplaneP(0),
+ fIRInt2InteractionsMap(0),
+ fIRInt1InteractionsMap(0)
{
// constructor
Int_t refMult,
Int_t refMultPos,
Int_t refMultNeg,
+ Int_t refMultComb05,
+ Int_t refMultComb08,
Double_t magField,
Double_t muonMagFieldScale,
Double_t cent,
const Float_t *vzeroEqFactors,
const Char_t *title,
Int_t nMuons,
- Int_t nDimuons) :
+ Int_t nDimuons,
+ Int_t nGlobalMuons, // AU
+ Int_t nGlobalDimuons) : // AU
AliVHeader(),
fMagneticField(magField),
fMuonMagFieldScale(muonMagFieldScale),
fCentrality(cent),
fEventplane(eventplane),
+ fEventplaneMag(0),
+ fEventplaneQx(0),
+ fEventplaneQy(0),
fZDCN1Energy(n1Energy),
fZDCP1Energy(p1Energy),
fZDCN2Energy(n2Energy),
fRefMultNeg(refMultNeg),
fNMuons(nMuons),
fNDimuons(nDimuons),
+ fNGlobalMuons(nGlobalMuons), // AU
+ fNGlobalDimuons(nGlobalDimuons), // AU
fEventType(evttype),
fOrbitNumber(nOrbit),
fPeriodNumber(nPeriod),
fBunchCrossNumber(nBunchX),
+ fRefMultComb05(refMultComb05),
+ fRefMultComb08(refMultComb08),
fTriggerCluster(trigClus),
fDiamondZ(0.),
fDiamondSig2Z(0.),
fOfflineTrigger(0),
fESDFileName(""),
fEventNumberESDFile(-1),
+ fNumberESDTracks(-1),
fL0TriggerInputs(0),
fL1TriggerInputs(0),
fL2TriggerInputs(0),
fTPConlyRefMult(-1),
fCentralityP(0),
- fEventplaneP(0)
+ fEventplaneP(0),
+ fIRInt2InteractionsMap(0),
+ fIRInt1InteractionsMap(0)
{
// constructor
fCentrality(hdr.fCentrality),
fEventplane(hdr.fEventplane),
fEventplaneMag(hdr.fEventplaneMag),
+ fEventplaneQx(hdr.fEventplaneQx),
+ fEventplaneQy(hdr.fEventplaneQy),
fZDCN1Energy(hdr.fZDCN1Energy),
fZDCP1Energy(hdr.fZDCP1Energy),
fZDCN2Energy(hdr.fZDCN2Energy),
fRefMultNeg(hdr.fRefMultNeg),
fNMuons(hdr.fNMuons),
fNDimuons(hdr.fNDimuons),
+ fNGlobalMuons(hdr.fNGlobalMuons), // AU
+ fNGlobalDimuons(hdr.fNGlobalDimuons), // AU
fEventType(hdr.fEventType),
fOrbitNumber(hdr.fOrbitNumber),
fPeriodNumber(hdr.fPeriodNumber),
fBunchCrossNumber(hdr.fBunchCrossNumber),
+ fRefMultComb05(hdr.fRefMultComb05),
+ fRefMultComb08(hdr.fRefMultComb08),
fTriggerCluster(hdr.fTriggerCluster),
fDiamondZ(hdr.fDiamondZ),
fDiamondSig2Z(hdr.fDiamondSig2Z),
fOfflineTrigger(hdr.fOfflineTrigger),
fESDFileName(hdr.fESDFileName),
fEventNumberESDFile(hdr.fEventNumberESDFile),
+ fNumberESDTracks(hdr.fNumberESDTracks),
fL0TriggerInputs(hdr.fL0TriggerInputs),
fL1TriggerInputs(hdr.fL1TriggerInputs),
fL2TriggerInputs(hdr.fL2TriggerInputs),
fTPConlyRefMult(hdr.fTPConlyRefMult),
fCentralityP(new AliCentrality(*hdr.fCentralityP)),
- fEventplaneP(new AliEventplane(*hdr.fEventplaneP))
+ fEventplaneP(new AliEventplane(*hdr.fEventplaneP)),
+ fIRInt2InteractionsMap(hdr.fIRInt2InteractionsMap),
+ fIRInt1InteractionsMap(hdr.fIRInt1InteractionsMap)
{
// Copy constructor.
fCentrality = hdr.fCentrality;
fEventplane = hdr.fEventplane;
fEventplaneMag = hdr.fEventplaneMag;
+ fEventplaneQx = hdr.fEventplaneQx;
+ fEventplaneQy = hdr.fEventplaneQy;
fZDCN1Energy = hdr.fZDCN1Energy;
fZDCP1Energy = hdr.fZDCP1Energy;
fZDCN2Energy = hdr.fZDCN2Energy;
fOrbitNumber = hdr.fOrbitNumber;
fPeriodNumber = hdr.fPeriodNumber;
fBunchCrossNumber = hdr.fBunchCrossNumber;
+ fRefMultComb05 = hdr.fRefMultComb05;
+ fRefMultComb08 = hdr.fRefMultComb08;
+
fTriggerCluster = hdr.fTriggerCluster;
fNMuons = hdr.fNMuons;
fNDimuons = hdr.fNDimuons;
+ fNGlobalMuons = hdr.fNGlobalMuons; // AU
+ fNGlobalDimuons = hdr.fNGlobalDimuons; // AU
fDiamondZ = hdr.fDiamondZ;
fDiamondSig2Z = hdr.fDiamondSig2Z;
fOfflineTrigger = hdr.fOfflineTrigger;
fESDFileName = hdr.fESDFileName;
fEventNumberESDFile = hdr.fEventNumberESDFile;
+ fNumberESDTracks = hdr.fNumberESDTracks;
fL0TriggerInputs = hdr.fL0TriggerInputs;
fL1TriggerInputs = hdr.fL1TriggerInputs;
fL2TriggerInputs = hdr.fL2TriggerInputs;
fTPConlyRefMult = hdr.fTPConlyRefMult;
+ fIRInt2InteractionsMap = hdr.fIRInt2InteractionsMap;
+ fIRInt1InteractionsMap = hdr.fIRInt1InteractionsMap;
+
if(hdr.fEventplaneP){
if(fEventplaneP)*fEventplaneP = *hdr.fEventplaneP;
else fEventplaneP = new AliEventplane(*hdr.fEventplaneP);
fEventplaneP = 0;
fEventplane = -999;
fEventplaneMag = -999.;
+ fEventplaneQx = -999.;
+ fEventplaneQy = -999.;
}
return;
}
printf("Muon mag. field scale : %f\n", fMuonMagFieldScale);
printf("Centrality : %f\n", fCentrality);
- printf("Event plane : %f\n", fEventplane);
- printf("Event plane : %f\n", fEventplaneMag);
+ printf("Event plane Ang : %f\n", fEventplane);
+ printf("Event plane Mag : %f\n", fEventplaneMag);
+ printf("Event plane Qx : %f\n", fEventplaneQx);
+ printf("Event plane Qy : %f\n", fEventplaneQy);
printf("ZDC N1 Energy : %f\n", fZDCN1Energy);
printf("ZDC P1 Energy : %f\n", fZDCP1Energy);
printf("ZDC N2 Energy : %f\n", fZDCN2Energy);
printf("ref. Multiplicity : %d\n", fRefMult);
printf("ref. Multiplicity (pos) : %d\n", fRefMultPos);
printf("ref. Multiplicity (neg) : %d\n", fRefMultNeg);
+ printf("ref. Mult.Comb |eta|<.5 : %d\n", fRefMultComb05);
+ printf("ref. Mult.Comb |eta|<.8 : %d\n", fRefMultComb08);
printf("number of muons : %d\n", fNMuons);
printf("number of dimuons : %d\n", fNDimuons);
printf("offline trigger : %u\n", fOfflineTrigger);
return;
}
+
+//__________________________________________________________________________
+Int_t AliAODHeader::FindIRIntInteractionsBXMap(Int_t difference) const
+{
+ //
+ // The mapping is of 181 bits, from -90 to +90
+ //
+ Int_t bin=-1;
+
+ if(difference<-90 || difference>90) return bin;
+ else { bin = 90 + difference; }
+
+ return bin;
+}
+
+//__________________________________________________________________________
+Int_t AliAODHeader::GetIRInt2ClosestInteractionMap() const
+{
+ //
+ // Calculation of the closest interaction
+ //
+ Int_t firstNegative=100;
+ for(Int_t item=-1; item>=-90; item--) {
+ Int_t bin = FindIRIntInteractionsBXMap(item);
+ Bool_t isFired = fIRInt2InteractionsMap.TestBitNumber(bin);
+ if(isFired) {
+ firstNegative = item;
+ break;
+ }
+ }
+ Int_t firstPositive=100;
+ for(Int_t item=1; item<=90; item++) {
+ Int_t bin = FindIRIntInteractionsBXMap(item);
+ Bool_t isFired = fIRInt2InteractionsMap.TestBitNumber(bin);
+ if(isFired) {
+ firstPositive = item;
+ break;
+ }
+ }
+
+ Int_t closest = firstPositive < TMath::Abs(firstNegative) ? firstPositive : TMath::Abs(firstNegative);
+ if(firstPositive==100 && firstNegative==100) closest=0;
+ return closest;
+}
+
+//__________________________________________________________________________
+Int_t AliAODHeader::GetIRInt1ClosestInteractionMap(Int_t gap) const
+{
+ //
+ // Calculation of the closest interaction
+ // In case of VZERO (Int1) one has to introduce a gap
+ // in order to avoid false positivies from after-pulses
+
+ Int_t firstNegative=100;
+ for(Int_t item=-1; item>=-90; item--) {
+ Int_t bin = FindIRIntInteractionsBXMap(item);
+ Bool_t isFired = fIRInt1InteractionsMap.TestBitNumber(bin);
+ if(isFired) {
+ firstNegative = item;
+ break;
+ }
+ }
+ Int_t firstPositive=100;
+ for(Int_t item=1+gap; item<=90; item++) {
+ Int_t bin = FindIRIntInteractionsBXMap(item);
+ Bool_t isFired = fIRInt1InteractionsMap.TestBitNumber(bin);
+ if(isFired) {
+ firstPositive = item;
+ break;
+ }
+ }
+
+ Int_t closest = firstPositive < TMath::Abs(firstNegative) ? firstPositive : TMath::Abs(firstNegative);
+ if(firstPositive==100 && firstNegative==100) closest=0;
+ return closest;
+}
+
+//__________________________________________________________________________
+Int_t AliAODHeader::GetIRInt2LastInteractionMap() const
+{
+ //
+ // Calculation of the last interaction
+ //
+ Int_t lastNegative=0;
+ for(Int_t item=-90; item<=-1; item++) {
+ Int_t bin = FindIRIntInteractionsBXMap(item);
+ Bool_t isFired = fIRInt2InteractionsMap.TestBitNumber(bin);
+ if(isFired) {
+ lastNegative = item;
+ break;
+ }
+ }
+ Int_t lastPositive=0;
+ for(Int_t item=90; item>=1; item--) {
+ Int_t bin = FindIRIntInteractionsBXMap(item);
+ Bool_t isFired = fIRInt2InteractionsMap.TestBitNumber(bin);
+ if(isFired) {
+ lastPositive = item;
+ break;
+ }
+ }
+
+ Int_t last = lastPositive > TMath::Abs(lastNegative) ? lastPositive : TMath::Abs(lastNegative);
+ return last;
+}
+
+//__________________________________________________________________________
+Bool_t AliAODHeader::InitMagneticField() const
+{
+ // Create mag field from stored information
+ //
+ const double def5kg = 5.00667905807495117e+00;
+ const double def2kg = 2.04487347602844238e+00;
+ //
+ AliMagF* fld = (AliMagF*) TGeoGlobalMagField::Instance()->GetField();
+ if (fld) {
+ if (TGeoGlobalMagField::Instance()->IsLocked()) {
+ if (fld->TestBit(AliMagF::kOverrideGRP)) {
+ AliInfo("ExpertMode!!! Information on magnet currents will be ignored !");
+ AliInfo("ExpertMode!!! Running with the externally locked B field !");
+ return kTRUE;
+ }
+ }
+ AliInfo("Destroying existing B field instance!");
+ delete TGeoGlobalMagField::Instance();
+ }
+ //
+ double fc5 = fMagneticField/def5kg;
+ double fc2 = fMagneticField/def2kg;
+ Bool_t use5 = TMath::Abs(TMath::Abs(fc5)-1.) < TMath::Abs(TMath::Abs(fc2)-1.);
+ //
+ fld = new AliMagF("mag","mag",use5 ? fc5 : fc2, fMuonMagFieldScale, use5 ? AliMagF::k5kG : AliMagF::k2kG);
+ //
+ if (fld) {
+ TGeoGlobalMagField::Instance()->SetField( fld );
+ TGeoGlobalMagField::Instance()->Lock();
+ AliInfo("Running with the B field constructed out of the AOD Header !");
+ return kTRUE;
+ }
+ else {
+ AliError("Failed to create a B field map !");
+ return kFALSE;
+ }
+ //
+}