#include "AliLog.h"
#include "AliTRDCalibChamberStatus.h"
+#include "AliTRDdEdxBaseUtils.h"
+#include "AliTRDdEdxCalibHistArray.h"
+#include "AliTRDdEdxCalibUtils.h"
#include "AliTRDCalibTask.h"
ClassImp(AliTRDCalibTask)
//________________________________________________________________________
- AliTRDCalibTask::AliTRDCalibTask(const char *name)
- : AliAnalysisTaskSE(name), fESD(0),
- fESDfriend(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),
- fDebug(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),
+ 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),
+ 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
fNrphi[1] = 0;
fNrphi[2] = 0;
+
// Define input and output slots here
// Input slot #0 works with a TChain
DefineInput(0, TChain::Class());
if(fCH2dTest) delete fCH2dTest;
if(fPH2dTest) delete fPH2dTest;
if(fLinearVdriftTest) delete fLinearVdriftTest;
+ 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->Sumw2();
fListHist->Add(fAbsoluteGain);
+ 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
///////////////////////////////////////
//cout << "event = " << fCounter << endl;
//printf("Counter %d\n",fCounter);
-
+
///////////////////
// Check trigger
///////////////////
}
//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
//////////////////////////////////////
Int_t nbtrackTPC = 0;
-
+
if (nbTracks <= 0.0) {
if(fDebug > 1) {
PostData(1, fListHist);
return;
}
-
-
+
+
fESDfriend = dynamic_cast<AliESDfriend*> (fESD->FindListObject("AliESDfriend"));
if(!fESDfriend){
AliError("fESDfriend not available");
PostData(1, fListHist);
return;
}
-
+
//printf("has friends\n");
/////////////////////////////////////
// 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;
}
-
+
// First Absolute gain calibration
Int_t trdNTracklets = (Int_t) fkEsdTrack->GetTRDntracklets();
Int_t trdNTrackletsPID = (Int_t) fkEsdTrack->GetTRDntrackletsPID();
fTRDCalibraFillHisto->UpdateHistogramsV1(fTrdTrack,fkEsdTrack);
//printf("Fill fTRDCalibraFillHisto\n");
}
-
-
-
+
+ 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);
+ }
+ }
+
//////////////////////////////////
// Debug
////////////////////////////////
// Load Chamber Gain factors into the Tender supply
//
- printf("SetVersionSubversion\n");
+ //printf("SetVersionSubversion\n");
//find previous entry from the UserInfo
TTree *tree=((TChain*)GetInputData(0))->GetTree();