X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=STEER%2FAliESDRun.cxx;h=254a53fed635cd968fe6d08436dda09b3fbb047f;hb=ffb1ee30bf6c69b70faf231bb3727023a4bc20b6;hp=3ee56c830207670144af41c94f0a0beb3ec57ca2;hpb=f009b5c199a91530b42df0740f3e9877ad09dc22;p=u%2Fmrichter%2FAliRoot.git diff --git a/STEER/AliESDRun.cxx b/STEER/AliESDRun.cxx index 3ee56c83020..254a53fed63 100644 --- a/STEER/AliESDRun.cxx +++ b/STEER/AliESDRun.cxx @@ -13,10 +13,13 @@ * provided "as is" without express or implied warranty. * **************************************************************************/ #include +#include +#include #include "AliESDRun.h" #include "AliESDVertex.h" #include "AliLog.h" +#include "AliMagF.h" //------------------------------------------------------------------------- // Implementation Class AliESDRun @@ -30,24 +33,35 @@ ClassImp(AliESDRun) //______________________________________________________________________________ AliESDRun::AliESDRun() : TObject(), + fCurrentL3(0), + fCurrentDip(0), + fBeamEnergy(0), fMagneticField(0), fPeriodNumber(0), fRunNumber(0), fRecoVersion(0), + fBeamType(""), fTriggerClasses(kNTriggerClasses) { for (Int_t i=0; i<2; i++) fDiamondXY[i]=0.; - for (Int_t i=0; i<3; i++) fDiamondCovXY[i]=0.; + fDiamondCovXY[0]=fDiamondCovXY[2]=3.*3.; + fDiamondCovXY[1]=0.; fTriggerClasses.SetOwner(kTRUE); + for (Int_t m=0; m(&obj); + if(!robj)return; // not an aliesdrun + *robj = *this; + +} + +//______________________________________________________________________________ +AliESDRun::~AliESDRun() { + // Destructor + // Delete PHOS position matrices + for(Int_t m=0; mGetXv(); @@ -99,14 +173,15 @@ void AliESDRun::Print(const Option_t *) const // Print some data members printf("Mean vertex in RUN %d: X=%.4f Y=%.4f cm\n", GetRunNumber(),GetDiamondX(),GetDiamondY()); - printf("Magnetic field = %f T\n", - GetMagneticField()); + printf("Beam Type: %s, Energy: %.1f GeV\n",fBeamType.IsNull() ? "N/A":fBeamType.Data(),fBeamEnergy); + printf("Magnetic field in IP= %f T | Currents: L3:%+.1f Dipole:%+.1f %s\n", + GetMagneticField(),fCurrentL3,fCurrentDip,TestBit(kUniformBMap) ? "(Uniform)":""); printf("Event from reconstruction version %d \n",fRecoVersion); printf("List of active trigger classes: "); for(Int_t i = 0; i < kNTriggerClasses; i++) { TNamed *str = (TNamed *)((fTriggerClasses).At(i)); - printf("%s ",str->GetName()); + if (str) printf("%s ",str->GetName()); } printf("\n"); } @@ -118,8 +193,14 @@ void AliESDRun::Reset() fPeriodNumber = 0; fRecoVersion = 0; fMagneticField = 0; + fCurrentL3 = 0; + fCurrentDip = 0; + fBeamEnergy = 0; + fBeamType = ""; + ResetBit(kBInfoStored|kUniformBMap|kConvSqrtSHalfGeV); for (Int_t i=0; i<2; i++) fDiamondXY[i]=0.; - for (Int_t i=0; i<3; i++) fDiamondCovXY[i]=0.; + fDiamondCovXY[0]=fDiamondCovXY[2]=3.*3.; + fDiamondCovXY[1]=0.; fTriggerClasses.Clear(); } @@ -176,7 +257,7 @@ TString AliESDRun::GetFiredTriggerClasses(ULong64_t mask) const // class mask as an argument. TString trclasses; for(Int_t i = 0; i < kNTriggerClasses; i++) { - if (mask && (1 << i)) { + if (mask & (1ull << i)) { TNamed *str = (TNamed *)((fTriggerClasses).At(i)); if (str) { trclasses += " "; @@ -202,8 +283,45 @@ Bool_t AliESDRun::IsTriggerClassFired(ULong64_t mask, const char *name) const Int_t iclass = fTriggerClasses.IndexOf(trclass); if (iclass < 0) return kFALSE; - if (mask && (1 << iclass)) + if (mask & (1ull << iclass)) return kTRUE; else return kFALSE; } + +//_____________________________________________________________________________ +Bool_t AliESDRun::InitMagneticField() const +{ + // Create mag field from stored information + // + if (!TestBit(kBInfoStored)) { + AliError("No information on currents, cannot create field from run header"); + return kFALSE; + } + // + if ( TGeoGlobalMagField::Instance()->IsLocked() ) { + if (TGeoGlobalMagField::Instance()->GetField()->TestBit(AliMagF::kOverrideGRP)) { + AliInfo("ExpertMode!!! Information on magnet currents will be ignored !"); + AliInfo("ExpertMode!!! Running with the externally locked B field !"); + return kTRUE; + } + else { + AliInfo("Destroying existing B field instance!"); + delete TGeoGlobalMagField::Instance(); + } + } + // + AliMagF* fld = AliMagF::CreateFieldMap(fCurrentL3,fCurrentDip,AliMagF::kConvLHC, + TestBit(kUniformBMap), GetBeamEnergy(), GetBeamType()); + if (fld) { + TGeoGlobalMagField::Instance()->SetField( fld ); + TGeoGlobalMagField::Instance()->Lock(); + AliInfo("Running with the B field constructed out of the Run Header !"); + return kTRUE; + } + else { + AliError("Failed to create a B field map !"); + return kFALSE; + } + // +}