X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=STEER%2FAliReconstruction.cxx;h=d26f1f4a59e4b79a83e0b07f06ff34e9ea0365d8;hb=aebb712cce4f4dac9e2e31a2ef8d20bb555d223d;hp=417388ef6409315e938868eb23038e84f29fc0f6;hpb=a28195f749314bebb16a196893aa44633f4a1576;p=u%2Fmrichter%2FAliRoot.git diff --git a/STEER/AliReconstruction.cxx b/STEER/AliReconstruction.cxx index 417388ef640..d26f1f4a59e 100644 --- a/STEER/AliReconstruction.cxx +++ b/STEER/AliReconstruction.cxx @@ -125,6 +125,7 @@ #include "AliESD.h" #include "AliESDfriend.h" #include "AliESDVertex.h" +#include "AliMultiplicity.h" #include "AliTracker.h" #include "AliVertexer.h" #include "AliVertexerTracks.h" @@ -170,6 +171,7 @@ AliReconstruction::AliReconstruction(const char* gAliceFilename, const char* cdb fFillESD("ALL"), fGAliceFileName(gAliceFilename), fInput(""), + fEquipIdMap(""), fFirstEvent(0), fLastEvent(-1), fCheckPointLevel(0), @@ -183,7 +185,8 @@ AliReconstruction::AliReconstruction(const char* gAliceFilename, const char* cdb fVertexer(NULL), fAlignObjArray(NULL), - fCDBUri(cdbUri) + fCDBUri(cdbUri), + fSpecCDBUri() { // create reconstruction object with default parameters @@ -212,6 +215,7 @@ AliReconstruction::AliReconstruction(const AliReconstruction& rec) : fFillESD(rec.fFillESD), fGAliceFileName(rec.fGAliceFileName), fInput(rec.fInput), + fEquipIdMap(rec.fEquipIdMap), fFirstEvent(rec.fFirstEvent), fLastEvent(rec.fLastEvent), fCheckPointLevel(0), @@ -225,11 +229,12 @@ AliReconstruction::AliReconstruction(const AliReconstruction& rec) : 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++) { @@ -237,6 +242,9 @@ AliReconstruction::AliReconstruction(const AliReconstruction& rec) : 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()); + } } //_____________________________________________________________________________ @@ -256,6 +264,7 @@ AliReconstruction::~AliReconstruction() CleanUp(); fOptions.Delete(); + fSpecCDBUri.Delete(); } //_____________________________________________________________________________ @@ -266,36 +275,52 @@ void AliReconstruction::InitCDBStorage() // 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)); } @@ -313,8 +338,25 @@ Bool_t AliReconstruction::SetRunNumber() 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; } @@ -338,7 +380,7 @@ Bool_t AliReconstruction::ApplyAlignObjsToGeom(TObjArray* alObjArray) } 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!"); @@ -472,8 +514,6 @@ Bool_t AliReconstruction::Run(const char* input, { // run the reconstruction - InitCDBStorage(); - // set the input if (!input) input = fInput.Data(); TString fileName(input); @@ -485,10 +525,16 @@ Bool_t AliReconstruction::Run(const char* 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; @@ -629,12 +675,10 @@ Bool_t AliReconstruction::Run(const char* input, 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) { @@ -887,6 +931,10 @@ Bool_t AliReconstruction::RunVertexFinder(AliESD*& esd) 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); } @@ -1550,6 +1598,7 @@ void AliReconstruction::CreateTag(TFile* file) 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(); @@ -1570,8 +1619,9 @@ void AliReconstruction::CreateTag(TFile* file) 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++) { @@ -1603,6 +1653,8 @@ void AliReconstruction::CreateTag(TFile* file) 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(); @@ -1725,7 +1777,8 @@ void AliReconstruction::CreateTag(TFile* file) evTag->SetT0VertexZ(esd->GetT0zVertex()); - evTag->SetTrigger(esd->GetTriggerMask()); + evTag->SetTriggerMask(esd->GetTriggerMask()); + evTag->SetTriggerCluster(esd->GetTriggerCluster()); evTag->SetZDCNeutron1Energy(esd->GetZDCN1Energy()); evTag->SetZDCProton1Energy(esd->GetZDCP1Energy()); @@ -1772,6 +1825,7 @@ void AliReconstruction::CreateTag(TFile* file) evTag->SetMeanPt(meanPt); evTag->SetMaxPt(maxPt); + tag->SetRunId(iInitRunNumber); tag->AddEventTag(*evTag); } lastEvent = iNumberOfEvents;