]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - STEER/AOD/AliAODHeader.cxx
Add comment about fixing the dependencies
[u/mrichter/AliRoot.git] / STEER / AOD / AliAODHeader.cxx
index ef8bbb3242a0f5c5e06be45f3e2b671afcceb056..ab8e3e8e3ce62cd09a2920409247e4fff4bf47db 100644 (file)
@@ -23,6 +23,8 @@
 #include "AliAODHeader.h"
 #include "AliCentrality.h"
 #include "AliEventplane.h"
+#include "AliMagF.h"
+#include <TGeoGlobalMagField.h>
 #include <TGeoMatrix.h>
 #include <TObjString.h>
 
@@ -30,7 +32,7 @@ ClassImp(AliAODHeader)
 
 //______________________________________________________________________________
 AliAODHeader::AliAODHeader() : 
-  AliVHeader(),
+  AliVAODHeader(),
   fMagneticField(-999.),
   fMuonMagFieldScale(-999.),
   fCentrality(-999.),
@@ -52,6 +54,8 @@ AliAODHeader::AliAODHeader() :
   fRefMultNeg(-999),
   fNMuons(0),
   fNDimuons(0),
+  fNGlobalMuons(0),               // AU
+  fNGlobalDimuons(0),             // AU
   fEventType(0),
   fOrbitNumber(0),
   fPeriodNumber(0),
@@ -94,7 +98,7 @@ AliAODHeader::AliAODHeader(Int_t nRun,
                           UInt_t nOrbit,
                           UInt_t nPeriod,
                           const Char_t *title) :
-  AliVHeader(),
+  AliVAODHeader(),
   fMagneticField(-999.),
   fMuonMagFieldScale(-999.),
   fCentrality(-999.),
@@ -116,6 +120,8 @@ AliAODHeader::AliAODHeader(Int_t nRun,
   fRefMultNeg(-999),
   fNMuons(0),
   fNDimuons(0),
+  fNGlobalMuons(0),               // AU
+  fNGlobalDimuons(0),             // AU
   fEventType(0),
   fOrbitNumber(nOrbit),
   fPeriodNumber(nPeriod),
@@ -177,8 +183,10 @@ AliAODHeader::AliAODHeader(Int_t nRun,
                           const Float_t *vzeroEqFactors,
                           const Char_t *title,
                           Int_t nMuons,
-                          Int_t nDimuons) :
-  AliVHeader(),
+                          Int_t nDimuons,
+                          Int_t nGlobalMuons,                 // AU
+                          Int_t nGlobalDimuons) :             // AU
+  AliVAODHeader(),
   fMagneticField(magField),
   fMuonMagFieldScale(muonMagFieldScale),
   fCentrality(cent),
@@ -200,6 +208,8 @@ AliAODHeader::AliAODHeader(Int_t nRun,
   fRefMultNeg(refMultNeg),
   fNMuons(nMuons),
   fNDimuons(nDimuons),
+  fNGlobalMuons(nGlobalMuons),               // AU
+  fNGlobalDimuons(nGlobalDimuons),           // AU
   fEventType(evttype),
   fOrbitNumber(nOrbit),
   fPeriodNumber(nPeriod),
@@ -248,7 +258,7 @@ AliAODHeader::~AliAODHeader()
 
 //______________________________________________________________________________
 AliAODHeader::AliAODHeader(const AliAODHeader& hdr) :
-  AliVHeader(hdr),
+  AliVAODHeader(hdr),
   fMagneticField(hdr.fMagneticField),
   fMuonMagFieldScale(hdr.fMuonMagFieldScale),
   fCentrality(hdr.fCentrality),
@@ -270,6 +280,8 @@ AliAODHeader::AliAODHeader(const AliAODHeader& hdr) :
   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),
@@ -356,6 +368,8 @@ AliAODHeader& AliAODHeader::operator=(const AliAODHeader& hdr)
     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;
@@ -522,7 +536,7 @@ void AliAODHeader::Print(Option_t* /*option*/) const
 }
 
 //__________________________________________________________________________
-Int_t AliAODHeader::FindIRIntInteractionsBXMap(Int_t difference)
+Int_t AliAODHeader::FindIRIntInteractionsBXMap(Int_t difference) const
 {
   //
   // The mapping is of 181 bits, from -90 to +90
@@ -536,7 +550,7 @@ Int_t AliAODHeader::FindIRIntInteractionsBXMap(Int_t difference)
 }
 
 //__________________________________________________________________________
-Int_t AliAODHeader::GetIRInt2ClosestInteractionMap()
+Int_t AliAODHeader::GetIRInt2ClosestInteractionMap() const
 {
   //
   // Calculation of the closest interaction
@@ -566,7 +580,7 @@ Int_t AliAODHeader::GetIRInt2ClosestInteractionMap()
 }
 
 //__________________________________________________________________________
-Int_t AliAODHeader::GetIRInt1ClosestInteractionMap(Int_t gap)
+Int_t AliAODHeader::GetIRInt1ClosestInteractionMap(Int_t gap) const
 {
   //
   // Calculation of the closest interaction
@@ -598,7 +612,7 @@ Int_t AliAODHeader::GetIRInt1ClosestInteractionMap(Int_t gap)
 }
 
 //__________________________________________________________________________
-Int_t AliAODHeader::GetIRInt2LastInteractionMap()
+Int_t AliAODHeader::GetIRInt2LastInteractionMap() const
 {
   //
   // Calculation of the last interaction
@@ -625,3 +639,43 @@ Int_t AliAODHeader::GetIRInt2LastInteractionMap()
   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;
+  }
+  //
+}