#include "AliTPCcalibTime.h"
#include "AliTPCcalibCalib.h";
#include "AliTPCseed.h"
-#include "AliTPCcalibCalib.h"
#include "TObjArray.h"
#include "TString.h"
fCal(NULL),
fESDevent(NULL),
fESDtrack(NULL),
- fESDfriendTrack(NULL),
fESDfriend(NULL),
fSeedArray(NULL)
{
// see header file for class documentation
if(fCalibTime) return EINPROGRESS;
- //fCalibTime = new AliTPCcalibTime();
- //fCalibTime = new AliTPCcalibTime("calibTime","time dependent Vdrift calibration",-2, 2, 1);
fCal = new AliTPCcalibCalib();
return 0;
Int_t AliHLTTPCCalibTimeComponent::DeinitCalibration() {
// see header file for class documentation
- if(fCalibTime) delete fCalibTime; fCalibTime = NULL;
- if(fCal) delete fCal; fCal = NULL;
- if(fESDtrack) delete fESDtrack; fESDtrack = NULL;
- if(fESDfriendTrack) delete fESDfriendTrack; fESDfriendTrack = NULL;
- if(fESDfriend) delete fESDfriend; fESDfriend = NULL;
- if(fSeedArray) delete fSeedArray; fSeedArray = NULL;
-
+ if(fCalibTime) delete fCalibTime; fCalibTime = NULL;
+ if(fCal) delete fCal; fCal = NULL;
+ if(fESDfriend) delete fESDfriend; fESDfriend = NULL;
+
return 0;
}
//--------------- output over TObjArray of AliTPCseed objects (output of TPCSeedMaker) -------------------//
+ // A previous component in the chain (TPCSeedMaker) has processed the TPC clusters and tracks and created a TObjArray of AliTPCseed objects
+ // In this loop the iterator accesses this array stored in memory, in order to use it in the next loop over the AliESDevent of the HLT
+
for(iter = (TObject*)GetFirstInputObject(kAliHLTDataTypeTObjArray|kAliHLTDataOriginTPC); iter != NULL; iter = (TObject*)GetNextInputObject()){
if(GetDataType(iter) != (kAliHLTDataTypeTObjArray | kAliHLTDataOriginTPC)) continue;
//----------- loop over output of global esd converter ----------------//
+
+ // In this loop we access the AliESDevent that was produced by the HLT and is stored in memory. There should exist 1 object
+ // of type kAliHLTDataTypeESDObject per event.
for(iter = (TObject*)GetFirstInputObject(kAliHLTDataTypeESDObject | kAliHLTDataOriginOut); iter != NULL; iter = (TObject*)GetNextInputObject()){
//fESDevent->SetRunNumber(0);
//fESDevent->SetRunNumber(84714);
- HLTDebug("# Seeds: %i\n", fSeedArray->GetEntriesFast());
+ HLTDebug("# Seeds: %i\n", fSeedArray->GetEntriesFast()); // access of the info from the previous loop over the AliTPCseed array
- for(Int_t i=0; i<fSeedArray->GetEntriesFast(); i++){
+ for(Int_t i=0; i<fSeedArray->GetEntriesFast(); i++){ // loop over TObjArray
AliTPCseed *seed = (AliTPCseed*)fSeedArray->UncheckedAt(i);
if(!seed) continue;
fESDtrack = fESDevent->GetTrack(i);
if(!fESDtrack) continue;
- fCal->RefitTrack(fESDtrack, seed, GetBz());
+ fCal->RefitTrack(fESDtrack, seed, GetBz()); // update AliESDtrack and AliTPCseed info, acccording to Marian's request
AliTPCseed *seedCopy = new AliTPCseed(*seed, kTRUE);
- fESDtrack->AddCalibObject(seedCopy);
+ fESDtrack->AddCalibObject(seedCopy); // add the AliTPCseed as a friend track to the AliESDtrack (to be accessed in TPC/AliTPCcalibTime.cxx)
//fESDfriendTrack = const_cast<AliESDfriendTrack*>(fESDtrack->GetFriendTrack());
}
}
+ if(!fCalibTime){ // create the calibration object that will call the offline functions
- if(!fCalibTime) {
- Int_t startTime = fESDevent->GetTimeStamp()-60*60*1; //Start time one hour before first event, will make precise cuts later.
- Int_t endTime = fESDevent->GetTimeStamp()+60*60*23; //End time 23 hours after first event.
- fCalibTime = new AliTPCcalibTime("calibTime","time dependent Vdrift calibration", startTime, endTime, 20*60);
- printf("fCalibTime=%i, startTime=%i, endTime=%i\n", fCalibTime!=0, startTime, endTime);
+ Int_t startTime = fESDevent->GetTimeStamp()-60*60*1; //Start time one hour before first event, will make precise cuts later.
+ Int_t endTime = fESDevent->GetTimeStamp()+60*60*23; //End time 23 hours after first event.
+ fCalibTime = new AliTPCcalibTime("calibTime","time dependent Vdrift calibration", startTime, endTime, 20*60);
+ printf("fCalibTime=%i, startTime=%i, endTime=%i \n", fCalibTime!=0, startTime, endTime);
}
fESDfriend = new AliESDfriend();
fESDevent->GetESDfriend(fESDfriend);
fESDevent->SetESDfriend(fESDfriend);
- fESDevent->AddObject(fESDfriend);
+ fESDevent->AddObject(fESDfriend);
+ // create the AliESDfriend and add it to the event, now both the friend tracks and the friends are available for the offline functions to be called
- fCalibTime->UpdateEventInfo(fESDevent);
- fCalibTime->Process(fESDevent);
+ fCalibTime->UpdateEventInfo(fESDevent); // needed for getting the run number and time stamp information correct on the offline side
+ fCalibTime->Process(fESDevent); // first offline function called
+
+ delete fESDfriend;
//PushBack( (TObject*)fCalibTime, AliHLTTPCDefinitions::fgkCalibCEDataType | kAliHLTDataOriginOut, 0x0);
HLTInfo("Shipping data to FXS...\n");
- fCalibTime->Analyze();
-
- THnSparse* addHist=fCalibTime->GetHistoDrift("all");
+ fCalibTime->Analyze(); // called at the end of the run or event modulo
+
+ // the rest of the histogram and graph declarations were copied by Dag as a first attempt to get the start/end time bin "automatically". Perhaps we need some more
+ // thinking here to avoid copying all these lines that might chain in offline without HLT realizing.
+
+ THnSparse* addHist = fCalibTime->GetHistoDrift("all");
if(!addHist) return -1;
//Identifying used range of histogram
- Int_t startTimeBin=0;
- Int_t endTimeBin=0;
- TH1D* histoTime=addHist->Projection(0);
- if(histoTime) {
- startTimeBin=histoTime->FindFirstBinAbove(0);
- endTimeBin =histoTime->FindLastBinAbove(0);
- printf("startTimeBin=%i endTimeBin=%i\n", startTimeBin, endTimeBin);
- printf("startTimeBinCentre=%f endTimeBinCentre=%f\n", histoTime->GetBinCenter(startTimeBin), histoTime->GetBinCenter(endTimeBin));
- printf("startTimeBinWidth=%f endTimeBinWidth=%f\n", histoTime->GetBinWidth(startTimeBin), histoTime->GetBinWidth(endTimeBin));
- delete histoTime;
- histoTime=0;
+
+ Int_t startTimeBin = 0;
+ Int_t endTimeBin = 0;
+
+ TH1D *histoTime = addHist->Projection(0);
+ if(histoTime){
+ startTimeBin = histoTime->FindFirstBinAbove(0);
+ endTimeBin = histoTime->FindLastBinAbove(0);
+ printf("startTimeBin =%i endTimeBin =%i\n", startTimeBin, endTimeBin);
+ printf("startTimeBinCentre =%f endTimeBinCentre =%f\n", histoTime->GetBinCenter(startTimeBin), histoTime->GetBinCenter(endTimeBin));
+ printf("startTimeBinWidth =%f endTimeBinWidth =%f\n", histoTime->GetBinWidth(startTimeBin), histoTime->GetBinWidth(endTimeBin));
+ delete histoTime; histoTime = 0;
}
- Int_t startPtBin=0;
- Int_t endPtBin=0;
- TH1D* histoPt=addHist->Projection(1);
- if(histoPt) {
- startPtBin=histoPt->FindFirstBinAbove(0);
- endPtBin =histoPt->FindLastBinAbove(0);
- printf("startPtBin=%i endPtBin=%i\n", startPtBin, endPtBin);
- printf("startPtBinCentre=%f endPtBinCentre=%f\n", histoPt->GetBinCenter(startPtBin), histoPt->GetBinCenter(endPtBin));
- printf("startPtinWidth=%f endPtBinWidth=%f\n", histoPt->GetBinWidth(startPtBin), histoPt->GetBinWidth(endPtBin));
- delete histoPt;
- histoPt=0;
+ Int_t startPtBin = 0;
+ Int_t endPtBin = 0;
+ TH1D *histoPt = addHist->Projection(1);
+ if(histoPt){
+ startPtBin = histoPt->FindFirstBinAbove(0);
+ endPtBin = histoPt->FindLastBinAbove(0);
+ printf("startPtBin =%i endPtBin =%i\n", startPtBin, endPtBin);
+ printf("startPtBinCentre =%f endPtBinCentre =%f\n", histoPt->GetBinCenter(startPtBin), histoPt->GetBinCenter(endPtBin));
+ printf("startPtinWidth =%f endPtBinWidth =%f\n", histoPt->GetBinWidth(startPtBin), histoPt->GetBinWidth(endPtBin));
+ delete histoPt; histoPt = 0;
}
- Int_t startVdBin=0;
- Int_t endVdBin=0;
- TH1D* histoVd=addHist->Projection(2);
- if(histoVd) {
- startVdBin=histoVd->FindFirstBinAbove(0);
- endVdBin =histoVd->FindLastBinAbove(0);
- printf("startVdBin=%i endVdBin=%i\n", startVdBin, endVdBin);
- printf("startVdBinCentre=%f endVdBinCentre=%f\n", histoVd->GetBinCenter(startVdBin), histoVd->GetBinCenter(endVdBin));
- printf("startVdBinWidth=%f endVdBinWidth=%f\n", histoVd->GetBinWidth(startVdBin), histoVd->GetBinWidth(endVdBin));
- delete histoVd;
- histoVd=0;
+ Int_t startVdBin = 0;
+ Int_t endVdBin = 0;
+ TH1D *histoVd = addHist->Projection(2);
+ if(histoVd){
+ startVdBin = histoVd->FindFirstBinAbove(0);
+ endVdBin = histoVd->FindLastBinAbove(0);
+ printf("startVdBin =%i endVdBin = %i\n", startVdBin, endVdBin);
+ printf("startVdBinCentre =%f endVdBinCentre = %f\n", histoVd->GetBinCenter(startVdBin), histoVd->GetBinCenter(endVdBin));
+ printf("startVdBinWidth =%f endVdBinWidth = %f\n", histoVd->GetBinWidth(startVdBin), histoVd->GetBinWidth(endVdBin));
+ delete histoVd; histoVd = 0;
}
- TH1D* histoRun=addHist->Projection(3);
- Int_t startRunBin=0;
- Int_t endRunBin=0;
- if(histoRun) {
- startRunBin=histoRun->FindFirstBinAbove(0);
- endRunBin =histoRun->FindLastBinAbove(0);
- printf("startRunBin=%i endRunBin=%i\n", startRunBin, endRunBin);
- printf("startRunBinCentre=%f endRunBinCentre=%f\n", histoRun->GetBinCenter(startRunBin), histoRun->GetBinCenter(endRunBin));
- printf("startRunBinWidth=%f endRunBinWidth=%f\n", histoRun->GetBinWidth(startRunBin), histoRun->GetBinWidth(endRunBin));
- delete histoRun;
- histoRun=0;
+ Int_t startRunBin = 0;
+ Int_t endRunBin = 0;
+ TH1D *histoRun = addHist->Projection(3);
+ if(histoRun){
+ startRunBin = histoRun->FindFirstBinAbove(0);
+ endRunBin = histoRun->FindLastBinAbove(0);
+ printf("startRunBin = %i endRunBin = %i\n", startRunBin, endRunBin);
+ printf("startRunBinCentre = %f endRunBinCentre = %f\n", histoRun->GetBinCenter(startRunBin), histoRun->GetBinCenter(endRunBin));
+ printf("startRunBinWidth = %f endRunBinWidth = %f\n", histoRun->GetBinWidth(startRunBin), histoRun->GetBinWidth(endRunBin));
+ delete histoRun; histoRun = 0;
}
- TObjArray* vdriftArray = new TObjArray();
+ TObjArray *vdriftArray = new TObjArray();
if(!vdriftArray) return -2;
- TObjArray* array=fCalibTime->GetHistoDrift();
+ TObjArray *array = fCalibTime->GetHistoDrift();
if(!array) return -3;
- TIterator* iterator = array->MakeIterator();
+ TIterator *iterator = array->MakeIterator();
if(!iterator) return -4;
iterator->Reset();
- THnSparse* hist=NULL;
- while((hist=(THnSparseF*)iterator->Next())){
- if(!hist) continue;
- hist->Print();
- hist->GetAxis(0)->SetRange(startTimeBin, endTimeBin);
- hist->GetAxis(1)->SetRange(startPtBin, endPtBin);
- hist->GetAxis(0)->SetRange(startVdBin, endVdBin);
- hist->GetAxis(3)->SetRange(startRunBin, endRunBin);
- TString name=hist->GetName();
- Int_t dim[4]={0,1,2,3};
- THnSparse* newHist=hist->Projection(4,dim);
- newHist->SetName(name);
- vdriftArray->Add(newHist);
- TGraphErrors* graph=AliTPCcalibBase::FitSlices(newHist,2,0,400,100,0.05,0.95, kTRUE);
- printf("name=%s graph=%i\n", name.Data(), graph==0);
- if(!graph || !graph->GetN()) continue;
- printf("name=%s graph=%i, N=%i\n", name.Data(), graph==0, graph->GetN());
- Int_t pos=name.Index("_");
- name=name(pos,name.Capacity()-pos);
- TString graphName=graph->ClassName();
- graphName+=name;
- graphName.ToUpper();
- graph->SetName(graphName);
- printf("name=%s\n", graphName.Data());
- vdriftArray->Add(graph);
-
- //Currently, AliSplineFits can not be given names...
- //AliSplineFit* fit=new AliSplineFit();
- //fit->SetGraph(graph);
- //fit->SetMinPoints(graph->GetN()+1);
- //fit->InitKnots(graph,2,0,0.001);
- //fit->SplineFit(0);
- //TString fiName=fit->ClassName();
- //fiName+=type;
- //fiName+=trigger;
- //fiName.ToUpper();
- //fit->SetName(fiName.Data());
- //printf("name=%s\n", fiName.Data());
- //vdriftArray->Add(fit);
+ THnSparse *hist = NULL;
+ while((hist = (THnSparseF*)iterator->Next())){
+
+ if(!hist) continue;
+ hist->Print();
+ hist->GetAxis(0)->SetRange(startTimeBin, endTimeBin);
+ hist->GetAxis(1)->SetRange(startPtBin, endPtBin);
+ hist->GetAxis(0)->SetRange(startVdBin, endVdBin);
+ hist->GetAxis(3)->SetRange(startRunBin, endRunBin);
+
+ TString name = hist->GetName();
+ Int_t dim[4] = {0,1,2,3};
+ THnSparse *newHist = hist->Projection(4,dim);
+ newHist->SetName(name);
+ vdriftArray->Add(newHist);
+
+ TGraphErrors *graph = AliTPCcalibBase::FitSlices(newHist,2,0,400,100,0.05,0.95, kTRUE);
+ printf("name = %s graph = %i\n", name.Data(), graph==0);
+ if(!graph || !graph->GetN()) continue;
+ printf("name = %s graph = %i, N = %i\n", name.Data(), graph==0, graph->GetN());
+ Int_t pos = name.Index("_");
+ name = name(pos,name.Capacity()-pos);
+ TString graphName = graph->ClassName();
+ graphName+=name;
+ graphName.ToUpper();
+ graph->SetName(graphName);
+ printf("name = %s\n", graphName.Data());
+ vdriftArray->Add(graph);
+
+ //Currently, AliSplineFits can not be given names...
+ //AliSplineFit* fit=new AliSplineFit();
+ //fit->SetGraph(graph);
+ //fit->SetMinPoints(graph->GetN()+1);
+ //fit->InitKnots(graph,2,0,0.001);
+ //fit->SplineFit(0);
+ //TString fiName=fit->ClassName();
+ //fiName+=type;
+ //fiName+=trigger;
+ //fiName.ToUpper();
+ //fit->SetName(fiName.Data());
+ //printf("name=%s\n", fiName.Data());
+ //vdriftArray->Add(fit);
}
- THnSparse* laserHist=NULL;
- TGraphErrors* laserGraph=NULL;
- TString laserName="";
+
+ THnSparse *laserHist = NULL;
+ TGraphErrors *laserGraph = NULL;
+ TString laserName = "";
//Histograms and graphs for A side lasers
- laserHist=fCalibTime->GetHistVdriftLaserA(1);
+ laserHist = fCalibTime->GetHistVdriftLaserA(1);
if(laserHist){
- laserName=laserHist->ClassName();
- laserName+="_MEAN_DRIFT_LASER_ALL_A";
- laserName.ToUpper();
- laserHist->SetName(laserName);
- vdriftArray->Add(laserHist);
- laserGraph=AliTPCcalibBase::FitSlices(laserHist,2,0,400,100,0.05,0.95, kTRUE);
- if(laserGraph && laserGraph->GetN()){
- laserName=laserGraph->GetName();
- laserName+="_MEAN_DRIFT_LASER_ALL_A";
- laserName.ToUpper();
- laserGraph->SetName(laserName);
- vdriftArray->Add(laserGraph);
- }
+
+ laserName=laserHist->ClassName();
+ laserName+="_MEAN_DRIFT_LASER_ALL_A";
+ laserName.ToUpper();
+ laserHist->SetName(laserName);
+ vdriftArray->Add(laserHist);
+ laserGraph=AliTPCcalibBase::FitSlices(laserHist,2,0,400,100,0.05,0.95, kTRUE);
+ if(laserGraph && laserGraph->GetN()){
+ laserName=laserGraph->GetName();
+ laserName+="_MEAN_DRIFT_LASER_ALL_A";
+ laserName.ToUpper();
+ laserGraph->SetName(laserName);
+ vdriftArray->Add(laserGraph);
+ }
}
//Histograms and graphs for C side lasers
laserHist=fCalibTime->GetHistVdriftLaserC(1);
if(laserHist){
- laserName=laserHist->ClassName();
- laserName+="_MEAN_DRIFT_LASER_ALL_C";
- laserName.ToUpper();
- laserHist->SetName(laserName);
- vdriftArray->Add(laserHist);
- laserGraph=AliTPCcalibBase::FitSlices(laserHist,2,0,400,100,0.05,0.95, kTRUE);
- if(laserGraph && laserGraph->GetN()){
- laserName=laserGraph->GetName();
- laserName+="_MEAN_DRIFT_LASER_ALL_C";
- laserName.ToUpper();
- laserGraph->SetName(laserName);
- vdriftArray->Add(laserGraph);
- }
+ laserName=laserHist->ClassName();
+ laserName+="_MEAN_DRIFT_LASER_ALL_C";
+ laserName.ToUpper();
+ laserHist->SetName(laserName);
+ vdriftArray->Add(laserHist);
+ laserGraph=AliTPCcalibBase::FitSlices(laserHist,2,0,400,100,0.05,0.95, kTRUE);
+ if(laserGraph && laserGraph->GetN()){
+ laserName=laserGraph->GetName();
+ laserName+="_MEAN_DRIFT_LASER_ALL_C";
+ laserName.ToUpper();
+ laserGraph->SetName(laserName);
+ vdriftArray->Add(laserGraph);
+ }
}
//Meatdata set in off-line...
//printf("done runNumber=%i, end=%i\n", runNumber, end);
static AliHLTReadoutList rdList(AliHLTReadoutList::kTPC);
+
+ // the vdriftArray is pushed to the HLT-FXSsubscriber
PushToFXS( (TObject*)vdriftArray, "TPC", "Time", rdList.Buffer() );
//PushToFXS( (TObject*)vdriftArray, "TPC", "Time");