From 1151db47a45b76283900e0a06ad93c57780cd487 Mon Sep 17 00:00:00 2001 From: kkanaki Date: Sat, 12 Sep 2009 16:06:49 +0000 Subject: [PATCH] - added AliTPCSeed info to the AliESDtrack of the AliESDEvent in all HLT TPC calibration components - cleaned up data block loops, defined origin of data blocks, corrected origin of AliESDEvent because of the use of the global esd converter - added testing macro that reads the recorded HLT data from HLTOUT, in particular HLT raw tracks, TPC clusters and the AliESDEvent block --- .../AliHLTTPCCalibSeedMakerComponent.cxx | 6 +- .../AliHLTTPCCalibTimeComponent.cxx | 75 ++++++++------- .../AliHLTTPCCalibTimeGainComponent.cxx | 76 +++++++++------ .../AliHLTTPCCalibrationComponent.cxx | 71 +++++++------- .../calibration/macros/calib-from-hltout.C | 95 +++++++++++++++++++ 5 files changed, 221 insertions(+), 102 deletions(-) create mode 100644 HLT/TPCLib/calibration/macros/calib-from-hltout.C diff --git a/HLT/TPCLib/calibration/AliHLTTPCCalibSeedMakerComponent.cxx b/HLT/TPCLib/calibration/AliHLTTPCCalibSeedMakerComponent.cxx index fe30013c0b0..13be74985d6 100644 --- a/HLT/TPCLib/calibration/AliHLTTPCCalibSeedMakerComponent.cxx +++ b/HLT/TPCLib/calibration/AliHLTTPCCalibSeedMakerComponent.cxx @@ -108,7 +108,7 @@ int AliHLTTPCCalibSeedMakerComponent::GetOutputDataTypes(AliHLTComponentDataType tgtList.clear(); //tgtList.push_back(AliHLTTPCDefinitions::fgkAliHLTDataTypeTPCSeed); - tgtList.push_back(kAliHLTDataTypeTObjArray); + tgtList.push_back(kAliHLTDataTypeTObjArray|kAliHLTDataOriginTPC); return tgtList.size(); } @@ -303,8 +303,8 @@ int AliHLTTPCCalibSeedMakerComponent::DoEvent(const AliHLTComponentEventData& /* offClusterArray = NULL; fSpecification = AliHLTTPCDefinitions::EncodeDataSpecification( fMinSlice, fMaxSlice, fMinPartition, fMaxPartition ); - //PushBack((TObject*)offClusterArray, kAliHLTDataTypeTObjArray, fSpecification); - PushBack((TObject*)fSeedArray, kAliHLTDataTypeTObjArray, fSpecification); + //PushBack((TObject*)offClusterArray, kAliHLTDataTypeTObjArray|kAliHLTDataOriginTPC, fSpecification); + PushBack((TObject*)fSeedArray, kAliHLTDataTypeTObjArray|kAliHLTDataOriginTPC, fSpecification); return 0; } // end DoEvent() diff --git a/HLT/TPCLib/calibration/AliHLTTPCCalibTimeComponent.cxx b/HLT/TPCLib/calibration/AliHLTTPCCalibTimeComponent.cxx index ef00a17ee33..4469ecb8c99 100644 --- a/HLT/TPCLib/calibration/AliHLTTPCCalibTimeComponent.cxx +++ b/HLT/TPCLib/calibration/AliHLTTPCCalibTimeComponent.cxx @@ -32,10 +32,13 @@ using namespace std; #endif #include "AliHLTTPCCalibTimeComponent.h" - #include "AliHLTTPCDefinitions.h" -#include "AliTPCcalibTime.h" + #include "AliESDEvent.h" +#include "AliESDtrack.h" + +#include "AliTPCcalibTime.h" +#include "AliTPCseed.h" #include "TObjArray.h" #include "TString.h" @@ -80,14 +83,14 @@ void AliHLTTPCCalibTimeComponent::GetInputDataTypes( vector(iter); + } - for(iterESD = (TObject*)GetFirstInputObject(kAliHLTDataTypeESDObject|kAliHLTDataOriginTPC); iterESD != NULL; iterESD = (TObject*)GetNextInputObject()){ - - if(GetDataType(iterSEED) != (kAliHLTDataTypeESDObject | kAliHLTDataOriginTPC)) continue; + + //----------- loop over output of global esd converter ----------------// + + for(iter = (TObject*)GetFirstInputObject(kAliHLTDataTypeESDObject | kAliHLTDataOriginOut); iter != NULL; iter = (TObject*)GetNextInputObject()){ + + if(GetDataType(iter) != (kAliHLTDataTypeESDObject | kAliHLTDataOriginOut)) continue; - AliHLTUInt8_t slice = AliHLTTPCDefinitions::GetMinSliceNr(GetSpecification(iterESD)); - AliHLTUInt8_t partition = AliHLTTPCDefinitions::GetMinPatchNr(GetSpecification(iterESD)); + AliHLTUInt8_t slice = AliHLTTPCDefinitions::GetMinSliceNr(GetSpecification(iter)); + AliHLTUInt8_t partition = AliHLTTPCDefinitions::GetMinPatchNr(GetSpecification(iter)); if( partition < fMinPartition ) fMinPartition = partition; if( partition > fMaxPartition ) fMaxPartition = partition; if( slice < fMinSlice ) fMinSlice = slice; if( slice > fMaxSlice ) fMaxSlice = slice; - fESDEvent = dynamic_cast(iterESD); + fESDEvent = dynamic_cast(iter); fESDEvent->CreateStdContent(); - } - - - //--------------- output over TObjArray of AliTPCseed objects (output of TPCSeedMaker) -------------------// - - for(iterSEED = (TObject*)GetFirstInputObject(kAliHLTDataTypeTObjArray|kAliHLTDataOriginTPC); iterSEED != NULL; iterSEED = (TObject*)GetNextInputObject()){ - - if(GetDataType(iterSEED) != (kAliHLTDataTypeTObjArray | kAliHLTDataOriginTPC)) continue; - - fSeedArray = dynamic_cast(iterSEED); - } - + + HLTDebug("# Seeds: %i\n", fSeedArray->GetEntriesFast()); + + for(Int_t i=0; iGetEntriesFast(); i++){ + + AliTPCseed *seed = (AliTPCseed*)fSeedArray->UncheckedAt(i); + if(!seed) continue; + AliESDtrack *esd = fESDEvent->GetTrack(i); + AliTPCseed *seedCopy = new AliTPCseed(*seed, kTRUE); + esd->AddCalibObject(seedCopy); + } + } + fCalibTime->Process(fESDEvent); - - - fSpecification = AliHLTTPCDefinitions::EncodeDataSpecification( fMinSlice, fMaxSlice, fMinPartition, fMaxPartition ); - PushBack( (TObject*)fCalibTime, AliHLTTPCDefinitions::fgkCalibCEDataType, fSpecification); + PushBack( (TObject*)fCalibTime, AliHLTTPCDefinitions::fgkCalibCEDataType | kAliHLTDataOriginOut, fSpecification); return 0; } diff --git a/HLT/TPCLib/calibration/AliHLTTPCCalibTimeGainComponent.cxx b/HLT/TPCLib/calibration/AliHLTTPCCalibTimeGainComponent.cxx index 609b86e3301..82172d308fc 100644 --- a/HLT/TPCLib/calibration/AliHLTTPCCalibTimeGainComponent.cxx +++ b/HLT/TPCLib/calibration/AliHLTTPCCalibTimeGainComponent.cxx @@ -32,14 +32,20 @@ using namespace std; #endif #include "AliHLTTPCCalibTimeGainComponent.h" - #include "AliHLTTPCDefinitions.h" -#include "AliTPCcalibTimeGain.h" + #include "AliESDEvent.h" +#include "AliESDtrack.h" + +#include "AliTPCcalibTimeGain.h" +#include "AliTPCseed.h" + +#include "TObjArray.h" +#include "TString.h" + #include #include -#include "TString.h" -#include "TObjArray.h" + ClassImp(AliHLTTPCCalibTimeGainComponent) // ROOT macro for the implementation of ROOT specific class methods @@ -76,14 +82,14 @@ void AliHLTTPCCalibTimeGainComponent::GetInputDataTypes( vector(iter); + } + + //----------- loop over output of global esd converter ----------------// + + for(iter = (TObject*)GetFirstInputObject(kAliHLTDataTypeESDObject | kAliHLTDataOriginOut); iter != NULL; iter = (TObject*)GetNextInputObject()){ + + if(GetDataType(iter) != (kAliHLTDataTypeESDObject | kAliHLTDataOriginOut)) continue; - AliHLTUInt8_t slice = AliHLTTPCDefinitions::GetMinSliceNr(GetSpecification(iterESD)); - AliHLTUInt8_t partition = AliHLTTPCDefinitions::GetMinPatchNr(GetSpecification(iterESD)); + AliHLTUInt8_t slice = AliHLTTPCDefinitions::GetMinSliceNr(GetSpecification(iter)); + AliHLTUInt8_t partition = AliHLTTPCDefinitions::GetMinPatchNr(GetSpecification(iter)); if( partition < fMinPartition ) fMinPartition = partition; if( partition > fMaxPartition ) fMaxPartition = partition; if( slice < fMinSlice ) fMinSlice = slice; if( slice > fMaxSlice ) fMaxSlice = slice; - fESDEvent = dynamic_cast(iterESD); + fESDEvent = dynamic_cast(iter); fESDEvent->CreateStdContent(); + + HLTDebug("# Seeds: %i\n", fSeedArray->GetEntriesFast()); + + for(Int_t i=0; iGetEntriesFast(); i++){ + + AliTPCseed *seed = (AliTPCseed*)fSeedArray->UncheckedAt(i); + if(!seed) continue; + AliESDtrack *esd = fESDEvent->GetTrack(i); + AliTPCseed *seedCopy = new AliTPCseed(*seed, kTRUE); + esd->AddCalibObject(seedCopy); + } } - - - //--------------- output over TObjArray of AliTPCseed objects (output of TPCSeedMaker) -------------------// - - for(iterSEED = (TObject*)GetFirstInputObject(kAliHLTDataTypeTObjArray|kAliHLTDataOriginTPC); iterSEED != NULL; iterSEED = (TObject*)GetNextInputObject()){ - - if(GetDataType(iterSEED) != (kAliHLTDataTypeTObjArray | kAliHLTDataOriginTPC)) continue; - - fSeedArray = dynamic_cast(iterSEED); - } - + fCalibTimeGain->Process(fESDEvent); fSpecification = AliHLTTPCDefinitions::EncodeDataSpecification( fMinSlice, fMaxSlice, fMinPartition, fMaxPartition ); - PushBack( (TObject*) fCalibTimeGain, AliHLTTPCDefinitions::fgkCalibCEDataType, fSpecification); + PushBack( (TObject*) fCalibTimeGain, AliHLTTPCDefinitions::fgkCalibCEDataType| kAliHLTDataOriginOut, fSpecification); return 0; } diff --git a/HLT/TPCLib/calibration/AliHLTTPCCalibrationComponent.cxx b/HLT/TPCLib/calibration/AliHLTTPCCalibrationComponent.cxx index 35dc9d3b625..42e10c62b57 100644 --- a/HLT/TPCLib/calibration/AliHLTTPCCalibrationComponent.cxx +++ b/HLT/TPCLib/calibration/AliHLTTPCCalibrationComponent.cxx @@ -36,19 +36,20 @@ using namespace std; #include "AliHLTTPCAnalysisTaskcalib.h" #include "AliAnalysisManager.h" -#include "AliESDInputHandler.h" +#include "AliESDEvent.h" +//#include "AliESDInputHandler.h" #include "AliTPCcalibTime.h" #include "AliTPCcalibTimeGain.h" -#include "AliESDEvent.h" - -#include -#include +#include "AliTPCseed.h" #include "TString.h" #include "TObjArray.h" #include "TTimeStamp.h" +#include +#include + ClassImp(AliHLTTPCCalibrationComponent) // ROOT macro for the implementation of ROOT specific class methods AliHLTTPCCalibrationComponent::AliHLTTPCCalibrationComponent() @@ -137,20 +138,13 @@ Int_t AliHLTTPCCalibrationComponent::ScanArgument( Int_t argc, const char** argv Int_t AliHLTTPCCalibrationComponent::InitCalibration() { // see header file for class documentation - - //TTimeStamp startTime(2008,9,0,0,0,0); - //TTimeStamp stopTime(2008,11,0,0,0,0); -// AliAnalysisManager *mgr = new AliAnalysisManager("TestManager"); -// AliESDInputHandler *esdH = new AliESDInputHandler; -// esdH->SetActiveBranches("ESDfriend"); -// mgr->SetInputEventHandler(esdH); - if(fCalibTask) return EINPROGRESS; fCalibTask = new AliHLTTPCAnalysisTaskcalib("TPC Calibration Task"); if(fCalibTime) return EINPROGRESS; - fCalibTime = new AliTPCcalibTime(); + //fCalibTime = new AliTPCcalibTime(); + fCalibTime = new AliTPCcalibTime("calibTime","time dependent Vdrift calibration",-2, 2, 1); fCalibTime->SetDebugLevel(20); fCalibTime->SetStreamLevel(10); @@ -181,40 +175,49 @@ Int_t AliHLTTPCCalibrationComponent::ProcessCalibration( const AliHLTComponentEv if(GetFirstInputBlock( kAliHLTDataTypeSOR ) || GetFirstInputBlock( kAliHLTDataTypeEOR )) return 0; - TObject *iterESD, *iterSEED = NULL; + TObject *iter = NULL; - //----------- loop over output of TPCEsdConverter ----------------// + //--------------- output over TObjArray of AliTPCseed objects (output of TPCSeedMaker) -------------------// + + for(iter = (TObject*)GetFirstInputObject(kAliHLTDataTypeTObjArray|kAliHLTDataOriginTPC); iter != NULL; iter = (TObject*)GetNextInputObject()){ + + if(GetDataType(iter) != (kAliHLTDataTypeTObjArray | kAliHLTDataOriginTPC)) continue; + fSeedArray = dynamic_cast(iter); + } + + //----------- loop over output of global esd converter ----------------// - for(iterESD = (TObject*)GetFirstInputObject(kAliHLTDataTypeESDObject|kAliHLTDataOriginTPC); iterESD != NULL; iterESD = (TObject*)GetNextInputObject()){ - - if(GetDataType(iterSEED) != (kAliHLTDataTypeESDObject | kAliHLTDataOriginTPC)) continue; + for(iter = (TObject*)GetFirstInputObject(kAliHLTDataTypeESDObject | kAliHLTDataOriginOut); iter != NULL; iter = (TObject*)GetNextInputObject()){ + + if(GetDataType(iter) != (kAliHLTDataTypeESDObject | kAliHLTDataOriginOut)) continue; - AliHLTUInt8_t slice = AliHLTTPCDefinitions::GetMinSliceNr(GetSpecification(iterESD)); - AliHLTUInt8_t partition = AliHLTTPCDefinitions::GetMinPatchNr(GetSpecification(iterESD)); + AliHLTUInt8_t slice = AliHLTTPCDefinitions::GetMinSliceNr(GetSpecification(iter)); + AliHLTUInt8_t partition = AliHLTTPCDefinitions::GetMinPatchNr(GetSpecification(iter)); if( partition < fMinPartition ) fMinPartition = partition; if( partition > fMaxPartition ) fMaxPartition = partition; if( slice < fMinSlice ) fMinSlice = slice; if( slice > fMaxSlice ) fMaxSlice = slice; - fESDEvent = dynamic_cast(iterESD); + fESDEvent = dynamic_cast(iter); fESDEvent->CreateStdContent(); - } - - - //--------------- output over TObjArray of AliTPCseed objects (output of TPCSeedMaker) -------------------// - - for(iterSEED = (TObject*)GetFirstInputObject(kAliHLTDataTypeTObjArray|kAliHLTDataOriginTPC); iterSEED != NULL; iterSEED = (TObject*)GetNextInputObject()){ - - if(GetDataType(iterSEED) != (kAliHLTDataTypeTObjArray | kAliHLTDataOriginTPC)) continue; - - fSeedArray = dynamic_cast(iterSEED); - } + + HLTDebug("# Seeds: %i\n", fSeedArray->GetEntriesFast()); + + for(Int_t i=0; iGetEntriesFast(); i++){ + + AliTPCseed *seed = (AliTPCseed*)fSeedArray->UncheckedAt(i); + if(!seed) continue; + AliESDtrack *esd = fESDEvent->GetTrack(i); + AliTPCseed *seedCopy = new AliTPCseed(*seed, kTRUE); + esd->AddCalibObject(seedCopy); + } + } fCalibTask->Process(fESDEvent); fSpecification = AliHLTTPCDefinitions::EncodeDataSpecification( fMinSlice, fMaxSlice, fMinPartition, fMaxPartition ); - PushBack( (TObject*) fCalibTask, AliHLTTPCDefinitions::fgkCalibCEDataType, fSpecification); + PushBack( (TObject*) fCalibTask, AliHLTTPCDefinitions::fgkCalibCEDataType | kAliHLTDataOriginOut, fSpecification); return 0; } diff --git a/HLT/TPCLib/calibration/macros/calib-from-hltout.C b/HLT/TPCLib/calibration/macros/calib-from-hltout.C new file mode 100644 index 00000000000..be3a8053c6f --- /dev/null +++ b/HLT/TPCLib/calibration/macros/calib-from-hltout.C @@ -0,0 +1,95 @@ +// $Id: $ +/* + * Example macro to run TPC calibration interface embedded into AliRoot reconstruction. + * The input used is unpacked from the HLTOUT of recorded data, in which the merged + * tracks, the ESD and the TPC clusters have been added. The seed maker and the calibration + * components follow. + * + * Usage: + *
+ *   aliroot -b -q calib-from-hltout.C'("raw.root","task"     )'     | tee calib-from-hltout.log
+ *   aliroot -b -q calib-from-hltout.C'("raw.root","calibtime")'     | tee calib-from-hltout.log
+ *   aliroot -b -q calib-from-hltout.C'("raw.root","calibtimegain")' | tee calib-from-hltout.log
+ * 
+ * + * + * The reconstruction is steered by the AliReconstruction object in the + * usual way. Keep in mind that you should use the proper default and + * specific storage otherwise the reconstruction will break. + * + * @ingroup alihlt_tpc + * @author Kalliopi.Kanaki@ift.uib.no + */ + +void calib_from_hltout(const char* input="./", const char* option="task"){ + + gSystem->Load("libANALYSIS"); + gSystem->Load("libTPCcalib"); + + if(!gSystem->AccessPathName("galice.root")){ + cerr << "Please delete file galice.root or run at a different place." << endl; + return; + } + + if (!input) { + cerr << "Please specify input or run without arguments." << endl; + return; + } + + ///////////////////////////////////////////////////////////////////////// + // + // init the HLT system in order to define the analysis chain below + // + + AliHLTSystem *gHLT = AliHLTPluginBase::GetInstance(); + if(!gHLT){ + cerr << "fatal error: cannot get HLT instance" << endl; + } + + AliHLTConfiguration publisher("hltout", "AliHLTOUTPublisher", NULL, ""); + + AliHLTConfiguration seedconf("seeds", "TPCCalibSeedMaker", "hltout",""); + + TString calibOption = option; + if (calibOption.CompareTo("task")==0) AliHLTConfiguration calibtimeconf("TPCcalib", "TPCCalibration", "hltout seeds" ,""); + else if(calibOption.CompareTo("calibtime")==0) AliHLTConfiguration calibtimeconf("calibTime", "TPCCalibTime", "hltout seeds", ""); + else if(calibOption.CompareTo("calibtimegain")==0) AliHLTConfiguration calibtimeconf("calibTimeGain", "TPCCalibTimeGain","hltout seeds", ""); + else + { + cerr << "\nPlease specify an option for the calibration component you want to run." << endl; + return; + } + + + ///////////////////////////////////////////////////////////////////////// + // + // Init and run the reconstruction + // All but HLT reconstruction is switched off + // + AliReconstruction rec; + rec.SetInput(input); + rec.SetRunVertexFinder(kFALSE); + rec.SetRunLocalReconstruction("HLT"); + rec.SetRunTracking(""); + rec.SetLoadAlignFromCDB(0); + rec.SetRunQA(":"); + rec.SetDefaultStorage("local://$ALICE_ROOT/OCDB"); + rec.SetSpecificStorage("GRP/GRP/Data", Form("local://%s",gSystem->pwd())); + //rec.SetDefaultStorage("local:///home/kanaki/calibComp/libraryTest/OCDB/"); + //rec.SetSpecificStorage("GRP/GRP/Data", "local:///home/kanaki/calibComp/libraryTest/OCDB/"); + + + // NOTE: FillESD is a step in the AliReconstruction sequence and has + // nothing to do with the fact that this macro writes ESD output + // HLT processes the HLTOUT during FillESD and extracts data which + // has already been prepared. This step is currently not necessary for + // this macro + rec.SetFillESD(""); + + if (calibOption.CompareTo("task")==0) rec.SetOption("HLT", "libAliHLTUtil.so libAliHLTGlobal.so libAliHLTTPC.so libAliHLTTPCCalibration.so loglevel=0x7c chains=TPCcalib"); + if (calibOption.CompareTo("calibtime")==0) rec.SetOption("HLT", "libAliHLTUtil.so libAliHLTGlobal.so libAliHLTTPC.so libAliHLTTPCCalibration.so loglevel=0x7c chains=calibTime"); + else if(calibOption.CompareTo("calibtimegain")==0) rec.SetOption("HLT", "libAliHLTUtil.so libAliHLTGlobal.so libAliHLTTPC.so libAliHLTTPCCalibration.so loglevel=0x7c chains=calibTimeGain"); + + //rec.SetEventRange(0,20); + rec.Run(); +} -- 2.43.0