#include "AliESD.h"
#include "AliESDfriend.h"
#include "AliESDVertex.h"
+#include "AliMultiplicity.h"
#include "AliTracker.h"
#include "AliVertexer.h"
#include "AliVertexerTracks.h"
fFillESD("ALL"),
fGAliceFileName(gAliceFilename),
fInput(""),
+ fEquipIdMap(""),
fFirstEvent(0),
fLastEvent(-1),
fCheckPointLevel(0),
fVertexer(NULL),
fAlignObjArray(NULL),
- fCDBUri(cdbUri)
+ fCDBUri(cdbUri),
+ fSpecCDBUri()
{
// create reconstruction object with default parameters
fFillESD(rec.fFillESD),
fGAliceFileName(rec.fGAliceFileName),
fInput(rec.fInput),
+ fEquipIdMap(rec.fEquipIdMap),
fFirstEvent(rec.fFirstEvent),
fLastEvent(rec.fLastEvent),
fCheckPointLevel(0),
fVertexer(NULL),
fAlignObjArray(rec.fAlignObjArray),
- fCDBUri(rec.fCDBUri)
+ fCDBUri(rec.fCDBUri),
+ fSpecCDBUri()
{
// copy constructor
- for (Int_t i = 0; i < fOptions.GetEntriesFast(); i++) {
+ for (Int_t i = 0; i < rec.fOptions.GetEntriesFast(); i++) {
if (rec.fOptions[i]) fOptions.Add(rec.fOptions[i]->Clone());
}
for (Int_t iDet = 0; iDet < fgkNDetectors; iDet++) {
fLoader[iDet] = NULL;
fTracker[iDet] = NULL;
}
+ for (Int_t i = 0; i < rec.fSpecCDBUri.GetEntriesFast(); i++) {
+ if (rec.fSpecCDBUri[i]) fSpecCDBUri.Add(rec.fSpecCDBUri[i]->Clone());
+ }
}
//_____________________________________________________________________________
CleanUp();
fOptions.Delete();
+ fSpecCDBUri.Delete();
}
//_____________________________________________________________________________
// to retrieve the calibration and alignment constants
AliCDBManager* man = AliCDBManager::Instance();
- if (!man->IsDefaultStorageSet())
+ if (man->IsDefaultStorageSet())
{
AliWarning("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
- AliWarning("Default CDB storage not yet set");
- AliWarning(Form("Using default storage declared in AliSimulation: %s",fCDBUri.Data()));
+ AliWarning("Default CDB storage has been already set !");
+ AliWarning(Form("Ignoring the default storage declared in AliReconstruction: %s",fCDBUri.Data()));
AliWarning("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
- SetDefaultStorage(fCDBUri);
-
- Int_t cdbRun = AliCDBManager::Instance()->GetRun();
- if(cdbRun == -1){
- AliWarning("AliCDBManager's run number temporarily set to 0!!");
- AliCDBManager::Instance()->SetRun(0);
+ fCDBUri = "";
+ }
+ else {
+ AliWarning("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
+ AliWarning(Form("Default CDB storage is set to: %s",fCDBUri.Data()));
+ AliWarning("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
+ man->SetDefaultStorage(fCDBUri);
+ }
+
+ // Now activate the detector specific CDB storage locations
+ for (Int_t iDet = 0; iDet < fgkNDetectors; iDet++) {
+ TString detName = fgkDetectorName[iDet];
+ TObject* obj = fSpecCDBUri.FindObject(detName.Data());
+ if (obj) {
+ AliWarning("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
+ AliWarning(Form("Specific CDB storage for %s is set to: %s",detName.Data(),obj->GetTitle()));
+ AliWarning("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
+ man->SetSpecificStorage(detName.Data(),obj->GetTitle());
}
- }
+ }
}
//_____________________________________________________________________________
void AliReconstruction::SetDefaultStorage(const char* uri) {
-// activate a default CDB storage
+// Store the desired default CDB storage location
+// Activate it later within the Run() method
- AliCDBManager::Instance()->SetDefaultStorage(uri);
+ fCDBUri = uri;
}
//_____________________________________________________________________________
void AliReconstruction::SetSpecificStorage(const char* detName, const char* uri) {
-// activate a detector-specific CDB storage
+// Store a detector-specific CDB storage location
+// Activate it later within the Run() method
- AliCDBManager::Instance()->SetSpecificStorage(detName, uri);
+ TObject* obj = fSpecCDBUri.FindObject(detName);
+ if (obj) fSpecCDBUri.Remove(obj);
+ fSpecCDBUri.Add(new TNamed(detName, uri));
}
return kFALSE;
}
// read run number from gAlice
- AliCDBManager::Instance()->SetRun(fRunLoader->GetAliRun()->GetRunNumber());
- AliInfo(Form("Run number: %d",AliCDBManager::Instance()->GetRun()));
+ if(fRunLoader->GetAliRun())
+ AliCDBManager::Instance()->SetRun(fRunLoader->GetAliRun()->GetRunNumber());
+ else {
+ if(fRawReader) {
+ if(fRawReader->NextEvent()) {
+ AliCDBManager::Instance()->SetRun(fRawReader->GetRunNumber());
+ fRawReader->RewindEvents();
+ }
+ else {
+ AliError("No raw-data events found !");
+ return kFALSE;
+ }
+ }
+ else {
+ AliError("Neither gAlice nor RawReader objects are found !");
+ return kFALSE;
+ }
+ }
+ AliInfo(Form("CDB Run number: %d",AliCDBManager::Instance()->GetRun()));
}
return kTRUE;
}
}
if (AliDebugLevelClass() >= 1) {
- gGeoManager->CheckOverlaps(20);
+ gGeoManager->GetTopNode()->CheckOverlaps(20);
TObjArray* ovexlist = gGeoManager->GetListOfOverlaps();
if(ovexlist->GetEntriesFast()){
AliError("The application of alignment objects to the geometry caused huge overlaps/extrusions!");
{
// run the reconstruction
- InitCDBStorage();
-
// set the input
if (!input) input = fInput.Data();
TString fileName(input);
fRawReader = new AliRawReaderDate(fileName);
fRawReader->SelectEvents(7);
}
+ if (!fEquipIdMap.IsNull() && fRawReader)
+ fRawReader->LoadEquipmentIdsMap(fEquipIdMap);
+
// get the run loader
if (!InitRunLoader()) return kFALSE;
+ // Initialize the CDB storage
+ InitCDBStorage();
+
// Set run number in CDBManager (if it is not already set by the user)
if (!SetRunNumber()) if (fStopOnError) return kFALSE;
hltesd->SetRunNumber(fRunLoader->GetHeader()->GetRun());
esd->SetEventNumber(fRunLoader->GetHeader()->GetEventNrInRun());
hltesd->SetEventNumber(fRunLoader->GetHeader()->GetEventNrInRun());
- if (gAlice) {
- esd->SetMagneticField(AliTracker::GetBz());
- hltesd->SetMagneticField(AliTracker::GetBz());
- } else {
- // ???
- }
+
+ // Set magnetic field from the tracker
+ esd->SetMagneticField(AliTracker::GetBz());
+ hltesd->SetMagneticField(AliTracker::GetBz());
// vertex finder
if (fRunVertexFinder) {
vertex = new AliESDVertex(vtxPos, vtxErr);
}
esd->SetVertex(vertex);
+ // if SPD multiplicity has been determined, it is stored in the ESD
+ AliMultiplicity *mult= fVertexer->GetMultiplicity();
+ if(mult)esd->SetMultiplicity(mult);
+
for (Int_t iDet = 0; iDet < fgkNDetectors; iDet++) {
if (fTracker[iDet]) fTracker[iDet]->SetVertex(vtxPos, vtxErr);
}
Int_t nEl1GeV, nEl3GeV, nEl10GeV;
Float_t maxPt = .0, meanPt = .0, totalP = .0;
Int_t fVertexflag;
+ Int_t iRunNumber = 0;
TString fVertexName("default");
AliRunTag *tag = new AliRunTag();
TBranch * b = t->GetBranch("ESD");
AliESD *esd = 0;
b->SetAddress(&esd);
-
- tag->SetRunId(esd->GetRunNumber());
+
+ b->GetEntry(0);
+ Int_t iInitRunNumber = esd->GetRunNumber();
Int_t iNumberOfEvents = b->GetEntries();
for (Int_t iEventNumber = 0; iEventNumber < iNumberOfEvents; iEventNumber++) {
fVertexflag = 0;
b->GetEntry(iEventNumber);
+ iRunNumber = esd->GetRunNumber();
+ if(iRunNumber != iInitRunNumber) AliFatal("Inconsistency of run numbers in the AliESD!!!");
const AliESDVertex * vertexIn = esd->GetVertex();
if (!vertexIn) AliError("ESD has not defined vertex.");
if (vertexIn) fVertexName = vertexIn->GetName();
evTag->SetT0VertexZ(esd->GetT0zVertex());
- evTag->SetTrigger(esd->GetTriggerMask());
+ evTag->SetTriggerMask(esd->GetTriggerMask());
+ evTag->SetTriggerCluster(esd->GetTriggerCluster());
evTag->SetZDCNeutron1Energy(esd->GetZDCN1Energy());
evTag->SetZDCProton1Energy(esd->GetZDCP1Energy());
evTag->SetMeanPt(meanPt);
evTag->SetMaxPt(maxPt);
+ tag->SetRunId(iInitRunNumber);
tag->AddEventTag(*evTag);
}
lastEvent = iNumberOfEvents;