**************************************************************************/
#include <TNamed.h>
#include <TGeoMatrix.h>
+#include <TGeoGlobalMagField.h>
#include "AliESDRun.h"
#include "AliESDVertex.h"
#include "AliLog.h"
+#include "AliMagF.h"
//-------------------------------------------------------------------------
// Implementation Class 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; m<kNPHOSMatrix; m++) fPHOSMatrix[m]=NULL;
+ for (Int_t sm=0; sm<kNEMCALMatrix; sm++) fEMCALMatrix[sm]=NULL;
}
//______________________________________________________________________________
AliESDRun::AliESDRun(const AliESDRun &esd) :
TObject(esd),
+ fCurrentL3(0),
+ fCurrentDip(0),
+ fBeamEnergy(0),
fMagneticField(esd.fMagneticField),
+ fDiamondZ(esd.fDiamondZ),
+ fDiamondSig2Z(esd.fDiamondSig2Z),
fPeriodNumber(esd.fPeriodNumber),
fRunNumber(esd.fRunNumber),
fRecoVersion(esd.fRecoVersion),
- fTriggerClasses(TObjArray(kNTriggerClasses))
+ fBeamType(""),
+ fTriggerClasses(TObjArray(kNTriggerClasses)),
+ fDetInDAQ(0),
+ fDetInReco(0)
{
// Copy constructor
for (Int_t i=0; i<2; i++) fDiamondXY[i]=esd.fDiamondXY[i];
else
fPHOSMatrix[m]=NULL;
}
+
+ for (int ib=2;ib--;) for (int it=2;it--;) fMeanBeamInt[ib][it] = esd.fMeanBeamInt[ib][it];
+
+ for(Int_t sm=0; sm<kNEMCALMatrix; sm++){
+ if(esd.fEMCALMatrix[sm])
+ fEMCALMatrix[sm]=new TGeoHMatrix(*(esd.fEMCALMatrix[sm])) ;
+ else
+ fEMCALMatrix[sm]=NULL;
+ }
}
//______________________________________________________________________________
fPeriodNumber=esd.fPeriodNumber;
fRecoVersion=esd.fRecoVersion;
fMagneticField=esd.fMagneticField;
+ fDiamondZ=esd.fDiamondZ;
+ fDiamondSig2Z=esd.fDiamondSig2Z;
+ fBeamType = esd.fBeamType;
+ fCurrentL3 = esd.fCurrentL3;
+ fCurrentDip = esd.fCurrentDip;
+ fBeamEnergy = esd.fBeamEnergy;
for (Int_t i=0; i<2; i++) fDiamondXY[i]=esd.fDiamondXY[i];
for (Int_t i=0; i<3; i++) fDiamondCovXY[i]=esd.fDiamondCovXY[i];
fTriggerClasses.Clear();
if (str) fTriggerClasses.AddAt(new TNamed(*str),i);
}
+ fDetInDAQ = esd.fDetInDAQ;
+ fDetInReco = esd.fDetInReco;
+
+ for (int ib=2;ib--;) for (int it=2;it--;) fMeanBeamInt[ib][it] = esd.fMeanBeamInt[ib][it];
+
for(Int_t m=0; m<kNPHOSMatrix; m++){
if(esd.fPHOSMatrix[m])
fPHOSMatrix[m]=new TGeoHMatrix(*(esd.fPHOSMatrix[m])) ;
else
fPHOSMatrix[m]=0;
}
+
+ for(Int_t sm=0; sm<kNEMCALMatrix; sm++){
+ if(esd.fEMCALMatrix[sm])
+ fEMCALMatrix[sm]=new TGeoHMatrix(*(esd.fEMCALMatrix[sm])) ;
+ else
+ fEMCALMatrix[sm]=0;
+ }
}
return *this;
}
if(fPHOSMatrix[m]) delete fPHOSMatrix[m] ;
fPHOSMatrix[m] = NULL;
}
+ // Delete PHOS position matrices
+ for(Int_t sm=0; sm<kNEMCALMatrix; sm++) {
+ if(fEMCALMatrix[sm]) delete fEMCALMatrix[sm] ;
+ fEMCALMatrix[sm] = NULL;
+ }
}
void AliESDRun::SetDiamond(const AliESDVertex *vertex) {
// set the interaction diamond
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];
}
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");
}
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;
}
//______________________________________________________________________________
// 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 += " ";
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;
+ }
+ //
+}