X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=TRD%2FAliTRDCalibTask.cxx;h=39cf64f7b75be94773e2cbd7999e9979253d780f;hb=056de6587a9b664f03489682b083f79ec5574a17;hp=dc0b5de0585754a56561f2362b300e7b41fc044a;hpb=709b13d59cc1e6ddfe2a17867dffeb61512e8122;p=u%2Fmrichter%2FAliRoot.git diff --git a/TRD/AliTRDCalibTask.cxx b/TRD/AliTRDCalibTask.cxx index dc0b5de0585..39cf64f7b75 100644 --- a/TRD/AliTRDCalibTask.cxx +++ b/TRD/AliTRDCalibTask.cxx @@ -78,6 +78,9 @@ using namespace std; #include "AliLog.h" #include "AliTRDCalibChamberStatus.h" +#include "AliTRDdEdxBaseUtils.h" +#include "AliTRDdEdxCalibHistArray.h" +#include "AliTRDdEdxCalibUtils.h" #include "AliTRDCalibTask.h" @@ -85,88 +88,94 @@ using namespace std; 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 @@ -180,6 +189,7 @@ ClassImp(AliTRDCalibTask) fNrphi[1] = 0; fNrphi[2] = 0; + // Define input and output slots here // Input slot #0 works with a TChain DefineInput(0, TChain::Class()); @@ -221,6 +231,10 @@ AliTRDCalibTask::~AliTRDCalibTask() if(fCH2dTest) delete fCH2dTest; if(fPH2dTest) delete fPH2dTest; if(fLinearVdriftTest) delete fLinearVdriftTest; + if(IsPHQon()){ + AliTRDdEdxCalibUtils::DeleteHistArray(); + } + if(fCalDetGain) delete fCalDetGain; if(fSelectedTrigger) { @@ -277,6 +291,7 @@ void AliTRDCalibTask::UserCreateOutputObjects() 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 @@ -312,7 +327,16 @@ void AliTRDCalibTask::UserCreateOutputObjects() 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()); } @@ -341,6 +365,15 @@ void AliTRDCalibTask::UserCreateOutputObjects() 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 /////////////////////////////////////// @@ -562,7 +595,7 @@ void AliTRDCalibTask::UserExec(Option_t *) //cout << "event = " << fCounter << endl; //printf("Counter %d\n",fCounter); - + /////////////////// // Check trigger /////////////////// @@ -630,7 +663,19 @@ void AliTRDCalibTask::UserExec(Option_t *) } //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 ////////////////////////////////////// @@ -670,7 +715,7 @@ void AliTRDCalibTask::UserExec(Option_t *) Int_t nbtrackTPC = 0; - + if (nbTracks <= 0.0) { if(fDebug > 1) { @@ -681,8 +726,8 @@ void AliTRDCalibTask::UserExec(Option_t *) PostData(1, fListHist); return; } - - + + fESDfriend = dynamic_cast (fESD->FindListObject("AliESDfriend")); if(!fESDfriend){ AliError("fESDfriend not available"); @@ -694,14 +739,15 @@ void AliTRDCalibTask::UserExec(Option_t *) 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); @@ -709,7 +755,10 @@ void AliTRDCalibTask::UserExec(Option_t *) 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; @@ -760,7 +809,7 @@ void AliTRDCalibTask::UserExec(Option_t *) //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(); @@ -785,9 +834,16 @@ void AliTRDCalibTask::UserExec(Option_t *) 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 //////////////////////////////// @@ -1326,7 +1382,7 @@ Bool_t AliTRDCalibTask::SetVersionSubversion(){ // 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();