AliESD::AliESD():
fEventNumber(0),
fRunNumber(0),
- fTrigger(0),
+ fTriggerMask(0),
+ fTriggerCluster(0),
fRecoVersion(0),
fMagneticField(0),
fZDCN1Energy(0),
{
fEventNumber=0;
fRunNumber=0;
- fTrigger=0;
+ fTriggerMask=0;
+ fTriggerCluster=0;
fRecoVersion=0;
fMagneticField=0;
fZDCN1Energy=0;
// Print header information of the event
//
printf("ESD run information\n");
- printf("Event # %d Run # %d Trigger %ld Magnetic field %f \n",
+ printf("Event # %d Run # %d Trigger %lld Magnetic field %f \n",
GetEventNumber(),
GetRunNumber(),
- GetTrigger(),
+ GetTriggerMask(),
GetMagneticField() );
printf("Vertex: (%.4f +- %.4f, %.4f +- %.4f, %.4f +- %.4f) cm\n",
fPrimaryVertex.GetXv(), fPrimaryVertex.GetXRes(),
void SetEventNumber(Int_t n) {fEventNumber=n;}
void SetRunNumber(Int_t n) {fRunNumber=n;}
- void SetTrigger(Long_t n) {fTrigger=n;}
+ void SetTriggerMask(ULong64_t n) {fTriggerMask=n;}
+ void SetTriggerCluster(UChar_t n) {fTriggerCluster = n;}
void SetMagneticField(Float_t mf){fMagneticField = mf;}
Float_t GetMagneticField() const {return fMagneticField;}
Int_t GetEventNumber() const {return fEventNumber;}
Int_t GetRunNumber() const {return fRunNumber;}
- Long_t GetTrigger() const {return fTrigger;}
+ ULong64_t GetTriggerMask() const {return fTriggerMask;}
+ UChar_t GetTriggerCluster() const {return fTriggerCluster;}
Int_t GetNumberOfTracks() const {return fTracks.GetEntriesFast();}
Int_t GetNumberOfHLTConfMapTracks() const {return fHLTConfMapTracks.GetEntriesFast();}
// Event Identification
Int_t fEventNumber; // Event Number
Int_t fRunNumber; // Run Number
- Long_t fTrigger; // Trigger Type
+ ULong64_t fTriggerMask; // Trigger Type (mask)
+ UChar_t fTriggerCluster; // Trigger cluster (mask)
Int_t fRecoVersion; // Version of reconstruction
Float_t fMagneticField; // Solenoid Magnetic Field in kG : for compatibility with AliMagF
AliESDFMD * fESDFMD; // FMD object containing rough multiplicity
- ClassDef(AliESD,9) //ESD class
+ ClassDef(AliESD,10) //ESD class
};
#endif
#include "AliCDBEntry.h"
#include "AliAlignObj.h"
+#include "AliCentralTrigger.h"
+#include "AliCTPRawStream.h"
+
ClassImp(AliReconstruction)
fStopOnError(kFALSE),
fWriteAlignmentData(kFALSE),
fWriteESDfriend(kFALSE),
+ fFillTriggerESD(kTRUE),
fRunLocalReconstruction("ALL"),
fRunTracking("ALL"),
fStopOnError(rec.fStopOnError),
fWriteAlignmentData(rec.fWriteAlignmentData),
fWriteESDfriend(rec.fWriteESDfriend),
+ fFillTriggerESD(rec.fFillTriggerESD),
fRunLocalReconstruction(rec.fRunLocalReconstruction),
fRunTracking(rec.fRunTracking),
AliESDpid::MakePID(esd);
if (fCheckPointLevel > 1) WriteESD(esd, "PID");
+ if (fFillTriggerESD) {
+ if (!ReadESD(esd, "trigger")) {
+ if (!FillTriggerESD(esd)) {
+ if (fStopOnError) {CleanUp(file, fileOld); return kFALSE;}
+ }
+ if (fCheckPointLevel > 1) WriteESD(esd, "trigger");
+ }
+ }
+
// write ESD
tree->Fill();
// write HLT ESD
return kTRUE;
}
+//_____________________________________________________________________________
+Bool_t AliReconstruction::FillTriggerESD(AliESD*& esd)
+{
+ // Reads the trigger decision which is
+ // stored in Trigger.root file and fills
+ // the corresponding esd entries
+
+ AliInfo("Filling trigger information into the ESD");
+
+ if (fRawReader) {
+ AliCTPRawStream input(fRawReader);
+ if (!input.Next()) {
+ AliError("No valid CTP (trigger) DDL raw data is found ! The trigger information is not stored in the ESD !");
+ return kFALSE;
+ }
+ esd->SetTriggerMask(input.GetClassMask());
+ esd->SetTriggerCluster(input.GetClusterMask());
+ }
+ else {
+ AliRunLoader *runloader = AliRunLoader::GetRunLoader();
+ if (runloader) {
+ if (!runloader->LoadTrigger()) {
+ AliCentralTrigger *aCTP = runloader->GetTrigger();
+ esd->SetTriggerMask(aCTP->GetClassMask());
+ esd->SetTriggerCluster(aCTP->GetClusterMask());
+ }
+ else {
+ AliWarning("No trigger can be loaded! The trigger information is not stored in the ESD !");
+ return kFALSE;
+ }
+ }
+ else {
+ AliError("No run loader is available! The trigger information is not stored in the ESD !");
+ return kFALSE;
+ }
+ }
+
+ return kTRUE;
+}
//_____________________________________________________________________________
Bool_t AliReconstruction::IsSelected(TString detName, TString& detectors) const
evTag->SetT0VertexZ(esd->GetT0zVertex());
- evTag->SetTrigger(esd->GetTrigger());
+ evTag->SetTrigger(esd->GetTriggerMask());
evTag->SetZDCNeutron1Energy(esd->GetZDCN1Energy());
evTag->SetZDCProton1Energy(esd->GetZDCP1Energy());
void SetStopOnError(Bool_t flag=kTRUE) {fStopOnError=flag;}
void SetWriteAlignmentData(Bool_t flag=kTRUE){fWriteAlignmentData=flag;}
void SetWriteESDfriend(Bool_t flag=kTRUE){fWriteESDfriend=flag;}
+ void SetFillTriggerESD(Bool_t flag=kTRUE){fFillTriggerESD=flag;}
void SetCheckPointLevel(Int_t checkPointLevel)
Bool_t RunHLTTracking(AliESD*& esd);
Bool_t RunTracking(AliESD*& esd);
Bool_t FillESD(AliESD*& esd, const TString& detectors);
+ Bool_t FillTriggerESD(AliESD*& esd);
Bool_t IsSelected(TString detName, TString& detectors) const;
Bool_t InitRunLoader();
Bool_t fStopOnError; // stop or continue on errors
Bool_t fWriteAlignmentData; // write track space-points flag
Bool_t fWriteESDfriend; // write ESD friend flag
-
+ Bool_t fFillTriggerESD; // fill trigger info into ESD
TString fRunLocalReconstruction; // run the local reconstruction for these detectors
TString fRunTracking; // run the tracking for these detectors
evTag->SetT0VertexZ(esd->GetT0zVertex());
- evTag->SetTrigger(esd->GetTrigger());
+ evTag->SetTrigger(esd->GetTriggerMask());
evTag->SetZDCNeutron1Energy(esd->GetZDCN1Energy());
evTag->SetZDCProton1Energy(esd->GetZDCP1Energy());
#pragma link C++ class AliTriggerDescriptor+;
#pragma link C++ class AliCentralTrigger+;
#pragma link C++ class AliCTPRawData+;
+#pragma link C++ class AliCTPRawStream+;
#endif
AliTrackResiduals.cxx AliTrackResidualsChi2.cxx AliTrackResidualsFast.cxx\
AliAlignmentTracks.cxx \
AliExpression.cxx \
-AliCTPRawData.cxx
+AliCTPRawData.cxx AliCTPRawStream.cxx
HDRS:= $(SRCS:.cxx=.h)