X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;ds=sidebyside;f=STEER%2FAliESDRun.cxx;h=e151209f3dbd77a4e2c2fcd9d0c9aa8ea68b60b3;hb=cd995490fc657af53fda843eac38103f1929f980;hp=2c7e28117d730981c1d220330362eacdda04c0f9;hpb=a2dedd16f0c353379e9fafdfcc2eb2848ca71e89;p=u%2Fmrichter%2FAliRoot.git diff --git a/STEER/AliESDRun.cxx b/STEER/AliESDRun.cxx index 2c7e28117d7..e151209f3db 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,26 +33,47 @@ ClassImp(AliESDRun) //______________________________________________________________________________ AliESDRun::AliESDRun() : TObject(), + fCurrentL3(0), + fCurrentDip(0), + fBeamEnergy(0), fMagneticField(0), + fDiamondZ(0), + fDiamondSig2Z(0), fPeriodNumber(0), fRunNumber(0), fRecoVersion(0), - fTriggerClasses(kNTriggerClasses) + fBeamType(""), + fTriggerClasses(kNTriggerClasses), + fDetInDAQ(0), + fDetInReco(0) + { for (Int_t i=0; i<2; i++) fDiamondXY[i]=0.; fDiamondCovXY[0]=fDiamondCovXY[2]=3.*3.; fDiamondCovXY[1]=0.; fTriggerClasses.SetOwner(kTRUE); + fMeanBeamInt[0][0]=fMeanBeamInt[0][1]=fMeanBeamInt[1][0]=fMeanBeamInt[1][1]=-1; + for (Int_t m=0; mGetXv(); - fDiamondXY[1]=vertex->GetYv(); - Double32_t cov[6]; - vertex->GetCovMatrix(cov); - fDiamondCovXY[0]=cov[0]; - fDiamondCovXY[1]=cov[1]; - fDiamondCovXY[2]=cov[2]; + if (vertex) { + fDiamondXY[0]=vertex->GetXv(); + fDiamondXY[1]=vertex->GetYv(); + fDiamondZ=vertex->GetZv(); + Double32_t cov[6]; + vertex->GetCovMatrix(cov); + fDiamondCovXY[0]=cov[0]; + fDiamondCovXY[1]=cov[1]; + fDiamondCovXY[2]=cov[2]; + fDiamondSig2Z=cov[5]; + } } @@ -112,17 +198,20 @@ void AliESDRun::SetDiamond(const AliESDVertex *vertex) { 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("Mean vertex in RUN %d: X=%.4f Y=%.4f Z=%.4f cm\n", + GetRunNumber(),GetDiamondX(),GetDiamondY(),GetDiamondZ()); + 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("Mean intenstity for interacting : beam1:%+.3e beam2:%+.3e\n",fMeanBeamInt[0][0],fMeanBeamInt[1][0]); + printf("Mean intenstity for non-intecting : beam1:%+.3e beam2:%+.3e\n",fMeanBeamInt[0][1],fMeanBeamInt[1][1]); printf("\n"); } @@ -133,10 +222,19 @@ 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.; fDiamondCovXY[0]=fDiamondCovXY[2]=3.*3.; fDiamondCovXY[1]=0.; + fDiamondZ=0.; + fDiamondSig2Z=10.*10.; fTriggerClasses.Clear(); + fDetInDAQ = 0; + fDetInReco = 0; } //______________________________________________________________________________ @@ -192,7 +290,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 += " "; @@ -218,8 +316,76 @@ 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; + } + // +} + +//_____________________________________________________________________________ +void AliESDRun::SetT0spread(Int_t i,Float_t t) +{ + // + // Setting the T0 spread value at index i + // + + if ( (i>=0) && (i