#include "AliESDInputHandler.h"
#include "AliMCEventHandler.h"
#include "AliESDpid.h"
+#include "AliTOFPIDParams.h"
#include "AliCDBManager.h"
#include "AliTOFcalib.h"
#include "AliTOFT0maker.h"
fTrackFilter(0x0),
fVertex(0x0),
fESDpid(new AliESDpid()),
- fTOFT0v1(new AliTOFT0v1(fESDpid)),
fTOFHeader(0x0),
fEnableAdvancedCheck(kFALSE),
+ fEnableChargeSplit(kFALSE),
fExpTimeBinWidth(24.4),
fExpTimeRangeMin(-25010.),
fExpTimeRangeMax(25010.),
fPhi(1e10),
fTPCOuterPhi(1e10),
fL(1e10),
- fMatchingMomCut(1e10),
+ fMatchingMomCut(0.0),
+ fMatchingEtaCut(1e10),
fTof(1e10),
fHlist(0x0),
fHlistTimeZero(0x0),
fTrackFilter(0x0),
fVertex(0x0),
fESDpid(new AliESDpid()),
- fTOFT0v1(new AliTOFT0v1(fESDpid)),
fTOFHeader(0x0),
fEnableAdvancedCheck(kFALSE),
+ fEnableChargeSplit(kFALSE),
fExpTimeBinWidth(24.4),
fExpTimeRangeMin(-25010.),
fExpTimeRangeMax(25010.),
fTPCOuterPhi(1e10),
fL(1e10),
fMatchingMomCut(1.0),
+ fMatchingEtaCut(0.8),
fTof(1e10),
fHlist(0x0),
fHlistTimeZero(0x0),
fTrackFilter(copy.fTrackFilter),
fVertex(copy.fVertex),
fESDpid(copy.fESDpid),
- fTOFT0v1(copy.fTOFT0v1),
fTOFHeader(copy.fTOFHeader),
fEnableAdvancedCheck(copy.fEnableAdvancedCheck),
+ fEnableChargeSplit(copy.fEnableChargeSplit),
fExpTimeBinWidth(copy.fExpTimeBinWidth),
fExpTimeRangeMin(copy.fExpTimeRangeMin),
fExpTimeRangeMax(copy.fExpTimeRangeMax),
fTPCOuterPhi(copy.fTPCOuterPhi),
fL(copy.fL),
fMatchingMomCut(copy.fMatchingMomCut),
+ fMatchingEtaCut(copy.fMatchingEtaCut),
fTof(copy.fTof),
fHlist(copy.fHlist),
fHlistTimeZero(copy.fHlistTimeZero),
fTrackFilter=copy.fTrackFilter;
fVertex=copy.fVertex;
fESDpid=copy.fESDpid;
- fTOFT0v1=copy.fTOFT0v1;
fTOFHeader=copy.fTOFHeader;
fEnableAdvancedCheck=copy.fEnableAdvancedCheck;
+ fEnableChargeSplit=copy.fEnableChargeSplit;
fExpTimeBinWidth=copy.fExpTimeBinWidth;
fExpTimeRangeMin=copy.fExpTimeRangeMin;
fExpTimeRangeMax=copy.fExpTimeRangeMax;
fTPCOuterPhi=copy.fTPCOuterPhi;
fL=copy.fL;
fMatchingMomCut=copy.fMatchingMomCut;
+ fMatchingEtaCut=copy.fMatchingEtaCut;
fTof=copy.fTof;
fHlist=copy.fHlist;
fHlistTimeZero=copy.fHlistTimeZero;
Info("~AliAnalysisTaskTOFqaID","Calling Destructor");
if (fESDpid) delete fESDpid;
if (fTOFHeader) delete fTOFHeader;
- if (fTOFT0v1) delete fTOFT0v1;
if (fVertex) delete fVertex;
if (fTrackFilter) delete fTrackFilter;
if (AliAnalysisManager::GetAnalysisManager()->IsProofMode()) return;
//________________________________________________________________________
void AliAnalysisTaskTOFqaID::UserCreateOutputObjects()
{
- //Defines output objects and histograms
+ //
+ //Define output objects and histograms
+ //
+
+ //retrieve PID response object
+ AliAnalysisManager *man=AliAnalysisManager::GetAnalysisManager();
+ if (!man) AliFatal("Analysis manager needed");
+ AliInputEventHandler *inputHandler=dynamic_cast<AliInputEventHandler*>(man->GetInputEventHandler());
+ if (!inputHandler) AliFatal("Input handler needed");
+ //pid response object
+ fESDpid=(AliESDpid*)inputHandler->GetPIDResponse();
+ if (!fESDpid) AliError("PIDResponse object was not created");
+ //fESDpid->SetOADBPath("$ALICE_ROOT/OADB");
+
Info("CreateOutputObjects","CreateOutputObjects (TList) of task %s", GetName());
OpenFile(1);
+
if (!fHlist) fHlist = new TList();
fHlist->SetOwner(kTRUE);
+ fHlist->SetName("base");
+
if (!fHlistTimeZero) fHlistTimeZero = new TList();
fHlistTimeZero->SetOwner(kTRUE);
+ fHlistTimeZero->SetName("startTime");
+
if (!fHlistPID) fHlistPID = new TList();
fHlistPID->SetOwner(kTRUE);
+ fHlistPID->SetName("pid");
+
if (!fHlistTRD) fHlistTRD = new TList();
fHlistTRD->SetOwner(kTRUE);
+ fHlistTRD->SetName("TRD");
+
if (!fHlistTrigger) fHlistTrigger = new TList();
fHlistTrigger->SetOwner(kTRUE);
+ fHlistTrigger->SetName("trigger");
if (fExpTimeRangeMax<fExpTimeRangeMin) {
SetExpTimeHistoRange(-25010.,25010.);
AddStartTimeHisto(fHlistTimeZero,"");
//add plots for base TOF quantities
- AddTofBaseHisto(fHlist, 1, "");
- AddTofBaseHisto(fHlist, -1, "");
-
+ if (fEnableChargeSplit) {
+ AddTofBaseHisto(fHlist, 1, "");
+ AddTofBaseHisto(fHlist, -1, "");
+ } else {
+ AddTofBaseHisto(fHlist, 0, "");
+ }
//add plots for matching efficiency
- AddMatchingEffHisto(fHlist, 1, "");
- AddMatchingEffHisto(fHlist, -1, "");
-
+ if (fEnableChargeSplit) {
+ AddMatchingEffHisto(fHlist, 1, "");
+ AddMatchingEffHisto(fHlist, -1, "");
+ } else {
+ AddMatchingEffHisto(fHlist, 0, "");
+ }
//add plots for PID checks
- AddPidHisto(fHlistPID, 1, "");
- AddPidHisto(fHlistPID, -1, "");
-
+ if (fEnableChargeSplit) {
+ AddPidHisto(fHlistPID, 1, "");
+ AddPidHisto(fHlistPID, -1, "");
+ } else {
+ AddPidHisto(fHlistPID, 0, "");
+ }
//add trd plots
if (fEnableAdvancedCheck) {
AddTrdHisto();
- AddTofTrgHisto("");
}
+ //Add trigger plots
+ AddTofTrgHisto("");
+
PostData(1, fHlist);
PostData(2, fHlistTimeZero);
PostData(3, fHlistPID);
/* Main - executed for each event.
It extracts event information and track information after selecting
primary tracks via standard cuts. */
-
+ /*
AliESDInputHandler *esdH = dynamic_cast<AliESDInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
if (!esdH) {
AliError("ERROR: Could not get ESDInputHandler");
fESD = (AliESDEvent*) esdH->GetEvent();
}
+ */
+ fESD=(AliESDEvent*)InputEvent();
if (!fESD) {
- AliError("ERROR: fESD not available");
+ AliError("fESD event not available");
return;
}
-
+
+ if (!fESDpid) {
+ AliError("PID object fESDpid not available");
+ return;
+ }
+
+ //retrieve default start time type from PIDresponse
+ AliPIDResponse::EStartTimeType_t startTimeMethodDefault = AliPIDResponse::kBest_T0;
+ if (fESDpid->GetTOFPIDParams()) { // during reconstruction OADB not yet available
+ startTimeMethodDefault = ((AliTOFPIDParams *)fESDpid->GetTOFPIDParams())->GetStartTimeMethod();
+ }
+
//access MC event handler for MC truth information
if (fIsMC) {
AliMCEventHandler *mcH = dynamic_cast<AliMCEventHandler*> (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler());
if (!mcH) {
- AliError("ERROR: Could not get MCeventHandler");
+ AliError("Cannot get MCeventHandler");
return;
} else {
fMCevent = (AliMCEvent *) mcH->MCEvent();
// get run number
Int_t runNb = fESD->GetRunNumber();
- if (runNb>0) fRunNumber = runNb;
+ if (runNb>0) fRunNumber = runNb;
+
//reset matched track counters
for (Int_t j=0;j<3;j++){fNTOFtracks[j]=0;}
-
+
//Get vertex info and apply vertex cut
if (!IsEventSelected(fESD)) return;
//set response tof_t0 for all other checks
fESDpid->SetTOFResponse(fESD,AliESDpid::kTOF_T0);//(fill_t0, tof_t0, t0_t0, best_t0)
- Printf("Momentum cut for eta and phi distributions set: Pt>%3.2f", fMatchingMomCut);
+ AliDebug(3, Form("Momentum cut for eta and phi distributions set: Pt>%3.2f", fMatchingMomCut));
+ //check existence of track filter
+ if (!fTrackFilter){
+ AliInfo("No track filter found, skipping the track loop");
+ return;
+ }
+
// loop over ESD tracks
for (Int_t iTracks = 0; iTracks < fESD->GetNumberOfTracks(); iTracks++) {
AliESDtrack* track = fESD->GetTrack(iTracks);
if (!track) {
- Printf("ERROR: Could not receive track %d", iTracks);
+ AliInfo(Form("Cannot receive track %d", iTracks));
continue;
}
//primary tracks selection: kTPCrefit and std cuts
- if (fTrackFilter){
- if(!fTrackFilter->IsSelected(track)) continue;
- } else {
- Printf("No track filter found, skipping the track loop");
- return;
- }
+ if (!fTrackFilter->IsSelected(track)) continue;
//select specie if MC
if ( fIsMC &&
//apply cut for eta acceptance
fEta=track->Eta();
- if (TMath::Abs(fEta)>0.8) continue;
+ if (TMath::Abs(fEta)>fMatchingEtaCut) continue;
//get other track variables
fP = track->P();
fL = track->GetIntegratedLength();
track->GetIntegratedTimes(fTrkExpTimes);
- Int_t charge = track->Charge();
+ Int_t charge = 0;
+ if (fEnableChargeSplit) charge = track->Charge();
+ //Fill histograms for primary particles
FillPrimaryTrkHisto(charge,"");
+
if (IsTPCTOFMatched(track)) {
fTof=track->GetTOFsignal()*1E-3;//in ps
//increment track counters
}
if (fEnableAdvancedCheck) FillTrdHisto(track, charge);
}//end loop on tracks
-
+
//fill time zero histos
FillStartTimeHisto("");
- ((TH1F*)fHlist->FindObject("hTOFmulti_pos"))->Fill(fNTOFtracks[1]);
- ((TH1F*)fHlist->FindObject("hTOFmulti_neg"))->Fill(fNTOFtracks[2]);
-
+ if (fEnableChargeSplit) {
+ ((TH1F*)fHlist->FindObject("hTOFmulti_pos"))->Fill(fNTOFtracks[1]);
+ ((TH1F*)fHlist->FindObject("hTOFmulti_neg"))->Fill(fNTOFtracks[2]);
+ } else {
+ ((TH1F*)fHlist->FindObject("hTOFmulti_all"))->Fill(fNTOFtracks[0]);
+ }
//fill TOF trg histos from infos in TOF header
fTOFHeader=(AliTOFHeader*)fESD->GetTOFHeader();
if (!fTOFHeader) {
FillTofTrgHisto("");
}
+ //restore value set by AliPIDResponseTask for subsequent wagons
+ fESDpid->SetTOFResponse(fESD,startTimeMethodDefault);
+
PostData(1, fHlist);
PostData(2, fHlistTimeZero);
PostData(3, fHlistPID);
//check on output validity
fHlist = dynamic_cast<TList*> (GetOutputData(1));
if (!fHlist) {
- Printf("ERROR: lists not available");
+ AliError("Base histograms list not available");
return;
}
- // TH1D*hDummy = ((TH1D*)fHlist->FindObject("hTOFmatchedESDPt"));
- // TH1D*hMatchingEff = (TH1D*) hDummy->Clone("hMatchingEff");
+ // TH1F*hDummy = ((TH1F*)fHlist->FindObject("hTOFmatchedESDPt"));
+ // TH1F*hMatchingEff = (TH1F*) hDummy->Clone("hMatchingEff");
// hMatchingEff->SetTitle("Matching efficiency");
// hMatchingEff->Divide((TH1F*) fHlist->FindObject("hESDprimaryTrackPt"));
// TCanvas *c1 = new TCanvas("AliAnalysisTaskTOFqaID","Matching vs Pt",10,10,510,510);
}
//---------------------------------------------------------------
-Int_t AliAnalysisTaskTOFqaID::GetStripIndex(const Int_t * const in)
+Int_t AliAnalysisTaskTOFqaID::GetStripIndex(const Int_t * in)
{
/* return tof strip index between 0 and 91 */
if(fVertex->GetNContributors()<1) fVertex = 0x0;
}
if (!fVertex) return kFALSE;
- if (TMath::Abs(fVertex->GetZv())<10.0) return kTRUE;
+ if (TMath::Abs(fVertex->GetZ())<10.0) return kTRUE;
else return kFALSE;
}
for (Int_t iTracks = 0; iTracks < fESD->GetNumberOfTracks(); iTracks++) {
AliESDtrack* track = fESD->GetTrack(iTracks);
if (!track) {
- Printf("ERROR: Could not receive track %d", iTracks);
+ AliInfo(Form("Cannot receive track %d", iTracks));
continue;
}
//primary tracks selection: kTPCrefit and std cuts
if(!fTrackFilter->IsSelected(track)) continue;
}
else{
- Printf("No track filter found, skipping the track loop");
+ AliInfo("No track filter found, skipping the track loop");
break;
}
- if (TMath::Abs(track->Eta())>0.8) continue; //cut for acceptance
+ if (TMath::Abs(track->Eta())>fMatchingEtaCut) continue; //cut for acceptance
Int_t StartTimeBit = fESDpid->GetTOFResponse().GetStartTimeMask(track->P());
((TH2F*)fHlistTimeZero->FindObject(Form("hStartTimeMask%s",suffix.Data())))->Fill(track->P(),StartTimeBit);
{
/* compute T0-TOF for tracks within momentum range [0.95, 1.05] */
/* init T0-TOF */
+ AliTOFT0v1 *fTOFT0v1 = new AliTOFT0v1(fESDpid); // TOF-T0 v1
fTOFT0v1->Init(fESD);
- //AliTOFT0v1 *fTOFT0v1 = new AliTOFT0v1(fESDpid);
fTOFT0v1->DefineT0("all", 0.95, 1.05);
fMyTimeZeroTOF = -1000. * fTOFT0v1->GetResult(0);
fMyTimeZeroTOFsigma = 1000. * fTOFT0v1->GetResult(1);
Int_t pdgCode = mcPart->PdgCode();
if (!(TMath::Abs(pdgCode)==fSelectedPdg))
return kFALSE;
- else //Printf("Found particle with selected pdg code = %i", pdgCode);
- return kTRUE;
+ else
+ return kTRUE;
}
//----------------------------------------------------------------------------------
primaryName = "hTOFprimaryESDphi";
xAxisTitle = "#phi_vtx (deg)";
}
- if (!list) return 0;
- TH1D*hDummy = ((TH1D*)list->FindObject(matchedName.Data()));
+ TH1F*hDummy = ((TH1F*)list->FindObject(matchedName.Data()));
if (!hDummy) return 0;
- TH1D*hMatchingEff = (TH1D*) hDummy->Clone("hMatchingEff");
+
+ TH1F*hMatchingEff = (TH1F*) hDummy->Clone("hMatchingEff");
hMatchingEff->SetNameTitle(Form("hMatchingEff_%s", variable.Data()),Form("Matching efficiency vs %s", variable.Data()));
hMatchingEff->Divide((TH1F*) list->FindObject(primaryName.Data()));
hMatchingEff->GetXaxis()->SetTitle(xAxisTitle.Data());
hist->SetMarkerStyle(markerStyle);
hist->SetMarkerSize(0.7);
hist->SetDrawOption(drawOpt.Data());
- hist->Sumw2();
+ //hist->Sumw2();
return;
}
}
TString cLabel;
- if (charge<0) cLabel.Form("neg");
+ if (charge == 0) cLabel.Form("all");
else
- if (charge>0) cLabel.Form("pos");
- else cLabel.Form("all");
+ if (charge<0) cLabel.Form("neg");
+ else
+ if (charge>0) cLabel.Form("pos");
+
- TH1I* hTOFmulti = new TH1I(Form("hTOFmulti%s_%s",suffix.Data(), cLabel.Data()), Form("%s matched trk per event (|#eta|#leq0.8, p_{T}#geq0.3 GeV/c)", cLabel.Data()), 100, 0, 100);
+ TH1I* hTOFmulti = new TH1I(Form("hTOFmulti%s_%s",suffix.Data(), cLabel.Data()), Form("%s matched trk per event (|#eta|#leq%3.2f, p_{T}#geq0.3 GeV/c)", cLabel.Data(), fMatchingEtaCut), 100, 0, 100);
HistogramMakeUp(hTOFmulti, ((charge>0)? kRed : kBlue+2), 1, "E1", "","", "N","events");
list->AddLast(hTOFmulti);
HistogramMakeUp(hTOFtot,((charge>0)? kRed+2 : kBlue+2), 1, "E1", "","", "ToT (ns)","tracks");
list->AddLast(hTOFtot);
- TH1F* hMatchedL = new TH1F(Form("hMatchedL%s_%s",suffix.Data(),cLabel.Data()), Form("%s matched trk lenght", cLabel.Data()), 1200, -400., 800) ;
+ TH1F* hMatchedL = new TH1F(Form("hMatchedL%s_%s",suffix.Data(),cLabel.Data()), Form("%s matched trk lenght", cLabel.Data()), 900, -100., 800) ;
HistogramMakeUp(hMatchedL,((charge>0)? kRed+2 : kBlue+2), 1, "E1", "","", "L (cm)","tracks");
list->AddLast(hMatchedL);
-
- TH2F* hMatchedDxVsPt = new TH2F(Form("hMatchedDxVsPt%s_%s",suffix.Data(),cLabel.Data()), Form("%s matched trk dx vs.p_{T}", cLabel.Data()), 1000,0.,10.,200, -10., 10.) ;
- HistogramMakeUp(hMatchedDxVsPt,((charge>0)? kRed+2 : kBlue+2), 1, "colz", "","", "GeV/c (p_{T})","dx (cm)");
+
+ const Int_t nBinsPt = 300;
+ Double_t xBins[nBinsPt+1];
+ for (Int_t j=0;j<nBinsPt+1; j++) {
+ if (j<200) xBins[j] = j*0.025;
+ else xBins[j] = 5.0 + (j-200)*0.050;
+ }
+
+ TH2F* hMatchedDxVsPt = new TH2F(Form("hMatchedDxVsPt%s_%s",suffix.Data(),cLabel.Data()), Form("%s matched trk dx vs.p_{T}", cLabel.Data()), nBinsPt, xBins, 200, -10., 10.);
+ HistogramMakeUp(hMatchedDxVsPt,((charge>0)? kRed+2 : kBlue+2), 1, "colz", "","", "p_{T} (GeV/c)","dx (cm)");
list->AddLast(hMatchedDxVsPt);
- TH2F* hMatchedDzVsStrip = new TH2F(Form("hMatchedDzVsStrip%s_%s",suffix.Data(),cLabel.Data()), Form("%s matched trk dz vs. strip (#eta)", cLabel.Data()), 92,0.,92.,200, -10., 10.) ;
- HistogramMakeUp(hMatchedDzVsStrip,((charge>0)? kRed+2 : kBlue+2), 1, "colz", "","", "strip","dz (cm)");
+ TH2F* hMatchedDzVsStrip = new TH2F(Form("hMatchedDzVsStrip%s_%s",suffix.Data(),cLabel.Data()), Form("%s matched trk dz vs. strip (#eta)", cLabel.Data()), 92, 0., 92., 200, -10., 10.) ;
+ HistogramMakeUp(hMatchedDzVsStrip,((charge>0)? kRed+2 : kBlue+2), 1, "colz", "","", "strip index","dz (cm)");
list->AddLast(hMatchedDzVsStrip) ;
TProfile *hMatchedDxVsCh = new TProfile(Form("hMatchedDxVsCh%s_%s",suffix.Data(),cLabel.Data()), Form("%s matched trk dx vs. channel", cLabel.Data()), 157248., 0.,157248.);
- HistogramMakeUp(hMatchedDxVsCh,((charge>0)? kRed+2 : kBlue+2), 1, "", "","", "channel","dx (cm)");
+ HistogramMakeUp(hMatchedDxVsCh,((charge>0)? kRed+2 : kBlue+2), 1, "", "","", "channel index","dx (cm)");
list->AddLast(hMatchedDxVsCh);
TProfile *hMatchedDzVsCh = new TProfile(Form("hMatchedDzVsCh%s_%s",suffix.Data(),cLabel.Data()), Form("%s matched trk dz vs. channel", cLabel.Data()), 157248., 0.,157248.);
- HistogramMakeUp(hMatchedDzVsCh,((charge>0)? kRed+2 : kBlue+2), 1, "", "","", "channel","dz (cm)");
+ HistogramMakeUp(hMatchedDzVsCh,((charge>0)? kRed+2 : kBlue+2), 1, "", "","", "channel index","dz (cm)");
list->AddLast(hMatchedDzVsCh);
return;
return;
}
TString cLabel;
- if (charge<0) cLabel.Form("neg"); else if (charge>0) cLabel.Form("pos"); else cLabel.Form("all");
-
- TH1F* hMatchedP = new TH1F(Form("hMatchedP%s_%s",suffix.Data(),cLabel.Data()), Form("%s matched trk p", cLabel.Data()), 1000,0.,10.) ;
- HistogramMakeUp(hMatchedP,((charge>0)? kRed+2 : kBlue+2), 1, "E1", "","", "L (cm)","tracks");
+ if (charge == 0) cLabel.Form("all");
+ else
+ if (charge<0) cLabel.Form("neg");
+ else
+ if (charge>0) cLabel.Form("pos");
+
+ const Int_t nBinsX = 300;
+ Double_t xBins[nBinsX+1];
+ for (Int_t j=0;j<nBinsX+1; j++) {
+ if (j<200) xBins[j] = j*0.025;
+ else xBins[j] = 5.0 + (j-200)*0.050;
+ }
+
+ TH1F* hMatchedP = new TH1F(Form("hMatchedP%s_%s",suffix.Data(),cLabel.Data()), Form("%s matched trk p", cLabel.Data()), nBinsX, xBins);// 1000,0.,10.) ;
+ HistogramMakeUp(hMatchedP,((charge>0)? kRed+2 : kBlue+2), 1, "E1", "","", "p (GeV/c)","tracks");
list->AddLast(hMatchedP) ;
- TH1F* hMatchedPt = new TH1F(Form("hMatchedPt%s_%s",suffix.Data(),cLabel.Data()), Form("%s matched trk p_{T}", cLabel.Data()), 1000,0.,10.) ;
+ TH1F* hMatchedPt = new TH1F(Form("hMatchedPt%s_%s",suffix.Data(),cLabel.Data()), Form("%s matched trk p_{T}", cLabel.Data()), nBinsX, xBins);// 1000,0.,10.) ;
HistogramMakeUp(hMatchedPt,((charge>0)? kRed+2 : kBlue+2), 1, "E1", "","", "p_{T} (GeV/c)","tracks");
list->AddLast(hMatchedPt) ;
HistogramMakeUp(hMatchedPhi,((charge>0)? kRed+2 : kBlue+2), 1, "E1", "","", "#phi_{vtx} (deg)","tracks");
list->AddLast(hMatchedPhi) ;
- TH2F* hMatchedPtVsOutPhi = new TH2F(Form("hMatchedPtVsOutPhi%s_%s",suffix.Data(),cLabel.Data()), Form("%s matched trk p_{T} vs. #phi_{TPC out}", cLabel.Data()), 72, 0.0, 360.0, 1000,0.,10.) ;
+ TH2F* hMatchedPtVsOutPhi = new TH2F(Form("hMatchedPtVsOutPhi%s_%s",suffix.Data(),cLabel.Data()), Form("%s matched trk p_{T} vs. #phi_{TPC out}", cLabel.Data()), 72, 0.0, 360.0, nBinsX, xBins);// 1000,0.,10.) ;
HistogramMakeUp(hMatchedPtVsOutPhi,((charge>0)? kRed+2 : kBlue+2), 1, "colz", "","", "#phi_{TPC out} (deg)","p_{T} (GeV/c)");
list->AddLast(hMatchedPtVsOutPhi) ;
- TH1F* hPrimaryP = new TH1F(Form("hPrimaryP%s_%s",suffix.Data(),cLabel.Data()), Form("%s matched trk p", cLabel.Data()), 1000,0.,10.) ;
- HistogramMakeUp(hPrimaryP,((charge>0)? kRed+2 : kBlue+2), 1, "E1", "","", "L (cm)","tracks");
+ TH1F* hPrimaryP = new TH1F(Form("hPrimaryP%s_%s",suffix.Data(),cLabel.Data()), Form("%s matched trk p", cLabel.Data()), nBinsX, xBins);// 1000,0.,10.) ;
+ HistogramMakeUp(hPrimaryP,((charge>0)? kRed+2 : kBlue+2), 1, "E1", "","", "p (GeV/c)","tracks");
list->AddLast(hPrimaryP) ;
- TH1F* hPrimaryPt = new TH1F(Form("hPrimaryPt%s_%s",suffix.Data(),cLabel.Data()), Form("%s matched trk p_{T}", cLabel.Data()), 1000,0.,10.) ;
+ TH1F* hPrimaryPt = new TH1F(Form("hPrimaryPt%s_%s",suffix.Data(),cLabel.Data()), Form("%s matched trk p_{T}", cLabel.Data()), nBinsX, xBins);// 1000,0.,10.) ;
HistogramMakeUp(hPrimaryPt,((charge>0)? kRed+2 : kBlue+2), 1, "E1", "","", "p_{T} (GeV/c)","tracks");
list->AddLast(hPrimaryPt) ;
HistogramMakeUp(hPrimaryPhi,((charge>0)? kRed+2 : kBlue+2), 1, "E1", "","", "#phi_{vtx} (deg)","tracks");
list->AddLast(hPrimaryPhi) ;
- TH2F* hPrimaryPtVsOutPhi = new TH2F(Form("hPrimaryPtVsOutPhi%s_%s",suffix.Data(),cLabel.Data()), Form("%s matched trk p_{T} vs. #phi_{TPC out}", cLabel.Data()), 72, 0.0, 360.0, 1000,0.,10.) ;
+ TH2F* hPrimaryPtVsOutPhi = new TH2F(Form("hPrimaryPtVsOutPhi%s_%s",suffix.Data(),cLabel.Data()), Form("%s matched trk p_{T} vs. #phi_{TPC out}", cLabel.Data()), 72, 0.0, 360.0, nBinsX, xBins);// 1000,0.,10.) ;
HistogramMakeUp(hPrimaryPtVsOutPhi,((charge>0)? kRed+2 : kBlue+2), 1, "colz", "","", "#phi_{TPC out} (deg)","p_{T} (GeV/c)");
list->AddLast(hPrimaryPtVsOutPhi) ;
return;
return;
}
TString cLabel;
- if (charge<0) cLabel.Form("neg"); else if (charge>0) cLabel.Form("pos"); else cLabel.Form("all");
-
- TH2F* hMatchedBetaVsP = new TH2F(Form("hMatchedBetaVsP%s_%s",suffix.Data(),cLabel.Data()), Form("%s matched trk #beta vs. p", cLabel.Data()), 1000, 0.0, 10.0, 150, 0., 1.5) ;
+ if (charge == 0) cLabel.Form("all");
+ else
+ if (charge<0) cLabel.Form("neg");
+ else
+ if (charge>0) cLabel.Form("pos");
+
+ const Int_t nBinsX = 300;
+ Double_t xBins[nBinsX+1];
+ for (Int_t j=0;j<nBinsX+1; j++) {
+ if (j<200) xBins[j] = j*0.025;
+ else xBins[j] = 5.0 + (j-200)*0.050;
+ }
+
+ TH2F* hMatchedBetaVsP = new TH2F(Form("hMatchedBetaVsP%s_%s",suffix.Data(),cLabel.Data()), Form("%s matched trk #beta vs. p", cLabel.Data()), nBinsX, xBins, 150, 0., 1.5) ;
HistogramMakeUp(hMatchedBetaVsP,((charge>0)? kRed+2 : kBlue+2), 1, "colz", "","", "p (GeV/c)","#beta");
list->AddLast(hMatchedBetaVsP);
TH2F* hExpTimePiT0Sub1GeV = new TH2F(Form("hExpTimePiT0Sub1GeV%s_%s",suffix.Data(),cLabel.Data()), Form("%s trk (0.95#leq p_{T}#leq 1.05 GeV/c) t_{TOF}-t_{#pi,exp}-t_{0}^{TOF}",cLabel.Data()), 500, 0., 500., fnExpTimeBins, fExpTimeRangeMin, fExpTimeRangeMax) ;
HistogramMakeUp(hExpTimePiT0Sub1GeV,((charge>0)? kRed+2 : kBlue+2), 1, "colz", "","","n. tracks used for t_{0}^{TOF}","t_{TOF}-t_{#pi,exp}-t_{0}^{TOF}");
list->AddLast(hExpTimePiT0Sub1GeV) ;
+
+ TH1F* hExpTimePiFillSub = new TH1F(Form("hExpTimePiFillSub%s_%s",suffix.Data(),cLabel.Data()), Form("%s trk t_{TOF}-t_{#pi,exp}-t_{0,fill}",cLabel.Data()), fnExpTimeBins, fExpTimeRangeMin, fExpTimeRangeMax) ;
+ HistogramMakeUp(hExpTimePiFillSub,((charge>0)? kRed+2 : kBlue+2), 1, "", "","","t_{TOF}-t_{#pi,exp} -t_{0,fill} [ps]","entries");
+ list->AddLast(hExpTimePiFillSub) ;
TH1F* hExpTimePi = new TH1F(Form("hExpTimePi%s_%s",suffix.Data(),cLabel.Data()),Form("%s matched trk t_{TOF}-t_{#pi,exp}",cLabel.Data()), fnExpTimeBins, fExpTimeRangeMin, fExpTimeRangeMax) ;
HistogramMakeUp(hExpTimePi,((charge>0)? kRed+2 : kBlue+2), 1, "", "","", "t_{TOF}-t_{#pi,exp} [ps]","tracks");
list->AddLast(hExpTimePi);
- TH2F* hExpTimePiVsP = new TH2F(Form("hExpTimePiVsP%s_%s",suffix.Data(),cLabel.Data()),Form("%s matched trk t_{TOF}-t_{#pi,exp}",cLabel.Data()), 1000, 0.0, 10.0, fnExpTimeBins, fExpTimeRangeMin, fExpTimeRangeMax) ;
+ TH2F* hExpTimePiVsP = new TH2F(Form("hExpTimePiVsP%s_%s",suffix.Data(),cLabel.Data()),Form("%s matched trk t_{TOF}-t_{#pi,exp}",cLabel.Data()), nBinsX, xBins, fnExpTimeBins, fExpTimeRangeMin, fExpTimeRangeMax) ;
HistogramMakeUp(hExpTimePiVsP,kRed+2, 1, "colz", "","", "p (GeV/c)","t_{TOF}-t_{#pi,exp} [ps]");
list->AddLast(hExpTimePiVsP);
- TH2F* hExpTimeKaVsP = new TH2F(Form("hExpTimeKaVsP%s_%s",suffix.Data(),cLabel.Data()),Form("%s matched trk t_{TOF}-t_{K,exp}",cLabel.Data()), 1000, 0.0, 10.0, fnExpTimeBins, fExpTimeRangeMin, fExpTimeRangeMax) ;
+ TH2F* hExpTimeKaVsP = new TH2F(Form("hExpTimeKaVsP%s_%s",suffix.Data(),cLabel.Data()),Form("%s matched trk t_{TOF}-t_{K,exp}",cLabel.Data()), nBinsX, xBins, fnExpTimeBins, fExpTimeRangeMin, fExpTimeRangeMax) ;
HistogramMakeUp(hExpTimeKaVsP,kBlue+2, 1, "colz", "","", "p (GeV/c)","t_{TOF}-t_{K,exp} [ps]");
list->AddLast(hExpTimeKaVsP);
- TH2F* hExpTimeProVsP = new TH2F(Form("hExpTimeProVsP%s_%s",suffix.Data(),cLabel.Data()),Form("%s matched trk t_{TOF}-t_{p,exp}",cLabel.Data()),1000, 0.0, 10.0, fnExpTimeBins, fExpTimeRangeMin, fExpTimeRangeMax) ;
+ TH2F* hExpTimeProVsP = new TH2F(Form("hExpTimeProVsP%s_%s",suffix.Data(),cLabel.Data()),Form("%s matched trk t_{TOF}-t_{p,exp}",cLabel.Data()), nBinsX, xBins, fnExpTimeBins, fExpTimeRangeMin, fExpTimeRangeMax) ;
HistogramMakeUp(hExpTimeProVsP,kGreen+2, 1, "colz", "","", "p (GeV/c)","t_{TOF}-t_{p,exp} [ps]");
list->AddLast(hExpTimeProVsP);
HistogramMakeUp(hTOFpidSigmaPro,kGreen+2, 1, "colz", "","","p (GeV/c)","n#sigma_{p,exp} [ps]");
list->AddLast(hTOFpidSigmaPro);
- TH2F* hExpTimePiT0SubVsP = new TH2F(Form("hExpTimePiT0SubVsP%s_%s",suffix.Data(),cLabel.Data()), Form("%s trk t_{TOF}-t_{#pi,exp}-t_{0}^{TOF}",cLabel.Data()), 1000, 0.,10., fnExpTimeBins, fExpTimeRangeMin, fExpTimeRangeMax) ;
+ TH2F* hExpTimePiT0SubVsP = new TH2F(Form("hExpTimePiT0SubVsP%s_%s",suffix.Data(),cLabel.Data()), Form("%s trk t_{TOF}-t_{#pi,exp}-t_{0}^{TOF}",cLabel.Data()), nBinsX, xBins, fnExpTimeBins, fExpTimeRangeMin, fExpTimeRangeMax) ;
HistogramMakeUp(hExpTimePiT0SubVsP,kRed+2, 1, "colz", "","","p (GeV/c)","t_{TOF}-t_{#pi,exp}-t_{0}^{TOF}");
list->AddLast(hExpTimePiT0SubVsP) ;
- TH2F* hExpTimeKaT0SubVsP = new TH2F(Form("hExpTimeKaT0SubVsP%s_%s",suffix.Data(),cLabel.Data()), Form("%s trk t_{TOF}-t_{K,exp}-t_{0}^{TOF}",cLabel.Data()), 1000, 0.,10., fnExpTimeBins, fExpTimeRangeMin, fExpTimeRangeMax) ;
+ TH2F* hExpTimeKaT0SubVsP = new TH2F(Form("hExpTimeKaT0SubVsP%s_%s",suffix.Data(),cLabel.Data()), Form("%s trk t_{TOF}-t_{K,exp}-t_{0}^{TOF}",cLabel.Data()), nBinsX, xBins, fnExpTimeBins, fExpTimeRangeMin, fExpTimeRangeMax) ;
HistogramMakeUp(hExpTimeKaT0SubVsP,kBlue+2, 1, "colz", "","","p (GeV/c)","t_{TOF}-t_{K,exp}-t_{0}^{TOF}");
list->AddLast(hExpTimeKaT0SubVsP) ;
- TH2F* hExpTimeProT0SubVsP = new TH2F(Form("hExpTimeProT0SubVsP%s_%s",suffix.Data(),cLabel.Data()), Form("%s trk t_{TOF}-t_{p,exp}-t_{0}^{TOF}",cLabel.Data()), 1000, 0.,10., fnExpTimeBins, fExpTimeRangeMin, fExpTimeRangeMax) ;
+ TH2F* hExpTimeProT0SubVsP = new TH2F(Form("hExpTimeProT0SubVsP%s_%s",suffix.Data(),cLabel.Data()), Form("%s trk t_{TOF}-t_{p,exp}-t_{0}^{TOF}",cLabel.Data()), nBinsX, xBins, fnExpTimeBins, fExpTimeRangeMin, fExpTimeRangeMax) ;
HistogramMakeUp(hExpTimeProT0SubVsP,kGreen+2, 1, "colz", "","","p (GeV/c)","t_{TOF}-t_{p,exp}-t_{0}^{TOF}");
list->AddLast(hExpTimeProT0SubVsP) ;
AliError("Invalid list passed as argument.");
return;
}
- TH1D* hT0AC = new TH1D(Form("hT0AC%s",suffix.Data()), "Event timeZero from T0A&C; t_{0,AC} [ps]; events", 1000, -25000., 25000. ) ;
+ TH1F* hT0AC = new TH1F(Form("hT0AC%s",suffix.Data()), "Event timeZero from T0A&C; t_{0,AC} [ps]; events", 1000, -12500., 12500.) ;
HistogramMakeUp(hT0AC, kRed+2, 20, "", "","","","");
list->AddLast(hT0AC);
- TH1D* hT0A = new TH1D(Form("hT0A%s",suffix.Data()), "Event timeZero from T0A; t_{0,A} [ps]; events", 1000, -25000., 25000. ) ;
+ TH1F* hT0A = new TH1F(Form("hT0A%s",suffix.Data()), "Event timeZero from T0A; t_{0,A} [ps]; events", 1000, -12500., 12500.) ;
HistogramMakeUp(hT0A, kBlue+2, 25, "", "","","","");
list->AddLast(hT0A);
- TH1D* hT0C = new TH1D(Form("hT0C%s",suffix.Data()), "Event timeZero from T0C; t_{0,C} [ps]; events", 1000, -25000., 25000. ) ;
+ TH1F* hT0C = new TH1F(Form("hT0C%s",suffix.Data()), "Event timeZero from T0C; t_{0,C} [ps]; events", 1000, -12500., 12500.) ;
HistogramMakeUp(hT0C, kGreen+2, 28, "", "","","","");
list->AddLast(hT0C);
- TH1D* hT0DetRes = new TH1D(Form("hT0DetRes%s",suffix.Data()), "T0 detector (T0A-T0C)/2; (T0A-T0C)/2 [ps]; events", 200, -500.,500. ) ;
+ TH1F* hT0DetRes = new TH1F(Form("hT0DetRes%s",suffix.Data()), "T0 detector (T0A-T0C)/2; (T0A-T0C)/2 [ps]; events", 200, -500.,500. ) ;
HistogramMakeUp(hT0DetRes, kMagenta+1, 1, "", "","","","");
list->AddLast(hT0DetRes) ;
- TH1F* hT0fill = new TH1F(Form("hT0fill%s",suffix.Data()), "Event timeZero of fill; t_{0,fill} [ps]; events", 1000, -25000., 25000. ) ;
+ TH1F* hT0fill = new TH1F(Form("hT0fill%s",suffix.Data()), "Event timeZero of fill; t_{0,fill} [ps]; events", 1000, -12500., 12500. ) ;
HistogramMakeUp(hT0fill, kOrange+1, 25, "", "","","","");
list->AddLast(hT0fill) ;
- TH1F* hT0TOF = new TH1F(Form("hT0TOF%s",suffix.Data()), "Event timeZero estimated by TOF; t0 [ps]; events", 1000, -25000., 25000. ) ;
+ TH1F* hT0TOF = new TH1F(Form("hT0TOF%s",suffix.Data()), "Event timeZero estimated by TOF; t0 [ps]; events", 1000, -12500., 12500. ) ;
HistogramMakeUp(hT0TOF, kTeal-5, 21, "", "","","","");
list->AddLast(hT0TOF) ;
- TH1F* hT0T0 = new TH1F(Form("hT0T0%s",suffix.Data()), "Best timeZero between AC, A, C; t_{0} [ps]; events", 1000, -25000.,25000. ) ;
+ TH1F* hT0T0 = new TH1F(Form("hT0T0%s",suffix.Data()), "Best timeZero between AC, A, C; t_{0} [ps]; events", 1000, -12500., 12500. ) ;
HistogramMakeUp(hT0T0, kAzure+7, 26, "", "","","","");
list->AddLast(hT0T0) ;
- TH1F* hT0best = new TH1F(Form("hT0best%s",suffix.Data()), "Event timeZero estimated as T0best; t0 [ps]; events", 1000, -25000.,25000. ) ;
+ TH1F* hT0best = new TH1F(Form("hT0best%s",suffix.Data()), "Event timeZero estimated as T0best; t0 [ps]; events", 1000, -12500., 12500.) ;
HistogramMakeUp(hT0best, kBlack, 20, "", "","","","");
list->AddLast(hT0best) ;
HistogramMakeUp(hT0bestRes, kBlack, 20, "", "","","","");
list->AddLast(hT0bestRes) ;
- TH2F* hT0TOFvsNtrk = new TH2F(Form("hT0TOFvsNtrk%s",suffix.Data()), "Event timeZero estimated by TOF vs. number of tracks in event;TOF-matching tracks; t0 [ps]", 100, 0., 100.,1000,-25000.,25000. ) ;
+ TH2F* hT0TOFvsNtrk = new TH2F(Form("hT0TOFvsNtrk%s",suffix.Data()), "Event timeZero estimated by TOF vs. number of tracks in event;TOF-matching tracks; t0 [ps]", 100, 0., 100., 500,-2500.,2500. ) ;
HistogramMakeUp(hT0TOFvsNtrk, kTeal-5, 1, "colz", "","","","");
list->AddLast(hT0TOFvsNtrk) ;
- TH2F* hEventT0MeanVsVtx = new TH2F(Form("hEventT0MeanVsVtx%s",suffix.Data()), "T0 detector: mean vs vertex ; (t0_{A}-t0_{C})/2 [ns]; (t0_{A}+t0_{C})/2 [ns]; events", 500, -25., 25., 500, -25., 25. ) ;
+ TH2F* hEventT0MeanVsVtx = new TH2F(Form("hEventT0MeanVsVtx%s",suffix.Data()), "T0 detector: mean vs vertex ; (t0_{A}-t0_{C})/2 [ns]; (t0_{A}+t0_{C})/2 [ns]; events", 50, -25., 25., 50, -25., 25. ) ;
HistogramMakeUp(hEventT0MeanVsVtx, kBlue+2, 1, "colz", "","","","");
list->AddLast(hEventT0MeanVsVtx) ;
- TH2F* hEventV0MeanVsVtx = new TH2F(Form("hEventV0MeanVsVtx%s",suffix.Data()), "V0 detector: mean vs vertex ; (V0_{A}-V0_{C})/2 [ns]; (V0_{A}+V0_{C})/2 [ns]; events", 500, -50., 50., 500, -50., 50. ) ;
+ TH2F* hEventV0MeanVsVtx = new TH2F(Form("hEventV0MeanVsVtx%s",suffix.Data()), "V0 detector: mean vs vertex ; (V0_{A}-V0_{C})/2 [ns]; (V0_{A}+V0_{C})/2 [ns]; events", 50, -25., 25., 50, -25., 25.) ;
HistogramMakeUp(hEventV0MeanVsVtx, kBlack, 1, "colz", "","","","");
list->AddLast(hEventV0MeanVsVtx) ;
return;
}
- AddMatchingEffHisto(fHlistTRD, 1, "_noTrd");
- AddMatchingEffHisto(fHlistTRD, -1, "_noTrd");
- AddMatchingEffHisto(fHlistTRD, 1, "_Trd");
- AddMatchingEffHisto(fHlistTRD, -1, "_Trd");
+ if (fEnableChargeSplit) {
+ AddMatchingEffHisto(fHlistTRD, 1, "_noTrd");
+ AddMatchingEffHisto(fHlistTRD, -1, "_noTrd");
+ AddMatchingEffHisto(fHlistTRD, 1, "_Trd");
+ AddMatchingEffHisto(fHlistTRD, -1, "_Trd");
+
+ AddPidHisto(fHlistTRD, 1, "_noTrd");
+ AddPidHisto(fHlistTRD, -1, "_noTrd");
+ AddPidHisto(fHlistTRD, 1, "_Trd");
+ AddPidHisto(fHlistTRD, -1, "_Trd");
+ } else {
+ AddMatchingEffHisto(fHlistTRD, 0, "_noTrd");
+ AddMatchingEffHisto(fHlistTRD, 0, "_Trd");
+ AddPidHisto(fHlistTRD, 0, "_noTrd");
+ AddPidHisto(fHlistTRD, 0, "_Trd");
+ }
- AddPidHisto(fHlistTRD, 1, "_noTrd");
- AddPidHisto(fHlistTRD, -1, "_noTrd");
- AddPidHisto(fHlistTRD, 1, "_Trd");
- AddPidHisto(fHlistTRD, -1, "_Trd");
return;
}
HistogramMakeUp(hFiredMaxipadVsTrgPad, kBlue+2, 1, "colz", "","", "N_{pad} in trg window","N_{maxipad}");
fHlistTrigger->AddLast(hFiredMaxipadVsTrgPad);
- TH2I* hTrgMap = new TH2I(Form("hTrgMap%s",suffix.Data()), Form("Map of fired maxipads"), 72, 0, 72, 22, 0, 22);
+ TH2I* hTrgMap = new TH2I(Form("hTrgMap%s",suffix.Data()), Form("Map of fired maxipads"), 72, 0, 72, 23, 0, 23);
HistogramMakeUp(hTrgMap, kBlue+2, 1, "colz", "","", "LTM","maxipad");
fHlistTrigger->AddLast(hTrgMap);
Int_t channel=track->GetTOFCalChannel();
Int_t volId[5]; //(sector, plate,strip,padZ,padX)
AliTOFGeometry::GetVolumeIndices(channel,volId);
- TString cLabel; if (charge<0) cLabel.Form("neg"); else if (charge>0) cLabel.Form("pos"); else cLabel.Form("all");
+ TString cLabel;
+ if (charge == 0) cLabel.Form("all");
+ else
+ if (charge<0) cLabel.Form("neg");
+ else
+ if (charge>0) cLabel.Form("pos");
((TH1F*)fHlist->FindObject(Form("hTime%s_%s",suffix.Data(),cLabel.Data())))->Fill(fTof); //ns
((TH1F*)fHlist->FindObject(Form("hRawTime%s_%s",suffix.Data(),cLabel.Data())))->Fill(tofTimeRaw*1E-3); //ns
// fill histos with primary tracks info
// => denominator for matching efficiency
TString cLabel;
-
- TList * list = new TList();
- if (suffix.Contains("Trd")) list = fHlistTRD;
- else list = fHlist;
-
- if (charge<0) cLabel.Form("neg"); else if (charge>0) cLabel.Form("pos"); else cLabel.Form("all");
- ((TH1F*)list->FindObject(Form("hPrimaryP%s_%s",suffix.Data(),cLabel.Data())))->Fill(fP);
- ((TH1F*)list->FindObject(Form("hPrimaryPt%s_%s",suffix.Data(),cLabel.Data())))->Fill(fPt);
- if (fPt>=fMatchingMomCut) {
- ((TH1F*)list->FindObject(Form("hPrimaryEta%s_%s",suffix.Data(),cLabel.Data())))->Fill(fEta);
- ((TH1F*)list->FindObject(Form("hPrimaryPhi%s_%s",suffix.Data(),cLabel.Data())))->Fill(fPhi);
- ((TH2F*)list->FindObject(Form("hPrimaryPtVsOutPhi%s_%s",suffix.Data(),cLabel.Data())))->Fill(fTPCOuterPhi,fPt);
+ if (charge == 0) cLabel.Form("all");
+ else
+ if (charge<0) cLabel.Form("neg");
+ else
+ if (charge>0) cLabel.Form("pos");
+
+ if (suffix.Contains("Trd")) {
+ ((TH1F*)fHlistTRD->FindObject(Form("hPrimaryP%s_%s",suffix.Data(),cLabel.Data())))->Fill(fP);
+ ((TH1F*)fHlistTRD->FindObject(Form("hPrimaryPt%s_%s",suffix.Data(),cLabel.Data())))->Fill(fPt);
+ ((TH2F*)fHlistTRD->FindObject(Form("hPrimaryPtVsOutPhi%s_%s",suffix.Data(),cLabel.Data())))->Fill(fTPCOuterPhi,fPt);
+ if (fPt>=fMatchingMomCut) {
+ ((TH1F*)fHlistTRD->FindObject(Form("hPrimaryEta%s_%s",suffix.Data(),cLabel.Data())))->Fill(fEta);
+ ((TH1F*)fHlistTRD->FindObject(Form("hPrimaryPhi%s_%s",suffix.Data(),cLabel.Data())))->Fill(fPhi);
+ }
+ } else {
+ ((TH1F*)fHlist->FindObject(Form("hPrimaryP%s_%s",suffix.Data(),cLabel.Data())))->Fill(fP);
+ ((TH1F*)fHlist->FindObject(Form("hPrimaryPt%s_%s",suffix.Data(),cLabel.Data())))->Fill(fPt);
+ ((TH2F*)fHlist->FindObject(Form("hPrimaryPtVsOutPhi%s_%s",suffix.Data(),cLabel.Data())))->Fill(fTPCOuterPhi,fPt);
+ if (fPt>=fMatchingMomCut) {
+ ((TH1F*)fHlist->FindObject(Form("hPrimaryEta%s_%s",suffix.Data(),cLabel.Data())))->Fill(fEta);
+ ((TH1F*)fHlist->FindObject(Form("hPrimaryPhi%s_%s",suffix.Data(),cLabel.Data())))->Fill(fPhi);
+ }
}
return;
}
//get matched tracks variables (matching cut to be applied externally)
//=> numerator for matching efficiency
TString cLabel;
-
- TList * list = new TList();
- if (suffix.Contains("Trd")) list = fHlistTRD;
- else list = fHlist;
-
- if (charge<0) cLabel.Form("neg");
+ if (charge == 0) cLabel.Form("all");
else
- if (charge>0) cLabel.Form("pos");
- else cLabel.Form("all");
-
- ((TH1F*)list->FindObject(Form("hMatchedP%s_%s",suffix.Data(),cLabel.Data())))->Fill(fP);
- ((TH1F*)list->FindObject(Form("hMatchedPt%s_%s",suffix.Data(),cLabel.Data())))->Fill(fPt);
- if (fPt>=fMatchingMomCut) {
- ((TH1F*)list->FindObject(Form("hMatchedEta%s_%s",suffix.Data(),cLabel.Data())))->Fill(fEta);
- ((TH1F*)list->FindObject(Form("hMatchedPhi%s_%s",suffix.Data(),cLabel.Data())))->Fill(fPhi);
- ((TH2F*)list->FindObject(Form("hMatchedPtVsOutPhi%s_%s",suffix.Data(),cLabel.Data())))->Fill(fTPCOuterPhi,fPt);
+ if (charge<0) cLabel.Form("neg");
+ else
+ if (charge>0) cLabel.Form("pos");
+
+ if (suffix.Contains("Trd")) {
+ ((TH1F*)fHlistTRD->FindObject(Form("hMatchedP%s_%s",suffix.Data(),cLabel.Data())))->Fill(fP);
+ ((TH1F*)fHlistTRD->FindObject(Form("hMatchedPt%s_%s",suffix.Data(),cLabel.Data())))->Fill(fPt);
+ ((TH2F*)fHlistTRD->FindObject(Form("hMatchedPtVsOutPhi%s_%s",suffix.Data(),cLabel.Data())))->Fill(fTPCOuterPhi,fPt);
+ if (fPt>=fMatchingMomCut) {
+ ((TH1F*)fHlistTRD->FindObject(Form("hMatchedEta%s_%s",suffix.Data(),cLabel.Data())))->Fill(fEta);
+ ((TH1F*)fHlistTRD->FindObject(Form("hMatchedPhi%s_%s",suffix.Data(),cLabel.Data())))->Fill(fPhi);
+ }
+ } else {
+ ((TH1F*)fHlist->FindObject(Form("hMatchedP%s_%s",suffix.Data(),cLabel.Data())))->Fill(fP);
+ ((TH1F*)fHlist->FindObject(Form("hMatchedPt%s_%s",suffix.Data(),cLabel.Data())))->Fill(fPt);
+ ((TH2F*)fHlist->FindObject(Form("hMatchedPtVsOutPhi%s_%s",suffix.Data(),cLabel.Data())))->Fill(fTPCOuterPhi,fPt);
+ if (fPt>=fMatchingMomCut) {
+ ((TH1F*)fHlist->FindObject(Form("hMatchedEta%s_%s",suffix.Data(),cLabel.Data())))->Fill(fEta);
+ ((TH1F*)fHlist->FindObject(Form("hMatchedPhi%s_%s",suffix.Data(),cLabel.Data())))->Fill(fPhi);
+ }
}
return;
}
}
if (!track) return;
- TList * list = new TList();
- if (suffix.Contains("Trd")) list = fHlistTRD;
- else list = fHlistPID;
-
TString cLabel;
- if (charge<0) cLabel.Form("neg");
+ if (charge == 0) cLabel.Form("all");
else
- if (charge>0) cLabel.Form("pos");
- else cLabel.Form("all");
+ if (charge<0) cLabel.Form("neg");
+ else
+ if (charge>0) cLabel.Form("pos");
//calculate beta
Double_t c=TMath::C()*1.E-9;// m/ns
mass = fP*TMath::Sqrt(fact);
}
- ((TH2F*) list->FindObject(Form("hMatchedBetaVsP%s_%s",suffix.Data(),cLabel.Data())))->Fill(fP,beta);
- ((TH1F*) list->FindObject(Form("hMatchedMass%s_%s",suffix.Data(),cLabel.Data())))->Fill(mass);
- ((TH1F*) list->FindObject(Form("hMatchedMass2%s_%s",suffix.Data(),cLabel.Data())))->Fill(mass*mass);
+ if (suffix.Contains("Trd")) {
+ ((TH2F*) fHlistTRD->FindObject(Form("hMatchedBetaVsP%s_%s",suffix.Data(),cLabel.Data())))->Fill(fP,beta);
+ ((TH1F*) fHlistTRD->FindObject(Form("hMatchedMass%s_%s",suffix.Data(),cLabel.Data())))->Fill(mass);
+ ((TH1F*) fHlistTRD->FindObject(Form("hMatchedMass2%s_%s",suffix.Data(),cLabel.Data())))->Fill(mass*mass);
+ } else {
+ ((TH2F*) fHlistPID->FindObject(Form("hMatchedBetaVsP%s_%s",suffix.Data(),cLabel.Data())))->Fill(fP,beta);
+ ((TH1F*) fHlistPID->FindObject(Form("hMatchedMass%s_%s",suffix.Data(),cLabel.Data())))->Fill(mass);
+ ((TH1F*) fHlistPID->FindObject(Form("hMatchedMass2%s_%s",suffix.Data(),cLabel.Data())))->Fill(mass*mass);
+ }
//PID sigmas
Bool_t isValidBeta[AliPID::kSPECIES]={0,0,0,0,0};
Int_t channel=track->GetTOFCalChannel();
Int_t volId[5]; //(sector, plate,strip,padZ,padX)
AliTOFGeometry::GetVolumeIndices(channel,volId);
-
- if (isValidBeta[AliPID::kPion]){
- ((TH2F*)list->FindObject(Form("hExpTimePiVsStrip%s_%s",suffix.Data(),cLabel.Data())))->Fill((Int_t)GetStripIndex(volId),tofps-fTrkExpTimes[AliPID::kPion]);//ps
- ((TH1F*)list->FindObject(Form("hExpTimePi%s_%s",suffix.Data(),cLabel.Data())))->Fill(tofps-fTrkExpTimes[AliPID::kPion]);//ps
- ((TH2F*)list->FindObject(Form("hExpTimePiVsP%s_%s",suffix.Data(),cLabel.Data())))->Fill(fP, tofps-fTrkExpTimes[AliPID::kPion]);
- ((TH2F*)list->FindObject(Form("hTOFpidSigmaPi%s_%s",suffix.Data(),cLabel.Data())))->Fill(fPt, (tofps-fTrkExpTimes[AliPID::kPion])/fSigmaSpecie[AliPID::kPion]);
- ((TH2F*)list->FindObject(Form("hExpTimePiT0SubVsP%s_%s",suffix.Data(),cLabel.Data())))->Fill(fP,tofps-fTrkExpTimes[AliPID::kPion]-timeZeroTOF);
- ((TH2F*)list->FindObject(Form("hExpTimePiVsOutPhi%s_%s",suffix.Data(),cLabel.Data())))->Fill(fTPCOuterPhi,tofps-fTrkExpTimes[AliPID::kPion]-timeZeroTOF);
+ Char_t partName[3][4] = {"Pi","Ka","Pro"};
+
+ if (suffix.Contains("Trd")) {
+ //fill histos for pion only
+ ((TH2F*)fHlistTRD->FindObject(Form("hExpTimePiVsStrip%s_%s",suffix.Data(),cLabel.Data())))->Fill((Int_t)GetStripIndex(volId),tofps-fTrkExpTimes[AliPID::kPion]);//ps
+ ((TH1F*)fHlistTRD->FindObject(Form("hExpTimePi%s_%s",suffix.Data(),cLabel.Data())))->Fill(tofps-fTrkExpTimes[AliPID::kPion]);//ps
+ if (ComputeTimeZeroByTOF1GeV() && (fPt>0.95) && (fPt<1.05) ){
+ ((TH2F*)fHlistTRD->FindObject(Form("hExpTimePiT0Sub1GeV%s_%s",suffix.Data(),cLabel.Data())))->Fill(fMyTimeZeroTOFtracks,tofps-fMyTimeZeroTOF-fTrkExpTimes[AliPID::kPion]);
+ }
+ //fill sigmas and deltas for each specie
+ for (Int_t specie = AliPID::kPion; specie <= AliPID::kProton; specie++){
+ if (isValidBeta[specie]){
+ ((TH2F*)fHlistTRD->FindObject(Form("hExpTime%sVsP%s_%s",partName[specie-2], suffix.Data(),cLabel.Data())))->Fill(fP, tofps-fTrkExpTimes[specie]);
+ ((TH2F*)fHlistTRD->FindObject(Form("hTOFpidSigma%s%s_%s",partName[specie-2], suffix.Data(),cLabel.Data())))->Fill(fPt, (tofps-fTrkExpTimes[specie])/fSigmaSpecie[specie]);
+ ((TH2F*)fHlistTRD->FindObject(Form("hExpTime%sT0SubVsP%s_%s",partName[specie-2], suffix.Data(),cLabel.Data())))->Fill(fP,tofps-fTrkExpTimes[specie]-timeZeroTOF);
+ ((TH2F*)fHlistTRD->FindObject(Form("hExpTime%sVsOutPhi%s_%s",partName[specie-2], suffix.Data(),cLabel.Data())))->Fill(fTPCOuterPhi,tofps-fTrkExpTimes[specie]-timeZeroTOF);
+
+ }// end check on beta
+ }
+ } else {
- if (ComputeTimeZeroByTOF1GeV()){
- if ((fPt>0.95)&&(fPt<1.05)){
- ((TH2F*)list->FindObject(Form("hExpTimePiT0Sub1GeV%s_%s",suffix.Data(),cLabel.Data())))->Fill(fMyTimeZeroTOFtracks,tofps-fMyTimeZeroTOF-fTrkExpTimes[AliPID::kPion]);
- }
+ //fill histos for pion only
+ ((TH2F*)fHlistPID->FindObject(Form("hExpTimePiVsStrip%s_%s",suffix.Data(),cLabel.Data())))->Fill((Int_t)GetStripIndex(volId),tofps-fTrkExpTimes[AliPID::kPion]);//ps
+ ((TH1F*)fHlistPID->FindObject(Form("hExpTimePi%s_%s",suffix.Data(),cLabel.Data())))->Fill(tofps-fTrkExpTimes[AliPID::kPion]);//ps
+ if (ComputeTimeZeroByTOF1GeV() && (fPt>0.95) && (fPt<1.05) ){
+ ((TH2F*)fHlistPID->FindObject(Form("hExpTimePiT0Sub1GeV%s_%s",suffix.Data(),cLabel.Data())))->Fill(fMyTimeZeroTOFtracks,tofps-fMyTimeZeroTOF-fTrkExpTimes[AliPID::kPion]);
+ }
+ //fill sigmas and deltas for each specie
+ for (Int_t specie = AliPID::kPion; specie <= AliPID::kProton; specie++){
+ if (isValidBeta[specie]){
+ ((TH2F*)fHlistPID->FindObject(Form("hExpTime%sVsP%s_%s",partName[specie-2], suffix.Data(),cLabel.Data())))->Fill(fP, tofps-fTrkExpTimes[specie]);
+ ((TH2F*)fHlistPID->FindObject(Form("hTOFpidSigma%s%s_%s",partName[specie-2], suffix.Data(),cLabel.Data())))->Fill(fPt, (tofps-fTrkExpTimes[specie])/fSigmaSpecie[specie]);
+ ((TH2F*)fHlistPID->FindObject(Form("hExpTime%sT0SubVsP%s_%s",partName[specie-2], suffix.Data(),cLabel.Data())))->Fill(fP,tofps-fTrkExpTimes[specie]-timeZeroTOF);
+ ((TH2F*)fHlistPID->FindObject(Form("hExpTime%sVsOutPhi%s_%s",partName[specie-2], suffix.Data(),cLabel.Data())))->Fill(fTPCOuterPhi,tofps-fTrkExpTimes[specie]-timeZeroTOF);
+ }// end check on beta
}
- }//end pion
-
- if (isValidBeta[AliPID::kKaon]){
- ((TH2F*)list->FindObject(Form("hExpTimeKaVsP%s_%s",suffix.Data(),cLabel.Data())))->Fill(fP, tofps-fTrkExpTimes[AliPID::kKaon]);
- ((TH2F*)list->FindObject(Form("hTOFpidSigmaKa%s_%s",suffix.Data(),cLabel.Data())))->Fill(fPt, (tofps-fTrkExpTimes[AliPID::kKaon])/fSigmaSpecie[AliPID::kKaon]);
- ((TH2F*)list->FindObject(Form("hExpTimeKaT0SubVsP%s_%s",suffix.Data(),cLabel.Data())))->Fill(fP,tofps-fTrkExpTimes[AliPID::kKaon]-timeZeroTOF);
- ((TH2F*)list->FindObject(Form("hExpTimeKaVsOutPhi%s_%s",suffix.Data(),cLabel.Data())))->Fill(fTPCOuterPhi,tofps-fTrkExpTimes[AliPID::kKaon]-timeZeroTOF);
- }//end kaon
-
- if (isValidBeta[AliPID::kProton]){
- ((TH2F*)list->FindObject(Form("hExpTimeProVsP%s_%s",suffix.Data(),cLabel.Data())))->Fill(fP, tofps-fTrkExpTimes[AliPID::kProton]);
- ((TH2F*)list->FindObject(Form("hTOFpidSigmaPro%s_%s",suffix.Data(),cLabel.Data())))->Fill(fPt, (tofps-fTrkExpTimes[AliPID::kProton])/fSigmaSpecie[AliPID::kProton]);
- ((TH2F*)list->FindObject(Form("hExpTimeProT0SubVsP%s_%s",suffix.Data(),cLabel.Data())))->Fill(fP,tofps-fTrkExpTimes[AliPID::kProton]-timeZeroTOF);
- ((TH2F*)list->FindObject(Form("hExpTimeProVsOutPhi%s_%s",suffix.Data(),cLabel.Data())))->Fill(fTPCOuterPhi,tofps-fTrkExpTimes[AliPID::kProton]-timeZeroTOF);
- }//end proton
+
+ }
+ //re-set response kFILL_T0 to check post-alignment wih OADB
+ fESDpid->SetTOFResponse(fESD,AliESDpid::kFILL_T0);//(fill_t0, tof_t0, t0_t0, best_t0)
+ Float_t startTimeFill=fESDpid->GetTOFResponse().GetStartTime(fP); //timeZero for bin pT>10GeV/c
+ if (suffix.Contains("Trd"))
+ ((TH1F*)fHlistTRD->FindObject(Form("hExpTimePiFillSub%s_%s",suffix.Data(),cLabel.Data())))->Fill(tofps-fTrkExpTimes[AliPID::kPion]-startTimeFill);//ps
+ else
+ ((TH1F*)fHlistPID->FindObject(Form("hExpTimePiFillSub%s_%s",suffix.Data(),cLabel.Data())))->Fill(tofps-fTrkExpTimes[AliPID::kPion]-startTimeFill);//ps
+
// if (fEnableAdvancedCheck && (fPt<1.)) {
// Double_t pos[3]={0.,0.,0.};
// track->GetXYZAt(378.,5.,pos);
//&& TMath::Abs(fT0[2]-fT0[1]) < 500) //add this condition to check t0 used in tof response
((TH1F*)fHlistTimeZero->FindObject(Form("hT0DetRes%s",suffix.Data())))->Fill((fT0[2]-fT0[1])*0.5);
((TH1F*)fHlistTimeZero->FindObject(Form("hT0AC%s",suffix.Data())))->Fill(fT0[0]);
- ((TH2F*)fHlistTimeZero->FindObject(Form("hEventT0MeanVsVtx%s",suffix.Data())))->Fill((fT0[2]-fT0[1])*0.5,(fT0[2]+fT0[1])*0.5);
+ ((TH2F*)fHlistTimeZero->FindObject(Form("hEventT0MeanVsVtx%s",suffix.Data())))->Fill( ((fT0[2]-fT0[1])*0.5e-3), ((fT0[2]+fT0[1])*0.5e-3) );
}
if(TMath::Abs(fT0[1]) < t0cut){
((TH1F*)fHlistTimeZero->FindObject(Form("hT0A%s",suffix.Data())))->Fill(fT0[1]);
fESDpid->SetTOFResponse(fESD, (AliESDpid::EStartTimeType_t) j);//(fill_t0, tof_t0, t0_t0, best_t0)
timeZero[j]=fESDpid->GetTOFResponse().GetStartTime(10.); //timeZero for bin pT>10GeV/c
timeZeroRes[j]=fESDpid->GetTOFResponse().GetStartTimeRes(10.); //timeZero for bin pT>10GeV/c
- ((TH1D*)(fHlistTimeZero->FindObject(timeZeroHisto[j].Data())))->Fill(timeZero[j]);
- ((TH1D*)(fHlistTimeZero->FindObject(timeZeroHistoRes[j].Data())))->Fill(timeZeroRes[j]);
+ ((TH1F*)(fHlistTimeZero->FindObject(timeZeroHisto[j].Data())))->Fill(timeZero[j]);
+ ((TH1F*)(fHlistTimeZero->FindObject(timeZeroHistoRes[j].Data())))->Fill(timeZeroRes[j]);
}
((TH2F*)fHlistTimeZero->FindObject("hT0TOFvsNtrk"))->Fill(fNTOFtracks[0],timeZero[AliESDpid::kTOF_T0]);
-
+
//response set to best_t0 by previous loop
FillStartTimeMaskHisto(suffix.Data());
return;
}
- Int_t nPad = fTOFHeader->GetNumberOfTOFclusters(); // tutti i pad di readout che hanno sparato
- Int_t nTrgPad = fTOFHeader->GetNumberOfTOFtrgPads();//i pad di readout che hanno sparato nella finesta di trigger
- Int_t nMaxiPad = fTOFHeader->GetNumberOfTOFmaxipad(); // numero di maxipad che hanno sparato
+ Int_t nPad = fTOFHeader->GetNumberOfTOFclusters(); //all fired readout pads
+ Int_t nTrgPad = fTOFHeader->GetNumberOfTOFtrgPads();// fired readout pads in the trigger window
+ Int_t nMaxiPad = fTOFHeader->GetNumberOfTOFmaxipad(); //fired maxipads
- // aggiornare un histo con le mappe di maxipad che hanno sparato
+ // update histo with fired macropads
AliTOFTriggerMask *trgMask = fTOFHeader->GetTriggerMask();
for(Int_t j=0;j<72;j++){
for(Int_t i=22;i>=0;i--){