fRecoParam(),
+ fSPDTrackleter(NULL),
+
fDiamondProfileSPD(NULL),
fDiamondProfile(NULL),
fDiamondProfileTPC(NULL),
fAlignObjArray(NULL),
fCDBUri(),
+ fQARefUri(),
fSpecCDBUri(),
fInitCDBCalled(kFALSE),
fSetRunNumberFromDataCalled(kFALSE),
fRunQA(kTRUE),
fRunGlobalQA(kTRUE),
fSameQACycle(kFALSE),
-
+ fInitQACalled(kFALSE),
fRunPlaneEff(kFALSE),
fesd(NULL),
fRecoParam(rec.fRecoParam),
+ fSPDTrackleter(NULL),
+
fDiamondProfileSPD(rec.fDiamondProfileSPD),
fDiamondProfile(rec.fDiamondProfile),
fDiamondProfileTPC(rec.fDiamondProfileTPC),
fAlignObjArray(rec.fAlignObjArray),
fCDBUri(rec.fCDBUri),
+ fQARefUri(rec.fQARefUri),
fSpecCDBUri(),
fInitCDBCalled(rec.fInitCDBCalled),
fSetRunNumberFromDataCalled(rec.fSetRunNumberFromDataCalled),
fRunQA(rec.fRunQA),
fRunGlobalQA(rec.fRunGlobalQA),
fSameQACycle(rec.fSameQACycle),
+ fInitQACalled(rec.fInitQACalled),
fRunPlaneEff(rec.fRunPlaneEff),
fesd(NULL),
fQACycles[iDet] = rec.fQACycles[iDet];
fQAWriteExpert[iDet] = rec.fQAWriteExpert[iDet] ;
}
+
+ delete fSPDTrackleter; fSPDTrackleter = NULL;
delete fDiamondProfileSPD; fDiamondProfileSPD = NULL;
if (rec.fDiamondProfileSPD) fDiamondProfileSPD = new AliESDVertex(*rec.fDiamondProfileSPD);
delete fAlignObjArray; fAlignObjArray = NULL;
fCDBUri = "";
+ fQARefUri = rec.fQARefUri;
fSpecCDBUri.Delete();
fInitCDBCalled = rec.fInitCDBCalled;
fSetRunNumberFromDataCalled = rec.fSetRunNumberFromDataCalled;
fRunQA = rec.fRunQA;
fRunGlobalQA = rec.fRunGlobalQA;
fSameQACycle = rec.fSameQACycle;
+ fInitQACalled = rec.fInitQACalled;
fRunPlaneEff = rec.fRunPlaneEff;
fesd = NULL;
AliCodeTimer::Instance()->Print();
}
+//_____________________________________________________________________________
+void AliReconstruction::InitQA()
+{
+ //Initialize the QA and start of cycle
+ AliCodeTimerAuto("");
+
+ if (fInitQACalled) return;
+ fInitQACalled = kTRUE;
+
+ fQAManager = AliQAManager::QAManager("rec") ;
+ if (fQAManager->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 = fQAManager->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("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
+
+ }
+ fQAManager->SetDefaultStorage(fQARefUri);
+ }
+
+ if (fRunQA) {
+ fQAManager->SetActiveDetectors(fQADetectors) ;
+ for (Int_t det = 0 ; det < AliQA::kNDET ; det++) {
+ fQAManager->SetCycleLength(AliQA::DETECTORINDEX_t(det), fQACycles[det]) ;
+ fQAManager->SetWriteExpert(AliQA::DETECTORINDEX_t(det)) ;
+ }
+ if (!fRawReader && fQATasks.Contains(AliQA::kRAWS))
+ fQATasks.ReplaceAll(Form("%d",AliQA::kRAWS), "") ;
+ fQAManager->SetTasks(fQATasks) ;
+ fQAManager->InitQADataMaker(AliCDBManager::Instance()->GetRun()) ;
+ }
+ if (fRunGlobalQA) {
+ Bool_t sameCycle = kFALSE ;
+ AliQADataMaker *qadm = fQAManager->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);
+ }
+ }
+ AliSysInfo::AddStamp("InitQA") ;
+}
+
+//_____________________________________________________________________________
+void AliReconstruction::MergeQA()
+{
+ //Initialize the QA and start of cycle
+ AliCodeTimerAuto("") ;
+ if ( ! fQAManager ) {
+ AliFatal("Hum... this should not happen") ;
+ } else {
+ fQAManager->Merge(AliCDBManager::Instance()->GetRun()) ;
+ }
+ AliSysInfo::AddStamp("MergeQA") ;
+}
+
//_____________________________________________________________________________
void AliReconstruction::InitCDB()
{
}
+//_____________________________________________________________________________
+void AliReconstruction::SetQARefDefaultStorage(const char* uri) {
+ // Store the desired default CDB storage location
+ // Activate it later within the Run() method
+
+ fQARefUri = uri;
+ AliQA::SetQARefStorage(fQARefUri.Data()) ;
+
+}
//_____________________________________________________________________________
void AliReconstruction::SetSpecificStorage(const char* calibType, const char* uri) {
// Store a detector-specific CDB storage location
//QA
//Initialize the QA and start of cycle
- if (fRunQA) {
- fQAManager = AliQAManager::QAManager("rec") ;
- fQAManager->SetActiveDetectors(fQADetectors) ;
- for (Int_t det = 0 ; det < AliQA::kNDET ; det++) {
- fQAManager->SetCycleLength(AliQA::DETECTORINDEX_t(det), fQACycles[det]) ;
- fQAManager->SetWriteExpert(AliQA::DETECTORINDEX_t(det)) ;
- }
- if (!fRawReader && fQATasks.Contains(AliQA::kRAWS))
- fQATasks.ReplaceAll(Form("%d",AliQA::kRAWS), "") ;
- fQAManager->SetTasks(fQATasks) ;
- fQAManager->InitQADataMaker(AliCDBManager::Instance()->GetRun()) ;
- }
-
- if (fRunGlobalQA) {
- Bool_t sameCycle = kFALSE ;
- if (!fQAManager)
- fQAManager = AliQAManager::QAManager("rec") ;
- AliQADataMaker *qadm = fQAManager->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()) {
}
}
+ // 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) {
eventNr++;
return kTRUE;
}
+//_____________________________________________________________________________
+Bool_t AliReconstruction::RunSPDTrackleting(AliESDEvent*& esd)
+{
+// run the SPD trackleting (for SPD efficiency purpouses)
+
+ AliCodeTimerAuto("")
+
+ Double_t vtxPos[3] = {0, 0, 0};
+ 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");
+
+ // load clusters
+ fLoader[0]->LoadRecPoints("read");
+ TTree* tree = fLoader[0]->TreeR();
+ if (!tree) {
+ AliError("Can't get the ITS cluster tree");
+ return kFALSE;
+ }
+ fSPDTrackleter->LoadClusters(tree);
+ fSPDTrackleter->SetVertex(vtxPos, vtxErr);
+ // run trackleting
+ if (fSPDTrackleter->Clusters2Tracks(esd) != 0) {
+ AliError("AliITSTrackleterSPDEff Clusters2Tracks failed");
+ // fLoader[0]->UnloadRecPoints();
+ return kFALSE;
+ }
+//fSPDTrackleter->UnloadRecPoints();
+ } else {
+ AliWarning("SPDTrackleter not available");
+ return kFALSE;
+ }
+ return kTRUE;
+}
//_____________________________________________________________________________
Bool_t AliReconstruction::RunVertexFinder(AliESDEvent*& esd)
delete fRunInfo;
fRunInfo = NULL;
+ delete fSPDTrackleter;
+ fSPDTrackleter = NULL;
+
delete ftVertexer;
ftVertexer = NULL;
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);
// Return: kTRUE if all operations have been done properly, kFALSE otherwise
//
Bool_t ret=kFALSE;
- //for (Int_t iDet = 0; iDet < kNDetectors; iDet++) {
+ //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";
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;
}
//
// 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 !!!!!
// 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;
}