X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=STEER%2FAliReconstruction.cxx;h=05fdd24e32820cc025fd91284e679501c1602160;hb=30cd6a86dcdd3c1f195019d83b1ab55fa0e52281;hp=77479808be1e1764bddb5c94dabd7ac10b49d2ed;hpb=6a840f1ea50f0c0e1c1633b79f587676a70d8743;p=u%2Fmrichter%2FAliRoot.git diff --git a/STEER/AliReconstruction.cxx b/STEER/AliReconstruction.cxx index 77479808be1..05fdd24e328 100644 --- a/STEER/AliReconstruction.cxx +++ b/STEER/AliReconstruction.cxx @@ -108,102 +108,93 @@ // // /////////////////////////////////////////////////////////////////////////////// +#include #include +#include +#include #include -#include -#include -#include -#include +#include #include +#include #include -#include -#include -#include #include -#include +#include +#include +#include +#include #include #include -#include +#include +#include -#include "AliReconstruction.h" +#include "AliAlignObj.h" +#include "AliCDBEntry.h" +#include "AliCDBManager.h" +#include "AliCDBStorage.h" +#include "AliCTPRawStream.h" +#include "AliCascadeVertexer.h" +#include "AliCentralTrigger.h" #include "AliCodeTimer.h" -#include "AliReconstructor.h" -#include "AliLog.h" -#include "AliRunLoader.h" -#include "AliRun.h" -#include "AliRawReaderFile.h" -#include "AliRawReaderDate.h" -#include "AliRawReaderRoot.h" -#include "AliRawEventHeaderBase.h" -#include "AliRawEvent.h" +#include "AliDAQ.h" +#include "AliDetectorRecoParam.h" +#include "AliESDCaloCells.h" +#include "AliESDCaloCluster.h" #include "AliESDEvent.h" #include "AliESDMuonTrack.h" -#include "AliESDfriend.h" +#include "AliESDPmdTrack.h" +#include "AliESDTagCreator.h" #include "AliESDVertex.h" #include "AliESDcascade.h" +#include "AliESDfriend.h" #include "AliESDkink.h" -#include "AliESDtrack.h" -#include "AliESDCaloCluster.h" -#include "AliESDCaloCells.h" -#include "AliMultiplicity.h" -#include "AliTracker.h" -#include "AliVertexer.h" -#include "AliVertexerTracks.h" -#include "AliV0vertexer.h" -#include "AliCascadeVertexer.h" -#include "AliHeader.h" -#include "AliGenEventHeader.h" -#include "AliPID.h" #include "AliESDpid.h" #include "AliESDtrack.h" -#include "AliESDPmdTrack.h" - -#include "AliESDTagCreator.h" - +#include "AliESDtrack.h" +#include "AliEventInfo.h" +#include "AliGRPObject.h" +#include "AliGRPRecoParam.h" +#include "AliGenEventHeader.h" #include "AliGeomManager.h" -#include "AliTrackPointArray.h" -#include "AliCDBManager.h" -#include "AliCDBStorage.h" -#include "AliCDBEntry.h" -#include "AliAlignObj.h" - -#include "AliCentralTrigger.h" -#include "AliTriggerConfiguration.h" -#include "AliTriggerClass.h" -#include "AliTriggerCluster.h" -#include "AliCTPRawStream.h" - -#include "AliQADataMakerRec.h" #include "AliGlobalQADataMaker.h" +#include "AliHeader.h" +#include "AliLog.h" +#include "AliMagF.h" +#include "AliMultiplicity.h" +#include "AliPID.h" +#include "AliPlaneEff.h" #include "AliQA.h" +#include "AliQADataMakerRec.h" #include "AliQADataMakerSteer.h" - -#include "AliPlaneEff.h" - -#include "AliSysInfo.h" // memory snapshots +#include "AliRawEvent.h" +#include "AliRawEventHeaderBase.h" #include "AliRawHLTManager.h" - -#include "AliMagWrapCheb.h" - -#include "AliDetectorRecoParam.h" -#include "AliGRPRecoParam.h" +#include "AliRawReaderDate.h" +#include "AliRawReaderFile.h" +#include "AliRawReaderRoot.h" +#include "AliReconstruction.h" +#include "AliReconstructor.h" +#include "AliRun.h" #include "AliRunInfo.h" -#include "AliEventInfo.h" - -#include "AliDAQ.h" - -#include "AliGRPObject.h" +#include "AliRunLoader.h" +#include "AliSysInfo.h" // memory snapshots +#include "AliTrackPointArray.h" +#include "AliTracker.h" +#include "AliTriggerClass.h" +#include "AliTriggerCluster.h" +#include "AliTriggerConfiguration.h" +#include "AliV0vertexer.h" +#include "AliVertexer.h" +#include "AliVertexerTracks.h" ClassImp(AliReconstruction) //_____________________________________________________________________________ -const char* AliReconstruction::fgkDetectorName[AliReconstruction::fgkNDetectors] = {"ITS", "TPC", "TRD", "TOF", "PHOS", "HMPID", "EMCAL", "MUON", "FMD", "ZDC", "PMD", "T0", "VZERO", "ACORDE", "HLT"}; +const char* AliReconstruction::fgkDetectorName[AliReconstruction::kNDetectors] = {"ITS", "TPC", "TRD", "TOF", "PHOS", "HMPID", "EMCAL", "MUON", "FMD", "ZDC", "PMD", "T0", "VZERO", "ACORDE", "HLT"}; //_____________________________________________________________________________ AliReconstruction::AliReconstruction(const char* gAliceFilename) : TSelector(), fUniformField(kFALSE), - fForcedFieldMap(NULL), fRunVertexFinder(kTRUE), fRunVertexFinderTracks(kTRUE), fRunHLTTracking(kFALSE), @@ -231,11 +222,10 @@ AliReconstruction::AliReconstruction(const char* gAliceFilename) : fEquipIdMap(""), fFirstEvent(0), fLastEvent(-1), - fNumberOfEventsPerFile(1), + fNumberOfEventsPerFile((UInt_t)-1), fOptions(), fLoadAlignFromCDB(kTRUE), fLoadAlignData("ALL"), - fESDPar(""), fUseHLTData(), fRunInfo(NULL), fEventInfo(), @@ -246,11 +236,10 @@ AliReconstruction::AliReconstruction(const char* gAliceFilename) : fRecoParam(), - fVertexer(NULL), + fDiamondProfileSPD(NULL), fDiamondProfile(NULL), fDiamondProfileTPC(NULL), - fMeanVertexConstraint(kTRUE), - + fGRPData(NULL), fAlignObjArray(NULL), @@ -281,7 +270,7 @@ AliReconstruction::AliReconstruction(const char* gAliceFilename) : // create reconstruction object with default parameters gGeoManager = NULL; - for (Int_t iDet = 0; iDet < fgkNDetectors; iDet++) { + for (Int_t iDet = 0; iDet < kNDetectors; iDet++) { fReconstructor[iDet] = NULL; fLoader[iDet] = NULL; fTracker[iDet] = NULL; @@ -298,7 +287,6 @@ AliReconstruction::AliReconstruction(const char* gAliceFilename) : AliReconstruction::AliReconstruction(const AliReconstruction& rec) : TSelector(), fUniformField(rec.fUniformField), - fForcedFieldMap(NULL), fRunVertexFinder(rec.fRunVertexFinder), fRunVertexFinderTracks(rec.fRunVertexFinderTracks), fRunHLTTracking(rec.fRunHLTTracking), @@ -330,7 +318,6 @@ AliReconstruction::AliReconstruction(const AliReconstruction& rec) : fOptions(), fLoadAlignFromCDB(rec.fLoadAlignFromCDB), fLoadAlignData(rec.fLoadAlignData), - fESDPar(rec.fESDPar), fUseHLTData(rec.fUseHLTData), fRunInfo(NULL), fEventInfo(), @@ -341,11 +328,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), @@ -377,7 +363,7 @@ AliReconstruction::AliReconstruction(const AliReconstruction& rec) : for (Int_t i = 0; i < rec.fOptions.GetEntriesFast(); i++) { if (rec.fOptions[i]) fOptions.Add(rec.fOptions[i]->Clone()); } - for (Int_t iDet = 0; iDet < fgkNDetectors; iDet++) { + for (Int_t iDet = 0; iDet < kNDetectors; iDet++) { fReconstructor[iDet] = NULL; fLoader[iDet] = NULL; fTracker[iDet] = NULL; @@ -406,7 +392,6 @@ AliReconstruction& AliReconstruction::operator = (const AliReconstruction& rec) if(&rec == this) return *this; fUniformField = rec.fUniformField; - fForcedFieldMap = NULL; fRunVertexFinder = rec.fRunVertexFinder; fRunVertexFinderTracks = rec.fRunVertexFinderTracks; fRunHLTTracking = rec.fRunHLTTracking; @@ -442,7 +427,6 @@ AliReconstruction& AliReconstruction::operator = (const AliReconstruction& rec) fLoadAlignFromCDB = rec.fLoadAlignFromCDB; fLoadAlignData = rec.fLoadAlignData; - fESDPar = rec.fESDPar; fUseHLTData = rec.fUseHLTData; delete fRunInfo; fRunInfo = NULL; @@ -456,7 +440,7 @@ AliReconstruction& AliReconstruction::operator = (const AliReconstruction& rec) fRecoParam = rec.fRecoParam; - for (Int_t iDet = 0; iDet < fgkNDetectors; iDet++) { + for (Int_t iDet = 0; iDet < kNDetectors; iDet++) { delete fReconstructor[iDet]; fReconstructor[iDet] = NULL; delete fLoader[iDet]; fLoader[iDet] = NULL; delete fTracker[iDet]; fTracker[iDet] = NULL; @@ -467,12 +451,12 @@ AliReconstruction& AliReconstruction::operator = (const AliReconstruction& rec) fQAWriteExpert[iDet] = rec.fQAWriteExpert[iDet] ; } - 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()); @@ -513,7 +497,6 @@ AliReconstruction::~AliReconstruction() CleanUp(); delete fGRPData; - delete fForcedFieldMap; fOptions.Delete(); if (fAlignObjArray) { fAlignObjArray->Delete(); @@ -590,7 +573,7 @@ void AliReconstruction::SetSpecificStorage(const char* calibType, const char* ur AliCDBPath aPath(calibType); if(!aPath.IsValid()){ // if calibType is not wildcard but it is a valid detector, add "/*" to make it a valid path - for (Int_t iDet = 0; iDet < fgkNDetectors; iDet++) { + for (Int_t iDet = 0; iDet < kNDetectors; iDet++) { if(!strcmp(calibType, fgkDetectorName[iDet])) { aPath.SetPath(Form("%s/*", calibType)); AliInfo(Form("Path for specific storage set to %s", aPath.GetPath().Data())); @@ -605,7 +588,7 @@ void AliReconstruction::SetSpecificStorage(const char* calibType, const char* ur // // check that calibType refers to a "valid" detector name // Bool_t isDetector = kFALSE; -// for (Int_t iDet = 0; iDet < fgkNDetectors; iDet++) { +// for (Int_t iDet = 0; iDet < kNDetectors; iDet++) { // TString detName = fgkDetectorName[iDet]; // if(aPath.GetLevel0() == detName) { // isDetector = kTRUE; @@ -707,16 +690,18 @@ Bool_t AliReconstruction::MisalignGeometry(const TString& detectors) TString detStr = detectors; TString loadAlObjsListOfDets = ""; - for (Int_t iDet = 0; iDet < fgkNDetectors; iDet++) { + for (Int_t iDet = 0; iDet < kNDetectors; iDet++) { if(!IsSelected(fgkDetectorName[iDet], detStr)) continue; - if(fgkDetectorName[iDet]=="HLT") continue; - if(AliGeomManager::IsModuleInGeom(fgkDetectorName[iDet])) + if(!strcmp(fgkDetectorName[iDet],"HLT")) continue; + + if(AliGeomManager::GetNalignable(fgkDetectorName[iDet]) != 0) { loadAlObjsListOfDets += fgkDetectorName[iDet]; loadAlObjsListOfDets += " "; } } // end loop over detectors - if(AliGeomManager::IsModuleInGeom("FRAME")) + + if(AliGeomManager::GetNalignable("GRP") != 0) loadAlObjsListOfDets.Prepend("GRP "); //add alignment objects for non-sensitive modules AliGeomManager::ApplyAlignObjsFromCDB(loadAlObjsListOfDets.Data()); AliCDBManager::Instance()->UnloadFromCache("*/Align/*"); @@ -786,11 +771,11 @@ void AliReconstruction::SetRecoParam(const char* detector, AliDetectorRecoParam // First check if the reco-params are global if(!strcmp(detector, "GRP")) { par->SetAsDefault(); - fRecoParam.AddDetRecoParam(fgkNDetectors,par); + fRecoParam.AddDetRecoParam(kNDetectors,par); return; } - for (Int_t iDet = 0; iDet < fgkNDetectors; iDet++) { + for (Int_t iDet = 0; iDet < kNDetectors; iDet++) { if(!strcmp(detector, fgkDetectorName[iDet])) { par->SetAsDefault(); fRecoParam.AddDetRecoParam(iDet,par); @@ -801,7 +786,10 @@ void AliReconstruction::SetRecoParam(const char* detector, AliDetectorRecoParam } //_____________________________________________________________________________ -Bool_t AliReconstruction::SetFieldMap(Float_t l3Current, Float_t diCurrent, Float_t factor, const char *path) { +Bool_t AliReconstruction::SetFieldMap(Float_t l3Cur, Float_t diCur, Float_t l3Pol, + Float_t diPol, Float_t beamenergy, + const Char_t *beamtype, const Char_t *path) +{ //------------------------------------------------ // The magnetic field map, defined externally... // L3 current 30000 A -> 0.5 T @@ -815,53 +803,69 @@ Bool_t AliReconstruction::SetFieldMap(Float_t l3Current, Float_t diCurrent, Floa const Float_t tolerance=0.03; // relative current tolerance const Float_t zero=77.; // "zero" current (A) - - Int_t map=0; - Bool_t dipoleON=kFALSE; - - TString s=(factor < 0) ? "L3: -" : "L3: +"; - - l3Current = TMath::Abs(l3Current); - if (TMath::Abs(l3Current-l3NominalCurrent1)/l3NominalCurrent1 < tolerance) { - map=AliMagWrapCheb::k5kG; - s+="0.5 T; "; - } else - if (TMath::Abs(l3Current-l3NominalCurrent2)/l3NominalCurrent2 < tolerance) { - map=AliMagWrapCheb::k2kG; - s+="0.2 T; "; - } else - if (l3Current < zero) { - map=AliMagWrapCheb::k2kG; - s+="0.0 T; "; - factor=0.; // in fact, this is a global factor... + // + TString s=(l3Pol < 0) ? "L3: -" : "L3: +"; + // + AliMagF::BMap_t map = AliMagF::k5kG; + // + double fcL3,fcDip; + // + l3Cur = TMath::Abs(l3Cur); + if (TMath::Abs(l3Cur-l3NominalCurrent1)/l3NominalCurrent1 < tolerance) { + fcL3 = l3Cur/l3NominalCurrent1; + map = AliMagF::k5kG; + s += "0.5 T; "; + } else if (TMath::Abs(l3Cur-l3NominalCurrent2)/l3NominalCurrent2 < tolerance) { + fcL3 = l3Cur/l3NominalCurrent2; + map = AliMagF::k2kG; + s += "0.2 T; "; + } else if (l3Cur <= zero) { + fcL3 = 0; + map = AliMagF::k5kGUniform; + s += "0.0 T; "; fUniformField=kTRUE; // track with the uniform (zero) B field } else { - AliError(Form("Wrong L3 current (%f A)!",l3Current)); + AliError(Form("Wrong L3 current (%f A)!",l3Cur)); return kFALSE; } - - diCurrent = TMath::Abs(diCurrent); - if (TMath::Abs(diCurrent-diNominalCurrent)/diNominalCurrent < tolerance) { + // + diCur = TMath::Abs(diCur); + if (TMath::Abs(diCur-diNominalCurrent)/diNominalCurrent < tolerance) { // 3% current tolerance... - dipoleON=kTRUE; - s+="Dipole ON"; - } else - if (diCurrent < zero) { // some small current.. - dipoleON=kFALSE; - s+="Dipole OFF"; + fcDip = diCur/diNominalCurrent; + s += "Dipole ON"; + } else if (diCur <= zero) { // some small current.. + fcDip = 0.; + s += "Dipole OFF"; } else { - AliError(Form("Wrong dipole current (%f A)!",diCurrent)); + AliError(Form("Wrong dipole current (%f A)!",diCur)); return kFALSE; } - - delete fForcedFieldMap; - fForcedFieldMap= - new AliMagWrapCheb("B field map ",s,2,factor,10.,map,dipoleON,path); - - fForcedFieldMap->Print(); - - AliTracker::SetFieldMap(fForcedFieldMap,fUniformField); - + // + if (l3Pol!=diPol && (map==AliMagF::k5kG || map==AliMagF::k2kG) && fcDip!=0) { + AliError("L3 and Dipole polarities must be the same"); + return kFALSE; + } + // + if (l3Pol<0) fcL3 = -fcL3; + if (diPol<0) fcDip = -fcDip; + // + AliMagF::BeamType_t btype = AliMagF::kNoBeamField; + TString btypestr = beamtype; + btypestr.ToLower(); + TPRegexp protonBeam("(proton|p)\\s*-?\\s*\\1"); + TPRegexp ionBeam("(lead|pb|ion|a)\\s*-?\\s*\\1"); + if (btypestr.Contains(ionBeam)) btype = AliMagF::kBeamTypeAA; + else if (btypestr.Contains(protonBeam)) btype = AliMagF::kBeamTypepp; + else { + AliInfo(Form("Cannot determine the beam type from %s, assume no LHC magnet field",beamtype)); + } + + AliMagF* fld = new AliMagF("MagneticFieldMap", s.Data(), 2, fcL3, fcDip, 10., map, path, + btype,beamenergy,kTRUE); + TGeoGlobalMagField::Instance()->SetField( fld ); + TGeoGlobalMagField::Instance()->Lock(); + // return kTRUE; } @@ -914,6 +918,8 @@ Bool_t AliReconstruction::InitGRP() { AliError("GRP/GRP/Data entry: missing value for the beam energy ! Using 0"); beamEnergy = 0; } + // energy is provided in MeV*120 + beamEnergy /= 120E3; TString runType = fGRPData->GetRunType(); if (runType==AliGRPObject::GetInvalidString()) { @@ -928,28 +934,35 @@ Bool_t AliReconstruction::InitGRP() { } fRunInfo = new AliRunInfo(lhcState, beamType, beamEnergy, runType, activeDetectors); - + printf("qqqqqqqqqqqqqqqqqqqqqqq %s %s %f %s %d\n", lhcState.Data(), beamType.Data(), beamEnergy, runType.Data(), activeDetectors); fRunInfo->Dump(); // Process the list of active detectors if (activeDetectors) { UInt_t detMask = activeDetectors; + fRunLocalReconstruction = MatchDetectorList(fRunLocalReconstruction,detMask); + fRunTracking = MatchDetectorList(fRunTracking,detMask); + fFillESD = MatchDetectorList(fFillESD,detMask); + fQADetectors = MatchDetectorList(fQADetectors,detMask); fLoadCDB.Form("%s %s %s %s", fRunLocalReconstruction.Data(), fRunTracking.Data(), fFillESD.Data(), fQADetectors.Data()); - fRunLocalReconstruction = MatchDetectorList(fRunLocalReconstruction,detMask); - fRunTracking = MatchDetectorList(fRunTracking,detMask); - 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; } + if (!((detMask >> AliDAQ::DetectorID("TRG")) & 0x1)) { + // switch off the reading of CTP raw-data payload + if (fFillTriggerESD) { + AliInfo("CTP is not in the list of active detectors. CTP data reading switched off."); + fFillTriggerESD = kFALSE; + } + } } AliInfo("==================================================================================="); @@ -961,20 +974,17 @@ Bool_t AliReconstruction::InitGRP() { AliInfo("==================================================================================="); //*** Dealing with the magnetic field map - if (AliTracker::GetFieldMap()) { - AliInfo("Running with the externally set B field !"); - } else { + if ( TGeoGlobalMagField::Instance()->IsLocked() ) {AliInfo("Running with the externally locked B field !");} + else { // Construct the field map out of the information retrieved from GRP. - 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 !"); @@ -1024,42 +1034,34 @@ Bool_t AliReconstruction::InitGRP() { */ if (ok) { - 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.; - - - if (!SetFieldMap(l3Cur, diCur, factor)) { - AliFatal("Failed to creat a B field map ! Exiting..."); - } + if ( !SetFieldMap(l3Current, diCurrent, l3Polarity ? -1:1, diPolarity ? -1:1) ) + AliFatal("Failed to creat a B field map ! Exiting..."); AliInfo("Running with the B field constructed out of GRP !"); } - else { - AliFatal("B field is neither set nor constructed from GRP ! Exitig..."); - } - + else AliFatal("B field is neither set nor constructed from GRP ! Exitig..."); + + } + + //*** 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!"); } - //*** Get the diamond profile from 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; @@ -1073,7 +1075,7 @@ Bool_t AliReconstruction::LoadCDB() AliCDBManager::Instance()->Get("GRP/CTP/Config"); TString detStr = fLoadCDB; - for (Int_t iDet = 0; iDet < fgkNDetectors; iDet++) { + for (Int_t iDet = 0; iDet < kNDetectors; iDet++) { if (!IsSelected(fgkDetectorName[iDet], detStr)) continue; AliCDBManager::Instance()->GetAll(Form("%s/Calib/*",fgkDetectorName[iDet])); } @@ -1253,7 +1255,7 @@ void AliReconstruction::Begin(TTree *) gGeoManager = NULL; fInput->Add(const_cast(AliCDBManager::Instance()->GetEntryCache())); fInput->Add(new TParameter("RunNumber",AliCDBManager::Instance()->GetRun())); - AliMagF *magFieldMap = (AliMagF*)AliTracker::GetFieldMap(); + AliMagF *magFieldMap = (AliMagF*)TGeoGlobalMagField::Instance()->GetField(); magFieldMap->SetName("MagneticFieldMap"); fInput->Add(magFieldMap); } @@ -1287,7 +1289,7 @@ void AliReconstruction::SlaveBegin(TTree*) } } if (AliMagF *map = (AliMagF*)fInput->FindObject("MagneticFieldMap")) { - AliTracker::SetFieldMap(map,fUniformField); + TGeoGlobalMagField::Instance()->SetField(map); } if (TNamed *outputFileName = (TNamed *) fInput->FindObject("PROOF_OUTPUTFILE")) { outProofFile = new TProofOutputFile(gSystem->BaseName(TUrl(outputFileName->GetTitle()).GetFile())); @@ -1305,14 +1307,6 @@ void AliReconstruction::SlaveBegin(TTree*) AliSysInfo::AddStamp("LoadLoader"); ftVertexer = new AliVertexerTracks(AliTracker::GetBz()); - if(fDiamondProfile && fMeanVertexConstraint) ftVertexer->SetVtxStart(fDiamondProfile); - - // get vertexer - if (fRunVertexFinder && !CreateVertexer()) { - Abort("CreateVertexer", TSelector::kAbortProcess); - return; - } - AliSysInfo::AddStamp("CreateVertexer"); // get trackers if (!fRunTracking.IsNull() && !CreateTrackers(fRunTracking)) { @@ -1342,24 +1336,59 @@ void AliReconstruction::SlaveBegin(TTree*) ftree = new TTree("esdTree", "Tree with ESD objects"); fesd = new AliESDEvent(); fesd->CreateStdContent(); + + fesd->WriteToTree(ftree); if (fWriteESDfriend) { + // careful: + // Since we add the branch manually we must + // book and add it after WriteToTree + // otherwise it is created twice, + // once via writetotree and once here. + // The case for AliESDfriend is now + // caught also in AlIESDEvent::WriteToTree but + // be careful when changing the name (AliESDfriend is not + // a TNamed so we had to hardwire it) 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(); + + // 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)); + ProcInfo_t procInfo; + gSystem->GetProcInfo(&procInfo); + AliInfo(Form("Current memory usage %d %d", procInfo.fMemResident, procInfo.fMemVirtual)); //QA //Initialize the QA and start of cycle @@ -1368,14 +1397,12 @@ void AliReconstruction::SlaveBegin(TTree*) fQASteer->SetActiveDetectors(fQADetectors) ; for (Int_t det = 0 ; det < AliQA::kNDET ; det++) { fQASteer->SetCycleLength(AliQA::DETECTORINDEX_t(det), fQACycles[det]) ; - if (fQAWriteExpert[det]) - fQASteer->SetWriteExpert(AliQA::DETECTORINDEX_t(det)) ; + fQASteer->SetWriteExpert(AliQA::DETECTORINDEX_t(det)) ; } - if (!fRawReader && fQATasks.Contains(AliQA::kRAWS)) fQATasks.ReplaceAll(Form("%d",AliQA::kRAWS), "") ; fQASteer->SetTasks(fQATasks) ; - fQASteer->InitQADataMaker(AliCDBManager::Instance()->GetRun(), fRecoParam) ; + fQASteer->InitQADataMaker(AliCDBManager::Instance()->GetRun()) ; } if (fRunGlobalQA) { @@ -1385,7 +1412,7 @@ void AliReconstruction::SlaveBegin(TTree*) 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); + TObjArray **arr=qadm->Init(AliQA::kRECPOINTS); AliTracker::SetResidualsArray(arr); sameCycle = kTRUE ; } @@ -1460,29 +1487,34 @@ Bool_t AliReconstruction::ProcessEvent(Int_t iEvent) AliInfo(Form("processing event %d", iEvent)); + fRunLoader->GetEvent(iEvent); + // Fill Event-info object GetEventInfo(); fRecoParam.SetEventSpecie(fRunInfo,fEventInfo); + AliInfo(Form("Current event specie: %s",fRecoParam.PrintEventSpecie())); // Set the reco-params { TString detStr = fLoadCDB; - for (Int_t iDet = 0; iDet < fgkNDetectors; iDet++) { + for (Int_t iDet = 0; iDet < kNDetectors; iDet++) { if (!IsSelected(fgkDetectorName[iDet], detStr)) continue; AliReconstructor *reconstructor = GetReconstructor(iDet); if (reconstructor && fRecoParam.GetDetRecoParamArray(iDet)) { - const AliDetectorRecoParam *par = fRecoParam.GetDetRecoParam(iDet); - reconstructor->SetRecoParam(par); + const AliDetectorRecoParam *par = fRecoParam.GetDetRecoParam(iDet); + reconstructor->SetRecoParam(par); + if (fRunQA) { + fQASteer->SetRecoParam(iDet, par) ; + } } } } - fRunLoader->GetEvent(iEvent); - // QA on single raw - if (fRunQA) - fQASteer->RunOneEvent(fRawReader) ; - + if (fRunQA) { + fQASteer->SetEventSpecie(fRecoParam.GetEventSpecie()) ; + fQASteer->RunOneEvent(fRawReader) ; + } // local single event reconstruction if (!fRunLocalReconstruction.IsNull()) { TString detectors=fRunLocalReconstruction; @@ -1509,7 +1541,8 @@ Bool_t AliReconstruction::ProcessEvent(Int_t iEvent) fhltesd->SetMagneticField(AliTracker::GetBz()); // Set most probable pt, for B=0 tracking - const AliGRPRecoParam *grpRecoParam = dynamic_cast(fRecoParam.GetDetRecoParam(fgkNDetectors)); + // Get the global reco-params. They are atposition 16 inside the array of detectors in fRecoParam + const AliGRPRecoParam *grpRecoParam = dynamic_cast(fRecoParam.GetDetRecoParam(kNDetectors)); if (grpRecoParam) AliExternalTrackParam::SetMostProbablePt(grpRecoParam->GetMostProbablePt()); // Fill raw-data error log into the ESD @@ -1551,7 +1584,7 @@ Bool_t AliReconstruction::ProcessEvent(Int_t iEvent) // Temporary fix to avoid problems with HLT that overwrites the offline ESDs if (detectors.Contains("ALL")) { detectors=""; - for (Int_t idet=0; idetGetTrack(itrack); @@ -1598,7 +1631,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(); @@ -1610,7 +1643,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); } @@ -1627,11 +1660,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(); @@ -1639,16 +1670,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); @@ -1658,6 +1686,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(); @@ -1665,11 +1694,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) { @@ -1703,11 +1729,13 @@ Bool_t AliReconstruction::ProcessEvent(Int_t iEvent) // write ESD if (fCleanESD) CleanESD(fesd); - if (fRunQA) + if (fRunQA) { + fQASteer->SetEventSpecie(fRecoParam.GetEventSpecie()) ; fQASteer->RunOneEvent(fesd) ; - + } if (fRunGlobalQA) { AliQADataMaker *qadm = fQASteer->GetQADataMaker(AliQA::kGLOBAL); + qadm->SetEventSpecie(fRecoParam.GetEventSpecie()) ; if (qadm && fQATasks.Contains(Form("%d", AliQA::kESDS))) qadm->Exec(AliQA::kESDS, fesd); } @@ -1739,12 +1767,12 @@ Bool_t AliReconstruction::ProcessEvent(Int_t iEvent) new (fesdf) AliESDfriend(); // Reset... } - ProcInfo_t ProcInfo; - gSystem->GetProcInfo(&ProcInfo); - AliInfo(Form("Event %d -> Current memory usage %d %d",iEvent, ProcInfo.fMemResident, ProcInfo.fMemVirtual)); + ProcInfo_t procInfo; + gSystem->GetProcInfo(&procInfo); + AliInfo(Form("Event %d -> Current memory usage %d %d",iEvent, procInfo.fMemResident, procInfo.fMemVirtual)); fEventInfo.Reset(); - for (Int_t iDet = 0; iDet < fgkNDetectors; iDet++) { + for (Int_t iDet = 0; iDet < kNDetectors; iDet++) { if (fReconstructor[iDet]) fReconstructor[iDet]->SetRecoParam(NULL); } @@ -1799,13 +1827,6 @@ void AliReconstruction::SlaveTerminate() ftree->GetUserInfo()->Add(cdbListCopy); - if(fESDPar.Contains("ESD.par")){ - AliInfo("Attaching ESD.par to Tree"); - TNamed *fn = CopyFileToTNamed(fESDPar.Data(),"ESD.par"); - ftree->GetUserInfo()->Add(fn); - } - - ffile->cd(); if (fWriteESDfriend) @@ -1820,9 +1841,9 @@ void AliReconstruction::SlaveTerminate() } // End of cycle for the in-loop - if (fRunQA) { + if (fRunQA) fQASteer->EndOfCycle() ; - } + if (fRunGlobalQA) { AliQADataMaker *qadm = fQASteer->GetQADataMaker(AliQA::kGLOBAL); if (qadm) { @@ -1845,7 +1866,7 @@ void AliReconstruction::Terminate() AliCodeTimerAuto(""); AliESDTagCreator *esdtagCreator = new AliESDTagCreator(); - esdtagCreator->CreateESDTags(fFirstEvent,fLastEvent,fGRPData); + esdtagCreator->CreateESDTags(fFirstEvent,fLastEvent,fGRPData, AliQA::Instance()->GetQA(), AliQA::Instance()->GetEventSpecies(), AliQA::kNDET, AliRecoParam::kNSpecies); // Cleanup of CDB manager: cache and active storages! AliCDBManager::Instance()->ClearCache(); @@ -1860,7 +1881,7 @@ Bool_t AliReconstruction::RunLocalEventReconstruction(const TString& detectors) AliCodeTimerAuto("") TString detStr = detectors; - for (Int_t iDet = 0; iDet < fgkNDetectors; iDet++) { + for (Int_t iDet = 0; iDet < kNDetectors; iDet++) { if (!IsSelected(fgkDetectorName[iDet], detStr)) continue; AliReconstructor* reconstructor = GetReconstructor(iDet); if (!reconstructor) continue; @@ -1916,9 +1937,10 @@ Bool_t AliReconstruction::RunLocalEventReconstruction(const TString& detectors) } TString detQAStr(fQADetectors) ; - if (fRunQA) + if (fRunQA) { + fQASteer->SetEventSpecie(fRecoParam.GetEventSpecie()) ; fQASteer->RunOneEventInOneDetector(iDet, clustersTree) ; - + } loader->WriteRecPoints("OVERWRITE"); loader->UnloadRecPoints(); AliSysInfo::AddStamp(Form("LRec%s_%d",fgkDetectorName[iDet],eventNr), iDet,1,eventNr); @@ -1939,63 +1961,52 @@ Bool_t AliReconstruction::RunVertexFinder(AliESDEvent*& esd) AliCodeTimerAuto("") + AliVertexer *vertexer = CreateVertexer(); + if (!vertexer) return kFALSE; + + AliInfo("running the ITS vertex finder"); AliESDVertex* vertex = NULL; - Double_t vtxPos[3] = {0, 0, 0}; - Double_t vtxErr[3] = {0.07, 0.07, 0.1}; - TArrayF mcVertex(3); - if (fRunLoader->GetHeader() && fRunLoader->GetHeader()->GenEventHeader()) { - fRunLoader->GetHeader()->GenEventHeader()->PrimaryVertex(mcVertex); - for (Int_t i = 0; i < 3; i++) vtxPos[i] = mcVertex[i]; - } - - if (fVertexer) { - AliInfo("running the ITS vertex finder"); - if (fLoader[0]) { - fLoader[0]->LoadRecPoints(); - TTree* cltree = fLoader[0]->TreeR(); - if (cltree) { - if(fDiamondProfile) fVertexer->SetVtxStart(fDiamondProfile); - vertex = fVertexer->FindVertexForCurrentEvent(cltree); - } - else { - AliError("Can't get the ITS cluster tree"); - } - fLoader[0]->UnloadRecPoints(); - } - else { - AliError("Can't get the ITS loader"); - } - if(!vertex){ - AliWarning("Vertex not found"); - vertex = new AliESDVertex(); - vertex->SetName("default"); + if (fLoader[0]) { + fLoader[0]->LoadRecPoints(); + TTree* cltree = fLoader[0]->TreeR(); + if (cltree) { + if(fDiamondProfileSPD) vertexer->SetVtxStart(fDiamondProfileSPD); + vertex = vertexer->FindVertexForCurrentEvent(cltree); } else { - vertex->SetName("reconstructed"); + AliError("Can't get the ITS cluster tree"); } - - } else { - AliInfo("getting the primary vertex from MC"); - vertex = new AliESDVertex(vtxPos, vtxErr); + fLoader[0]->UnloadRecPoints(); } - - if (vertex) { - vertex->GetXYZ(vtxPos); - vertex->GetSigmaXYZ(vtxErr); - } else { - AliWarning("no vertex reconstructed"); - vertex = new AliESDVertex(vtxPos, vtxErr); + else { + AliError("Can't get the ITS loader"); } + if(!vertex){ + AliWarning("Vertex not found"); + vertex = new AliESDVertex(); + vertex->SetName("default"); + } + else { + vertex->SetName("reconstructed"); + } + + Double_t vtxPos[3]; + Double_t vtxErr[3]; + vertex->GetXYZ(vtxPos); + vertex->GetSigmaXYZ(vtxErr); + esd->SetPrimaryVertexSPD(vertex); // if SPD multiplicity has been determined, it is stored in the ESD - AliMultiplicity *mult = fVertexer->GetMultiplicity(); + AliMultiplicity *mult = vertexer->GetMultiplicity(); if(mult)esd->SetMultiplicity(mult); - for (Int_t iDet = 0; iDet < fgkNDetectors; iDet++) { + for (Int_t iDet = 0; iDet < kNDetectors; iDet++) { if (fTracker[iDet]) fTracker[iDet]->SetVertex(vtxPos, vtxErr); } delete vertex; + delete vertexer; + return kTRUE; } @@ -2014,7 +2025,7 @@ Bool_t AliReconstruction::RunHLTTracking(AliESDEvent*& esd) AliInfo("running HLT tracking"); // Get a pointer to the HLT reconstructor - AliReconstructor *reconstructor = GetReconstructor(fgkNDetectors-1); + AliReconstructor *reconstructor = GetReconstructor(kNDetectors-1); if (!reconstructor) return kFALSE; // TPC + ITS @@ -2119,7 +2130,9 @@ Bool_t AliReconstruction::RunTracking(AliESDEvent*& esd) if (fReconstructor[11] && fLoader[11]) { fLoader[11]->LoadRecPoints("READ"); TTree *treeR = fLoader[11]->TreeR(); - GetReconstructor(11)->FillESD((TTree *)NULL,treeR,esd); + if (treeR) { + GetReconstructor(11)->FillESD((TTree *)NULL,treeR,esd); + } } // pass 1: TPC + ITS inwards @@ -2152,7 +2165,7 @@ Bool_t AliReconstruction::RunTracking(AliESDEvent*& esd) // pass 2: ALL backwards - for (Int_t iDet = 0; iDet < fgkNDetectors; iDet++) { + for (Int_t iDet = 0; iDet < kNDetectors; iDet++) { if (!fTracker[iDet]) continue; AliDebug(1, Form("%s back propagation", fgkDetectorName[iDet])); @@ -2172,7 +2185,7 @@ Bool_t AliReconstruction::RunTracking(AliESDEvent*& esd) // run tracking if (iDet>1) // start filling residuals for the "outer" detectors - if (fRunGlobalQA) AliTracker::SetFillResiduals(kTRUE); + if (fRunGlobalQA) AliTracker::SetFillResiduals(fRecoParam.GetEventSpecie(), kTRUE); if (fTracker[iDet]->PropagateBack(esd) != 0) { AliError(Form("%s backward propagation failed", fgkDetectorName[iDet])); @@ -2192,7 +2205,7 @@ Bool_t AliReconstruction::RunTracking(AliESDEvent*& esd) AliSysInfo::AddStamp(Form("Tracking1%s_%d",fgkDetectorName[iDet],eventNr), iDet,3, eventNr); } //stop filling residuals for the "outer" detectors - if (fRunGlobalQA) AliTracker::SetFillResiduals(kFALSE); + if (fRunGlobalQA) AliTracker::SetFillResiduals(fRecoParam.GetEventSpecie(), kFALSE); // pass 3: TRD + TPC + ITS refit inwards @@ -2202,7 +2215,7 @@ Bool_t AliReconstruction::RunTracking(AliESDEvent*& esd) // run tracking if (iDet<2) // start filling residuals for TPC and ITS - if (fRunGlobalQA) AliTracker::SetFillResiduals(kTRUE); + if (fRunGlobalQA) AliTracker::SetFillResiduals(fRecoParam.GetEventSpecie(), kTRUE); if (fTracker[iDet]->RefitInward(esd) != 0) { AliError(Form("%s inward refit failed", fgkDetectorName[iDet])); @@ -2230,7 +2243,7 @@ Bool_t AliReconstruction::RunTracking(AliESDEvent*& esd) AliSysInfo::AddStamp(Form("RUnloadCluster%s_%d",fgkDetectorName[iDet],eventNr), iDet,5, eventNr); } // stop filling residuals for TPC and ITS - if (fRunGlobalQA) AliTracker::SetFillResiduals(kFALSE); + if (fRunGlobalQA) AliTracker::SetFillResiduals(fRecoParam.GetEventSpecie(), kFALSE); eventNr++; return kTRUE; @@ -2267,7 +2280,7 @@ Bool_t AliReconstruction::FillESD(AliESDEvent*& esd, const TString& detectors) static Int_t eventNr=0; TString detStr = detectors; - for (Int_t iDet = 0; iDet < fgkNDetectors; iDet++) { + for (Int_t iDet = 0; iDet < kNDetectors; iDet++) { if (!IsSelected(fgkDetectorName[iDet], detStr)) continue; AliReconstructor* reconstructor = GetReconstructor(iDet); if (!reconstructor) continue; @@ -2418,7 +2431,7 @@ Bool_t AliReconstruction::InitRunLoader() if (!gSystem->AccessPathName(fGAliceFileName.Data())) { // galice.root exists // load all base libraries to get the loader classes TString libs = gSystem->GetLibraries(); - for (Int_t iDet = 0; iDet < fgkNDetectors; iDet++) { + for (Int_t iDet = 0; iDet < kNDetectors; iDet++) { TString detName = fgkDetectorName[iDet]; if (detName == "HLT") continue; if (libs.Contains("lib" + detName + "base.so")) continue; @@ -2559,21 +2572,22 @@ AliReconstructor* AliReconstruction::GetReconstructor(Int_t iDet) } //_____________________________________________________________________________ -Bool_t AliReconstruction::CreateVertexer() +AliVertexer* AliReconstruction::CreateVertexer() { // create the vertexer +// Please note that the caller is the owner of the +// vertexer - fVertexer = NULL; + AliVertexer* vertexer = NULL; AliReconstructor* itsReconstructor = GetReconstructor(0); if (itsReconstructor) { - fVertexer = itsReconstructor->CreateVertexer(); + vertexer = itsReconstructor->CreateVertexer(); } - if (!fVertexer) { + if (!vertexer) { AliWarning("couldn't create a vertexer for ITS"); - if (fStopOnError) return kFALSE; } - return kTRUE; + return vertexer; } //_____________________________________________________________________________ @@ -2583,7 +2597,7 @@ Bool_t AliReconstruction::CreateTrackers(const TString& detectors) AliInfo("Creating trackers"); TString detStr = detectors; - for (Int_t iDet = 0; iDet < fgkNDetectors; iDet++) { + for (Int_t iDet = 0; iDet < kNDetectors; iDet++) { if (!IsSelected(fgkDetectorName[iDet], detStr)) continue; AliReconstructor* reconstructor = GetReconstructor(iDet); if (!reconstructor) continue; @@ -2614,7 +2628,7 @@ void AliReconstruction::CleanUp() { // delete trackers and the run loader and close and delete the file - for (Int_t iDet = 0; iDet < fgkNDetectors; iDet++) { + for (Int_t iDet = 0; iDet < kNDetectors; iDet++) { delete fReconstructor[iDet]; fReconstructor[iDet] = NULL; fLoader[iDet] = NULL; @@ -2624,13 +2638,12 @@ void AliReconstruction::CleanUp() delete fRunInfo; fRunInfo = NULL; - delete fVertexer; - fVertexer = NULL; - delete ftVertexer; ftVertexer = NULL; if(!(AliCDBManager::Instance()->GetCacheFlag())) { + delete fDiamondProfileSPD; + fDiamondProfileSPD = NULL; delete fDiamondProfile; fDiamondProfile = NULL; delete fDiamondProfileTPC; @@ -2661,7 +2674,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 @@ -2674,7 +2687,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); @@ -2703,6 +2716,7 @@ void AliReconstruction::WriteAlignmentData(AliESDEvent* esd) } isp2++; if (!isvalid) continue; + if (iDet==0 && (isp-1)>=6) p.SetExtra(); sp->AddPoint(isptrack,&p); isptrack++; } } @@ -2732,88 +2746,43 @@ void AliReconstruction::FillRawDataErrorLog(Int_t iEvent, AliESDEvent* esd) } -TNamed* AliReconstruction::CopyFileToTNamed(TString fPath,TString pName){ - // Dump a file content into a char in TNamed - ifstream in; - in.open(fPath.Data(),ios::in | ios::binary|ios::ate); - Int_t kBytes = (Int_t)in.tellg(); - printf("Size: %d \n",kBytes); - TNamed *fn = 0; - if(in.good()){ - char* memblock = new char [kBytes]; - in.seekg (0, ios::beg); - in.read (memblock, kBytes); - in.close(); - TString fData(memblock,kBytes); - fn = new TNamed(pName,fData); - printf("fData Size: %d \n",fData.Sizeof()); - printf("pName Size: %d \n",pName.Sizeof()); - printf("fn Size: %d \n",fn->Sizeof()); - delete[] memblock; - } - else{ - AliInfo(Form("Could not Open %s\n",fPath.Data())); - } - - return fn; -} - -void AliReconstruction::TNamedToFile(TTree* fTree, TString pName){ - // This is not really needed in AliReconstruction at the moment - // but can serve as a template - - TList *fList = fTree->GetUserInfo(); - TNamed *fn = (TNamed*)fList->FindObject(pName.Data()); - printf("fn Size: %d \n",fn->Sizeof()); - - TString fTmp(fn->GetName()); // to be 100% sure in principle pName also works - const char* cdata = fn->GetTitle(); - printf("fTmp Size %d\n",fTmp.Sizeof()); - - int size = fn->Sizeof()-fTmp.Sizeof()-sizeof(UChar_t)-sizeof(Int_t); // see dfinition of TString::SizeOf()... - printf("calculated size %d\n",size); - ofstream out(pName.Data(),ios::out | ios::binary); - out.write(cdata,size); - out.close(); - -} - //_____________________________________________________________________________ void AliReconstruction::CheckQA() { // check the QA of SIM for this run and remove the detectors // with status Fatal - TString newRunLocalReconstruction ; - TString newRunTracking ; - TString newFillESD ; - - for (Int_t iDet = 0; iDet < AliQA::kNDET; iDet++) { - TString detName(AliQA::GetDetName(iDet)) ; - AliQA * qa = AliQA::Instance(AliQA::DETECTORINDEX_t(iDet)) ; - if ( qa->IsSet(AliQA::DETECTORINDEX_t(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 ( fRunLocalReconstruction.Contains(AliQA::GetDetName(iDet)) || - fRunLocalReconstruction.Contains("ALL") ) { - newRunLocalReconstruction += detName ; - newRunLocalReconstruction += " " ; - } - if ( fRunTracking.Contains(AliQA::GetDetName(iDet)) || - fRunTracking.Contains("ALL") ) { - newRunTracking += detName ; - newRunTracking += " " ; - } - if ( fFillESD.Contains(AliQA::GetDetName(iDet)) || - fFillESD.Contains("ALL") ) { - newFillESD += detName ; - newFillESD += " " ; - } - } - } - fRunLocalReconstruction = newRunLocalReconstruction ; - fRunTracking = newRunTracking ; - fFillESD = newFillESD ; +// TString newRunLocalReconstruction ; +// TString newRunTracking ; +// TString newFillESD ; +// +// for (Int_t iDet = 0; iDet < AliQA::kNDET; iDet++) { +// TString detName(AliQA::GetDetName(iDet)) ; +// AliQA * qa = AliQA::Instance(AliQA::DETECTORINDEX_t(iDet)) ; +// if ( qa->IsSet(AliQA::DETECTORINDEX_t(iDet), AliQA::kSIM, specie, AliQA::kFATAL)) { +// AliInfo(Form("QA status for %s %s in Hits and/or SDIGITS and/or Digits was Fatal; No reconstruction performed", +// detName.Data(), AliRecoParam::GetEventSpecieName(es))) ; +// } else { +// if ( fRunLocalReconstruction.Contains(AliQA::GetDetName(iDet)) || +// fRunLocalReconstruction.Contains("ALL") ) { +// newRunLocalReconstruction += detName ; +// newRunLocalReconstruction += " " ; +// } +// if ( fRunTracking.Contains(AliQA::GetDetName(iDet)) || +// fRunTracking.Contains("ALL") ) { +// newRunTracking += detName ; +// newRunTracking += " " ; +// } +// if ( fFillESD.Contains(AliQA::GetDetName(iDet)) || +// fFillESD.Contains("ALL") ) { +// newFillESD += detName ; +// newFillESD += " " ; +// } +// } +// } +// fRunLocalReconstruction = newRunLocalReconstruction ; +// fRunTracking = newRunTracking ; +// fFillESD = newFillESD ; } //_____________________________________________________________________________ @@ -2821,7 +2790,7 @@ Int_t AliReconstruction::GetDetIndex(const char* detector) { // return the detector index corresponding to detector Int_t index = -1 ; - for (index = 0; index < fgkNDetectors ; index++) { + for (index = 0; index < kNDetectors ; index++) { if ( strcmp(detector, fgkDetectorName[index]) == 0 ) break ; } @@ -2841,7 +2810,7 @@ Bool_t AliReconstruction::FinishPlaneEff() { // Return: kTRUE if all operations have been done properly, kFALSE otherwise // Bool_t ret=kFALSE; - //for (Int_t iDet = 0; iDet < fgkNDetectors; iDet++) { + //for (Int_t iDet = 0; iDet < kNDetectors; iDet++) { for (Int_t iDet = 0; iDet < 1; iDet++) { // for the time being only ITS //if (!IsSelected(fgkDetectorName[iDet], detStr)) continue; if(fTracker[iDet]) { @@ -2910,7 +2879,7 @@ void AliReconstruction::RunAliEVE() // successful initialization of AliEVE. AliInfo("Running AliEVE..."); - gROOT->ProcessLine(Form("AliEveEventManager::GetMaster()->SetEvent((AliRunLoader*)%p,(AliRawReader*)%p,(AliESDEvent*)%p);",fRunLoader,fRawReader,fesd)); + gROOT->ProcessLine(Form("AliEveEventManager::GetMaster()->SetEvent((AliRunLoader*)0x%lx,(AliRawReader*)0x%lx,(AliESDEvent*)0x%lx,(AliESDfriend*)0x%lx);",fRunLoader,fRawReader,fesd,fesdf)); gSystem->Run(); } @@ -2967,7 +2936,7 @@ Bool_t AliReconstruction::InitRecoParams() Bool_t isOK = kTRUE; TString detStr = fLoadCDB; - for (Int_t iDet = 0; iDet < fgkNDetectors; iDet++) { + for (Int_t iDet = 0; iDet < kNDetectors; iDet++) { if (!IsSelected(fgkDetectorName[iDet], detStr)) continue; @@ -3067,8 +3036,9 @@ Bool_t AliReconstruction::GetEventInfo() for( Int_t iclass=0; iclass < nclasses; iclass++ ) { AliTriggerClass* trclass = (AliTriggerClass*)classesArray.At(iclass); if (trclass) { - Int_t trindex = (Int_t)TMath::Log2(trclass->GetMask()); + Int_t trindex = TMath::Nint(TMath::Log2(trclass->GetMask())); fesd->SetTriggerClass(trclass->GetName(),trindex); + if (fRawReader) fRawReader->LoadTriggerClass(trclass->GetName(),trindex); if (trmask & (1 << trindex)) { trclasses += " "; trclasses += trclass->GetName(); @@ -3110,12 +3080,15 @@ const char *AliReconstruction::MatchDetectorList(const char *detectorList, UInt_ if ((detectorMask >> iDet) & 0x1) { TString det = AliDAQ::OfflineModuleName(iDet); if ((detList.CompareTo("ALL") == 0) || - detList.BeginsWith("ALL ") || - detList.EndsWith(" ALL") || - detList.Contains(" ALL ") || + ((detList.BeginsWith("ALL ") || + detList.EndsWith(" ALL") || + detList.Contains(" ALL ")) && + !(detList.BeginsWith("-"+det+" ") || + detList.EndsWith(" -"+det) || + detList.Contains(" -"+det+" "))) || (detList.CompareTo(det) == 0) || - detList.BeginsWith(det) || - detList.EndsWith(det) || + detList.BeginsWith(det+" ") || + detList.EndsWith(" "+det) || detList.Contains( " "+det+" " )) { if (!resultList.EndsWith(det + " ")) { resultList += det; @@ -3129,12 +3102,15 @@ const char *AliReconstruction::MatchDetectorList(const char *detectorList, UInt_ if ((detectorMask >> AliDAQ::kHLTId) & 0x1) { TString hltDet = AliDAQ::OfflineModuleName(AliDAQ::kNDetectors-1); if ((detList.CompareTo("ALL") == 0) || - detList.BeginsWith("ALL ") || - detList.EndsWith(" ALL") || - detList.Contains(" ALL ") || + ((detList.BeginsWith("ALL ") || + detList.EndsWith(" ALL") || + detList.Contains(" ALL ")) && + !(detList.BeginsWith("-"+hltDet+" ") || + detList.EndsWith(" -"+hltDet) || + detList.Contains(" -"+hltDet+" "))) || (detList.CompareTo(hltDet) == 0) || - detList.BeginsWith(hltDet) || - detList.EndsWith(hltDet) || + detList.BeginsWith(hltDet+" ") || + detList.EndsWith(" "+hltDet) || detList.Contains( " "+hltDet+" " )) { resultList += hltDet; }