#include "AliLog.h"
#include "AliTRDCalibChamberStatus.h"
-#include "AliTRDdEdxUtils.h"
+#include "AliTRDdEdxBaseUtils.h"
+#include "AliTRDdEdxCalibHistArray.h"
+#include "AliTRDdEdxCalibUtils.h"
#include "AliTRDCalibTask.h"
ClassImp(AliTRDCalibTask)
//________________________________________________________________________
- AliTRDCalibTask::AliTRDCalibTask(const char *name)
- : AliAnalysisTaskSE(name), fESD(0),
- fkEsdTrack(0),
- fFriendTrack(0),
- fCalibObject(0),
- fTrdTrack(0),
- fCl(0),
- fListHist(0),
- fTRDCalibraFillHisto(0),
- fTRDChamberStatus(0),
- fNEvents(0),
- fNEventsInput(0),
- fNbTRDTrack(0),
- fNbTRDTrackOffline(0),
- fNbTRDTrackStandalone(0),
- fNbTPCTRDtrack(0),
- fNbGoodTracks(0),
- fNbTimeBin(0),
- fNbTimeBinOffline(0),
- fNbTimeBinStandalone(0),
- fNbClusters(0),
- fNbClustersOffline(0),
- fNbClustersStandalone(0),
- fNbTracklets(0),
- fNbTrackletsOffline(0),
- fNbTrackletsStandalone(0),
- fAbsoluteGain(0),
- fCH2dSum(0),
- fPH2dSum(0),
- fCH2dSM(0),
- fPH2dSM(0),
- fCH2dTest(0),
- fPH2dTest(0),
- fLinearVdriftTest(0),
- fOnInstance(kTRUE),
- fHisto2d(kTRUE),
- fVector2d(kFALSE),
- fVdriftLinear(kTRUE),
- fExbAlt(kFALSE),
- fDebugLevelTRDCalibraFillHisto(0),
- fNbTimeBins(0),
- fNumberBinCharge(50),
- fSelectTrigger(kTRUE),
- fSelectedTrigger(new TObjArray()),
- fRejected(kTRUE),
- fEsdTrackCuts(0),
- fRequirePrimaryVertex(kFALSE),
- fVtxTPC(kFALSE),
- fVtxSPD(kFALSE),
- fMinNbContributors(0),
- fRangePrimaryVertexZ(9999999.0),
- fMinNbTracks(9),
- fMaxNbTracks(999999999),
- fCutWithVdriftCalib(kFALSE),
- fMinNbTRDtracklets(0),
- fMinTRDMomentum(0),
- fLow(0),
- fHigh(30),
- fFillZero(kFALSE),
- fNormalizeNbOfCluster(kFALSE),
- fRelativeScale(0.0),
- fMaxCluster(100.0),
- fNbMaxCluster(2),
- fOfflineTracks(kFALSE),
- fStandaloneTracks(kFALSE),
- fFirstRunGain(-1),
- fVersionGainUsed(-1),
- fSubVersionGainUsed(-1),
- fFirstRunGainLocal(-1),
- fVersionGainLocalUsed(-1),
- fSubVersionGainLocalUsed(-1),
- fFirstRunVdrift(-1),
- fVersionVdriftUsed(-1),
- fSubVersionVdriftUsed(-1),
- fFirstRunExB(-1),
- fVersionExBUsed(-1),
- fSubVersionExBUsed(-1),
- fCalDetGain(0x0),
- fMaxEvent(0),
- fCounter(0)
+AliTRDCalibTask::AliTRDCalibTask(const char *name)
+: AliAnalysisTaskSE(name), fESD(0),
+ fkEsdTrack(0),
+ fFriendTrack(0),
+ fCalibObject(0),
+ fTrdTrack(0),
+ fCl(0),
+ fListHist(0),
+ fTRDCalibraFillHisto(0),
+ fTRDChamberStatus(0),
+ fNEvents(0),
+ fNEventsInput(0),
+ fNbTRDTrack(0),
+ fNbTRDTrackOffline(0),
+ fNbTRDTrackStandalone(0),
+ fNbTPCTRDtrack(0),
+ fNbGoodTracks(0),
+ fNbTimeBin(0),
+ fNbTimeBinOffline(0),
+ fNbTimeBinStandalone(0),
+ fNbClusters(0),
+ fNbClustersOffline(0),
+ fNbClustersStandalone(0),
+ fNbTracklets(0),
+ fNbTrackletsOffline(0),
+ fNbTrackletsStandalone(0),
+ fAbsoluteGain(0),
+ fTOFbc(0),
+ fCH2dSum(0),
+ fPH2dSum(0),
+ fCH2dSM(0),
+ fPH2dSM(0),
+ fCH2dTest(0),
+ fPH2dTest(0),
+ fLinearVdriftTest(0),
+ fOnInstance(kTRUE),
+ fHisto2d(kTRUE),
+ fVector2d(kFALSE),
+ fVdriftLinear(kTRUE),
+ fExbAlt(kFALSE),
+ fDebugLevelTRDCalibraFillHisto(0),
+ fNbTimeBins(0),
+ fNumberBinCharge(100),
+ fRangeCharge(150),
+ fVdBindx(32),
+ fVdBindy(70),
+ fVdRangex(0.8),
+ fVdRangey(1.4),
+ fSelectTrigger(kTRUE),
+ fSelectedTrigger(new TObjArray()),
+ fRejected(kTRUE),
+ fEsdTrackCuts(0),
+ fRequirePrimaryVertex(kFALSE),
+ fVtxTPC(kFALSE),
+ fVtxSPD(kFALSE),
+ fMinNbContributors(0),
+ fRangePrimaryVertexZ(9999999.0),
+ fRejectPileUpWithSPD(kFALSE),
+ fRejectPileUpWithTOF(kFALSE),
+ fMinNbTracks(9),
+ fMaxNbTracks(999999999),
+ fCutWithVdriftCalib(kFALSE),
+ fMinNbTRDtracklets(0),
+ fMinTRDMomentum(0),
+ fScaleGainWithTPCSignal(kFALSE),
+ fLow(0),
+ fHigh(30),
+ fFillZero(kFALSE),
+ fNormalizeNbOfCluster(kFALSE),
+ fRelativeScale(0.0),
+ fMaxCluster(100.0),
+ fNbMaxCluster(2),
+ fOfflineTracks(kFALSE),
+ fStandaloneTracks(kFALSE),
+ fFirstRunGain(-1),
+ fVersionGainUsed(-1),
+ fSubVersionGainUsed(-1),
+ fFirstRunGainLocal(-1),
+ fVersionGainLocalUsed(-1),
+ fSubVersionGainLocalUsed(-1),
+ fFirstRunVdrift(-1),
+ fVersionVdriftUsed(-1),
+ fSubVersionVdriftUsed(-1),
+ fFirstRunExB(-1),
+ fVersionExBUsed(-1),
+ fSubVersionExBUsed(-1),
+ fCalDetGain(0x0),
+ fMaxEvent(0),
+ fCounter(0),
+ fPHQon(kTRUE)
{
//
// Default constructor
if(fNbTrackletsOffline) delete fNbTrackletsOffline;
if(fNbTrackletsStandalone) delete fNbTrackletsStandalone;
if(fAbsoluteGain) delete fAbsoluteGain;
+ if(fTOFbc) delete fTOFbc;
if(fCH2dSum) delete fCH2dSum;
if(fPH2dSum) delete fPH2dSum;
if(fCH2dSM) delete fCH2dSM;
if(fCH2dTest) delete fCH2dTest;
if(fPH2dTest) delete fPH2dTest;
if(fLinearVdriftTest) delete fLinearVdriftTest;
- AliTRDdEdxUtils::DeleteCalibHist();
+ if(IsPHQon()){
+ AliTRDdEdxCalibUtils::DeleteHistArray();
+ }
+
if(fCalDetGain) delete fCalDetGain;
if(fSelectedTrigger) {
fTRDCalibraFillHisto->SetLinearFitterOn(fVdriftLinear); // Other possibility vdrift VDRIFT
fTRDCalibraFillHisto->SetLinearFitterDebugOn(fVdriftLinear); // Other possibility vdrift
fTRDCalibraFillHisto->SetExbAltFitOn(fExbAlt); // Alternative method for exb
+ fTRDCalibraFillHisto->SetScaleWithTPCSignal(fScaleGainWithTPCSignal); // Scale Gain with TPC signal
for(Int_t k = 0; k < 3; k++){
if(((fNz[k] != 10) && (fNrphi[k] != 10)) && ((fNz[k] != 100) && (fNrphi[k] != 100))) {
fTRDCalibraFillHisto->SetNz(k,fNz[k]); // Mode calibration
fListHist->Add(fTRDCalibraFillHisto->GetPH2d());
fListHist->Add(fTRDCalibraFillHisto->GetPRF2d());
}
- if(fVdriftLinear) fListHist->Add((TObject *)fTRDCalibraFillHisto->GetVdriftLinearFit());
+ if(fVdriftLinear) {
+ AliTRDCalibraVdriftLinearFit *fvdl = fTRDCalibraFillHisto->GetVdriftLinearFit();
+ if(fvdl){
+ fvdl->SetNbBindx(fVdBindx);
+ fvdl->SetNbBindy(fVdBindy);
+ fvdl->SetRangedx(fVdRangex);
+ fvdl->SetRangedy(fVdRangey);
+ }
+ fListHist->Add((TObject *)fTRDCalibraFillHisto->GetVdriftLinearFit());
+ }
if(fVector2d) fListHist->Add((TObject *) fTRDCalibraFillHisto->GetCalibraVector()); //calibra vector
if(fExbAlt) fListHist->Add((TObject *)fTRDCalibraFillHisto->GetExbAltFit());
}
fAbsoluteGain->SetStats(0);
fAbsoluteGain->Sumw2();
fListHist->Add(fAbsoluteGain);
+
+ fTOFbc = new TH2F(Form("TOFbc_%s",(const char*)fName),"TOFbc", 200, -150., 50., nBinsPt, binLimPt);
+ fTOFbc->SetYTitle("Momentum");
+ fTOFbc->SetXTitle("TOF bc");
+ fTOFbc->SetZTitle("counts");
+ fTOFbc->SetStats(0);
+ fTOFbc->Sumw2();
+ fListHist->Add(fTOFbc);
- AliTRDdEdxUtils::PrintControl();
- AliTRDdEdxUtils::IniCalibHist(fListHist, kTRUE);
+ if(IsPHQon()){
+ printf("\n AliTRDCalibTask PHQ is on!! \n\n");
+ AliTRDdEdxBaseUtils::PrintControl();
+ AliTRDdEdxCalibUtils::IniHistArray(fListHist, kTRUE);
+ }
+ else{
+ printf("\n AliTRDCalibTask PHQ is off!! \n\n");
+ }
+
/////////////////////////////////////////
// First debug level
///////////////////////////////////////
}
//printf("Primary vertex passed\n");
+
+ //////////////////////////////////
+ // Reject pile-up with SPD
+ //////////////////////////////////
+ if(fRejectPileUpWithSPD) {
+ if(fInputEvent->IsPileupFromSPD(3, 0.8, 3., 2., 5)){
+ //printf("test\n");
+ PostData(1, fListHist);
+ return;
+ }
+ }
+
//////////////////////////////////////
// Requirement on number of good tracks
//////////////////////////////////////
/////////////////////////////////////
// Loop on AliESDtrack
////////////////////////////////////
- //printf("Nb of tracks %f\n",nbTracks);
- for(int itrk=0; itrk < nbTracks; ++itrk){
+ //printf("Nb of tracks %f\n",nbTracks);
+ Int_t nbTracksfriends = fESDfriend->GetNumberOfTracks();
+ for(int itrk=0; itrk < nbTracksfriends; ++itrk){
// Get ESD track
fkEsdTrack = fESD->GetTrack(itrk);
ULong_t status = fkEsdTrack->GetStatus();
if(status&(AliESDtrack::kTPCout)) ++nbtrackTPC;
+ // Fix suggested by Alex
fFriendTrack = fESDfriend->GetTrack(itrk);
+ //printf("itrk %d\n",itrk);
+ //fFriendTrack = (fESDfriend->GetNumberOfTracks()>itrk)?fESDfriend->GetTrack(itrk):NULL;
if(!fFriendTrack) {
//printf("No friend track %d\n",itrk);
continue;
//printf("Not a good track\n");
continue;
}
+
+ Int_t nbcrossing = fkEsdTrack->GetTOFBunchCrossing();
+ fTOFbc->Fill(nbcrossing,fkEsdTrack->Pt());
+ // TOF pile-up rejection is asked
+ if(fRejectPileUpWithTOF) {
+ if(TMath::Abs(nbcrossing)>0.5) continue;
+ }
// First Absolute gain calibration
Int_t trdNTracklets = (Int_t) fkEsdTrack->GetTRDntracklets();
//printf("Fill fTRDCalibraFillHisto\n");
}
- const Double_t mag = AliTRDdEdxUtils::IsExBOn() ? fESD->GetMagneticField() : -1;
- const Int_t charge = AliTRDdEdxUtils::IsExBOn() ? fkEsdTrack->Charge() : -1;
- const Double_t toTPCscale = AliTRDdEdxUtils::GetCalibTPCscale(fkEsdTrack->GetTPCncls(), fkEsdTrack->GetTPCsignal());
- if(toTPCscale>0){
- AliTRDdEdxUtils::FillCalibHist(fTrdTrack, 0, mag, charge, toTPCscale);
+ if(IsPHQon()){
+ const Double_t mag = AliTRDdEdxBaseUtils::IsExBOn() ? fESD->GetMagneticField() : -1;
+ const Int_t charge = AliTRDdEdxBaseUtils::IsExBOn() ? fkEsdTrack->Charge() : -1;
+ const Double_t toTPCscale = AliTRDdEdxCalibUtils::GetCalibTPCscale(fkEsdTrack->GetTPCncls(), fkEsdTrack->GetTPCsignal());
+ if(toTPCscale>0){
+ AliTRDdEdxCalibUtils::FillHist(fTrdTrack, 0, mag, charge, toTPCscale);
+ }
}
//////////////////////////////////
Int_t nbtracklets = 0;
// Check some stuff
- Bool_t standalonetracklet = kFALSE;
+ // Coverity
+ //Bool_t standalonetracklet = kFALSE;
const AliTRDseedV1 *tracklet = 0x0;
//////////////////////////////////////
// Loop tracklets
if(!(tracklet = fTrdTrack->GetTracklet(itr))) continue;
if(!tracklet->IsOK()) continue;
++nbtracklets;
- standalonetracklet = kFALSE;
- if(tracklet->IsStandAlone()) standalonetracklet = kTRUE;
+ // Coverity
+ //standalonetracklet = kFALSE;
+ //if(tracklet->IsStandAlone()) standalonetracklet = kTRUE;
nbclusters = 0;
memset(phtb, 0, AliTRDseedV1::kNtb*sizeof(Double_t));
////////////
// results of the linear fit
Double_t dydt = 0.0; // dydt tracklet after straight line fit
- Double_t errorpar = 0.0; // error after straight line fit on dy/dt
+ // Coverity
+ //Double_t errorpar = 0.0; // error after straight line fit on dy/dt
Double_t pointError = 0.0; // error after straight line fit
// pad row problemes: avoid tracklet that cross pad rows, tilting angle in the constant
Int_t crossrow = 0; // if it crosses a pad row
linearFitterTracklet.Eval();
linearFitterTracklet.GetParameters(pars);
pointError = TMath::Sqrt(linearFitterTracklet.GetChisquare()/(nbli-2));
- errorpar = linearFitterTracklet.GetParError(1)*pointError;
+ // Coverity
+ //errorpar = linearFitterTracklet.GetParError(1)*pointError;
dydt = pars[1];
//printf("chis %f, nbli %d, pointError %f, parError %f, errorpar %f\n",linearFitterTracklet->GetChisquare(),nbli,pointError,linearFitterTracklet->GetParError(1),errorpar);
linearFitterTracklet.ClearPoints();