X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=STEER%2FAliReconstruction.cxx;h=22d6ba81c39ab7bfc39e6183adf1e0010ef621fb;hb=c264b61be96cc665d4bf078ee91ac66a22927b45;hp=7cacfc0e6ad707a5dbb6621c72666d288a62d0cf;hpb=b090e6a3144b16c387d6ffc9290c710ccc085135;p=u%2Fmrichter%2FAliRoot.git diff --git a/STEER/AliReconstruction.cxx b/STEER/AliReconstruction.cxx index 7cacfc0e6ad..22d6ba81c39 100644 --- a/STEER/AliReconstruction.cxx +++ b/STEER/AliReconstruction.cxx @@ -192,6 +192,8 @@ #include "AliDAQ.h" +#include "AliGRPObject.h" + ClassImp(AliReconstruction) //_____________________________________________________________________________ @@ -245,10 +247,10 @@ AliReconstruction::AliReconstruction(const char* gAliceFilename) : fRecoParam(), fVertexer(NULL), + fDiamondProfileSPD(NULL), fDiamondProfile(NULL), fDiamondProfileTPC(NULL), - fMeanVertexConstraint(kTRUE), - + fGRPData(NULL), fAlignObjArray(NULL), @@ -340,10 +342,10 @@ AliReconstruction::AliReconstruction(const AliReconstruction& rec) : fRecoParam(rec.fRecoParam), fVertexer(NULL), + fDiamondProfileSPD(rec.fDiamondProfileSPD), fDiamondProfile(rec.fDiamondProfile), fDiamondProfileTPC(rec.fDiamondProfileTPC), - fMeanVertexConstraint(rec.fMeanVertexConstraint), - + fGRPData(NULL), fAlignObjArray(rec.fAlignObjArray), @@ -466,14 +468,16 @@ AliReconstruction& AliReconstruction::operator = (const AliReconstruction& rec) } fVertexer = NULL; + delete fDiamondProfileSPD; fDiamondProfileSPD = NULL; + if (rec.fDiamondProfileSPD) fDiamondProfileSPD = new AliESDVertex(*rec.fDiamondProfileSPD); delete fDiamondProfile; fDiamondProfile = NULL; if (rec.fDiamondProfile) fDiamondProfile = new AliESDVertex(*rec.fDiamondProfile); delete fDiamondProfileTPC; fDiamondProfileTPC = NULL; if (rec.fDiamondProfileTPC) fDiamondProfileTPC = new AliESDVertex(*rec.fDiamondProfileTPC); - fMeanVertexConstraint = rec.fMeanVertexConstraint; delete fGRPData; fGRPData = NULL; - if (rec.fGRPData) fGRPData = (TMap*)((rec.fGRPData)->Clone()); + // if (rec.fGRPData) fGRPData = (TMap*)((rec.fGRPData)->Clone()); + if (rec.fGRPData) fGRPData = (AliGRPObject*)((rec.fGRPData)->Clone()); delete fAlignObjArray; fAlignObjArray = NULL; @@ -509,6 +513,7 @@ AliReconstruction::~AliReconstruction() // clean up CleanUp(); + delete fGRPData; delete fForcedFieldMap; fOptions.Delete(); if (fAlignObjArray) { @@ -705,7 +710,7 @@ Bool_t AliReconstruction::MisalignGeometry(const TString& detectors) for (Int_t iDet = 0; iDet < fgkNDetectors; iDet++) { if(!IsSelected(fgkDetectorName[iDet], detStr)) continue; - if(fgkDetectorName[iDet]=="HLT") continue; + if(!strcmp(fgkDetectorName[iDet],"HLT")) continue; if(AliGeomManager::IsModuleInGeom(fgkDetectorName[iDet])) { loadAlObjsListOfDets += fgkDetectorName[iDet]; @@ -869,8 +874,22 @@ Bool_t AliReconstruction::InitGRP() { AliCDBEntry* entry = AliCDBManager::Instance()->Get("GRP/GRP/Data"); if (entry) { - fGRPData = dynamic_cast(entry->GetObject()); - entry->SetOwner(0); + + TMap* m = dynamic_cast(entry->GetObject()); // old GRP entry + + if (m) { + AliInfo("Found a TMap in GRP/GRP/Data, converting it into an AliGRPObject"); + m->Print(); + fGRPData = new AliGRPObject(); + fGRPData->ReadValuesFromMap(m); + } + + else { + AliInfo("Found an AliGRPObject in GRP/GRP/Data, reading it"); + fGRPData = dynamic_cast(entry->GetObject()); // new GRP entry + entry->SetOwner(0); + } + AliCDBManager::Instance()->UnloadFromCache("GRP/GRP/Data"); } @@ -879,45 +898,44 @@ Bool_t AliReconstruction::InitGRP() { return kFALSE; } - TObjString *lhcState= - dynamic_cast(fGRPData->GetValue("fLHCState")); - if (!lhcState) { + TString lhcState = fGRPData->GetLHCState(); + if (lhcState==AliGRPObject::GetInvalidString()) { AliError("GRP/GRP/Data entry: missing value for the LHC state ! Using UNKNOWN"); + lhcState = "UNKNOWN"; } - TObjString *beamType= - dynamic_cast(fGRPData->GetValue("fAliceBeamType")); - if (!beamType) { + TString beamType = fGRPData->GetBeamType(); + if (beamType==AliGRPObject::GetInvalidString()) { AliError("GRP/GRP/Data entry: missing value for the beam type ! Using UNKNOWN"); + beamType = "UNKNOWN"; } - TObjString *beamEnergyStr= - dynamic_cast(fGRPData->GetValue("fAliceBeamEnergy")); - if (!beamEnergyStr) { + Float_t beamEnergy = fGRPData->GetBeamEnergy(); + if (beamEnergy==AliGRPObject::GetInvalidFloat()) { AliError("GRP/GRP/Data entry: missing value for the beam energy ! Using 0"); + beamEnergy = 0; } - TObjString *runType= - dynamic_cast(fGRPData->GetValue("fRunType")); - if (!runType) { + TString runType = fGRPData->GetRunType(); + if (runType==AliGRPObject::GetInvalidString()) { AliError("GRP/GRP/Data entry: missing value for the run type ! Using UNKNOWN"); + runType = "UNKNOWN"; } - TObjString *activeDetectors= - dynamic_cast(fGRPData->GetValue("fDetectorMask")); - if (!activeDetectors) { + Int_t activeDetectors = fGRPData->GetDetectorMask(); + if (activeDetectors==AliGRPObject::GetInvalidUInt()) { AliError("GRP/GRP/Data entry: missing value for the detector mask ! Using 1074790399"); + activeDetectors = 1074790399; } - fRunInfo = new AliRunInfo(lhcState ? lhcState->GetString().Data() : "UNKNOWN", - beamType ? beamType->GetString().Data() : "UNKNOWN", - beamEnergyStr ? beamEnergyStr->GetString().Atof() : 0, - runType ? runType->GetString().Data() : "UNKNOWN", - activeDetectors ? activeDetectors->GetString().Atoi() : 1074790399); + fRunInfo = new AliRunInfo(lhcState, beamType, beamEnergy, runType, activeDetectors); + + fRunInfo->Dump(); + // Process the list of active detectors - if (activeDetectors && activeDetectors->GetString().IsDigit()) { - UInt_t detMask = activeDetectors->GetString().Atoi(); + if (activeDetectors) { + UInt_t detMask = activeDetectors; fLoadCDB.Form("%s %s %s %s", fRunLocalReconstruction.Data(), fRunTracking.Data(), @@ -928,6 +946,11 @@ Bool_t AliReconstruction::InitGRP() { fFillESD = MatchDetectorList(fFillESD,detMask); fQADetectors = MatchDetectorList(fQADetectors,detMask); fLoadCDB = MatchDetectorList(fLoadCDB,detMask); + if (!((detMask >> AliDAQ::DetectorID("ITSSPD")) & 0x1)) { + // switch off the vertexer + AliInfo("SPD is not in the list of active detectors. Vertexer switched off."); + fRunVertexFinder = kFALSE; + } } AliInfo("==================================================================================="); @@ -947,6 +970,32 @@ Bool_t AliReconstruction::InitGRP() { 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 !"); + ok = kFALSE; + } + + // Dipole + Float_t diCurrent = fGRPData->GetDipoleCurrent((AliGRPObject::Stats)0); + if (diCurrent == AliGRPObject::GetInvalidFloat()) { + AliError("GRP/GRP/Data entry: missing value for the dipole current !"); + ok = kFALSE; + } + + Char_t diPolarity = fGRPData->GetDipolePolarity(); + if (diPolarity == AliGRPObject::GetInvalidChar()) { + AliError("GRP/GRP/Data entry: missing value for the dipole polarity !"); + ok = kFALSE; + } + + /* TObjString *l3Current= dynamic_cast(fGRPData->GetValue("fL3Current")); if (!l3Current) { @@ -959,7 +1008,7 @@ Bool_t AliReconstruction::InitGRP() { AliError("GRP/GRP/Data entry: missing value for the L3 polarity !"); ok = kFALSE; } - + // Dipole TObjString *diCurrent= dynamic_cast(fGRPData->GetValue("fDipoleCurrent")); @@ -973,11 +1022,15 @@ Bool_t AliReconstruction::InitGRP() { AliError("GRP/GRP/Data entry: missing value for the dipole polarity !"); ok = kFALSE; } + */ if (ok) { - Float_t l3Cur=TMath::Abs(atof(l3Current->GetName())); - Float_t diCur=TMath::Abs(atof(diCurrent->GetName())); - Float_t l3Pol=atof(l3Polarity->GetName()); + 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.; @@ -993,21 +1046,26 @@ Bool_t AliReconstruction::InitGRP() { } - //*** Get the diamond profile from OCDB + //*** Get the diamond profiles from OCDB + entry = AliCDBManager::Instance()->Get("GRP/Calib/MeanVertexSPD"); + if (entry) { + fDiamondProfileSPD = dynamic_cast (entry->GetObject()); + } else { + AliError("No SPD diamond profile found in OCDB!"); + } + entry = AliCDBManager::Instance()->Get("GRP/Calib/MeanVertex"); if (entry) { - if (fMeanVertexConstraint) - fDiamondProfile = dynamic_cast (entry->GetObject()); + fDiamondProfile = dynamic_cast (entry->GetObject()); } else { AliError("No diamond profile found in OCDB!"); } entry = AliCDBManager::Instance()->Get("GRP/Calib/MeanVertexTPC"); if (entry) { - if (fMeanVertexConstraint) - fDiamondProfileTPC = dynamic_cast (entry->GetObject()); + fDiamondProfileTPC = dynamic_cast (entry->GetObject()); } else { - AliError("No diamond profile found in OCDB!"); + AliError("No TPC diamond profile found in OCDB!"); } return kTRUE; @@ -1061,6 +1119,7 @@ Bool_t AliReconstruction::Run(const char* input) SlaveBegin(NULL); if (GetAbort() != TSelector::kContinue) return kFALSE; //******* The loop over events + AliInfo("Starting looping over events"); Int_t iEvent = 0; while ((iEvent < fRunLoader->GetNumberOfEvents()) || (fRawReader && fRawReader->NextEvent())) { @@ -1252,7 +1311,6 @@ void AliReconstruction::SlaveBegin(TTree*) AliSysInfo::AddStamp("LoadLoader"); ftVertexer = new AliVertexerTracks(AliTracker::GetBz()); - if(fDiamondProfile && fMeanVertexConstraint) ftVertexer->SetVtxStart(fDiamondProfile); // get vertexer if (fRunVertexFinder && !CreateVertexer()) { @@ -1289,21 +1347,46 @@ void AliReconstruction::SlaveBegin(TTree*) ftree = new TTree("esdTree", "Tree with ESD objects"); fesd = new AliESDEvent(); fesd->CreateStdContent(); + if (fWriteESDfriend) { + 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"); fhltesd = new AliESDEvent(); fhltesd->CreateStdContent(); - fhltesd->WriteToTree(fhlttree); - - if (fWriteESDfriend) { - fesdf = new AliESDfriend(); - TBranch *br=ftree->Branch("ESDfriend.","AliESDfriend", &fesdf); - br->SetFile("AliESDfriends.root"); - fesd->AddObject(fesdf); + // 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 + // order to create all branches. Initialization is done from an + // ESD layout template in CDB + AliCDBManager* man = AliCDBManager::Instance(); + AliCDBPath hltESDConfigPath("HLT/ConfigHLT/esdLayout"); + AliCDBEntry* hltESDConfig=NULL; + if (man->GetId(hltESDConfigPath)!=NULL && + (hltESDConfig=man->Get(hltESDConfigPath))!=NULL) { + AliESDEvent* pESDLayout=dynamic_cast(hltESDConfig->GetObject()); + if (pESDLayout) { + // init all internal variables from the list of objects + pESDLayout->GetStdContent(); + + // copy content and create non-std objects + *fhltesd=*pESDLayout; + fhltesd->Reset(); + } else { + AliError(Form("error setting hltEsd layout from %s: invalid object type", + hltESDConfigPath.GetPath().Data())); + } } + fhltesd->WriteToTree(fhlttree); + fhlttree->GetUserInfo()->Add(fhltesd); + ProcInfo_t ProcInfo; gSystem->GetProcInfo(&ProcInfo); AliInfo(Form("Current memory usage %d %d", ProcInfo.fMemResident, ProcInfo.fMemVirtual)); @@ -1456,6 +1539,7 @@ Bool_t AliReconstruction::ProcessEvent(Int_t iEvent) fhltesd->SetMagneticField(AliTracker::GetBz()); // 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)); if (grpRecoParam) AliExternalTrackParam::SetMostProbablePt(grpRecoParam->GetMostProbablePt()); @@ -1545,7 +1629,7 @@ Bool_t AliReconstruction::ProcessEvent(Int_t iEvent) ok = kFALSE; if (tpcTrack) ok = AliTracker:: - PropagateTrackTo(tpcTrack,kRadius,track->GetMass(),kMaxStep,kTRUE); + PropagateTrackTo(tpcTrack,kRadius,track->GetMass(),kMaxStep,kFALSE); if (ok) { Int_t n=trkArray.GetEntriesFast(); @@ -1557,7 +1641,7 @@ Bool_t AliReconstruction::ProcessEvent(Int_t iEvent) if (track->IsOn(AliESDtrack::kITSrefit)) continue; AliTracker:: - PropagateTrackTo(track,kRadius,track->GetMass(),kMaxStep,kTRUE); + PropagateTrackTo(track,kRadius,track->GetMass(),kMaxStep,kFALSE); track->RelateToVertex(fesd->GetPrimaryVertexSPD(), kBz, kVeryBig); } @@ -1574,11 +1658,9 @@ Bool_t AliReconstruction::ProcessEvent(Int_t iEvent) } if (runVertexFinderTracks) { - // Get the global reco-params. They are atposition 16 inside the array of detectors in fRecoParam - const AliGRPRecoParam *grpRecoParam = dynamic_cast(fRecoParam.GetDetRecoParam(fgkNDetectors)); - // TPC + ITS primary vertex ftVertexer->SetITSMode(); + ftVertexer->SetConstraintOff(); // get cuts for vertexer from AliGRPRecoParam if (grpRecoParam) { Int_t nCutsVertexer = grpRecoParam->GetVertexerTracksNCuts(); @@ -1586,16 +1668,13 @@ Bool_t AliReconstruction::ProcessEvent(Int_t iEvent) grpRecoParam->GetVertexerTracksCutsITS(cutsVertexer); ftVertexer->SetCuts(cutsVertexer); delete [] cutsVertexer; cutsVertexer = NULL; - } - if(fDiamondProfile && fMeanVertexConstraint) { - ftVertexer->SetVtxStart(fDiamondProfile); - } else { - ftVertexer->SetConstraintOff(); + if(fDiamondProfile && grpRecoParam->GetVertexerTracksConstraintITS()) + ftVertexer->SetVtxStart(fDiamondProfile); } AliESDVertex *pvtx=ftVertexer->FindPrimaryVertex(fesd); if (pvtx) { if (pvtx->GetStatus()) { - fesd->SetPrimaryVertex(pvtx); + fesd->SetPrimaryVertexTracks(pvtx); for (Int_t i=0; iGetTrack(i); t->RelateToVertex(pvtx, kBz, kVeryBig); @@ -1605,6 +1684,7 @@ Bool_t AliReconstruction::ProcessEvent(Int_t iEvent) // TPC-only primary vertex ftVertexer->SetTPCMode(); + ftVertexer->SetConstraintOff(); // get cuts for vertexer from AliGRPRecoParam if (grpRecoParam) { Int_t nCutsVertexer = grpRecoParam->GetVertexerTracksNCuts(); @@ -1612,11 +1692,8 @@ Bool_t AliReconstruction::ProcessEvent(Int_t iEvent) grpRecoParam->GetVertexerTracksCutsTPC(cutsVertexer); ftVertexer->SetCuts(cutsVertexer); delete [] cutsVertexer; cutsVertexer = NULL; - } - if(fDiamondProfileTPC && fMeanVertexConstraint) { - ftVertexer->SetVtxStart(fDiamondProfileTPC); - } else { - ftVertexer->SetConstraintOff(); + if(fDiamondProfileTPC && grpRecoParam->GetVertexerTracksConstraintTPC()) + ftVertexer->SetVtxStart(fDiamondProfileTPC); } pvtx=ftVertexer->FindPrimaryVertex(&trkArray,selectedIdx); if (pvtx) { @@ -1716,9 +1793,6 @@ void AliReconstruction::SlaveTerminate() fRunLoader->Write(0, TObject::kOverwrite); } - ftree->GetUserInfo()->Add(fesd); - fhlttree->GetUserInfo()->Add(fhltesd); - const TMap *cdbMap = AliCDBManager::Instance()->GetStorageMap(); const TList *cdbList = AliCDBManager::Instance()->GetRetrievedIds(); @@ -1904,7 +1978,7 @@ Bool_t AliReconstruction::RunVertexFinder(AliESDEvent*& esd) fLoader[0]->LoadRecPoints(); TTree* cltree = fLoader[0]->TreeR(); if (cltree) { - if(fDiamondProfile) fVertexer->SetVtxStart(fDiamondProfile); + if(fDiamondProfileSPD) fVertexer->SetVtxStart(fDiamondProfileSPD); vertex = fVertexer->FindVertexForCurrentEvent(cltree); } else { @@ -2530,6 +2604,7 @@ Bool_t AliReconstruction::CreateVertexer() Bool_t AliReconstruction::CreateTrackers(const TString& detectors) { // create the trackers + AliInfo("Creating trackers"); TString detStr = detectors; for (Int_t iDet = 0; iDet < fgkNDetectors; iDet++) { @@ -2580,14 +2655,13 @@ void AliReconstruction::CleanUp() ftVertexer = NULL; if(!(AliCDBManager::Instance()->GetCacheFlag())) { + delete fDiamondProfileSPD; + fDiamondProfileSPD = NULL; delete fDiamondProfile; fDiamondProfile = NULL; delete fDiamondProfileTPC; fDiamondProfileTPC = NULL; } - delete fGRPData; - fGRPData = NULL; - delete fRunLoader; fRunLoader = NULL; delete fRawReader; @@ -2613,7 +2687,7 @@ void AliReconstruction::WriteAlignmentData(AliESDEvent* esd) AliESDtrack *track = esd->GetTrack(itrack); Int_t nsp = 0; Int_t idx[200]; - for (Int_t iDet = 3; iDet >= 0; iDet--) {// TOF, TRD, TPC, ITS clusters + for (Int_t iDet = 5; iDet >= 0; iDet--) {// TOF, TRD, TPC, ITS clusters nsp += track->GetNcls(iDet); if (iDet==0) { // ITS "extra" clusters @@ -2626,7 +2700,7 @@ void AliReconstruction::WriteAlignmentData(AliESDEvent* esd) AliTrackPointArray *sp = new AliTrackPointArray(nsp); track->SetTrackPointArray(sp); Int_t isptrack = 0; - for (Int_t iDet = 3; iDet >= 0; iDet--) { + for (Int_t iDet = 5; iDet >= 0; iDet--) { AliTracker *tracker = fTracker[iDet]; if (!tracker) continue; Int_t nspdet = track->GetClusters(iDet,idx); @@ -2847,7 +2921,7 @@ Bool_t AliReconstruction::InitAliEVE() AliInfo(Form("Loading AliEVE macro: %s",macroStr.Data())); if (gROOT->LoadMacro(macroStr.Data()) != 0) return kFALSE; - gROOT->ProcessLine("if (!gAliEveEvent) {gAliEveEvent = new AliEveEventManager();gAliEveEvent->AddNewEventCommand(\"alieve_online_on_new_event()\");gEve->AddEvent(gAliEveEvent);};"); + gROOT->ProcessLine("if (!AliEveEventManager::GetMaster()){new AliEveEventManager();AliEveEventManager::GetMaster()->AddNewEventCommand(\"alieve_online_on_new_event()\");gEve->AddEvent(AliEveEventManager::GetMaster());};"); gROOT->ProcessLine("alieve_online_init()"); return kTRUE; @@ -2862,7 +2936,7 @@ void AliReconstruction::RunAliEVE() // successful initialization of AliEVE. AliInfo("Running AliEVE..."); - gROOT->ProcessLine(Form("gAliEveEvent->SetEvent((AliRunLoader*)%p,(AliRawReader*)%p,(AliESDEvent*)%p);",fRunLoader,fRawReader,fesd)); + gROOT->ProcessLine(Form("AliEveEventManager::GetMaster()->SetEvent((AliRunLoader*)%p,(AliRawReader*)%p,(AliESDEvent*)%p);",fRunLoader,fRawReader,fesd)); gSystem->Run(); }