#include "AliAODTracklets.h"
#include "AliQADataMaker.h"
+#include "AliGlobalQADataMaker.h"
#include "AliQA.h"
#include "AliQADataMakerSteer.h"
fInitCDBCalled(kFALSE),
fSetRunNumberFromDataCalled(kFALSE),
fRunQA(kTRUE),
- fQAInLoop(kFALSE)
-
+ fRunGlobalQA(kFALSE),
+ fInLoopQA(kFALSE)
{
// create reconstruction object with default parameters
fQADataMaker[iDet] = NULL;
fQACycles[iDet] = 999999;
}
+ fQADataMaker[fgkNDetectors]=NULL; //Global QA
AliPID pid;
}
fSpecCDBUri(),
fInitCDBCalled(rec.fInitCDBCalled),
fSetRunNumberFromDataCalled(rec.fSetRunNumberFromDataCalled),
- fRunQA(kTRUE),
- fQAInLoop(kFALSE)
-
+ fRunQA(rec.fRunQA),
+ fRunGlobalQA(rec.fRunGlobalQA),
+ fInLoopQA(rec.fInLoopQA)
{
// copy constructor
fQADataMaker[iDet] = NULL;
fQACycles[iDet] = rec.fQACycles[iDet];
}
+ fQADataMaker[fgkNDetectors]=NULL; //Global QA
for (Int_t i = 0; i < rec.fSpecCDBUri.GetEntriesFast(); i++) {
if (rec.fSpecCDBUri[i]) fSpecCDBUri.Add(rec.fSpecCDBUri[i]->Clone());
}
//QA
AliQADataMakerSteer qas ;
- if ( fRunQA && fRawReader)
- qas.Run(fRunLocalReconstruction, fRawReader) ;
+ if (fRunQA && fRawReader) qas.Run(fRunLocalReconstruction, fRawReader) ;
- // checking the QA of previous steps
+ // checking the QA of previous steps
CheckQA() ;
+ /*
// local reconstruction
if (!fRunLocalReconstruction.IsNull()) {
if (!RunLocalReconstruction(fRunLocalReconstruction)) {
if (fStopOnError) {CleanUp(); return kFALSE;}
}
}
-// if (!fRunVertexFinder && fRunTracking.IsNull() &&
-// fFillESD.IsNull()) return kTRUE;
+ */
// get vertexer
if (fRunVertexFinder && !CreateVertexer()) {
AliVertexerTracks tVertexer(AliTracker::GetBz());
if(fDiamondProfile && fMeanVertexConstraint) tVertexer.SetVtxStart(fDiamondProfile);
- // loop over events
-
if (fRawReader) fRawReader->RewindEvents();
- TString detStr(fFillESD) ;
ProcInfo_t ProcInfo;
gSystem->GetProcInfo(&ProcInfo);
AliInfo(Form("Current memory usage %d %d", ProcInfo.fMemResident, ProcInfo.fMemVirtual));
+
+ //Initialize the QA and start of cycle for out-of-cycle QA
+ if (fRunQA) {
+ TString detStr(fFillESD);
+ for (Int_t iDet = 0; iDet < fgkNDetectors; iDet++) {
+ if (!IsSelected(fgkDetectorName[iDet], detStr)) continue;
+ AliQADataMaker *qadm = GetQADataMaker(iDet);
+ if (!qadm) continue;
+ AliInfo(Form("Initializing the QA data maker for %s",
+ fgkDetectorName[iDet]));
+ qadm->Init(AliQA::kRECPOINTS, AliCDBManager::Instance()->GetRun());
+ qadm->Init(AliQA::kESDS, AliCDBManager::Instance()->GetRun());
+ if (!fInLoopQA) {
+ qadm->StartOfCycle(AliQA::kRECPOINTS);
+ qadm->StartOfCycle(AliQA::kESDS,"same");
+ }
+ }
+ if (fRunGlobalQA) {
+ AliQADataMaker *qadm = GetQADataMaker(fgkNDetectors);
+ AliInfo(Form("Initializing the global QA data maker"));
+ TObjArray *arr=
+ qadm->Init(AliQA::kRECPOINTS, AliCDBManager::Instance()->GetRun());
+ AliTracker::SetResidualsArray(arr);
+ if (!fInLoopQA) {
+ qadm->StartOfCycle(AliQA::kRECPOINTS);
+ }
+ }
+ }
+
+
+ //******* The loop over events
for (Int_t iEvent = 0; iEvent < fRunLoader->GetNumberOfEvents(); iEvent++) {
if (fRawReader) fRawReader->NextEvent();
if ((iEvent < fFirstEvent) || ((fLastEvent >= 0) && (iEvent > fLastEvent))) {
}
AliInfo(Form("processing event %d", iEvent));
+
+ //Start of cycle for the in-loop QA
+ if (fRunQA && fInLoopQA) {
+ TString detStr(fFillESD);
+ for (Int_t iDet = 0; iDet < fgkNDetectors; iDet++) {
+ if (!IsSelected(fgkDetectorName[iDet], detStr)) continue;
+ AliQADataMaker *qadm = GetQADataMaker(iDet);
+ if (!qadm) continue;
+ qadm->StartOfCycle(AliQA::kRECPOINTS);
+ qadm->StartOfCycle(AliQA::kESDS, "same") ;
+ }
+ if (fRunGlobalQA) {
+ AliQADataMaker *qadm = GetQADataMaker(fgkNDetectors);
+ qadm->StartOfCycle(AliQA::kRECPOINTS);
+ }
+ }
+
fRunLoader->GetEvent(iEvent);
char aFileName[256];
fRunLoader->GetHeader()->GetEventNrInRun());
if (!gSystem->AccessPathName(aFileName)) continue;
- // local reconstruction
+ // local signle event reconstruction
if (!fRunLocalReconstruction.IsNull()) {
if (!RunLocalEventReconstruction(fRunLocalReconstruction)) {
if (fStopOnError) {CleanUp(file, fileOld); return kFALSE;}
}
}
-
esd->SetRunNumber(fRunLoader->GetHeader()->GetRun());
hltesd->SetRunNumber(fRunLoader->GetHeader()->GetRun());
esd->SetEventNumberInFile(fRunLoader->GetHeader()->GetEventNrInRun());
}
}
-// if (!fFillESD.IsNull())
-
- // do QA in the event loop if requested
- if (fQAInLoop)
- RunQA(fFillESD.Data(), esd);
-
// fill Event header information from the RawEventHeader
if (fRawReader){FillRawEventHeaderESD(esd);}
esdf->~AliESDfriend();
new (esdf) AliESDfriend(); // Reset...
}
- // esdf->Reset();
- // delete esdf; esdf = 0;
- // ESD QA
gSystem->GetProcInfo(&ProcInfo);
AliInfo(Form("Event %d -> Current memory usage %d %d",iEvent, ProcInfo.fMemResident, ProcInfo.fMemVirtual));
- }
- detStr = fFillESD ;
-
- // write quality assurance ESDs data (one entry for all events)
- if (fQAInLoop) {
- for (Int_t iDet = 0; iDet < fgkNDetectors; iDet++) {
- if (!IsSelected(fgkDetectorName[iDet], detStr))
- continue;
- AliQADataMaker * qadm = GetQADataMaker(iDet);
- if (!qadm) continue;
- qadm->EndOfCycle(AliQA::kRECPOINTS);
- qadm->EndOfCycle(AliQA::kESDS);
- qadm->Finish();
- }
- }
+ // End of cycle for the in-loop QA
+ if (fRunQA && fInLoopQA) {
+ RunQA(fFillESD.Data(), esd);
+ TString detStr(fFillESD);
+ for (Int_t iDet = 0; iDet < fgkNDetectors; iDet++) {
+ if (!IsSelected(fgkDetectorName[iDet], detStr)) continue;
+ AliQADataMaker * qadm = GetQADataMaker(iDet);
+ if (!qadm) continue;
+ qadm->EndOfCycle(AliQA::kRECPOINTS);
+ qadm->EndOfCycle(AliQA::kESDS);
+ qadm->Finish();
+ }
+ if (fRunGlobalQA) {
+ AliQADataMaker *qadm = GetQADataMaker(fgkNDetectors);
+ if (qadm) {
+ qadm->EndOfCycle(AliQA::kRECPOINTS);
+ qadm->Finish();
+ }
+ }
+ }
+ }
+ //******** End of the loop over events
+
+
tree->GetUserInfo()->Add(esd);
hlttree->GetUserInfo()->Add(hltesd);
file->cd();
+
if (fWriteESDfriend)
tree->SetBranchStatus("ESDfriend*",0);
// we want to have only one tree version number
aodtagCreator->CreateAODTags(fFirstEvent,fLastEvent,fGRPList);
}
- //QA fone outside the event loop
- if (!fQAInLoop) {
- if ( fRunQA ) {
- qas.Run(fRunLocalReconstruction.Data(), AliQA::kRECPOINTS) ;
- // qas.Reset() ;
- qas.Run(fRunTracking.Data(), AliQA::kESDS) ;
- }
+ //Finish QA and end of cycle for out-of-loop QA
+ if (fRunQA && !fInLoopQA) {
+ qas.Run(fRunLocalReconstruction.Data(), AliQA::kRECPOINTS);
+ //qas.Reset() ;
+ qas.Run(fRunTracking.Data(), AliQA::kESDS);
+
+ if (fRunGlobalQA) {
+ AliQADataMaker *qadm = GetQADataMaker(fgkNDetectors);
+ if (qadm) {
+ qadm->EndOfCycle(AliQA::kRECPOINTS);
+ qadm->Finish();
+ }
+ }
}
// Cleanup of CDB manager: cache and active storages!
Bool_t AliReconstruction::RunLocalEventReconstruction(const TString& detectors)
{
// run the local reconstruction
+
static Int_t eventNr=0;
AliCodeTimerAuto("")
AliWarning(Form("No loader is defined for %s!",fgkDetectorName[iDet]));
continue;
}
-
// conversion of digits
if (fRawReader && reconstructor->HasDigitConversion()) {
AliInfo(Form("converting raw data digits into root objects for %s",
loader->WriteDigits("OVERWRITE");
loader->UnloadDigits();
}
-
// local reconstruction
AliInfo(Form("running reconstruction for %s", fgkDetectorName[iDet]));
AliCodeTimerAuto(Form("running reconstruction for %s", fgkDetectorName[iDet]));
loader->UnloadDigits();
}
- // do QA in the event loop if requested
- if (fQAInLoop) {
- AliQADataMaker * qadm = GetQADataMaker(iDet);
- if (qadm) {
- AliCodeTimerStart(Form("running quality assurance data maker for %s", fgkDetectorName[iDet]));
- AliInfo(Form("running quality assurance data maker for %s", fgkDetectorName[iDet]));
- if (qadm->IsCycleDone() ) {
- qadm->EndOfCycle(AliQA::kRECPOINTS) ;
- qadm->EndOfCycle(AliQA::kESDS) ;
- qadm->StartOfCycle(AliQA::kRECPOINTS) ;
- qadm->StartOfCycle(AliQA::kESDS, "same") ;
- }
- qadm->Exec(AliQA::kRECPOINTS, clustersTree) ;
- AliCodeTimerStop(Form("running quality assurance data maker for %s", fgkDetectorName[iDet]));
- }
- }
+ // In-loop QA for local reconstrucion
+ if (fRunQA && fInLoopQA) {
+ AliQADataMaker * qadm = GetQADataMaker(iDet);
+ if (qadm) {
+ //AliCodeTimerStart
+ //(Form("Running QA data maker for %s", fgkDetectorName[iDet]));
+ //AliInfo
+ //(Form("Running QA data maker for %s", fgkDetectorName[iDet]));
- loader->WriteRecPoints("OVERWRITE");
+ qadm->Exec(AliQA::kRECPOINTS, clustersTree) ;
+
+ //AliCodeTimerStop
+ //(Form("Running QA data maker for %s", fgkDetectorName[iDet]));
+ }
+ }
+
+ loader->WriteRecPoints("OVERWRITE");
loader->UnloadRecPoints();
AliSysInfo::AddStamp(Form("LRec%s_%d",fgkDetectorName[iDet],eventNr), iDet,1,eventNr);
}
}
// pass 2: ALL backwards
+
+ if (fRunQA && fRunGlobalQA) AliTracker::SetFillResiduals(kTRUE);
+
for (Int_t iDet = 0; iDet < fgkNDetectors; iDet++) {
if (!fTracker[iDet]) continue;
AliDebug(1, Form("%s back propagation", fgkDetectorName[iDet]));
AliSysInfo::AddStamp(Form("Tracking1%s_%d",fgkDetectorName[iDet],eventNr), iDet,3, eventNr);
}
+ if (fRunQA && fRunGlobalQA) AliTracker::SetFillResiduals(kFALSE);
+
// write space-points to the ESD in case alignment data output
// is switched on
if (fWriteAlignmentData)
WriteAlignmentData(esd);
// pass 3: TRD + TPC + ITS refit inwards
+
+
for (Int_t iDet = 2; iDet >= 0; iDet--) {
if (!fTracker[iDet]) continue;
AliDebug(1, Form("%s inward refit", fgkDetectorName[iDet]));
fLoader[iDet]->UnloadRecPoints();
AliSysInfo::AddStamp(Form("RUnloadCluster%s_%d",fgkDetectorName[iDet],eventNr), iDet,5, eventNr);
}
+
//
// Propagate track to the vertex - if not done by ITS
//
if (fQADataMaker[iDet])
return fQADataMaker[iDet];
+ AliQADataMaker * qadm = NULL;
+ if (iDet==fgkNDetectors) { //Global QA
+ qadm=new AliGlobalQADataMaker();
+ fQADataMaker[iDet] = qadm;
+ return qadm;
+ }
+
// load the QA data maker object
TPluginManager* pluginManager = gROOT->GetPluginManager();
TString detName = fgkDetectorName[iDet];
if (gAlice && !gAlice->GetDetector(detName) && (detName != "HLT"))
return NULL;
- AliQADataMaker * qadm = NULL;
// first check if a plugin is defined for the quality assurance data maker
TPluginHandler* pluginHandler = pluginManager->FindHandler("AliQADataMaker", detName);
// if not, add a plugin for it
if (pluginHandler && (pluginHandler->LoadPlugin() == 0)) {
qadm = (AliQADataMaker *) pluginHandler->ExecPlugin(0);
}
- if (qadm) {
- AliInfo(Form("Initializing quality assurance data maker for %s", fgkDetectorName[iDet]));
- qadm->Init(AliQA::kRECPOINTS, AliCDBManager::Instance()->GetRun(), GetQACycles(fgkDetectorName[iDet]));
- qadm->StartOfCycle(AliQA::kRECPOINTS);
- qadm->Init(AliQA::kESDS, AliCDBManager::Instance()->GetRun());
- qadm->StartOfCycle(AliQA::kESDS, "same") ;
- fQADataMaker[iDet] = qadm;
- }
+
+ fQADataMaker[iDet] = qadm;
return qadm;
}