#include "AliAODVertex.h"
#include "AliAODCluster.h"
-#include "AliQualAssDataMaker.h"
+#include "AliQADataMaker.h"
+
+#include "AliSysInfo.h" // memory snapshots
+
ClassImp(AliReconstruction)
fRunVertexFinder(kTRUE),
fRunHLTTracking(kFALSE),
fRunMuonTracking(kFALSE),
+ fRunV0Finder(kTRUE),
+ fRunCascadeFinder(kTRUE),
fStopOnError(kFALSE),
fWriteAlignmentData(kFALSE),
- fCleanESD(kTRUE),
fWriteESDfriend(kFALSE),
fWriteAOD(kFALSE),
fFillTriggerESD(kTRUE),
+ fCleanESD(kTRUE),
+ fDmax(50.),
+ fZmax(50.),
+
fRunLocalReconstruction("ALL"),
fRunTracking("ALL"),
fFillESD("ALL"),
+ fUseTrackingErrorsForAlignment(""),
fGAliceFileName(gAliceFilename),
fInput(""),
fEquipIdMap(""),
fAlignObjArray(NULL),
fCDBUri(cdbUri),
+ fRemoteCDBUri(""),
fSpecCDBUri()
{
// create reconstruction object with default parameters
fReconstructor[iDet] = NULL;
fLoader[iDet] = NULL;
fTracker[iDet] = NULL;
- fQualAssDataMaker[iDet] = NULL;
+ fQADataMaker[iDet] = NULL;
+ fQACycles[iDet] = 999999;
}
AliPID pid;
}
fRunVertexFinder(rec.fRunVertexFinder),
fRunHLTTracking(rec.fRunHLTTracking),
fRunMuonTracking(rec.fRunMuonTracking),
+ fRunV0Finder(rec.fRunV0Finder),
+ fRunCascadeFinder(rec.fRunCascadeFinder),
fStopOnError(rec.fStopOnError),
fWriteAlignmentData(rec.fWriteAlignmentData),
- fCleanESD(rec.fCleanESD),
fWriteESDfriend(rec.fWriteESDfriend),
fWriteAOD(rec.fWriteAOD),
fFillTriggerESD(rec.fFillTriggerESD),
+ fCleanESD(rec.fCleanESD),
+ fDmax(rec.fDmax),
+ fZmax(rec.fZmax),
+
fRunLocalReconstruction(rec.fRunLocalReconstruction),
fRunTracking(rec.fRunTracking),
fFillESD(rec.fFillESD),
+ fUseTrackingErrorsForAlignment(rec.fUseTrackingErrorsForAlignment),
fGAliceFileName(rec.fGAliceFileName),
fInput(rec.fInput),
fEquipIdMap(rec.fEquipIdMap),
fAlignObjArray(rec.fAlignObjArray),
fCDBUri(rec.fCDBUri),
+ fRemoteCDBUri(rec.fRemoteCDBUri),
fSpecCDBUri()
{
// copy constructor
fReconstructor[iDet] = NULL;
fLoader[iDet] = NULL;
fTracker[iDet] = NULL;
- fQualAssDataMaker[iDet] = NULL;
+ fQADataMaker[iDet] = NULL;
+ fQACycles[iDet] = rec.fQACycles[iDet];
}
for (Int_t i = 0; i < rec.fSpecCDBUri.GetEntriesFast(); i++) {
if (rec.fSpecCDBUri[i]) fSpecCDBUri.Add(rec.fSpecCDBUri[i]->Clone());
man->SetDefaultStorage(fCDBUri);
}
+ // Remote storage (the Grid storage) is used if it is activated
+ // and if the object is not found in the default storage
+ // OBSOLETE: Removed
+ // if (man->IsRemoteStorageSet())
+ // {
+ // AliWarning("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
+ // AliWarning("Remote CDB storage has been already set !");
+ // AliWarning(Form("Ignoring the remote storage declared in AliReconstruction: %s",fRemoteCDBUri.Data()));
+ // AliWarning("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
+ // fRemoteCDBUri = "";
+ // }
+ // else {
+ // AliDebug(2,"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
+ // AliDebug(2, Form("Remote CDB storage is set to: %s",fRemoteCDBUri.Data()));
+ // AliDebug(2, "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
+ // man->SetRemoteStorage(fRemoteCDBUri);
+ // }
+
// Now activate the detector specific CDB storage locations
for (Int_t i = 0; i < fSpecCDBUri.GetEntriesFast(); i++) {
TObject* obj = fSpecCDBUri[i];
}
+//_____________________________________________________________________________
+void AliReconstruction::SetRemoteStorage(const char* uri) {
+// Store the desired remote CDB storage location
+// Activate it later within the Run() method
+// Remote storage (the Grid storage) is used if it is activated
+// and if the object is not found in the default storage
+
+ fRemoteCDBUri = uri;
+
+}
+
//_____________________________________________________________________________
void AliReconstruction::SetSpecificStorage(const char* calibType, const char* uri) {
// Store a detector-specific CDB storage location
}
}
- // check that calibType refers to a "valid" detector name
- Bool_t isDetector = kFALSE;
- for (Int_t iDet = 0; iDet < fgkNDetectors; iDet++) {
- TString detName = fgkDetectorName[iDet];
- if(aPath.GetLevel0() == detName) {
- isDetector = kTRUE;
- break;
- }
- }
-
- if(!isDetector) {
- AliError(Form("Not a valid detector: %s", aPath.GetLevel0().Data()));
- return;
- }
+// // check that calibType refers to a "valid" detector name
+// Bool_t isDetector = kFALSE;
+// for (Int_t iDet = 0; iDet < fgkNDetectors; iDet++) {
+// TString detName = fgkDetectorName[iDet];
+// if(aPath.GetLevel0() == detName) {
+// isDetector = kTRUE;
+// break;
+// }
+// }
+//
+// if(!isDetector) {
+// AliError(Form("Not a valid detector: %s", aPath.GetLevel0().Data()));
+// return;
+// }
TObject* obj = fSpecCDBUri.FindObject(aPath.GetPath().Data());
if (obj) fSpecCDBUri.Remove(obj);
loadAlObjsListOfDets += fgkDetectorName[iDet];
loadAlObjsListOfDets += " ";
} // end loop over detectors
+ loadAlObjsListOfDets.Prepend("GRP "); //add alignment objects for non-sensitive modules
AliGeomManager::ApplyAlignObjsFromCDB(loadAlObjsListOfDets.Data());
}else{
// Check if the array with alignment objects was
if (!fEquipIdMap.IsNull() && fRawReader)
fRawReader->LoadEquipmentIdsMap(fEquipIdMap);
-
+ AliSysInfo::AddStamp("Start");
// get the run loader
if (!InitRunLoader()) return kFALSE;
+ AliSysInfo::AddStamp("LoadLoader");
// Initialize the CDB storage
InitCDBStorage();
+ AliSysInfo::AddStamp("LoadCDB");
// Set run number in CDBManager (if it is not already set by the user)
if (!SetRunNumber()) if (fStopOnError) return kFALSE;
if (!gGeoManager) if (fStopOnError) return kFALSE;
}
- AliCDBManager* man = AliCDBManager::Instance();
if (!MisalignGeometry(fLoadAlignData)) if (fStopOnError) return kFALSE;
+ AliSysInfo::AddStamp("LoadGeom");
// local reconstruction
if (!fRunLocalReconstruction.IsNull()) {
return kFALSE;
}
}
+ AliSysInfo::AddStamp("Vertexer");
// get trackers
if (!fRunTracking.IsNull() && !CreateTrackers(fRunTracking)) {
return kFALSE;
}
}
+ AliSysInfo::AddStamp("LoadTrackers");
// get the possibly already existing ESD file and tree
AliESDEvent* esd = new AliESDEvent(); AliESDEvent* hltesd = new AliESDEvent();
if (fRawReader) fRawReader->RewindEvents();
TString detStr(fFillESD) ;
-// initialises quality assurance for ESDs
- for (Int_t iDet = 0; iDet < fgkNDetectors; iDet++) {
- if (!IsSelected(fgkDetectorName[iDet], detStr))
- continue;
- AliQualAssDataMaker * qadm = GetQualAssDataMaker(iDet);
- if (!qadm)
- continue;
- qadm->Init(AliQualAss::kESDS) ;
- }
+ ProcInfo_t ProcInfo;
+ gSystem->GetProcInfo(&ProcInfo);
+ AliInfo(Form("Current memory usage %d %d", ProcInfo.fMemResident, ProcInfo.fMemVirtual));
+
+ // checking the QA of previous steps
+ CheckQA() ;
for (Int_t iEvent = 0; iEvent < fRunLoader->GetNumberOfEvents(); iEvent++) {
if (fRawReader) fRawReader->NextEvent();
}
if (!fFillESD.IsNull())
- RunQualAss(fFillESD.Data(), esd);
+ RunQA(fFillESD.Data(), esd);
// fill Event header information from the RawEventHeader
if (fRawReader){FillRawEventHeaderESD(esd);}
}
}
+ file->cd();
+
//Try to improve the reconstructed primary vertex position using the tracks
AliESDVertex *pvtx=0;
Bool_t dovertex=kTRUE;
}
}
- {
- // V0 finding
- AliV0vertexer vtxer;
- vtxer.Tracks2V0vertices(esd);
+ if (fRunV0Finder) {
+ // V0 finding
+ AliV0vertexer vtxer;
+ vtxer.Tracks2V0vertices(esd);
- // Cascade finding
- AliCascadeVertexer cvtxer;
- cvtxer.V0sTracks2CascadeVertices(esd);
+ if (fRunCascadeFinder) {
+ // Cascade finding
+ AliCascadeVertexer cvtxer;
+ cvtxer.V0sTracks2CascadeVertices(esd);
+ }
}
// write ESD
if (fCleanESD) CleanESD(esd);
if (fWriteESDfriend) {
+ esdf->~AliESDfriend();
new (esdf) AliESDfriend(); // Reset...
esd->GetESDfriend(esdf);
}
esd->Reset();
hltesd->Reset();
if (fWriteESDfriend) {
+ 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 ;
for (Int_t iDet = 0; iDet < fgkNDetectors; iDet++) {
if (!IsSelected(fgkDetectorName[iDet], detStr))
continue;
- AliQualAssDataMaker * qadm = GetQualAssDataMaker(iDet);
- if (!qadm)
- continue;
- qadm->Finish(AliQualAss::kESDS) ;
+ AliQADataMaker * qadm = GetQADataMaker(iDet);
+ if (!qadm) continue;
+ qadm->EndOfCycle(AliQA::kRECPOINTS);
+ qadm->EndOfCycle(AliQA::kESDS);
+ qadm->Finish(AliQA::kRECPOINTS);
+ qadm->Finish(AliQA::kESDS) ;
}
tree->GetUserInfo()->Add(esd);
file->cd();
if (fWriteESDfriend)
tree->SetBranchStatus("ESDfriend*",0);
- tree->Write();
+ // we want to have only one tree version number
+ tree->Write(tree->GetName(),TObject::kOverwrite);
hlttree->Write();
if (fWriteAOD) {
Bool_t AliReconstruction::RunLocalReconstruction(const TString& detectors)
{
// run the local reconstruction
-
+ static Int_t eventNr=0;
AliCodeTimerAuto("")
- AliCDBManager* man = AliCDBManager::Instance();
- Bool_t origCache = man->GetCacheFlag();
+ // AliCDBManager* man = AliCDBManager::Instance();
+// Bool_t origCache = man->GetCacheFlag();
- TString detStr = detectors;
- for (Int_t iDet = 0; iDet < fgkNDetectors; iDet++) {
- if (!IsSelected(fgkDetectorName[iDet], detStr)) continue;
- AliReconstructor* reconstructor = GetReconstructor(iDet);
- if (!reconstructor) continue;
- if (reconstructor->HasLocalReconstruction()) continue;
+// TString detStr = detectors;
+// for (Int_t iDet = 0; iDet < fgkNDetectors; iDet++) {
+// if (!IsSelected(fgkDetectorName[iDet], detStr)) continue;
+// AliReconstructor* reconstructor = GetReconstructor(iDet);
+// if (!reconstructor) continue;
+// if (reconstructor->HasLocalReconstruction()) continue;
- AliCodeTimerStart(Form("running reconstruction for %s", fgkDetectorName[iDet]));
- AliInfo(Form("running reconstruction for %s", fgkDetectorName[iDet]));
+// AliCodeTimerStart(Form("running reconstruction for %s", fgkDetectorName[iDet]));
+// AliInfo(Form("running reconstruction for %s", fgkDetectorName[iDet]));
- AliCodeTimerStart(Form("Loading calibration data from OCDB for %s", fgkDetectorName[iDet]));
- AliInfo(Form("Loading calibration data from OCDB for %s", fgkDetectorName[iDet]));
+// AliCodeTimerStart(Form("Loading calibration data from OCDB for %s", fgkDetectorName[iDet]));
+// AliInfo(Form("Loading calibration data from OCDB for %s", fgkDetectorName[iDet]));
- man->SetCacheFlag(kTRUE);
- TString calibPath = Form("%s/Calib/*", fgkDetectorName[iDet]);
- man->GetAll(calibPath); // entries are cached!
+// man->SetCacheFlag(kTRUE);
+// TString calibPath = Form("%s/Calib/*", fgkDetectorName[iDet]);
+// man->GetAll(calibPath); // entries are cached!
- AliCodeTimerStop(Form("Loading calibration data from OCDB for %s", fgkDetectorName[iDet]));
+// AliCodeTimerStop(Form("Loading calibration data from OCDB for %s", fgkDetectorName[iDet]));
- if (fRawReader) {
- fRawReader->RewindEvents();
- reconstructor->Reconstruct(fRunLoader, fRawReader);
- } else {
- reconstructor->Reconstruct(fRunLoader);
- }
+// if (fRawReader) {
+// fRawReader->RewindEvents();
+// reconstructor->Reconstruct(fRunLoader, fRawReader);
+// } else {
+// reconstructor->Reconstruct(fRunLoader);
+// }
- AliCodeTimerStop(Form("running reconstruction for %s", fgkDetectorName[iDet]));
+// AliCodeTimerStop(Form("running reconstruction for %s", fgkDetectorName[iDet]));
+ // AliSysInfo::AddStamp(Form("LRec%s_%d",fgkDetectorName[iDet],eventNr));
- // unload calibration data
- man->UnloadFromCache(calibPath);
- //man->ClearCache();
- }
+// // unload calibration data
+// man->UnloadFromCache(calibPath);
+// //man->ClearCache();
+// }
- man->SetCacheFlag(origCache);
+// man->SetCacheFlag(origCache);
- if ((detStr.CompareTo("ALL") != 0) && !detStr.IsNull()) {
- AliError(Form("the following detectors were not found: %s",
- detStr.Data()));
- if (fStopOnError) return kFALSE;
- }
+// if ((detStr.CompareTo("ALL") != 0) && !detStr.IsNull()) {
+// AliError(Form("the following detectors were not found: %s",
+// detStr.Data()));
+// if (fStopOnError) return kFALSE;
+// }
+ eventNr++;
return kTRUE;
}
Bool_t AliReconstruction::RunLocalEventReconstruction(const TString& detectors)
{
// run the local reconstruction
-
+ static Int_t eventNr=0;
AliCodeTimerAuto("")
TString detStr = detectors;
AliReconstructor* reconstructor = GetReconstructor(iDet);
if (!reconstructor) continue;
AliLoader* loader = fLoader[iDet];
+ if (!loader) {
+ AliWarning(Form("No loader is defined for %s!",fgkDetectorName[iDet]));
+ continue;
+ }
// conversion of digits
if (fRawReader && reconstructor->HasDigitConversion()) {
}
// local reconstruction
- if (!reconstructor->HasLocalReconstruction()) continue;
AliInfo(Form("running reconstruction for %s", fgkDetectorName[iDet]));
AliCodeTimerAuto(Form("running reconstruction for %s", fgkDetectorName[iDet]));
loader->LoadRecPoints("update");
}
loader->UnloadDigits();
}
+
+ 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]));
+ }
+
loader->WriteRecPoints("OVERWRITE");
loader->UnloadRecPoints();
+ AliSysInfo::AddStamp(Form("LRec%s_%d",fgkDetectorName[iDet],eventNr), iDet,1,eventNr);
}
if ((detStr.CompareTo("ALL") != 0) && !detStr.IsNull()) {
detStr.Data()));
if (fStopOnError) return kFALSE;
}
-
+ eventNr++;
return kTRUE;
}
TString detName = fgkDetectorName[iDet];
AliDebug(1, Form("%s HLT tracking", detName.Data()));
reconstructor->SetOption(detName.Data());
- AliTracker *tracker = reconstructor->CreateTracker(fRunLoader);
+ AliTracker *tracker = reconstructor->CreateTracker();
if (!tracker) {
AliWarning(Form("couldn't create a HLT tracker for %s", detName.Data()));
if (fStopOnError) return kFALSE;
TString detName = fgkDetectorName[iDet];
AliDebug(1, Form("%s tracking", detName.Data()));
- AliTracker *tracker = reconstructor->CreateTracker(fRunLoader);
+ AliTracker *tracker = reconstructor->CreateTracker();
if (!tracker) {
AliWarning(Form("couldn't create a tracker for %s", detName.Data()));
return kFALSE;
Bool_t AliReconstruction::RunTracking(AliESDEvent*& esd)
{
// run the barrel tracking
-
+ static Int_t eventNr=0;
AliCodeTimerAuto("")
AliInfo("running tracking");
//Fill the ESD with the T0 info (will be used by the TOF)
- if (fReconstructor[11])
- GetReconstructor(11)->FillESD(fRunLoader, esd);
+ if (fReconstructor[11] && fLoader[11]) {
+ fLoader[11]->LoadRecPoints("READ");
+ TTree *treeR = fLoader[11]->TreeR();
+ GetReconstructor(11)->FillESD((TTree *)NULL,treeR,esd);
+ }
// pass 1: TPC + ITS inwards
for (Int_t iDet = 1; iDet >= 0; iDet--) {
// load clusters
fLoader[iDet]->LoadRecPoints("read");
+ AliSysInfo::AddStamp(Form("RLoadCluster%s_%d",fgkDetectorName[iDet],eventNr),iDet,1, eventNr);
TTree* tree = fLoader[iDet]->TreeR();
if (!tree) {
AliError(Form("Can't get the %s cluster tree", fgkDetectorName[iDet]));
return kFALSE;
}
fTracker[iDet]->LoadClusters(tree);
-
+ AliSysInfo::AddStamp(Form("TLoadCluster%s_%d",fgkDetectorName[iDet],eventNr), iDet,2, eventNr);
// run tracking
if (fTracker[iDet]->Clusters2Tracks(esd) != 0) {
AliError(Form("%s Clusters2Tracks failed", fgkDetectorName[iDet]));
}
// preliminary PID in TPC needed by the ITS tracker
if (iDet == 1) {
- GetReconstructor(1)->FillESD(fRunLoader, esd);
GetReconstructor(1)->FillESD((TTree*)NULL, (TTree*)NULL, esd);
AliESDpid::MakePID(esd);
- }
+ }
+ AliSysInfo::AddStamp(Form("Tracking0%s_%d",fgkDetectorName[iDet],eventNr), iDet,3,eventNr);
}
// pass 2: ALL backwards
if (iDet > 1) { // all except ITS, TPC
TTree* tree = NULL;
fLoader[iDet]->LoadRecPoints("read");
+ 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;
}
- fTracker[iDet]->LoadClusters(tree);
+ fTracker[iDet]->LoadClusters(tree);
+ AliSysInfo::AddStamp(Form("TLoadCluster0%s_%d",fgkDetectorName[iDet],eventNr), iDet,2, eventNr);
}
// run tracking
}
// updated PID in TPC needed by the ITS tracker -MI
if (iDet == 1) {
- GetReconstructor(1)->FillESD(fRunLoader, esd);
GetReconstructor(1)->FillESD((TTree*)NULL, (TTree*)NULL, esd);
AliESDpid::MakePID(esd);
}
+ AliSysInfo::AddStamp(Form("Tracking1%s_%d",fgkDetectorName[iDet],eventNr), iDet,3, eventNr);
}
// write space-points to the ESD in case alignment data output
if (fCheckPointLevel > 1) {
WriteESD(esd, Form("%s.refit", fgkDetectorName[iDet]));
}
-
+ AliSysInfo::AddStamp(Form("Tracking2%s_%d",fgkDetectorName[iDet],eventNr), iDet,3, eventNr);
// unload clusters
fTracker[iDet]->UnloadClusters();
+ AliSysInfo::AddStamp(Form("TUnloadCluster%s_%d",fgkDetectorName[iDet],eventNr), iDet,4, eventNr);
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
AliTracker::PropagateTrackTo(track,kRadius,track->GetMass(),kMaxStep,kTRUE);
track->RelateToVertex(esd->GetVertex(),fieldZ, kMaxD);
}
-
+ eventNr++;
return kTRUE;
}
//
AliInfo("Cleaning the ESD...");
-
- const AliESDVertex *vertex=esd->GetVertex();
- Double_t vz=vertex->GetZv();
-
Int_t nTracks=esd->GetNumberOfTracks();
- for (Int_t i=0; i<nTracks; i++) {
- AliESDtrack *track=esd->GetTrack(i);
+ AliInfo(Form("Number of ESD tracks before cleaning %d",nTracks));
- Float_t xy,z; track->GetImpactParameters(xy,z);
- if (TMath::Abs(xy) < 50.) continue;
- if (vertex->GetStatus())
- if (TMath::Abs(vz-z) < 5.) continue;
+ Float_t cleanPars[]={fDmax,fZmax};
+ Bool_t rc=esd->Clean(cleanPars);
- esd->RemoveTrack(i);
- }
+ nTracks=esd->GetNumberOfTracks();
+ AliInfo(Form("Number of ESD tracks after cleaning %d",nTracks));
- return kTRUE;
+ return rc;
}
//_____________________________________________________________________________
// fill the event summary data
AliCodeTimerAuto("")
-
+ static Int_t eventNr=0;
TString detStr = detectors;
for (Int_t iDet = 0; iDet < fgkNDetectors; iDet++) {
if (!IsSelected(fgkDetectorName[iDet], detStr)) continue;
if (!ReadESD(esd, fgkDetectorName[iDet])) {
AliDebug(1, Form("filling ESD for %s", fgkDetectorName[iDet]));
TTree* clustersTree = NULL;
- if (reconstructor->HasLocalReconstruction() && fLoader[iDet]) {
+ if (fLoader[iDet]) {
fLoader[iDet]->LoadRecPoints("read");
clustersTree = fLoader[iDet]->TreeR();
if (!clustersTree) {
reconstructor->FillESD(digitsTree, clustersTree, esd);
if (fLoader[iDet]) fLoader[iDet]->UnloadDigits();
}
- if (reconstructor->HasLocalReconstruction() && fLoader[iDet]) {
+ if (fLoader[iDet]) {
fLoader[iDet]->UnloadRecPoints();
}
- if (fRawReader) {
- reconstructor->FillESD(fRunLoader, fRawReader, esd);
- } else {
- reconstructor->FillESD(fRunLoader, esd);
- }
if (fCheckPointLevel > 2) WriteESD(esd, fgkDetectorName[iDet]);
}
}
detStr.Data()));
if (fStopOnError) return kFALSE;
}
-
+ AliSysInfo::AddStamp(Form("FillESD%d",eventNr), 0,1, eventNr);
+ eventNr++;
return kTRUE;
}
TString recName = "Ali" + detName + "Reconstructor";
if (gAlice && !gAlice->GetDetector(detName) && (detName != "HLT")) return NULL;
- if (detName == "HLT") {
- if (!gROOT->GetClass("AliLevel3")) {
- gSystem->Load("libAliHLTSrc.so");
- gSystem->Load("libAliHLTMisc.so");
- gSystem->Load("libAliHLTHough.so");
- gSystem->Load("libAliHLTComp.so");
- }
- }
-
AliReconstructor* reconstructor = NULL;
// first check if a plugin is defined for the reconstructor
TPluginHandler* pluginHandler =
if (reconstructor) {
TObject* obj = fOptions.FindObject(detName.Data());
if (obj) reconstructor->SetOption(obj->GetTitle());
- reconstructor->Init(fRunLoader);
+ reconstructor->Init();
fReconstructor[iDet] = reconstructor;
}
fVertexer = NULL;
AliReconstructor* itsReconstructor = GetReconstructor(0);
if (itsReconstructor) {
- fVertexer = itsReconstructor->CreateVertexer(fRunLoader);
+ fVertexer = itsReconstructor->CreateVertexer();
}
if (!fVertexer) {
AliWarning("couldn't create a vertexer for ITS");
}
- fTracker[iDet] = reconstructor->CreateTracker(fRunLoader);
+ fTracker[iDet] = reconstructor->CreateTracker();
if (!fTracker[iDet] && (iDet < 7)) {
AliWarning(Form("couldn't create a tracker for %s", detName.Data()));
if (fStopOnError) return kFALSE;
}
+ AliSysInfo::AddStamp(Form("LTracker%s",fgkDetectorName[iDet]), iDet,0);
}
return kTRUE;
fLoader[iDet] = NULL;
delete fTracker[iDet];
fTracker[iDet] = NULL;
- delete fQualAssDataMaker[iDet];
- fQualAssDataMaker[iDet] = NULL;
+ delete fQADataMaker[iDet];
+ fQADataMaker[iDet] = NULL;
}
delete fVertexer;
fVertexer = NULL;
for (Int_t nCascade = 0; nCascade < nCascades; ++nCascade) {
AliESDcascade *cascade = esd->GetCascade(nCascade);
- cascade->GetXYZ(pos[0], pos[1], pos[2]);
+ cascade->GetXYZcascade(pos[0], pos[1], pos[2]); // Bo: bug correction
cascade->GetPosCovXi(covVtx);
// Add the cascade vertex
Int_t posFromV0 = cascade->GetPindex();
Int_t negFromV0 = cascade->GetNindex();
-
AliESDv0 * v0 = 0x0;
Int_t indV0 = -1;
AliAODTrack *primTrack = NULL;
Char_t ttype=AliAODCluster::kUndef;
- if (cluster->IsPHOS()) ttype=AliAODCluster::kPHOSNeutral;
- else if (cluster->IsEMCAL()) {
-
- if (cluster->GetClusterType() == AliESDCaloCluster::kPseudoCluster)
- ttype = AliAODCluster::kEMCALPseudoCluster;
- else
- ttype = AliAODCluster::kEMCALClusterv1;
-
+ if (cluster->GetClusterType() == AliESDCaloCluster::kPHOSCluster){
+ ttype = AliAODCluster::kPHOSNeutral;
}
+ else if (cluster->GetClusterType() == AliESDCaloCluster::kEMCALClusterv1){
+ ttype = AliAODCluster::kEMCALClusterv1;
+ }
+ else if (cluster->GetClusterType() == AliESDCaloCluster::kEMCALPseudoCluster){
+ ttype = AliAODCluster::kEMCALPseudoCluster;
+ }
new(clusters[jClusters++]) AliAODCluster(id,
label,
Int_t isp = 0;
Int_t isp2 = 0;
while (isp < nspdet) {
- Bool_t isvalid = tracker->GetTrackPoint(idx[isp2],p); isp2++;
+ Bool_t isvalid;
+ if(IsSelected(fgkDetectorName[iDet],fUseTrackingErrorsForAlignment)) {
+ isvalid = tracker->GetTrackPointTrackingError(idx[isp2],p,track);
+ } else {
+ isvalid = tracker->GetTrackPoint(idx[isp2],p);
+ }
+ isp2++;
const Int_t kNTPCmax = 159;
if (iDet==1 && isp2>kNTPCmax) break; // to be fixed
if (!isvalid) continue;
out.close();
}
+
+
//_____________________________________________________________________________
-AliQualAssDataMaker * AliReconstruction::GetQualAssDataMaker(Int_t iDet)
+AliQADataMaker * AliReconstruction::GetQADataMaker(Int_t iDet)
{
// get the quality assurance data maker object and the loader for a detector
- if (fQualAssDataMaker[iDet])
- return fQualAssDataMaker[iDet];
+ if (fQADataMaker[iDet])
+ return fQADataMaker[iDet];
// load the QA data maker object
TPluginManager* pluginManager = gROOT->GetPluginManager();
TString detName = fgkDetectorName[iDet];
- TString qadmName = "Ali" + detName + "QualAssDataMaker";
+ TString qadmName = "Ali" + detName + "QADataMaker";
if (gAlice && !gAlice->GetDetector(detName) && (detName != "HLT"))
return NULL;
- AliQualAssDataMaker * qadm = NULL;
+ AliQADataMaker * qadm = NULL;
// first check if a plugin is defined for the quality assurance data maker
- TPluginHandler* pluginHandler = pluginManager->FindHandler("AliQualAssDataMaker", detName);
+ TPluginHandler* pluginHandler = pluginManager->FindHandler("AliQADataMaker", detName);
// if not, add a plugin for it
if (!pluginHandler) {
AliDebug(1, Form("defining plugin for %s", qadmName.Data()));
TString libs = gSystem->GetLibraries();
if (libs.Contains("lib" + detName + "base.so") ||
(gSystem->Load("lib" + detName + "base.so") >= 0)) {
- pluginManager->AddHandler("AliQualAssDataMaker", detName,
+ pluginManager->AddHandler("AliQADataMaker", detName,
qadmName, detName + "qadm", qadmName + "()");
} else {
- pluginManager->AddHandler("AliQualAssDataMaker", detName,
+ pluginManager->AddHandler("AliQADataMaker", detName,
qadmName, detName, qadmName + "()");
}
- pluginHandler = pluginManager->FindHandler("AliQualAssDataMaker", detName);
+ pluginHandler = pluginManager->FindHandler("AliQADataMaker", detName);
}
if (pluginHandler && (pluginHandler->LoadPlugin() == 0)) {
- qadm = (AliQualAssDataMaker *) pluginHandler->ExecPlugin(0);
+ qadm = (AliQADataMaker *) pluginHandler->ExecPlugin(0);
}
if (qadm) {
- // TObject* obj = fOptions.FindObject(detName.Data());
- // if (obj) reconstructor->SetOption(obj->GetTitle());
- fQualAssDataMaker[iDet] = 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;
}
- // get or create the loader
- fLoader[iDet] = fRunLoader->GetLoader(detName + "Loader");
- if (!fLoader[iDet]) {
- AliConfig::Instance()
- ->CreateDetectorFolders(fRunLoader->GetEventFolder(),
- detName, detName);
- // first check if a plugin is defined for the loader
- pluginHandler =
- pluginManager->FindHandler("AliLoader", detName);
- // if not, add a plugin for it
- if (!pluginHandler) {
- TString loaderName = "Ali" + detName + "Loader";
- AliDebug(1, Form("defining plugin for %s", loaderName.Data()));
- pluginManager->AddHandler("AliLoader", detName,
- loaderName, detName + "base",
- loaderName + "(const char*, TFolder*)");
- pluginHandler = pluginManager->FindHandler("AliLoader", detName);
- }
- if (pluginHandler && (pluginHandler->LoadPlugin() == 0)) {
- fLoader[iDet] =
- (AliLoader*) pluginHandler->ExecPlugin(2, detName.Data(),
- fRunLoader->GetEventFolder());
- }
- if (!fLoader[iDet]) { // use default loader
- fLoader[iDet] = new AliLoader(detName, fRunLoader->GetEventFolder());
- }
- if (!fLoader[iDet]) {
- AliWarning(Form("couldn't get loader for %s", detName.Data()));
- if (fStopOnError) return NULL;
- } else {
- fRunLoader->AddLoader(fLoader[iDet]);
- fRunLoader->CdGAFile();
- if (gFile && !gFile->IsWritable()) gFile->ReOpen("UPDATE");
- fRunLoader->Write(0, TObject::kOverwrite);
- }
- }
-
return qadm;
}
//_____________________________________________________________________________
-Bool_t AliReconstruction::RunQualAss(const char* detectors, AliESDEvent *& esd)
+Bool_t AliReconstruction::RunQA(const char* detectors, AliESDEvent *& esd)
{
// run the Quality Assurance data producer
for (Int_t iDet = 0; iDet < fgkNDetectors; iDet++) {
if (!IsSelected(fgkDetectorName[iDet], detStr))
continue;
- AliQualAssDataMaker * qadm = GetQualAssDataMaker(iDet);
+ AliQADataMaker * qadm = GetQADataMaker(iDet);
if (!qadm)
continue;
AliCodeTimerStart(Form("running quality assurance data maker for %s", fgkDetectorName[iDet]));
AliInfo(Form("running quality assurance data maker for %s", fgkDetectorName[iDet]));
- qadm->SetData(esd) ;
- qadm->Exec(AliQualAss::kESDS) ;
+ qadm->Exec(AliQA::kESDS, esd) ;
+ qadm->Increment() ;
AliCodeTimerStop(Form("running quality assurance data maker for %s", fgkDetectorName[iDet]));
}
}
return kTRUE;
+
+}
+
+
+//_____________________________________________________________________________
+void AliReconstruction::CheckQA()
+{
+// check the QA of SIM for this run and remove the detectors
+// with status Fatal
+
+ TString newDetList ;
+ for (Int_t iDet = 0; iDet < AliQA::kNDET; iDet++) {
+ TString detName(AliQA::GetDetName(iDet)) ;
+ if ( fRunLocalReconstruction.Contains(AliQA::GetDetName(iDet)) ||
+ fRunLocalReconstruction.Contains("ALL") ) {
+ AliQA * qa = AliQA::Instance(AliQA::DETECTORINDEX(iDet)) ;
+ if ( qa->IsSet(AliQA::DETECTORINDEX(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 ( qa->IsSet(AliQA::DETECTORINDEX(iDet), AliQA::kSIM, AliQA::kERROR)) {
+ AliError(Form("QA status for %s in Hits and/or SDIGITS and/or Digits was ERROR", detName.Data())) ;
+ newDetList += detName ;
+ newDetList += " " ;
+ } else if ( qa->IsSet(AliQA::DETECTORINDEX(iDet), AliQA::kSIM, AliQA::kWARNING) ) {
+ AliWarning(Form("QA status for %s in Hits and/or SDIGITS and/or Digits was WARNING", detName.Data())) ;
+ newDetList += detName ;
+ newDetList += " " ;
+ } else if ( qa->IsSet(AliQA::DETECTORINDEX(iDet), AliQA::kSIM, AliQA::kINFO) ) {
+ AliInfo(Form("QA status for %s in Hits and/or SDIGITS and/or Digits was INFO", detName.Data())) ;
+ newDetList += detName ;
+ newDetList += " " ;
+ }
+ }
+ }
+ fRunLocalReconstruction = newDetList ;
+}
+
+//_____________________________________________________________________________
+Int_t AliReconstruction::GetDetIndex(const char* detector)
+{
+ // return the detector index corresponding to detector
+ Int_t index = -1 ;
+ for (index = 0; index < fgkNDetectors ; index++) {
+ if ( strcmp(detector, fgkDetectorName[index]) == 0 )
+ break ;
+ }
+ return index ;
}