X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=STEER%2FAliReconstruction.cxx;h=f89a88ee181e24122ed6052a56f73fc1316ee8b0;hb=eca4fa66e575b53a72c027046dc9ea60487c3240;hp=b848e871b19f7d2ee2295f0b23a5bb71fb2ade2a;hpb=7a317befc9c88e2b51e04e7e8ab6f2583c8293c5;p=u%2Fmrichter%2FAliRoot.git diff --git a/STEER/AliReconstruction.cxx b/STEER/AliReconstruction.cxx index b848e871b19..f89a88ee181 100644 --- a/STEER/AliReconstruction.cxx +++ b/STEER/AliReconstruction.cxx @@ -108,102 +108,93 @@ // // /////////////////////////////////////////////////////////////////////////////// +#include #include +#include +#include #include -#include -#include -#include -#include +#include #include +#include #include -#include -#include -#include #include -#include +#include +#include +#include +#include #include #include -#include +#include +#include -#include "AliReconstruction.h" +#include "AliAlignObj.h" +#include "AliCDBEntry.h" +#include "AliCDBManager.h" +#include "AliCDBStorage.h" +#include "AliCTPRawStream.h" +#include "AliCascadeVertexer.h" +#include "AliCentralTrigger.h" #include "AliCodeTimer.h" -#include "AliReconstructor.h" -#include "AliLog.h" -#include "AliRunLoader.h" -#include "AliRun.h" -#include "AliRawReaderFile.h" -#include "AliRawReaderDate.h" -#include "AliRawReaderRoot.h" -#include "AliRawEventHeaderBase.h" -#include "AliRawEvent.h" +#include "AliDAQ.h" +#include "AliDetectorRecoParam.h" +#include "AliESDCaloCells.h" +#include "AliESDCaloCluster.h" #include "AliESDEvent.h" #include "AliESDMuonTrack.h" -#include "AliESDfriend.h" +#include "AliESDPmdTrack.h" +#include "AliESDTagCreator.h" #include "AliESDVertex.h" #include "AliESDcascade.h" +#include "AliESDfriend.h" #include "AliESDkink.h" -#include "AliESDtrack.h" -#include "AliESDCaloCluster.h" -#include "AliESDCaloCells.h" -#include "AliMultiplicity.h" -#include "AliTracker.h" -#include "AliVertexer.h" -#include "AliVertexerTracks.h" -#include "AliV0vertexer.h" -#include "AliCascadeVertexer.h" -#include "AliHeader.h" -#include "AliGenEventHeader.h" -#include "AliPID.h" #include "AliESDpid.h" #include "AliESDtrack.h" -#include "AliESDPmdTrack.h" - -#include "AliESDTagCreator.h" - +#include "AliESDtrack.h" +#include "AliEventInfo.h" +#include "AliGRPObject.h" +#include "AliGRPRecoParam.h" +#include "AliGenEventHeader.h" #include "AliGeomManager.h" -#include "AliTrackPointArray.h" -#include "AliCDBManager.h" -#include "AliCDBStorage.h" -#include "AliCDBEntry.h" -#include "AliAlignObj.h" - -#include "AliCentralTrigger.h" -#include "AliTriggerConfiguration.h" -#include "AliTriggerClass.h" -#include "AliTriggerCluster.h" -#include "AliCTPRawStream.h" - -#include "AliQADataMakerRec.h" #include "AliGlobalQADataMaker.h" -#include "AliQA.h" -#include "AliQADataMakerSteer.h" - +#include "AliHeader.h" +#include "AliLog.h" +#include "AliMagF.h" +#include "AliMultiplicity.h" +#include "AliPID.h" #include "AliPlaneEff.h" - -#include "AliSysInfo.h" // memory snapshots +#include "AliQAv1.h" +#include "AliQADataMakerRec.h" +#include "AliQAManager.h" +#include "AliRawVEvent.h" +#include "AliRawEventHeaderBase.h" #include "AliRawHLTManager.h" - -#include "AliMagWrapCheb.h" - -#include "AliDetectorRecoParam.h" -#include "AliGRPRecoParam.h" +#include "AliRawReaderDate.h" +#include "AliRawReaderFile.h" +#include "AliRawReaderRoot.h" +#include "AliReconstruction.h" +#include "AliReconstructor.h" +#include "AliRun.h" #include "AliRunInfo.h" -#include "AliEventInfo.h" - -#include "AliDAQ.h" - -#include "AliGRPObject.h" +#include "AliRunLoader.h" +#include "AliSysInfo.h" // memory snapshots +#include "AliTrackPointArray.h" +#include "AliTracker.h" +#include "AliTriggerClass.h" +#include "AliTriggerCluster.h" +#include "AliTriggerConfiguration.h" +#include "AliV0vertexer.h" +#include "AliVertexer.h" +#include "AliVertexerTracks.h" ClassImp(AliReconstruction) //_____________________________________________________________________________ -const char* AliReconstruction::fgkDetectorName[AliReconstruction::fgkNDetectors] = {"ITS", "TPC", "TRD", "TOF", "PHOS", "HMPID", "EMCAL", "MUON", "FMD", "ZDC", "PMD", "T0", "VZERO", "ACORDE", "HLT"}; +const char* AliReconstruction::fgkDetectorName[AliReconstruction::kNDetectors] = {"ITS", "TPC", "TRD", "TOF", "PHOS", "HMPID", "EMCAL", "MUON", "FMD", "ZDC", "PMD", "T0", "VZERO", "ACORDE", "HLT"}; //_____________________________________________________________________________ AliReconstruction::AliReconstruction(const char* gAliceFilename) : TSelector(), fUniformField(kFALSE), - fForcedFieldMap(NULL), fRunVertexFinder(kTRUE), fRunVertexFinderTracks(kTRUE), fRunHLTTracking(kFALSE), @@ -228,14 +219,14 @@ AliReconstruction::AliReconstruction(const char* gAliceFilename) : fUseTrackingErrorsForAlignment(""), fGAliceFileName(gAliceFilename), fRawInput(""), + fESDOutput(""), fEquipIdMap(""), fFirstEvent(0), fLastEvent(-1), - fNumberOfEventsPerFile(1), + fNumberOfEventsPerFile((UInt_t)-1), fOptions(), fLoadAlignFromCDB(kTRUE), fLoadAlignData("ALL"), - fESDPar(""), fUseHLTData(), fRunInfo(NULL), fEventInfo(), @@ -246,7 +237,8 @@ AliReconstruction::AliReconstruction(const char* gAliceFilename) : fRecoParam(), - fVertexer(NULL), + fSPDTrackleter(NULL), + fDiamondProfileSPD(NULL), fDiamondProfile(NULL), fDiamondProfileTPC(NULL), @@ -255,16 +247,17 @@ AliReconstruction::AliReconstruction(const char* gAliceFilename) : fAlignObjArray(NULL), fCDBUri(), + fQARefUri(), fSpecCDBUri(), fInitCDBCalled(kFALSE), fSetRunNumberFromDataCalled(kFALSE), fQADetectors("ALL"), - fQASteer(NULL), fQATasks("ALL"), fRunQA(kTRUE), fRunGlobalQA(kTRUE), fSameQACycle(kFALSE), - + fInitQACalled(kFALSE), + fWriteQAExpertData(kTRUE), fRunPlaneEff(kFALSE), fesd(NULL), @@ -281,12 +274,12 @@ AliReconstruction::AliReconstruction(const char* gAliceFilename) : // create reconstruction object with default parameters gGeoManager = NULL; - for (Int_t iDet = 0; iDet < fgkNDetectors; iDet++) { + for (Int_t iDet = 0; iDet < kNDetectors; iDet++) { fReconstructor[iDet] = NULL; fLoader[iDet] = NULL; fTracker[iDet] = NULL; } - for (Int_t iDet = 0; iDet < AliQA::kNDET; iDet++) { + for (Int_t iDet = 0; iDet < AliQAv1::kNDET; iDet++) { fQACycles[iDet] = 999999 ; fQAWriteExpert[iDet] = kFALSE ; } @@ -298,7 +291,6 @@ AliReconstruction::AliReconstruction(const char* gAliceFilename) : AliReconstruction::AliReconstruction(const AliReconstruction& rec) : TSelector(), fUniformField(rec.fUniformField), - fForcedFieldMap(NULL), fRunVertexFinder(rec.fRunVertexFinder), fRunVertexFinderTracks(rec.fRunVertexFinderTracks), fRunHLTTracking(rec.fRunHLTTracking), @@ -323,6 +315,7 @@ AliReconstruction::AliReconstruction(const AliReconstruction& rec) : fUseTrackingErrorsForAlignment(rec.fUseTrackingErrorsForAlignment), fGAliceFileName(rec.fGAliceFileName), fRawInput(rec.fRawInput), + fESDOutput(rec.fESDOutput), fEquipIdMap(rec.fEquipIdMap), fFirstEvent(rec.fFirstEvent), fLastEvent(rec.fLastEvent), @@ -330,7 +323,6 @@ AliReconstruction::AliReconstruction(const AliReconstruction& rec) : fOptions(), fLoadAlignFromCDB(rec.fLoadAlignFromCDB), fLoadAlignData(rec.fLoadAlignData), - fESDPar(rec.fESDPar), fUseHLTData(rec.fUseHLTData), fRunInfo(NULL), fEventInfo(), @@ -341,7 +333,8 @@ AliReconstruction::AliReconstruction(const AliReconstruction& rec) : fRecoParam(rec.fRecoParam), - fVertexer(NULL), + fSPDTrackleter(NULL), + fDiamondProfileSPD(rec.fDiamondProfileSPD), fDiamondProfile(rec.fDiamondProfile), fDiamondProfileTPC(rec.fDiamondProfileTPC), @@ -350,15 +343,17 @@ AliReconstruction::AliReconstruction(const AliReconstruction& rec) : fAlignObjArray(rec.fAlignObjArray), fCDBUri(rec.fCDBUri), + fQARefUri(rec.fQARefUri), fSpecCDBUri(), fInitCDBCalled(rec.fInitCDBCalled), fSetRunNumberFromDataCalled(rec.fSetRunNumberFromDataCalled), fQADetectors(rec.fQADetectors), - fQASteer(NULL), fQATasks(rec.fQATasks), fRunQA(rec.fRunQA), fRunGlobalQA(rec.fRunGlobalQA), fSameQACycle(rec.fSameQACycle), + fInitQACalled(rec.fInitQACalled), + fWriteQAExpertData(rec.fWriteQAExpertData), fRunPlaneEff(rec.fRunPlaneEff), fesd(NULL), @@ -377,13 +372,13 @@ AliReconstruction::AliReconstruction(const AliReconstruction& rec) : 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++) { + for (Int_t iDet = 0; iDet < kNDetectors; iDet++) { fReconstructor[iDet] = NULL; fLoader[iDet] = NULL; fTracker[iDet] = NULL; } - for (Int_t iDet = 0; iDet < AliQA::kNDET; iDet++) { + for (Int_t iDet = 0; iDet < AliQAv1::kNDET; iDet++) { fQACycles[iDet] = rec.fQACycles[iDet]; fQAWriteExpert[iDet] = rec.fQAWriteExpert[iDet] ; } @@ -406,7 +401,6 @@ AliReconstruction& AliReconstruction::operator = (const AliReconstruction& rec) if(&rec == this) return *this; fUniformField = rec.fUniformField; - fForcedFieldMap = NULL; fRunVertexFinder = rec.fRunVertexFinder; fRunVertexFinderTracks = rec.fRunVertexFinderTracks; fRunHLTTracking = rec.fRunHLTTracking; @@ -431,6 +425,7 @@ AliReconstruction& AliReconstruction::operator = (const AliReconstruction& rec) fUseTrackingErrorsForAlignment = rec.fUseTrackingErrorsForAlignment; fGAliceFileName = rec.fGAliceFileName; fRawInput = rec.fRawInput; + fESDOutput = rec.fESDOutput; fEquipIdMap = rec.fEquipIdMap; fFirstEvent = rec.fFirstEvent; fLastEvent = rec.fLastEvent; @@ -442,7 +437,6 @@ AliReconstruction& AliReconstruction::operator = (const AliReconstruction& rec) fLoadAlignFromCDB = rec.fLoadAlignFromCDB; fLoadAlignData = rec.fLoadAlignData; - fESDPar = rec.fESDPar; fUseHLTData = rec.fUseHLTData; delete fRunInfo; fRunInfo = NULL; @@ -456,18 +450,19 @@ AliReconstruction& AliReconstruction::operator = (const AliReconstruction& rec) fRecoParam = rec.fRecoParam; - for (Int_t iDet = 0; iDet < fgkNDetectors; iDet++) { + for (Int_t iDet = 0; iDet < kNDetectors; iDet++) { delete fReconstructor[iDet]; fReconstructor[iDet] = NULL; delete fLoader[iDet]; fLoader[iDet] = NULL; delete fTracker[iDet]; fTracker[iDet] = NULL; } - for (Int_t iDet = 0; iDet < AliQA::kNDET; iDet++) { + for (Int_t iDet = 0; iDet < AliQAv1::kNDET; iDet++) { fQACycles[iDet] = rec.fQACycles[iDet]; fQAWriteExpert[iDet] = rec.fQAWriteExpert[iDet] ; } + + delete fSPDTrackleter; fSPDTrackleter = NULL; - fVertexer = NULL; delete fDiamondProfileSPD; fDiamondProfileSPD = NULL; if (rec.fDiamondProfileSPD) fDiamondProfileSPD = new AliESDVertex(*rec.fDiamondProfileSPD); delete fDiamondProfile; fDiamondProfile = NULL; @@ -482,15 +477,17 @@ AliReconstruction& AliReconstruction::operator = (const AliReconstruction& rec) delete fAlignObjArray; fAlignObjArray = NULL; fCDBUri = ""; + fQARefUri = rec.fQARefUri; fSpecCDBUri.Delete(); fInitCDBCalled = rec.fInitCDBCalled; fSetRunNumberFromDataCalled = rec.fSetRunNumberFromDataCalled; fQADetectors = rec.fQADetectors; - fQASteer = NULL; fQATasks = rec.fQATasks; fRunQA = rec.fRunQA; fRunGlobalQA = rec.fRunGlobalQA; fSameQACycle = rec.fSameQACycle; + fInitQACalled = rec.fInitQACalled; + fWriteQAExpertData = rec.fWriteQAExpertData; fRunPlaneEff = rec.fRunPlaneEff; fesd = NULL; @@ -514,17 +511,89 @@ AliReconstruction::~AliReconstruction() CleanUp(); delete fGRPData; - delete fForcedFieldMap; fOptions.Delete(); if (fAlignObjArray) { fAlignObjArray->Delete(); delete fAlignObjArray; } fSpecCDBUri.Delete(); - delete fQASteer; + AliCodeTimer::Instance()->Print(); } +//_____________________________________________________________________________ +void AliReconstruction::InitQA() +{ + //Initialize the QA and start of cycle + AliCodeTimerAuto(""); + + if (fInitQACalled) return; + fInitQACalled = kTRUE; + + AliQAManager * qam = AliQAManager::QAManager("rec") ; + if (fWriteQAExpertData) + qam->SetWriteExpert() ; + + if (qam->IsDefaultStorageSet()) { + AliWarning("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); + AliWarning("Default QA reference storage has been already set !"); + AliWarning(Form("Ignoring the default storage declared in AliReconstruction: %s",fQARefUri.Data())); + AliWarning("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); + fQARefUri = qam->GetDefaultStorage()->GetURI(); + } else { + if (fQARefUri.Length() > 0) { + AliDebug(2,"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); + AliDebug(2, Form("Default QA reference storage is set to: %s", fQARefUri.Data())); + AliDebug(2, "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); + } else { + fQARefUri="local://$ALICE_ROOT/QAref"; + AliWarning("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); + AliWarning("Default QA refeference storage not yet set !!!!"); + AliWarning(Form("Setting it now to: %s", fQARefUri.Data())); + AliWarning("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); + + } + qam->SetDefaultStorage(fQARefUri); + } + + if (fRunQA) { + qam->SetActiveDetectors(fQADetectors) ; + for (Int_t det = 0 ; det < AliQAv1::kNDET ; det++) { + qam->SetCycleLength(AliQAv1::DETECTORINDEX_t(det), fQACycles[det]) ; + qam->SetWriteExpert(AliQAv1::DETECTORINDEX_t(det)) ; + } + if (!fRawReader && !fInput && fQATasks.Contains(AliQAv1::kRAWS)) + fQATasks.ReplaceAll(Form("%d",AliQAv1::kRAWS), "") ; + qam->SetTasks(fQATasks) ; + qam->InitQADataMaker(AliCDBManager::Instance()->GetRun()) ; + } + if (fRunGlobalQA) { + Bool_t sameCycle = kFALSE ; + AliQADataMaker *qadm = qam->GetQADataMaker(AliQAv1::kGLOBAL); + AliInfo(Form("Initializing the global QA data maker")); + if (fQATasks.Contains(Form("%d", AliQAv1::kRECPOINTS))) { + qadm->StartOfCycle(AliQAv1::kRECPOINTS, AliCDBManager::Instance()->GetRun(), sameCycle) ; + TObjArray **arr=qadm->Init(AliQAv1::kRECPOINTS); + AliTracker::SetResidualsArray(arr); + sameCycle = kTRUE ; + } + if (fQATasks.Contains(Form("%d", AliQAv1::kESDS))) { + qadm->StartOfCycle(AliQAv1::kESDS, AliCDBManager::Instance()->GetRun(), sameCycle) ; + qadm->Init(AliQAv1::kESDS); + } + } + AliSysInfo::AddStamp("InitQA") ; +} + +//_____________________________________________________________________________ +void AliReconstruction::MergeQA(const char *fileName) +{ + //Initialize the QA and start of cycle + AliCodeTimerAuto("") ; + AliQAManager::QAManager()->Merge(AliCDBManager::Instance()->GetRun(),fileName) ; + AliSysInfo::AddStamp("MergeQA") ; +} + //_____________________________________________________________________________ void AliReconstruction::InitCDB() { @@ -552,7 +621,7 @@ void AliReconstruction::InitCDB() AliDebug(2, Form("Default CDB storage is set to: %s", fCDBUri.Data())); AliDebug(2, "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); } else { - fCDBUri="local://$ALICE_ROOT"; + fCDBUri="local://$ALICE_ROOT/OCDB"; AliWarning("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); AliWarning("Default CDB storage not yet set !!!!"); AliWarning(Form("Setting it now to: %s", fCDBUri.Data())); @@ -583,6 +652,15 @@ void AliReconstruction::SetDefaultStorage(const char* uri) { } +//_____________________________________________________________________________ +void AliReconstruction::SetQARefDefaultStorage(const char* uri) { + // Store the desired default CDB storage location + // Activate it later within the Run() method + + fQARefUri = uri; + AliQAv1::SetQARefStorage(fQARefUri.Data()) ; + +} //_____________________________________________________________________________ void AliReconstruction::SetSpecificStorage(const char* calibType, const char* uri) { // Store a detector-specific CDB storage location @@ -591,7 +669,7 @@ void AliReconstruction::SetSpecificStorage(const char* calibType, const char* ur AliCDBPath aPath(calibType); if(!aPath.IsValid()){ // if calibType is not wildcard but it is a valid detector, add "/*" to make it a valid path - for (Int_t iDet = 0; iDet < fgkNDetectors; iDet++) { + for (Int_t iDet = 0; iDet < kNDetectors; iDet++) { if(!strcmp(calibType, fgkDetectorName[iDet])) { aPath.SetPath(Form("%s/*", calibType)); AliInfo(Form("Path for specific storage set to %s", aPath.GetPath().Data())); @@ -606,7 +684,7 @@ void AliReconstruction::SetSpecificStorage(const char* calibType, const char* ur // // check that calibType refers to a "valid" detector name // Bool_t isDetector = kFALSE; -// for (Int_t iDet = 0; iDet < fgkNDetectors; iDet++) { +// for (Int_t iDet = 0; iDet < kNDetectors; iDet++) { // TString detName = fgkDetectorName[iDet]; // if(aPath.GetLevel0() == detName) { // isDetector = kTRUE; @@ -708,7 +786,7 @@ Bool_t AliReconstruction::MisalignGeometry(const TString& detectors) TString detStr = detectors; TString loadAlObjsListOfDets = ""; - for (Int_t iDet = 0; iDet < fgkNDetectors; iDet++) { + for (Int_t iDet = 0; iDet < kNDetectors; iDet++) { if(!IsSelected(fgkDetectorName[iDet], detStr)) continue; if(!strcmp(fgkDetectorName[iDet],"HLT")) continue; @@ -770,6 +848,15 @@ void AliReconstruction::SetInput(const char* input) if (input) fRawInput = input; } +//_____________________________________________________________________________ +void AliReconstruction::SetOutput(const char* output) +{ + // Set the output ESD filename + // 'output' is a normalt ROOT url + // The method is used in case of raw-data reco with PROOF + if (output) fESDOutput.SetUrl(output); +} + //_____________________________________________________________________________ void AliReconstruction::SetOption(const char* detector, const char* option) { @@ -789,11 +876,11 @@ void AliReconstruction::SetRecoParam(const char* detector, AliDetectorRecoParam // First check if the reco-params are global if(!strcmp(detector, "GRP")) { par->SetAsDefault(); - fRecoParam.AddDetRecoParam(fgkNDetectors,par); + fRecoParam.AddDetRecoParam(kNDetectors,par); return; } - for (Int_t iDet = 0; iDet < fgkNDetectors; iDet++) { + for (Int_t iDet = 0; iDet < kNDetectors; iDet++) { if(!strcmp(detector, fgkDetectorName[iDet])) { par->SetAsDefault(); fRecoParam.AddDetRecoParam(iDet,par); @@ -804,7 +891,10 @@ void AliReconstruction::SetRecoParam(const char* detector, AliDetectorRecoParam } //_____________________________________________________________________________ -Bool_t AliReconstruction::SetFieldMap(Float_t l3Current, Float_t diCurrent, Float_t factor, const char *path) { +Bool_t AliReconstruction::SetFieldMap(Float_t l3Cur, Float_t diCur, Float_t l3Pol, + Float_t diPol, Float_t beamenergy, + const Char_t *beamtype, const Char_t *path) +{ //------------------------------------------------ // The magnetic field map, defined externally... // L3 current 30000 A -> 0.5 T @@ -818,53 +908,69 @@ Bool_t AliReconstruction::SetFieldMap(Float_t l3Current, Float_t diCurrent, Floa const Float_t tolerance=0.03; // relative current tolerance const Float_t zero=77.; // "zero" current (A) - - Int_t map=0; - Bool_t dipoleON=kFALSE; - - TString s=(factor < 0) ? "L3: -" : "L3: +"; - - l3Current = TMath::Abs(l3Current); - if (TMath::Abs(l3Current-l3NominalCurrent1)/l3NominalCurrent1 < tolerance) { - map=AliMagWrapCheb::k5kG; - s+="0.5 T; "; - } else - if (TMath::Abs(l3Current-l3NominalCurrent2)/l3NominalCurrent2 < tolerance) { - map=AliMagWrapCheb::k2kG; - s+="0.2 T; "; - } else - if (l3Current < zero) { - map=AliMagWrapCheb::k2kG; - s+="0.0 T; "; - factor=0.; // in fact, this is a global factor... + // + TString s=(l3Pol < 0) ? "L3: -" : "L3: +"; + // + AliMagF::BMap_t map = AliMagF::k5kG; + // + double fcL3,fcDip; + // + l3Cur = TMath::Abs(l3Cur); + if (TMath::Abs(l3Cur-l3NominalCurrent1)/l3NominalCurrent1 < tolerance) { + fcL3 = l3Cur/l3NominalCurrent1; + map = AliMagF::k5kG; + s += "0.5 T; "; + } else if (TMath::Abs(l3Cur-l3NominalCurrent2)/l3NominalCurrent2 < tolerance) { + fcL3 = l3Cur/l3NominalCurrent2; + map = AliMagF::k2kG; + s += "0.2 T; "; + } else if (l3Cur <= zero) { + fcL3 = 0; + map = AliMagF::k5kGUniform; + s += "0.0 T; "; fUniformField=kTRUE; // track with the uniform (zero) B field } else { - AliError(Form("Wrong L3 current (%f A)!",l3Current)); + AliError(Form("Wrong L3 current (%f A)!",l3Cur)); return kFALSE; } - - diCurrent = TMath::Abs(diCurrent); - if (TMath::Abs(diCurrent-diNominalCurrent)/diNominalCurrent < tolerance) { + // + diCur = TMath::Abs(diCur); + if (TMath::Abs(diCur-diNominalCurrent)/diNominalCurrent < tolerance) { // 3% current tolerance... - dipoleON=kTRUE; - s+="Dipole ON"; - } else - if (diCurrent < zero) { // some small current.. - dipoleON=kFALSE; - s+="Dipole OFF"; + fcDip = diCur/diNominalCurrent; + s += "Dipole ON"; + } else if (diCur <= zero) { // some small current.. + fcDip = 0.; + s += "Dipole OFF"; } else { - AliError(Form("Wrong dipole current (%f A)!",diCurrent)); + AliError(Form("Wrong dipole current (%f A)!",diCur)); return kFALSE; } - - delete fForcedFieldMap; - fForcedFieldMap= - new AliMagWrapCheb("B field map ",s,2,factor,10.,map,dipoleON,path); - - fForcedFieldMap->Print(); - - AliTracker::SetFieldMap(fForcedFieldMap,fUniformField); - + // + if (l3Pol!=diPol && (map==AliMagF::k5kG || map==AliMagF::k2kG) && fcDip!=0) { + AliError("L3 and Dipole polarities must be the same"); + return kFALSE; + } + // + if (l3Pol<0) fcL3 = -fcL3; + if (diPol<0) fcDip = -fcDip; + // + AliMagF::BeamType_t btype = AliMagF::kNoBeamField; + TString btypestr = beamtype; + btypestr.ToLower(); + TPRegexp protonBeam("(proton|p)\\s*-?\\s*\\1"); + TPRegexp ionBeam("(lead|pb|ion|a)\\s*-?\\s*\\1"); + if (btypestr.Contains(ionBeam)) btype = AliMagF::kBeamTypeAA; + else if (btypestr.Contains(protonBeam)) btype = AliMagF::kBeamTypepp; + else { + AliInfo(Form("Cannot determine the beam type from %s, assume no LHC magnet field",beamtype)); + } + + AliMagF* fld = new AliMagF("MagneticFieldMap", s.Data(), 2, fcL3, fcDip, 10., map, path, + btype,beamenergy); + TGeoGlobalMagField::Instance()->SetField( fld ); + TGeoGlobalMagField::Instance()->Lock(); + // return kTRUE; } @@ -917,6 +1023,8 @@ Bool_t AliReconstruction::InitGRP() { AliError("GRP/GRP/Data entry: missing value for the beam energy ! Using 0"); beamEnergy = 0; } + // energy is provided in MeV*120 + beamEnergy /= 120E3; TString runType = fGRPData->GetRunType(); if (runType==AliGRPObject::GetInvalidString()) { @@ -931,7 +1039,6 @@ Bool_t AliReconstruction::InitGRP() { } fRunInfo = new AliRunInfo(lhcState, beamType, beamEnergy, runType, activeDetectors); - fRunInfo->Dump(); @@ -971,20 +1078,17 @@ Bool_t AliReconstruction::InitGRP() { AliInfo("==================================================================================="); //*** Dealing with the magnetic field map - if (AliTracker::GetFieldMap()) { - AliInfo("Running with the externally set B field !"); - } else { + if ( TGeoGlobalMagField::Instance()->IsLocked() ) {AliInfo("Running with the externally locked B field !");} + else { // Construct the field map out of the information retrieved from GRP. - Bool_t ok = kTRUE; - // L3 Float_t l3Current = fGRPData->GetL3Current((AliGRPObject::Stats)0); if (l3Current == AliGRPObject::GetInvalidFloat()) { AliError("GRP/GRP/Data entry: missing value for the L3 current !"); ok = kFALSE; } - + Char_t l3Polarity = fGRPData->GetL3Polarity(); if (l3Polarity == AliGRPObject::GetInvalidChar()) { AliError("GRP/GRP/Data entry: missing value for the L3 polarity !"); @@ -1034,27 +1138,14 @@ Bool_t AliReconstruction::InitGRP() { */ if (ok) { - Float_t l3Cur=TMath::Abs(l3Current); - Float_t diCur=TMath::Abs(diCurrent); - Float_t l3Pol=l3Polarity; - // Float_t l3Cur=TMath::Abs(atof(l3Current->GetName())); - //Float_t diCur=TMath::Abs(atof(diCurrent->GetName())); - //Float_t l3Pol=atof(l3Polarity->GetName()); - Float_t factor=1.; - if (l3Pol != 0.) factor=-1.; - - - if (!SetFieldMap(l3Cur, diCur, factor)) { - AliFatal("Failed to creat a B field map ! Exiting..."); - } + if ( !SetFieldMap(l3Current, diCurrent, l3Polarity ? -1:1, diPolarity ? -1:1) ) + AliFatal("Failed to creat a B field map ! Exiting..."); AliInfo("Running with the B field constructed out of GRP !"); } - else { - AliFatal("B field is neither set nor constructed from GRP ! Exitig..."); - } - + else AliFatal("B field is neither set nor constructed from GRP ! Exitig..."); + } - + //*** Get the diamond profiles from OCDB entry = AliCDBManager::Instance()->Get("GRP/Calib/MeanVertexSPD"); if (entry) { @@ -1088,7 +1179,7 @@ Bool_t AliReconstruction::LoadCDB() AliCDBManager::Instance()->Get("GRP/CTP/Config"); TString detStr = fLoadCDB; - for (Int_t iDet = 0; iDet < fgkNDetectors; iDet++) { + for (Int_t iDet = 0; iDet < kNDetectors; iDet++) { if (!IsSelected(fgkDetectorName[iDet], detStr)) continue; AliCDBManager::Instance()->GetAll(Form("%s/Calib/*",fgkDetectorName[iDet])); } @@ -1109,12 +1200,14 @@ Bool_t AliReconstruction::Run(const char* input) // Proof mode if (gProof) { gProof->AddInput(this); - TUrl outputFile; - outputFile.SetProtocol("root",kTRUE); - outputFile.SetHost(gSystem->HostName()); - outputFile.SetFile(Form("%s/AliESDs.root",gSystem->pwd())); - AliInfo(Form("Output file with ESDs is %s",outputFile.GetUrl())); - gProof->AddInput(new TNamed("PROOF_OUTPUTFILE",outputFile.GetUrl())); + if (!fESDOutput.IsValid()) { + fESDOutput.SetProtocol("root",kTRUE); + fESDOutput.SetHost(gSystem->HostName()); + fESDOutput.SetFile(Form("%s/AliESDs.root",gSystem->pwd())); + } + AliInfo(Form("Output file with ESDs is %s",fESDOutput.GetUrl())); + gProof->AddInput(new TNamed("PROOF_OUTPUTFILE",fESDOutput.GetUrl())); + gProof->SetParameter("PROOF_MaxSlavesPerNode", 9999); chain->SetProof(); chain->Process("AliReconstruction"); } @@ -1262,15 +1355,16 @@ void AliReconstruction::Begin(TTree *) } AliSysInfo::AddStamp("InitRecoParams"); - if (fInput) { + if (fInput && gProof) { if (reco) *reco = *this; - fInput->Add(gGeoManager); + + gProof->AddInputData(gGeoManager,kTRUE); gGeoManager = NULL; - fInput->Add(const_cast(AliCDBManager::Instance()->GetEntryCache())); + gProof->AddInputData(const_cast(AliCDBManager::Instance()->GetEntryCache()),kTRUE); fInput->Add(new TParameter("RunNumber",AliCDBManager::Instance()->GetRun())); - AliMagF *magFieldMap = (AliMagF*)AliTracker::GetFieldMap(); + AliMagF *magFieldMap = (AliMagF*)TGeoGlobalMagField::Instance()->GetField(); magFieldMap->SetName("MagneticFieldMap"); - fInput->Add(magFieldMap); + gProof->AddInputData(magFieldMap,kTRUE); } } @@ -1302,7 +1396,7 @@ void AliReconstruction::SlaveBegin(TTree*) } } if (AliMagF *map = (AliMagF*)fInput->FindObject("MagneticFieldMap")) { - AliTracker::SetFieldMap(map,fUniformField); + TGeoGlobalMagField::Instance()->SetField(map); } if (TNamed *outputFileName = (TNamed *) fInput->FindObject("PROOF_OUTPUTFILE")) { outProofFile = new TProofOutputFile(gSystem->BaseName(TUrl(outputFileName->GetTitle()).GetFile())); @@ -1321,13 +1415,6 @@ void AliReconstruction::SlaveBegin(TTree*) ftVertexer = new AliVertexerTracks(AliTracker::GetBz()); - // get vertexer - if (fRunVertexFinder && !CreateVertexer()) { - Abort("CreateVertexer", TSelector::kAbortProcess); - return; - } - AliSysInfo::AddStamp("CreateVertexer"); - // get trackers if (!fRunTracking.IsNull() && !CreateTrackers(fRunTracking)) { Abort("CreateTrackers", TSelector::kAbortProcess); @@ -1356,13 +1443,23 @@ void AliReconstruction::SlaveBegin(TTree*) ftree = new TTree("esdTree", "Tree with ESD objects"); fesd = new AliESDEvent(); fesd->CreateStdContent(); + + fesd->WriteToTree(ftree); if (fWriteESDfriend) { + // careful: + // Since we add the branch manually we must + // book and add it after WriteToTree + // otherwise it is created twice, + // once via writetotree and once here. + // The case for AliESDfriend is now + // caught also in AlIESDEvent::WriteToTree but + // be careful when changing the name (AliESDfriend is not + // a TNamed so we had to hardwire it) fesdf = new AliESDfriend(); TBranch *br=ftree->Branch("ESDfriend.","AliESDfriend", &fesdf); br->SetFile("AliESDfriends.root"); fesd->AddObject(fesdf); } - fesd->WriteToTree(ftree); ftree->GetUserInfo()->Add(fesd); fhlttree = new TTree("HLTesdTree", "Tree with HLT ESD objects"); @@ -1396,43 +1493,14 @@ void AliReconstruction::SlaveBegin(TTree*) fhltesd->WriteToTree(fhlttree); fhlttree->GetUserInfo()->Add(fhltesd); - ProcInfo_t ProcInfo; - gSystem->GetProcInfo(&ProcInfo); - AliInfo(Form("Current memory usage %d %d", ProcInfo.fMemResident, ProcInfo.fMemVirtual)); + ProcInfo_t procInfo; + gSystem->GetProcInfo(&procInfo); + AliInfo(Form("Current memory usage %d %d", procInfo.fMemResident, procInfo.fMemVirtual)); //QA //Initialize the QA and start of cycle - if (fRunQA) { - fQASteer = new AliQADataMakerSteer("rec") ; - fQASteer->SetActiveDetectors(fQADetectors) ; - for (Int_t det = 0 ; det < AliQA::kNDET ; det++) { - fQASteer->SetCycleLength(AliQA::DETECTORINDEX_t(det), fQACycles[det]) ; - if (fQAWriteExpert[det]) - fQASteer->SetWriteExpert(AliQA::DETECTORINDEX_t(det)) ; - } - - if (!fRawReader && fQATasks.Contains(AliQA::kRAWS)) - fQATasks.ReplaceAll(Form("%d",AliQA::kRAWS), "") ; - fQASteer->SetTasks(fQATasks) ; - fQASteer->InitQADataMaker(AliCDBManager::Instance()->GetRun(), fRecoParam) ; - } - - if (fRunGlobalQA) { - Bool_t sameCycle = kFALSE ; - if (!fQASteer) fQASteer = new AliQADataMakerSteer("rec") ; - AliQADataMaker *qadm = fQASteer->GetQADataMaker(AliQA::kGLOBAL); - AliInfo(Form("Initializing the global QA data maker")); - if (fQATasks.Contains(Form("%d", AliQA::kRECPOINTS))) { - qadm->StartOfCycle(AliQA::kRECPOINTS, AliCDBManager::Instance()->GetRun(), sameCycle) ; - TObjArray *arr=qadm->Init(AliQA::kRECPOINTS); - AliTracker::SetResidualsArray(arr); - sameCycle = kTRUE ; - } - if (fQATasks.Contains(Form("%d", AliQA::kESDS))) { - qadm->StartOfCycle(AliQA::kESDS, AliCDBManager::Instance()->GetRun(), sameCycle) ; - qadm->Init(AliQA::kESDS); - } - } + if (fRunQA || fRunGlobalQA) + InitQA() ; //Initialize the Plane Efficiency framework if (fRunPlaneEff && !InitPlaneEff()) { @@ -1454,7 +1522,7 @@ Bool_t AliReconstruction::Process(Long64_t entry) AliCodeTimerAuto(""); TTree *currTree = fChain->GetTree(); - AliRawEvent *event = new AliRawEvent; + AliRawVEvent *event = NULL; currTree->SetBranchAddress("rawevent",&event); currTree->GetEntry(entry); fRawReader = new AliRawReaderRoot(event); @@ -1499,6 +1567,8 @@ Bool_t AliReconstruction::ProcessEvent(Int_t iEvent) AliInfo(Form("processing event %d", iEvent)); + fRunLoader->GetEvent(iEvent); + // Fill Event-info object GetEventInfo(); fRecoParam.SetEventSpecie(fRunInfo,fEventInfo); @@ -1507,22 +1577,24 @@ Bool_t AliReconstruction::ProcessEvent(Int_t iEvent) // Set the reco-params { TString detStr = fLoadCDB; - for (Int_t iDet = 0; iDet < fgkNDetectors; iDet++) { + for (Int_t iDet = 0; iDet < kNDetectors; iDet++) { if (!IsSelected(fgkDetectorName[iDet], detStr)) continue; AliReconstructor *reconstructor = GetReconstructor(iDet); if (reconstructor && fRecoParam.GetDetRecoParamArray(iDet)) { - const AliDetectorRecoParam *par = fRecoParam.GetDetRecoParam(iDet); - reconstructor->SetRecoParam(par); + const AliDetectorRecoParam *par = fRecoParam.GetDetRecoParam(iDet); + reconstructor->SetRecoParam(par); + if (fRunQA) { + AliQAManager::QAManager()->SetRecoParam(iDet, par) ; + } } } } - fRunLoader->GetEvent(iEvent); - // QA on single raw - if (fRunQA) - fQASteer->RunOneEvent(fRawReader) ; - + if (fRunQA) { + AliQAManager::QAManager()->SetEventSpecie(fRecoParam.GetEventSpecie()) ; + AliQAManager::QAManager()->RunOneEvent(fRawReader) ; + } // local single event reconstruction if (!fRunLocalReconstruction.IsNull()) { TString detectors=fRunLocalReconstruction; @@ -1550,7 +1622,7 @@ Bool_t AliReconstruction::ProcessEvent(Int_t iEvent) // Set most probable pt, for B=0 tracking // Get the global reco-params. They are atposition 16 inside the array of detectors in fRecoParam - const AliGRPRecoParam *grpRecoParam = dynamic_cast(fRecoParam.GetDetRecoParam(fgkNDetectors)); + const AliGRPRecoParam *grpRecoParam = dynamic_cast(fRecoParam.GetDetRecoParam(kNDetectors)); if (grpRecoParam) AliExternalTrackParam::SetMostProbablePt(grpRecoParam->GetMostProbablePt()); // Fill raw-data error log into the ESD @@ -1563,6 +1635,13 @@ Bool_t AliReconstruction::ProcessEvent(Int_t iEvent) } } + // For Plane Efficiency: run the SPD trackleter + if (fRunPlaneEff && fSPDTrackleter) { + if (!RunSPDTrackleting(fesd)) { + if (fStopOnError) {CleanUp(); return kFALSE;} + } + } + // Muon tracking if (!fRunTracking.IsNull()) { if (fRunMuonTracking) { @@ -1592,7 +1671,7 @@ Bool_t AliReconstruction::ProcessEvent(Int_t iEvent) // Temporary fix to avoid problems with HLT that overwrites the offline ESDs if (detectors.Contains("ALL")) { detectors=""; - for (Int_t idet=0; idetGetTrack(itrack); @@ -1737,14 +1816,16 @@ Bool_t AliReconstruction::ProcessEvent(Int_t iEvent) // write ESD if (fCleanESD) CleanESD(fesd); - if (fRunQA) - fQASteer->RunOneEvent(fesd) ; - + if (fRunQA) { + AliQAManager::QAManager()->SetEventSpecie(fRecoParam.GetEventSpecie()) ; + AliQAManager::QAManager()->RunOneEvent(fesd) ; + } if (fRunGlobalQA) { - AliQADataMaker *qadm = fQASteer->GetQADataMaker(AliQA::kGLOBAL); - if (qadm && fQATasks.Contains(Form("%d", AliQA::kESDS))) - qadm->Exec(AliQA::kESDS, fesd); - } + AliQADataMaker *qadm = AliQAManager::QAManager()->GetQADataMaker(AliQAv1::kGLOBAL); + qadm->SetEventSpecie(fRecoParam.GetEventSpecie()) ; + if (qadm && fQATasks.Contains(Form("%d", AliQAv1::kESDS))) + qadm->Exec(AliQAv1::kESDS, fesd); + } if (fWriteESDfriend) { // fesdf->~AliESDfriend(); @@ -1773,18 +1854,18 @@ Bool_t AliReconstruction::ProcessEvent(Int_t iEvent) new (fesdf) AliESDfriend(); // Reset... } - ProcInfo_t ProcInfo; - gSystem->GetProcInfo(&ProcInfo); - AliInfo(Form("Event %d -> Current memory usage %d %d",iEvent, ProcInfo.fMemResident, ProcInfo.fMemVirtual)); + ProcInfo_t procInfo; + gSystem->GetProcInfo(&procInfo); + AliInfo(Form("Event %d -> Current memory usage %d %d",iEvent, procInfo.fMemResident, procInfo.fMemVirtual)); fEventInfo.Reset(); - for (Int_t iDet = 0; iDet < fgkNDetectors; iDet++) { + for (Int_t iDet = 0; iDet < kNDetectors; iDet++) { if (fReconstructor[iDet]) fReconstructor[iDet]->SetRecoParam(NULL); } if (fRunQA || fRunGlobalQA) - fQASteer->Increment() ; + AliQAManager::QAManager()->Increment() ; return kTRUE; } @@ -1833,13 +1914,6 @@ void AliReconstruction::SlaveTerminate() ftree->GetUserInfo()->Add(cdbListCopy); - if(fESDPar.Contains("ESD.par")){ - AliInfo("Attaching ESD.par to Tree"); - TNamed *fn = CopyFileToTNamed(fESDPar.Data(),"ESD.par"); - ftree->GetUserInfo()->Add(fn); - } - - ffile->cd(); if (fWriteESDfriend) @@ -1854,19 +1928,37 @@ void AliReconstruction::SlaveTerminate() } // End of cycle for the in-loop - if (fRunQA) { - fQASteer->EndOfCycle() ; - } + if (fRunQA) + AliQAManager::QAManager()->EndOfCycle() ; + if (fRunGlobalQA) { - AliQADataMaker *qadm = fQASteer->GetQADataMaker(AliQA::kGLOBAL); + AliQADataMaker *qadm = AliQAManager::QAManager()->GetQADataMaker(AliQAv1::kGLOBAL); if (qadm) { - if (fQATasks.Contains(Form("%d", AliQA::kRECPOINTS))) - qadm->EndOfCycle(AliQA::kRECPOINTS); - if (fQATasks.Contains(Form("%d", AliQA::kESDS))) - qadm->EndOfCycle(AliQA::kESDS); + if (fQATasks.Contains(Form("%d", AliQAv1::kRECPOINTS))) + qadm->EndOfCycle(AliQAv1::kRECPOINTS); + if (fQATasks.Contains(Form("%d", AliQAv1::kESDS))) + qadm->EndOfCycle(AliQAv1::kESDS); qadm->Finish(); } } + + if (fRunQA || fRunGlobalQA) { + if (fInput) { + if (TNamed *outputFileName = (TNamed *) fInput->FindObject("PROOF_OUTPUTFILE")) { + TString qaOutputFile = outputFileName->GetTitle(); + qaOutputFile.ReplaceAll(gSystem->BaseName(TUrl(outputFileName->GetTitle()).GetFile()), + Form("Merged.%s.Data.root",AliQAv1::GetQADataFileName())); + TProofOutputFile *qaProofFile = new TProofOutputFile(Form("Merged.%s.Data.root",AliQAv1::GetQADataFileName())); + qaProofFile->SetOutputFileName(qaOutputFile.Data()); + fOutput->Add(qaProofFile); + MergeQA(qaProofFile->GetFileName()); + } + } + else { + MergeQA(); + } + } + gROOT->cd(); CleanUp(); } @@ -1878,8 +1970,11 @@ void AliReconstruction::Terminate() // In case of empty events the tags will contain dummy values AliCodeTimerAuto(""); - AliESDTagCreator *esdtagCreator = new AliESDTagCreator(); - esdtagCreator->CreateESDTags(fFirstEvent,fLastEvent,fGRPData); + // Do not call the ESD tag creator in case of PROOF-based reconstruction + if (!fInput) { + AliESDTagCreator *esdtagCreator = new AliESDTagCreator(); + esdtagCreator->CreateESDTags(fFirstEvent,fLastEvent,fGRPData, AliQAv1::Instance()->GetQA(), AliQAv1::Instance()->GetEventSpecies(), AliQAv1::kNDET, AliRecoParam::kNSpecies); + } // Cleanup of CDB manager: cache and active storages! AliCDBManager::Instance()->ClearCache(); @@ -1894,7 +1989,7 @@ Bool_t AliReconstruction::RunLocalEventReconstruction(const TString& detectors) AliCodeTimerAuto("") TString detStr = detectors; - for (Int_t iDet = 0; iDet < fgkNDetectors; iDet++) { + for (Int_t iDet = 0; iDet < kNDetectors; iDet++) { if (!IsSelected(fgkDetectorName[iDet], detStr)) continue; AliReconstructor* reconstructor = GetReconstructor(iDet); if (!reconstructor) continue; @@ -1903,10 +1998,10 @@ Bool_t AliReconstruction::RunLocalEventReconstruction(const TString& detectors) // although the HLT loader is missing if (strcmp(fgkDetectorName[iDet], "HLT")==0) { if (fRawReader) { - reconstructor->Reconstruct(fRawReader, NULL); + reconstructor->Reconstruct(fRawReader, NULL); } else { - TTree* dummy=NULL; - reconstructor->Reconstruct(dummy, NULL); + TTree* dummy=NULL; + reconstructor->Reconstruct(dummy, NULL); } continue; } @@ -1941,21 +2036,24 @@ Bool_t AliReconstruction::RunLocalEventReconstruction(const TString& detectors) loader->LoadDigits("read"); TTree* digitsTree = loader->TreeD(); if (!digitsTree) { - AliError(Form("Can't get the %s digits tree", fgkDetectorName[iDet])); - if (fStopOnError) return kFALSE; + AliError(Form("Can't get the %s digits tree", fgkDetectorName[iDet])); + if (fStopOnError) return kFALSE; } else { - reconstructor->Reconstruct(digitsTree, clustersTree); + reconstructor->Reconstruct(digitsTree, clustersTree); + if (fRunQA) { + AliQAManager::QAManager()->SetEventSpecie(fRecoParam.GetEventSpecie()) ; + AliQAManager::QAManager()->RunOneEventInOneDetector(iDet, digitsTree) ; + } } loader->UnloadDigits(); } - - TString detQAStr(fQADetectors) ; - if (fRunQA) - fQASteer->RunOneEventInOneDetector(iDet, clustersTree) ; - - loader->WriteRecPoints("OVERWRITE"); - loader->UnloadRecPoints(); - AliSysInfo::AddStamp(Form("LRec%s_%d",fgkDetectorName[iDet],eventNr), iDet,1,eventNr); + if (fRunQA) { + AliQAManager::QAManager()->SetEventSpecie(fRecoParam.GetEventSpecie()) ; + AliQAManager::QAManager()->RunOneEventInOneDetector(iDet, clustersTree) ; + } + loader->WriteRecPoints("OVERWRITE"); + loader->UnloadRecPoints(); + AliSysInfo::AddStamp(Form("LRec%s_%d",fgkDetectorName[iDet],eventNr), iDet,1,eventNr); } if ((detStr.CompareTo("ALL") != 0) && !detStr.IsNull()) { AliError(Form("the following detectors were not found: %s", @@ -1965,71 +2063,115 @@ Bool_t AliReconstruction::RunLocalEventReconstruction(const TString& detectors) eventNr++; return kTRUE; } - //_____________________________________________________________________________ -Bool_t AliReconstruction::RunVertexFinder(AliESDEvent*& esd) +Bool_t AliReconstruction::RunSPDTrackleting(AliESDEvent*& esd) { -// run the barrel tracking +// run the SPD trackleting (for SPD efficiency purpouses) AliCodeTimerAuto("") - AliESDVertex* vertex = NULL; Double_t vtxPos[3] = {0, 0, 0}; - Double_t vtxErr[3] = {0.07, 0.07, 0.1}; - TArrayF mcVertex(3); + Double_t vtxErr[3] = {0.0, 0.0, 0.0}; +/* + TArrayF mcVertex(3); + // if(MC) if (fRunLoader->GetHeader() && fRunLoader->GetHeader()->GenEventHeader()) { fRunLoader->GetHeader()->GenEventHeader()->PrimaryVertex(mcVertex); for (Int_t i = 0; i < 3; i++) vtxPos[i] = mcVertex[i]; } +*/ + const AliESDVertex *vertex = esd->GetVertex(); + if(!vertex){ + AliWarning("Vertex not found"); + return kFALSE; + } + vertex->GetXYZ(vtxPos); + vertex->GetSigmaXYZ(vtxErr); + if (fSPDTrackleter) { + AliInfo("running the SPD Trackleter for Plane Efficiency Evaluation"); - if (fVertexer) { - AliInfo("running the ITS vertex finder"); - if (fLoader[0]) { - fLoader[0]->LoadRecPoints(); - TTree* cltree = fLoader[0]->TreeR(); - if (cltree) { - if(fDiamondProfileSPD) fVertexer->SetVtxStart(fDiamondProfileSPD); - vertex = fVertexer->FindVertexForCurrentEvent(cltree); - } - else { - AliError("Can't get the ITS cluster tree"); - } - fLoader[0]->UnloadRecPoints(); + // load clusters + fLoader[0]->LoadRecPoints("read"); + TTree* tree = fLoader[0]->TreeR(); + if (!tree) { + AliError("Can't get the ITS cluster tree"); + return kFALSE; } - else { - AliError("Can't get the ITS loader"); + fSPDTrackleter->LoadClusters(tree); + fSPDTrackleter->SetVertex(vtxPos, vtxErr); + // run trackleting + if (fSPDTrackleter->Clusters2Tracks(esd) != 0) { + AliError("AliITSTrackleterSPDEff Clusters2Tracks failed"); + // fLoader[0]->UnloadRecPoints(); + return kFALSE; } - if(!vertex){ - AliWarning("Vertex not found"); - vertex = new AliESDVertex(); - vertex->SetName("default"); +//fSPDTrackleter->UnloadRecPoints(); + } else { + AliWarning("SPDTrackleter not available"); + return kFALSE; + } + return kTRUE; +} + +//_____________________________________________________________________________ +Bool_t AliReconstruction::RunVertexFinder(AliESDEvent*& esd) +{ +// run the barrel tracking + + AliCodeTimerAuto("") + + AliVertexer *vertexer = CreateVertexer(); + if (!vertexer) return kFALSE; + + AliInfo("running the ITS vertex finder"); + AliESDVertex* vertex = NULL; + if (fLoader[0]) { + fLoader[0]->LoadRecPoints(); + TTree* cltree = fLoader[0]->TreeR(); + if (cltree) { + if(fDiamondProfileSPD) vertexer->SetVtxStart(fDiamondProfileSPD); + vertex = vertexer->FindVertexForCurrentEvent(cltree); } else { - vertex->SetName("reconstructed"); + AliError("Can't get the ITS cluster tree"); } - - } else { - AliInfo("getting the primary vertex from MC"); - vertex = new AliESDVertex(vtxPos, vtxErr); + fLoader[0]->UnloadRecPoints(); } - - if (vertex) { - vertex->GetXYZ(vtxPos); - vertex->GetSigmaXYZ(vtxErr); - } else { - AliWarning("no vertex reconstructed"); - vertex = new AliESDVertex(vtxPos, vtxErr); + else { + AliError("Can't get the ITS loader"); + } + if(!vertex){ + AliWarning("Vertex not found"); + vertex = new AliESDVertex(); + vertex->SetName("default"); } + else { + vertex->SetName("reconstructed"); + } + + Double_t vtxPos[3]; + Double_t vtxErr[3]; + vertex->GetXYZ(vtxPos); + vertex->GetSigmaXYZ(vtxErr); + esd->SetPrimaryVertexSPD(vertex); + AliESDVertex *vpileup = NULL; + Int_t novertices = 0; + vpileup = vertexer->GetAllVertices(novertices); + if(novertices>1){ + for (Int_t kk=1; kkAddPileupVertexSPD(&vpileup[kk]); + } // if SPD multiplicity has been determined, it is stored in the ESD - AliMultiplicity *mult = fVertexer->GetMultiplicity(); + AliMultiplicity *mult = vertexer->GetMultiplicity(); if(mult)esd->SetMultiplicity(mult); - for (Int_t iDet = 0; iDet < fgkNDetectors; iDet++) { + for (Int_t iDet = 0; iDet < kNDetectors; iDet++) { if (fTracker[iDet]) fTracker[iDet]->SetVertex(vtxPos, vtxErr); } delete vertex; + delete vertexer; + return kTRUE; } @@ -2048,7 +2190,7 @@ Bool_t AliReconstruction::RunHLTTracking(AliESDEvent*& esd) AliInfo("running HLT tracking"); // Get a pointer to the HLT reconstructor - AliReconstructor *reconstructor = GetReconstructor(fgkNDetectors-1); + AliReconstructor *reconstructor = GetReconstructor(kNDetectors-1); if (!reconstructor) return kFALSE; // TPC + ITS @@ -2149,6 +2291,7 @@ Bool_t AliReconstruction::RunTracking(AliESDEvent*& esd) AliInfo("running tracking"); + //Fill the ESD with the T0 info (will be used by the TOF) if (fReconstructor[11] && fLoader[11]) { fLoader[11]->LoadRecPoints("READ"); @@ -2188,7 +2331,7 @@ Bool_t AliReconstruction::RunTracking(AliESDEvent*& esd) // pass 2: ALL backwards - for (Int_t iDet = 0; iDet < fgkNDetectors; iDet++) { + for (Int_t iDet = 0; iDet < kNDetectors; iDet++) { if (!fTracker[iDet]) continue; AliDebug(1, Form("%s back propagation", fgkDetectorName[iDet])); @@ -2199,8 +2342,8 @@ Bool_t AliReconstruction::RunTracking(AliESDEvent*& esd) AliSysInfo::AddStamp(Form("RLoadCluster0%s_%d",fgkDetectorName[iDet],eventNr), iDet,1, eventNr); tree = fLoader[iDet]->TreeR(); if (!tree) { - AliError(Form("Can't get the %s cluster tree", fgkDetectorName[iDet])); - return kFALSE; + AliError(Form("Can't get the %s cluster tree", fgkDetectorName[iDet])); + return kFALSE; } fTracker[iDet]->LoadClusters(tree); AliSysInfo::AddStamp(Form("TLoadCluster0%s_%d",fgkDetectorName[iDet],eventNr), iDet,2, eventNr); @@ -2208,8 +2351,14 @@ Bool_t AliReconstruction::RunTracking(AliESDEvent*& esd) // run tracking if (iDet>1) // start filling residuals for the "outer" detectors - if (fRunGlobalQA) AliTracker::SetFillResiduals(kTRUE); - + if (fRunGlobalQA) { + AliTracker::SetFillResiduals(fRecoParam.GetEventSpecie(), kTRUE); + TObjArray ** arr = AliTracker::GetResidualsArray() ; + if ( ! arr[fRecoParam.GetEventSpecie()]->At(0) ) { + AliQADataMaker *qadm = AliQAManager::QAManager()->GetQADataMaker(AliQAv1::kGLOBAL); + qadm->InitRecPointsForTracker() ; + } + } if (fTracker[iDet]->PropagateBack(esd) != 0) { AliError(Form("%s backward propagation failed", fgkDetectorName[iDet])); // return kFALSE; @@ -2228,7 +2377,7 @@ Bool_t AliReconstruction::RunTracking(AliESDEvent*& esd) AliSysInfo::AddStamp(Form("Tracking1%s_%d",fgkDetectorName[iDet],eventNr), iDet,3, eventNr); } //stop filling residuals for the "outer" detectors - if (fRunGlobalQA) AliTracker::SetFillResiduals(kFALSE); + if (fRunGlobalQA) AliTracker::SetFillResiduals(fRecoParam.GetEventSpecie(), kFALSE); // pass 3: TRD + TPC + ITS refit inwards @@ -2238,8 +2387,15 @@ Bool_t AliReconstruction::RunTracking(AliESDEvent*& esd) // run tracking if (iDet<2) // start filling residuals for TPC and ITS - if (fRunGlobalQA) AliTracker::SetFillResiduals(kTRUE); - + if (fRunGlobalQA) { + AliTracker::SetFillResiduals(fRecoParam.GetEventSpecie(), kTRUE); + TObjArray ** arr = AliTracker::GetResidualsArray() ; + if ( ! arr[fRecoParam.GetEventSpecie()]->At(0) ) { + AliQADataMaker *qadm = AliQAManager::QAManager()->GetQADataMaker(AliQAv1::kGLOBAL); + qadm->InitRecPointsForTracker() ; + } + } + if (fTracker[iDet]->RefitInward(esd) != 0) { AliError(Form("%s inward refit failed", fgkDetectorName[iDet])); // return kFALSE; @@ -2266,7 +2422,7 @@ Bool_t AliReconstruction::RunTracking(AliESDEvent*& esd) AliSysInfo::AddStamp(Form("RUnloadCluster%s_%d",fgkDetectorName[iDet],eventNr), iDet,5, eventNr); } // stop filling residuals for TPC and ITS - if (fRunGlobalQA) AliTracker::SetFillResiduals(kFALSE); + if (fRunGlobalQA) AliTracker::SetFillResiduals(fRecoParam.GetEventSpecie(), kFALSE); eventNr++; return kTRUE; @@ -2303,7 +2459,7 @@ Bool_t AliReconstruction::FillESD(AliESDEvent*& esd, const TString& detectors) static Int_t eventNr=0; TString detStr = detectors; - for (Int_t iDet = 0; iDet < fgkNDetectors; iDet++) { + for (Int_t iDet = 0; iDet < kNDetectors; iDet++) { if (!IsSelected(fgkDetectorName[iDet], detStr)) continue; AliReconstructor* reconstructor = GetReconstructor(iDet); if (!reconstructor) continue; @@ -2454,7 +2610,7 @@ Bool_t AliReconstruction::InitRunLoader() if (!gSystem->AccessPathName(fGAliceFileName.Data())) { // galice.root exists // load all base libraries to get the loader classes TString libs = gSystem->GetLibraries(); - for (Int_t iDet = 0; iDet < fgkNDetectors; iDet++) { + for (Int_t iDet = 0; iDet < kNDetectors; iDet++) { TString detName = fgkDetectorName[iDet]; if (detName == "HLT") continue; if (libs.Contains("lib" + detName + "base.so")) continue; @@ -2595,21 +2751,22 @@ AliReconstructor* AliReconstruction::GetReconstructor(Int_t iDet) } //_____________________________________________________________________________ -Bool_t AliReconstruction::CreateVertexer() +AliVertexer* AliReconstruction::CreateVertexer() { // create the vertexer +// Please note that the caller is the owner of the +// vertexer - fVertexer = NULL; + AliVertexer* vertexer = NULL; AliReconstructor* itsReconstructor = GetReconstructor(0); if (itsReconstructor) { - fVertexer = itsReconstructor->CreateVertexer(); + vertexer = itsReconstructor->CreateVertexer(); } - if (!fVertexer) { + if (!vertexer) { AliWarning("couldn't create a vertexer for ITS"); - if (fStopOnError) return kFALSE; } - return kTRUE; + return vertexer; } //_____________________________________________________________________________ @@ -2619,7 +2776,7 @@ Bool_t AliReconstruction::CreateTrackers(const TString& detectors) AliInfo("Creating trackers"); TString detStr = detectors; - for (Int_t iDet = 0; iDet < fgkNDetectors; iDet++) { + for (Int_t iDet = 0; iDet < kNDetectors; iDet++) { if (!IsSelected(fgkDetectorName[iDet], detStr)) continue; AliReconstructor* reconstructor = GetReconstructor(iDet); if (!reconstructor) continue; @@ -2650,7 +2807,7 @@ void AliReconstruction::CleanUp() { // delete trackers and the run loader and close and delete the file - for (Int_t iDet = 0; iDet < fgkNDetectors; iDet++) { + for (Int_t iDet = 0; iDet < kNDetectors; iDet++) { delete fReconstructor[iDet]; fReconstructor[iDet] = NULL; fLoader[iDet] = NULL; @@ -2660,20 +2817,12 @@ void AliReconstruction::CleanUp() delete fRunInfo; fRunInfo = NULL; - delete fVertexer; - fVertexer = NULL; + delete fSPDTrackleter; + fSPDTrackleter = NULL; delete ftVertexer; ftVertexer = NULL; - if(!(AliCDBManager::Instance()->GetCacheFlag())) { - delete fDiamondProfileSPD; - fDiamondProfileSPD = NULL; - delete fDiamondProfile; - fDiamondProfile = NULL; - delete fDiamondProfileTPC; - fDiamondProfileTPC = NULL; - } delete fRunLoader; fRunLoader = NULL; delete fRawReader; @@ -2686,6 +2835,10 @@ void AliReconstruction::CleanUp() delete ffile; ffile = NULL; } + + AliQAManager::Destroy() ; + + TGeoGlobalMagField::Instance()->SetField(NULL); } void AliReconstruction::WriteAlignmentData(AliESDEvent* esd) @@ -2699,6 +2852,7 @@ void AliReconstruction::WriteAlignmentData(AliESDEvent* esd) AliESDtrack *track = esd->GetTrack(itrack); Int_t nsp = 0; Int_t idx[200]; + for (Int_t i=0; i<200; ++i) idx[i] = -1; //PH avoid uninitialized values for (Int_t iDet = 5; iDet >= 0; iDet--) {// TOF, TRD, TPC, ITS clusters nsp += track->GetNcls(iDet); @@ -2741,6 +2895,7 @@ void AliReconstruction::WriteAlignmentData(AliESDEvent* esd) } isp2++; if (!isvalid) continue; + if (iDet==0 && (isp-1)>=6) p.SetExtra(); sp->AddPoint(isptrack,&p); isptrack++; } } @@ -2770,88 +2925,43 @@ void AliReconstruction::FillRawDataErrorLog(Int_t iEvent, AliESDEvent* esd) } -TNamed* AliReconstruction::CopyFileToTNamed(TString fPath,TString pName){ - // Dump a file content into a char in TNamed - ifstream in; - in.open(fPath.Data(),ios::in | ios::binary|ios::ate); - Int_t kBytes = (Int_t)in.tellg(); - printf("Size: %d \n",kBytes); - TNamed *fn = 0; - if(in.good()){ - char* memblock = new char [kBytes]; - in.seekg (0, ios::beg); - in.read (memblock, kBytes); - in.close(); - TString fData(memblock,kBytes); - fn = new TNamed(pName,fData); - printf("fData Size: %d \n",fData.Sizeof()); - printf("pName Size: %d \n",pName.Sizeof()); - printf("fn Size: %d \n",fn->Sizeof()); - delete[] memblock; - } - else{ - AliInfo(Form("Could not Open %s\n",fPath.Data())); - } - - return fn; -} - -void AliReconstruction::TNamedToFile(TTree* fTree, TString pName){ - // This is not really needed in AliReconstruction at the moment - // but can serve as a template - - TList *fList = fTree->GetUserInfo(); - TNamed *fn = (TNamed*)fList->FindObject(pName.Data()); - printf("fn Size: %d \n",fn->Sizeof()); - - TString fTmp(fn->GetName()); // to be 100% sure in principle pName also works - const char* cdata = fn->GetTitle(); - printf("fTmp Size %d\n",fTmp.Sizeof()); - - int size = fn->Sizeof()-fTmp.Sizeof()-sizeof(UChar_t)-sizeof(Int_t); // see dfinition of TString::SizeOf()... - printf("calculated size %d\n",size); - ofstream out(pName.Data(),ios::out | ios::binary); - out.write(cdata,size); - out.close(); - -} - //_____________________________________________________________________________ void AliReconstruction::CheckQA() { // check the QA of SIM for this run and remove the detectors // with status Fatal - TString newRunLocalReconstruction ; - TString newRunTracking ; - TString newFillESD ; - - for (Int_t iDet = 0; iDet < AliQA::kNDET; iDet++) { - TString detName(AliQA::GetDetName(iDet)) ; - AliQA * qa = AliQA::Instance(AliQA::DETECTORINDEX_t(iDet)) ; - if ( qa->IsSet(AliQA::DETECTORINDEX_t(iDet), AliQA::kSIM, AliQA::kFATAL)) { - AliInfo(Form("QA status for %s in Hits and/or SDIGITS and/or Digits was Fatal; No reconstruction performed", detName.Data())) ; - } else { - if ( fRunLocalReconstruction.Contains(AliQA::GetDetName(iDet)) || - fRunLocalReconstruction.Contains("ALL") ) { - newRunLocalReconstruction += detName ; - newRunLocalReconstruction += " " ; - } - if ( fRunTracking.Contains(AliQA::GetDetName(iDet)) || - fRunTracking.Contains("ALL") ) { - newRunTracking += detName ; - newRunTracking += " " ; - } - if ( fFillESD.Contains(AliQA::GetDetName(iDet)) || - fFillESD.Contains("ALL") ) { - newFillESD += detName ; - newFillESD += " " ; - } - } - } - fRunLocalReconstruction = newRunLocalReconstruction ; - fRunTracking = newRunTracking ; - fFillESD = newFillESD ; +// TString newRunLocalReconstruction ; +// TString newRunTracking ; +// TString newFillESD ; +// +// for (Int_t iDet = 0; iDet < AliQAv1::kNDET; iDet++) { +// TString detName(AliQAv1::GetDetName(iDet)) ; +// AliQAv1 * qa = AliQAv1::Instance(AliQAv1::DETECTORINDEX_t(iDet)) ; +// if ( qa->IsSet(AliQAv1::DETECTORINDEX_t(iDet), AliQAv1::kSIM, specie, AliQAv1::kFATAL)) { +// AliInfo(Form("QA status for %s %s in Hits and/or SDIGITS and/or Digits was Fatal; No reconstruction performed", +// detName.Data(), AliRecoParam::GetEventSpecieName(es))) ; +// } else { +// if ( fRunLocalReconstruction.Contains(AliQAv1::GetDetName(iDet)) || +// fRunLocalReconstruction.Contains("ALL") ) { +// newRunLocalReconstruction += detName ; +// newRunLocalReconstruction += " " ; +// } +// if ( fRunTracking.Contains(AliQAv1::GetDetName(iDet)) || +// fRunTracking.Contains("ALL") ) { +// newRunTracking += detName ; +// newRunTracking += " " ; +// } +// if ( fFillESD.Contains(AliQAv1::GetDetName(iDet)) || +// fFillESD.Contains("ALL") ) { +// newFillESD += detName ; +// newFillESD += " " ; +// } +// } +// } +// fRunLocalReconstruction = newRunLocalReconstruction ; +// fRunTracking = newRunTracking ; +// fFillESD = newFillESD ; } //_____________________________________________________________________________ @@ -2859,7 +2969,7 @@ Int_t AliReconstruction::GetDetIndex(const char* detector) { // return the detector index corresponding to detector Int_t index = -1 ; - for (index = 0; index < fgkNDetectors ; index++) { + for (index = 0; index < kNDetectors ; index++) { if ( strcmp(detector, fgkDetectorName[index]) == 0 ) break ; } @@ -2882,7 +2992,7 @@ Bool_t AliReconstruction::FinishPlaneEff() { //for (Int_t iDet = 0; iDet < fgkNDetectors; iDet++) { for (Int_t iDet = 0; iDet < 1; iDet++) { // for the time being only ITS //if (!IsSelected(fgkDetectorName[iDet], detStr)) continue; - if(fTracker[iDet]) { + if(fTracker[iDet] && fTracker[iDet]->GetPlaneEff()) { AliPlaneEff *planeeff=fTracker[iDet]->GetPlaneEff(); TString name=planeeff->GetName(); name+=".root"; @@ -2895,6 +3005,15 @@ Bool_t AliReconstruction::FinishPlaneEff() { ret*=planeeff->WriteHistosToFile(hname,"RECREATE"); } } + if(fSPDTrackleter) { + AliPlaneEff *planeeff=fSPDTrackleter->GetPlaneEff(); + TString name="AliITSPlaneEffSPDtracklet.root"; + TFile* pefile = TFile::Open(name, "RECREATE"); + ret=(Bool_t)planeeff->Write(); + pefile->Close(); + AliESDEvent *dummy=NULL; + ret=(Bool_t)fSPDTrackleter->PostProcess(dummy); // take care of writing other files + } } return ret; } @@ -2903,7 +3022,7 @@ Bool_t AliReconstruction::InitPlaneEff() { // // Here execute all the necessary operations, before of the tracking phase, // for the evaluation of PlaneEfficiencies, in case required for some detectors. - // E.g., read from a DataBase file a first evaluation of the PlaneEfficiency + // E.g., read from a DataBase file a first evaluation of the PlaneEfficiency // which should be updated/recalculated. // // This Preliminary version will work only FOR ITS !!!!! @@ -2912,7 +3031,17 @@ Bool_t AliReconstruction::InitPlaneEff() { // Input: none // Return: kTRUE if all operations have been done properly, kFALSE otherwise // - AliWarning(Form("Implementation of this method not yet done !! Method return kTRUE")); + AliWarning(Form("Implementation of this method not yet completed !! Method return kTRUE")); + + fSPDTrackleter = NULL; + AliReconstructor* itsReconstructor = GetReconstructor(0); + if (itsReconstructor) { + fSPDTrackleter = itsReconstructor->CreateTrackleter(); // this is NULL unless required in RecoParam + } + if (fSPDTrackleter) { + AliInfo("Trackleter for SPD has been created"); + } + return kTRUE; } @@ -2948,7 +3077,7 @@ void AliReconstruction::RunAliEVE() // successful initialization of AliEVE. AliInfo("Running AliEVE..."); - gROOT->ProcessLine(Form("AliEveEventManager::GetMaster()->SetEvent((AliRunLoader*)%p,(AliRawReader*)%p,(AliESDEvent*)%p);",fRunLoader,fRawReader,fesd)); + gROOT->ProcessLine(Form("AliEveEventManager::GetMaster()->SetEvent((AliRunLoader*)0x%lx,(AliRawReader*)0x%lx,(AliESDEvent*)0x%lx,(AliESDfriend*)0x%lx);",fRunLoader,fRawReader,fesd,fesdf)); gSystem->Run(); } @@ -2956,7 +3085,7 @@ void AliReconstruction::RunAliEVE() Bool_t AliReconstruction::SetRunQA(TString detAndAction) { // Allows to run QA for a selected set of detectors - // and a selected set of tasks among RAWS, RECPOINTS and ESDS + // and a selected set of tasks among RAWS, DIGITSR, RECPOINTS and ESDS // all selected detectors run the same selected tasks if (!detAndAction.Contains(":")) { @@ -2970,16 +3099,18 @@ Bool_t AliReconstruction::SetRunQA(TString detAndAction) fQADetectors = fFillESD ; fQATasks = detAndAction(colon+1, detAndAction.Sizeof() ) ; if (fQATasks.Contains("ALL") ) { - fQATasks = Form("%d %d %d", AliQA::kRAWS, AliQA::kRECPOINTS, AliQA::kESDS) ; + fQATasks = Form("%d %d %d %d", AliQAv1::kRAWS, AliQAv1::kDIGITSR, AliQAv1::kRECPOINTS, AliQAv1::kESDS) ; } else { fQATasks.ToUpper() ; TString tempo("") ; if ( fQATasks.Contains("RAW") ) - tempo = Form("%d ", AliQA::kRAWS) ; + tempo = Form("%d ", AliQAv1::kRAWS) ; + if ( fQATasks.Contains("DIGIT") ) + tempo += Form("%d ", AliQAv1::kDIGITSR) ; if ( fQATasks.Contains("RECPOINT") ) - tempo += Form("%d ", AliQA::kRECPOINTS) ; + tempo += Form("%d ", AliQAv1::kRECPOINTS) ; if ( fQATasks.Contains("ESD") ) - tempo += Form("%d ", AliQA::kESDS) ; + tempo += Form("%d ", AliQAv1::kESDS) ; fQATasks = tempo ; if (fQATasks.IsNull()) { AliInfo("No QA requested\n") ; @@ -2988,9 +3119,10 @@ Bool_t AliReconstruction::SetRunQA(TString detAndAction) } } TString tempo(fQATasks) ; - tempo.ReplaceAll(Form("%d", AliQA::kRAWS), AliQA::GetTaskName(AliQA::kRAWS)) ; - tempo.ReplaceAll(Form("%d", AliQA::kRECPOINTS), AliQA::GetTaskName(AliQA::kRECPOINTS)) ; - tempo.ReplaceAll(Form("%d", AliQA::kESDS), AliQA::GetTaskName(AliQA::kESDS)) ; + tempo.ReplaceAll(Form("%d", AliQAv1::kRAWS), AliQAv1::GetTaskName(AliQAv1::kRAWS)) ; + tempo.ReplaceAll(Form("%d", AliQAv1::kDIGITSR), AliQAv1::GetTaskName(AliQAv1::kDIGITSR)) ; + tempo.ReplaceAll(Form("%d", AliQAv1::kRECPOINTS), AliQAv1::GetTaskName(AliQAv1::kRECPOINTS)) ; + tempo.ReplaceAll(Form("%d", AliQAv1::kESDS), AliQAv1::GetTaskName(AliQAv1::kESDS)) ; AliInfo( Form("QA will be done on \"%s\" for \"%s\"\n", fQADetectors.Data(), tempo.Data()) ) ; fRunQA = kTRUE ; return kTRUE; @@ -3005,7 +3137,7 @@ Bool_t AliReconstruction::InitRecoParams() Bool_t isOK = kTRUE; TString detStr = fLoadCDB; - for (Int_t iDet = 0; iDet < fgkNDetectors; iDet++) { + for (Int_t iDet = 0; iDet < kNDetectors; iDet++) { if (!IsSelected(fgkDetectorName[iDet], detStr)) continue;