#include "AliVertexerTracks.h"
#include "AliTriggerRunScalers.h"
#include "AliCTPTimeParams.h"
+#include "AliESDHLTDecision.h"
ClassImp(AliReconstruction)
fRunMuonTracking(kFALSE),
fRunV0Finder(kTRUE),
fRunCascadeFinder(kTRUE),
- fStopOnError(kFALSE),
+ fStopOnError(kTRUE),
fWriteAlignmentData(kFALSE),
fWriteESDfriend(kFALSE),
fFillTriggerESD(kTRUE),
AliError("GRP/GRP/Data entry: missing value for the beam energy ! Using 0");
beamEnergy = 0;
}
- // LHC: "multiply by 120 to get the energy in MeV"
- beamEnergy *= 0.120;
TString runType = fGRPData->GetRunType();
if (runType==AliGRPObject::GetInvalidString()) {
ftree = new TTree("esdTree", "Tree with ESD objects");
fesd = new AliESDEvent();
fesd->CreateStdContent();
+ if (fesd->GetESDRun()) ((AliESDRun*)fesd->GetESDRun())->SetBeamEnergyIsSqrtSHalfGeV();
+ // add a so far non-std object to the ESD, this will
+ // become part of the std content
+ fesd->AddObject(new AliESDHLTDecision);
fesd->WriteToTree(ftree);
if (fWriteESDfriend) {
fhlttree = new TTree("HLTesdTree", "Tree with HLT ESD objects");
fhltesd = new AliESDEvent();
fhltesd->CreateStdContent();
-
+ if (fhltesd->GetESDRun()) ((AliESDRun*)fhltesd->GetESDRun())->SetBeamEnergyIsSqrtSHalfGeV();
// read the ESD template from CDB
// HLT is allowed to put non-std content to its ESD, the non-std
// objects need to be created before invocation of WriteToTree in
// run the reconstruction over a single event
// The event loop is steered in Run method
+
+ static Long_t oldMres=0;
+ static Long_t oldMvir=0;
+ static Float_t oldCPU=0;
+
AliCodeTimerAuto("",0);
+ AliESDpid PID;
+
if (iEvent >= fRunLoader->GetNumberOfEvents()) {
fRunLoader->SetEventNumber(iEvent);
fRunLoader->GetHeader()->Reset(fRawReader->GetRunNumber(),
return kTRUE;
}
- AliInfo(Form("processing event %d", iEvent));
fRunLoader->GetEvent(iEvent);
// Fill Event-info object
GetEventInfo();
fRecoParam.SetEventSpecie(fRunInfo,fEventInfo,fListOfCosmicTriggers);
- AliInfo(Form("Current event specie: %s",fRecoParam.PrintEventSpecie()));
+ AliInfo(Form("================================= Processing event %d of type %-10s ==================================", iEvent,fRecoParam.PrintEventSpecie()));
// Set the reco-params
{
if (reconstructor && fRecoParam.GetDetRecoParamArray(iDet)) {
const AliDetectorRecoParam *par = fRecoParam.GetDetRecoParam(iDet);
reconstructor->SetRecoParam(par);
+ reconstructor->GetPidSettings(&PID);
reconstructor->SetEventInfo(&fEventInfo);
if (fRunQA) {
AliQAManager::QAManager()->SetRecoParam(iDet, par) ;
}
}
}
+ const AliDetectorRecoParam *grppar = fRecoParam.GetDetRecoParam(kNDetectors);
+ AliQAManager::QAManager()->SetRecoParam(AliQAv1::kGLOBAL, grppar) ;
+ AliQAManager::QAManager()->SetEventSpecie(AliRecoParam::Convert(grppar->GetEventSpecie())) ;
}
// QA on single raw
detectors=fRunLocalReconstruction;
detectors.ReplaceAll("HLT", "");
if (!RunLocalEventReconstruction(detectors)) {
- if (fStopOnError) {CleanUp(); return kFALSE;}
+ if (fStopOnError) {
+ CleanUp();
+ return kFALSE;
+ }
}
}
+
+ // fill Event header information from the RawEventHeader
+ if (fRawReader){FillRawEventHeaderESD(fesd);}
+ if (fRawReader){FillRawEventHeaderESD(fhltesd);}
+
fesd->SetRunNumber(fRunLoader->GetHeader()->GetRun());
fhltesd->SetRunNumber(fRunLoader->GetHeader()->GetRun());
fesd->SetEventNumberInFile(fRunLoader->GetHeader()->GetEventNrInRun());
fhltesd->SetEventNumberInFile(fRunLoader->GetHeader()->GetEventNrInRun());
+
+ fesd->SetEventSpecie(fRecoParam.GetEventSpecie());
+ fhltesd->SetEventSpecie(fRecoParam.GetEventSpecie());
// Set magnetic field from the tracker
fesd->SetMagneticField(AliTracker::GetBz());
// barrel tracking
if (!fRunTracking.IsNull()) {
- if (!RunTracking(fesd)) {
+ if (!RunTracking(fesd,PID)) {
if (fStopOnError) {CleanUp(); return kFALSE;}
}
}
if (fStopOnError) {CleanUp(); return kFALSE;}
}
}
-
- // fill Event header information from the RawEventHeader
- if (fRawReader){FillRawEventHeaderESD(fesd);}
- if (fRawReader){FillRawEventHeaderESD(fhltesd);}
-
+
// combined PID
- AliESDpid::MakePID(fesd);
+ PID.MakePID(fesd);
if (fFillTriggerESD) {
if (!FillTriggerESD(fesd)) {
if (fRunQA && IsInTasks(AliQAv1::kESDS)) {
AliQAManager::QAManager()->SetEventSpecie(fRecoParam.GetEventSpecie()) ;
- AliQAManager::QAManager()->RunOneEvent(fesd) ;
+ AliQAManager::QAManager()->RunOneEvent(fesd, fhltesd) ;
}
if (fRunGlobalQA) {
AliQADataMaker *qadm = AliQAManager::QAManager()->GetQADataMaker(AliQAv1::kGLOBAL);
qadm->Exec(AliQAv1::kESDS, fesd);
}
+ // copy HLT decision from HLTesd to esd
+ // the most relevant information is stored in a reduced container in the esd,
+ // while the full information can be found in the HLTesd
+ TObject* pHLTSrc=fhltesd->FindListObject(AliESDHLTDecision::Name());
+ TObject* pHLTTgt=fesd->FindListObject(AliESDHLTDecision::Name());
+ if (pHLTSrc && pHLTTgt) {
+ pHLTSrc->Copy(*pHLTTgt);
+ }
+
if (fWriteESDfriend) {
// fesdf->~AliESDfriend();
// new (fesdf) AliESDfriend(); // Reset...
ProcInfo_t procInfo;
gSystem->GetProcInfo(&procInfo);
- AliInfo(Form("Event %d -> Current memory usage %d %d",iEvent, procInfo.fMemResident, procInfo.fMemVirtual));
+ AliInfo(Form("========================= End Event %d: memory res %d(%3d) vir %d(%3d) CPU %5.2f =====================",
+ iEvent, procInfo.fMemResident/1024, (procInfo.fMemResident-oldMres)/1024,
+ procInfo.fMemVirtual/1024,(procInfo.fMemVirtual-oldMvir)/1024,procInfo.fCpuUser+procInfo.fCpuSys-oldCPU));
+ oldMres=procInfo.fMemResident;
+ oldMvir=procInfo.fMemVirtual;
+ oldCPU=procInfo.fCpuUser+procInfo.fCpuSys;
fEventInfo.Reset();
for (Int_t iDet = 0; iDet < kNDetectors; iDet++) {
}
// End of cycle for the in-loop
- if (fRunQA)
- AliQAManager::QAManager()->EndOfCycle() ;
-
- if (fRunGlobalQA) {
- AliQADataMaker *qadm = AliQAManager::QAManager()->GetQADataMaker(AliQAv1::kGLOBAL);
- if (qadm) {
- if (IsInTasks(AliQAv1::kRECPOINTS))
- qadm->EndOfCycle(AliQAv1::kRECPOINTS);
- if (IsInTasks(AliQAv1::kESDS))
- qadm->EndOfCycle(AliQAv1::kESDS);
- qadm->Finish();
- }
- }
if (fRunQA || fRunGlobalQA) {
+ AliQAManager::QAManager()->EndOfCycle() ;
if (fInput &&
!fProofOutputLocation.IsNull() &&
fProofOutputArchive.IsNull() &&
TTree* digitsTree = loader->TreeD();
if (!digitsTree) {
AliError(Form("Can't get the %s digits tree", fgkDetectorName[iDet]));
- if (fStopOnError) return kFALSE;
+ if (fStopOnError)
+ return kFALSE;
} else {
reconstructor->Reconstruct(digitsTree, clustersTree);
if (fRunQA && IsInTasks(AliQAv1::kDIGITSR)) {
loader->UnloadRecPoints();
AliSysInfo::AddStamp(Form("LRec%s_%d",fgkDetectorName[iDet],eventNr), iDet,1,eventNr);
}
+ IsSelected("CTP", detStr);
if ((detStr.CompareTo("ALL") != 0) && !detStr.IsNull()) {
AliError(Form("the following detectors were not found: %s",
detStr.Data()));
- if (fStopOnError) return kFALSE;
+ if (fStopOnError)
+ return kFALSE;
}
eventNr++;
return kTRUE;
//_____________________________________________________________________________
-Bool_t AliReconstruction::RunTracking(AliESDEvent*& esd)
+Bool_t AliReconstruction::RunTracking(AliESDEvent*& esd,AliESDpid &PID)
{
// run the barrel tracking
static Int_t eventNr=0;
// preliminary PID in TPC needed by the ITS tracker
if (iDet == 1) {
GetReconstructor(1)->FillESD((TTree*)NULL, (TTree*)NULL, esd);
- AliESDpid::MakePID(esd);
+ PID.MakePID(esd,kTRUE);
}
AliSysInfo::AddStamp(Form("Tracking0%s_%d",fgkDetectorName[iDet],eventNr), iDet,3,eventNr);
}
}
// updated PID in TPC needed by the ITS tracker -MI
if (iDet == 1) {
- GetReconstructor(1)->FillESD((TTree*)NULL, (TTree*)NULL, esd);
- AliESDpid::MakePID(esd);
+ //GetReconstructor(1)->FillESD((TTree*)NULL, (TTree*)NULL, esd);
+ //AliESDpid::MakePID(esd);
+ PID.MakePID(esd,kTRUE);
}
AliSysInfo::AddStamp(Form("Tracking1%s_%d",fgkDetectorName[iDet],eventNr), iDet,3, eventNr);
}
fLoader[iDet]->UnloadRecPoints();
}
}
-
+
+ IsSelected("CTP", detStr);
if ((detStr.CompareTo("ALL") != 0) && !detStr.IsNull()) {
AliError(Form("the following detectors were not found: %s",
detStr.Data()));
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);
+ nsp += (iDet==GetDetIndex("TRD")) ? track->GetTRDntracklets():track->GetNcls(iDet);
- if (iDet==0) { // ITS "extra" clusters
+ if (iDet==GetDetIndex("ITS")) { // ITS "extra" clusters
track->GetClusters(iDet,idx);
for (Int_t i=6; i<12; i++) if(idx[i] >= 0) nsp++;
}
for (Int_t iDet = 5; iDet >= 0; iDet--) {
AliTracker *tracker = fTracker[iDet];
if (!tracker) continue;
- Int_t nspdet = track->GetClusters(iDet,idx);
+ Int_t nspdet = (iDet==GetDetIndex("TRD")) ? track->GetTRDtracklets(idx):track->GetClusters(iDet,idx);
- if (iDet==0) // ITS "extra" clusters
+ if (iDet==GetDetIndex("ITS")) // ITS "extra" clusters
for (Int_t i=6; i<12; i++) if(idx[i] >= 0) nspdet++;
if (nspdet <= 0) continue;
}
isp2++;
if (!isvalid) continue;
- if (iDet==0 && (isp-1)>=6) p.SetExtra();
+ if (iDet==GetDetIndex("ITS") && (isp-1)>=6) p.SetExtra();
sp->AddPoint(isptrack,&p); isptrack++;
}
}
// Return: kTRUE if all operations have been done properly, kFALSE otherwise
//
Bool_t ret=kFALSE;
+ TString detStr = fLoadCDB;
//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 (!IsSelected(fgkDetectorName[iDet], detStr)) continue;
if(fTracker[iDet] && fTracker[iDet]->GetPlaneEff()) {
AliPlaneEff *planeeff=fTracker[iDet]->GetPlaneEff();
TString name=planeeff->GetName();
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");
+ TString detStr = fLoadCDB;
+ if (IsSelected(fgkDetectorName[0], detStr)) {
+ 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;
}
}
Int_t colon = detAndAction.Index(":") ;
fQADetectors = detAndAction(0, colon) ;
- if (fQADetectors.Contains("ALL") ){
- TString tmp = fFillESD ;
- Int_t minus = fQADetectors.Last('-') ;
- TString toKeep = fFillESD ;
- TString toRemove("") ;
- while (minus >= 0) {
- toRemove = fQADetectors(minus+1, fQADetectors.Length()) ;
- toRemove = toRemove.Strip() ;
- toKeep.ReplaceAll(toRemove, "") ;
- fQADetectors.ReplaceAll(Form("-%s", toRemove.Data()), "") ;
- minus = fQADetectors.Last('-') ;
- }
- fQADetectors = toKeep ;
- }
- fQATasks = detAndAction(colon+1, detAndAction.Sizeof() ) ;
+ fQATasks = detAndAction(colon+1, detAndAction.Sizeof() ) ;
if (fQATasks.Contains("ALL") ) {
fQATasks = Form("%d %d %d %d", AliQAv1::kRAWS, AliQAv1::kDIGITSR, AliQAv1::kRECPOINTS, AliQAv1::kESDS) ;
} else {