* provided "as is" without express or implied warranty. *
**************************************************************************/
#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),
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<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),
fPeriodNumber(esd.fPeriodNumber),
fRunNumber(esd.fRunNumber),
fRecoVersion(esd.fRecoVersion),
+ fBeamType(""),
fTriggerClasses(TObjArray(kNTriggerClasses))
{
// Copy constructor
TNamed *str = (TNamed *)((esd.fTriggerClasses).At(i));
if (str) fTriggerClasses.AddAt(new TNamed(*str),i);
}
+
+ for(Int_t m=0; m<kNPHOSMatrix; m++){
+ if(esd.fPHOSMatrix[m])
+ fPHOSMatrix[m]=new TGeoHMatrix(*(esd.fPHOSMatrix[m])) ;
+ else
+ fPHOSMatrix[m]=NULL;
+ }
+
+ 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;
+ 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();
TNamed *str = (TNamed *)((esd.fTriggerClasses).At(i));
if (str) fTriggerClasses.AddAt(new TNamed(*str),i);
}
+
+ 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;
}
+void AliESDRun::Copy(TObject &obj) const{
+
+ // this overwrites the virtual TOBject::Copy()
+ // to allow run time copying without casting
+ // in AliESDEvent
+
+ if(this==&obj)return;
+ AliESDRun *robj = dynamic_cast<AliESDRun*>(&obj);
+ if(!robj)return; // not an aliesdrun
+ *robj = *this;
+
+}
+
+//______________________________________________________________________________
+AliESDRun::~AliESDRun() {
+ // Destructor
+ // Delete PHOS position matrices
+ for(Int_t m=0; m<kNPHOSMatrix; m++) {
+ 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();
// 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");
}
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();
}
// 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;
+ }
+ //
+}