//____________________________________________________________________
void AliFMDAnaCalibEnergyDistribution::SetEnergyDistribution(Int_t det, Char_t ring, Float_t eta, TH1F* edist) {
AliFMDAnaParameters* pars = AliFMDAnaParameters::Instance();
- Int_t binnumber = binnumber = pars->GetEtaBin(eta);
- std::cout<<binnumber<<std::endl;
+ Int_t binnumber = pars->GetEtaBin(eta);
+ //std::cout<<binnumber<<std::endl;
SetEnergyDistribution(det, ring, binnumber, edist );
}
//____________________________________________________________________
fSPDhighLimit(999999999),
fCentralSelection(kFALSE)
{
+ // Default constructor
fPhysicsSelection = new AliPhysicsSelection;
AliBackgroundSelection* backgroundSelection = new AliBackgroundSelection("bg","bg");
//fPhysicsSelection->Initialize(104792);
// Do not use this - it is only for IO
fgInstance = this;
- // Default constructor
+
}
//____________________________________________________________________
char* AliFMDAnaParameters::GetPath(const char* species) {
-
+ //Get path of object
char* path = "";
if(species == fgkBackgroundID)
//____________________________________________________________________
void AliFMDAnaParameters::Init(Bool_t forceReInit, UInt_t what)
{
- // Initialize the parameters manager. We need to get stuff from the
- // CDB here.
+ // Initialize the parameters manager. We need to get stuff from files here.
+
if (forceReInit) fIsInit = kFALSE;
if (fIsInit) return;
if (what & kBackgroundCorrection) InitBackground();
//____________________________________________________________________
void AliFMDAnaParameters::InitBackground() {
-
- //AliCDBEntry* background = GetEntry(fgkBackgroundCorrection);
+ //Init background correction objects.
TFile* fin = TFile::Open(GetPath(fgkBackgroundID));
//____________________________________________________________________
void AliFMDAnaParameters::InitEnergyDists() {
-
+ //Init energy distributions
TFile* fin = TFile::Open(GetPath(fgkEnergyDistributionID));
- //AliCDBEntry* edist = GetEntry(fgkEnergyDists);
+
if (!fin) return;
fEnergyDistribution = dynamic_cast<AliFMDAnaCalibEnergyDistribution*>(fin->Get(fgkEnergyDistributionID));
//____________________________________________________________________
void AliFMDAnaParameters::InitEventSelectionEff() {
-
- //AliCDBEntry* background = GetEntry(fgkBackgroundCorrection);
+ //Init event selection objects
+
TFile* fin = TFile::Open(GetPath(fgkEventSelectionEffID));
if (!fin) return;
fEventSelectionEfficiency = dynamic_cast<AliFMDAnaCalibEventSelectionEfficiency*>(fin->Get(fgkEventSelectionEffID));
if (!fEventSelectionEfficiency) AliFatal("Invalid background object from CDB");
+}
+
+//____________________________________________________________________
+
+void AliFMDAnaParameters::InitSharingEff() {
+
+ TFile* fin = TFile::Open(GetPath(fgkSharingEffID));
+
+ if (!fin) return;
+
+ fSharingEfficiency = dynamic_cast<AliFMDAnaCalibSharingEfficiency*>(fin->Get(fgkSharingEffID));
+ if (!fSharingEfficiency) AliFatal("Invalid background object from CDB");
+
}
//____________________________________________________________________
void AliFMDAnaParameters::PrintStatus() const
{
-
+ //Print current status
TString energystring;
switch(fEnergy) {
case k900:
}
-//____________________________________________________________________
-
-void AliFMDAnaParameters::InitSharingEff() {
-
- //AliCDBEntry* background = GetEntry(fgkBackgroundCorrection);
- TFile* fin = TFile::Open(GetPath(fgkSharingEffID));
-
- if (!fin) return;
-
- fSharingEfficiency = dynamic_cast<AliFMDAnaCalibSharingEfficiency*>(fin->Get(fgkSharingEffID));
- if (!fSharingEfficiency) AliFatal("Invalid background object from CDB");
-
-}
//____________________________________________________________________
Float_t AliFMDAnaParameters::GetVtxCutZ() {
-
+ //Get the z vtx cut in analysis
if(!fIsInit) {
AliWarning("Not initialized yet. Call Init() to remedy");
return -1;
//____________________________________________________________________
Int_t AliFMDAnaParameters::GetNvtxBins() {
-
+ //Get number of vtx bins
if(!fIsInit) {
AliWarning("Not initialized yet. Call Init() to remedy");
return -1;
}
//____________________________________________________________________
Float_t AliFMDAnaParameters::GetSigma(Int_t det, Char_t ring, Float_t eta) {
-
+ //Get sigma of Landau fits
if(!fIsInit) {
AliWarning("Not initialized yet. Call Init() to remedy");
return 0;
//____________________________________________________________________
Float_t AliFMDAnaParameters::GetMPV(Int_t det, Char_t ring, Float_t eta) {
-
+ //Get MPV of landau fits
if(!fIsInit) {
AliWarning("Not initialized yet. Call Init() to remedy");
return 0;
}
//____________________________________________________________________
Float_t AliFMDAnaParameters::GetConstant(Int_t det, Char_t ring, Float_t eta) {
-
+ //Get constant parameter of Landau fits
if(!fIsInit) {
AliWarning("Not initialized yet. Call Init() to remedy");
return 0;
}
//____________________________________________________________________
Float_t AliFMDAnaParameters::Get2MIPWeight(Int_t det, Char_t ring, Float_t eta) {
-
+ //Get 2 MIP weights of convoluted Landau fits
if(!fIsInit) {
AliWarning("Not initialized yet. Call Init() to remedy");
return 0;
}
//____________________________________________________________________
Float_t AliFMDAnaParameters::Get3MIPWeight(Int_t det, Char_t ring, Float_t eta) {
-
+ //Get 3 MIP weights of convoluted Landau fits
if(!fIsInit) {
AliWarning("Not initialized yet. Call Init() to remedy");
return 0;
TH2F* AliFMDAnaParameters::GetBackgroundCorrection(Int_t det,
Char_t ring,
Int_t vtxbin) {
-
+ //Get background correction histogram
if(!fIsInit) {
AliWarning("Not initialized yet. Call Init() to remedy");
return 0;
TH1F* AliFMDAnaParameters::GetDoubleHitCorrection(Int_t det,
Char_t ring) {
-
+ //Get correction for several hits in strips for p+p
if(!fIsInit) {
AliWarning("Not initialized yet. Call Init() to remedy");
return 0;
}
//_____________________________________________________________________
Float_t AliFMDAnaParameters::GetEventSelectionEfficiency(Int_t vtxbin) {
+ //Get event selection efficiency object
if(!fIsInit) {
AliWarning("Not initialized yet. Call Init() to remedy");
return 0;
}
//_____________________________________________________________________
TH1F* AliFMDAnaParameters::GetSharingEfficiency(Int_t det, Char_t ring, Int_t vtxbin) {
+ //Get sharing efficiency object
if(!fIsInit) {
AliWarning("Not initialized yet. Call Init() to remedy");
return 0;
}
//_____________________________________________________________________
TH1F* AliFMDAnaParameters::GetSharingEfficiencyTrVtx(Int_t det, Char_t ring, Int_t vtxbin) {
+ //Get sharing efficiency object TrVtx
if(!fIsInit) {
AliWarning("Not initialized yet. Call Init() to remedy");
return 0;
}
//_____________________________________________________________________
-Float_t AliFMDAnaParameters::GetMaxR(Char_t ring) const{
+Float_t AliFMDAnaParameters::GetMaxR(Char_t ring) const {
+ //Get max R of ring
Float_t radius = 0;
if(ring == 'I')
radius = 17.2;
}
//_____________________________________________________________________
Float_t AliFMDAnaParameters::GetMinR(Char_t ring) const{
+ //Get min R of ring
Float_t radius = 0;
if(ring == 'I')
radius = 4.5213;
}
//_____________________________________________________________________
void AliFMDAnaParameters::SetCorners(Char_t ring) {
-
+ //Set corners (taken from nominal geometry)
if(ring == 'I') {
fCorner1.Set(4.9895, 15.3560);
fCorner2.Set(1.8007, 17.2000);
//_____________________________________________________________________
Float_t AliFMDAnaParameters::GetPhiFromSector(UShort_t det, Char_t ring, UShort_t sec) const
{
+ //Get phi from sector
Int_t nsec = (ring == 'I' ? 20 : 40);
Float_t basephi = 0;
if(det == 1)
//_____________________________________________________________________
Float_t AliFMDAnaParameters::GetEtaFromStrip(UShort_t det, Char_t ring, UShort_t sec, UShort_t strip, Float_t zvtx) const
{
- // AliFMDRing fmdring(ring);
- // fmdring.Init();
+ //Calculate eta from strip with vertex (redundant with AliESDFMD::Eta)
Float_t rad = GetMaxR(ring)-GetMinR(ring);
Float_t nStrips = (ring == 'I' ? 512 : 256);
Float_t segment = rad / nStrips;
Bool_t AliFMDAnaParameters::GetVertex(const AliESDEvent* esd, Double_t* vertexXYZ)
{
+ //Get the vertex from the ESD
const AliESDVertex* vertex = 0;
vertex = esd->GetPrimaryVertexSPD();
}
//____________________________________________________________________
Bool_t AliFMDAnaParameters::IsEventTriggered(const AliESDEvent *esd, Trigger trig) {
-
+ //Did we have trig trigger ?
Trigger old = fTrigger;
fTrigger = trig;
Bool_t retval = IsEventTriggered(esd);
break;
}
case kEMPTY: {
- const AliMultiplicity* testmult = esd->GetMultiplicity();
+ /*
+ const AliMultiplicity* testmult = esd->GetMultiplicity();
Int_t nTrackLets = testmult->GetNumberOfTracklets();
Int_t nClusters = testmult->GetNumberOfSingleClusters();
Int_t fastOR = tAna.SPDFiredChips(esd, 0);
Bool_t v0CBG = tAna.IsOfflineTriggerFired(esd, AliTriggerAnalysis::kV0CBG);
Bool_t v0A = tAna.IsOfflineTriggerFired(esd, AliTriggerAnalysis::kV0A);
- Bool_t v0C = tAna.IsOfflineTriggerFired(esd, AliTriggerAnalysis::kV0C);
- if(triggers.Contains("CINT1A-ABCE-NOPF-ALL") || triggers.Contains("CINT1C-ABCE-NOPF-ALL"))
+ Bool_t v0C = tAna.IsOfflineTriggerFired(esd, AliTriggerAnalysis::kV0C);*/
+ // if(triggers.Contains("CINT1A-ABCE-NOPF-ALL") || triggers.Contains("CINT1C-ABCE-NOPF-ALL"))
+ if(triggers.Contains("CBEAMB-ABCE-NOPF-ALL"))
return kTRUE;
break;
}
Float_t
AliFMDAnaParameters::GetStripLength(Char_t ring, UShort_t strip)
{
- //AliFMDRing fmdring(ring);
- // fmdring.Init();
+ //Get length of a strip
Float_t rad = GetMaxR(ring)-GetMinR(ring);
Float_t nStrips = (ring == 'I' ? 512 : 256);
Float_t
AliFMDAnaParameters::GetBaseStripLength(Char_t ring, UShort_t strip)
{
- // AliFMDRing fmdring(ring);
- // fmdring.Init();
+ //Get length of strip assuming that corners are not cut away
Float_t rad = GetMaxR(ring)-GetMinR(ring);
Float_t nStrips = (ring == 'I' ? 512 : 256);
Float_t nSec = (ring == 'I' ? 20 : 40);
void SetCollisionSystem(Species collsystem) {fSpecies = collsystem;}
void PrintStatus() const;
void Print(Option_t* /* option */) const { PrintStatus(); }
- char* GetDndetaAnalysisName() {return "PWG2forwardDnDeta";}
+ char* GetDndetaAnalysisName() const {return "PWG2forwardDnDeta";}
TH1F* GetEnergyDistribution(Int_t det, Char_t ring, Float_t eta);
TH1F* GetEmptyEnergyDistribution(Int_t det, Char_t ring);
TH1F* GetRingEnergyDistribution(Int_t det, Char_t ring);
- AliPhysicsSelection* GetPhysicsSelection() {return fPhysicsSelection;}
- Bool_t IsRealData() {return fRealData; }
+ AliPhysicsSelection* GetPhysicsSelection() const {return fPhysicsSelection;}
+ Bool_t IsRealData() const {return fRealData; }
void SetRealData(Bool_t realdata) {fRealData = realdata;}
- Float_t GetLowSPDLimit() {return fSPDlowLimit;}
- Float_t GetHighSPDLimit() {return fSPDhighLimit;}
+ Float_t GetLowSPDLimit() const {return fSPDlowLimit;}
+ Float_t GetHighSPDLimit() const {return fSPDhighLimit;}
void SetLowSPDLimit(Float_t cut) {fSPDlowLimit = cut;}
void SetHighSPDLimit(Float_t cut) {fSPDhighLimit = cut;}
void SetCentralTriggerSelection(Bool_t selection) {fCentralSelection = selection;}
Bool_t fIsInit; //Have we been init ?
//TObjArray* fBackgroundArray;
// TObjArray* fEdistArray;
- AliFMDAnaCalibBackgroundCorrection* fBackground;
- AliFMDAnaCalibEnergyDistribution* fEnergyDistribution;
- AliFMDAnaCalibEventSelectionEfficiency* fEventSelectionEfficiency;
- AliFMDAnaCalibSharingEfficiency* fSharingEfficiency;
+ AliFMDAnaCalibBackgroundCorrection* fBackground; //BG correction object
+ AliFMDAnaCalibEnergyDistribution* fEnergyDistribution; //Energy dist object
+ AliFMDAnaCalibEventSelectionEfficiency* fEventSelectionEfficiency; //Event selection correction object
+ AliFMDAnaCalibSharingEfficiency* fSharingEfficiency; //Sharing efficiency correction object
//static const char* fgkBackgroundCorrection;
//static const char* fgkEnergyDists;
- static const char* fgkBackgroundID;
- static const char* fgkEnergyDistributionID ;
- static const char* fgkEventSelectionEffID ;
- static const char* fgkSharingEffID ;
+ static const char* fgkBackgroundID; // BG cor ID
+ static const char* fgkEnergyDistributionID ; // Energy dist ID
+ static const char* fgkEventSelectionEffID ; // Event selection ID
+ static const char* fgkSharingEffID ; // Sharing efficiency ID
TVector2 fCorner1; //First corner of hybrid
TVector2 fCorner2; //Second corner of hybrid
Energy fEnergy; // CM energy
MagField fMagField; //Magnetic field
Species fSpecies; //PbPb or pp ?
- AliPhysicsSelection* fPhysicsSelection;
+ AliPhysicsSelection* fPhysicsSelection; //Physics selection
Bool_t fRealData; // real or simulated
Float_t fSPDlowLimit ; // low limit of SPD tracklets
Float_t fSPDhighLimit ; // high limit of SPD tracklets
fOutputList(0),
fArray(0),
fZvtxDist(0),
- fEvents(0),
- fEmptyEventsAside(0),
- fEmptyEventsCside(0)
+ fEvents(0)
{
// Default constructor
fOutputList(0),
fArray(0),
fZvtxDist(0),
- fEvents(0),
- fEmptyEventsAside(0),
- fEmptyEventsCside(0)
+ fEvents(0)
{
// Default constructor
//Bool_t trigger = pars->IsEventTriggered(esd);
Bool_t physics = pars->IsEventTriggered(esd);
- //Bool_t empty = pars->IsEventTriggered(esd,AliFMDAnaParameters::kEMPTY);
- Bool_t emptyAside = triggers.Contains("CINT1A-ABCE-NOPF-ALL");
- Bool_t emptyCside = triggers.Contains("CINT1C-ABCE-NOPF-ALL");
-
+ Bool_t empty = pars->IsEventTriggered(esd,AliFMDAnaParameters::kEMPTY);
//std::cout<<physics<<" "<<empty<<std::endl;
//if(!trigger)
// physics = kFALSE;
if (!fmd) return;
if(physics)
fEvents++;
- else if(emptyAside)
- fEmptyEventsAside++;
- else if(emptyCside)
- fEmptyEventsCside++;
+ else if(empty)
+ fEmptyEvents++;
- if(!physics && !emptyAside && !emptyCside)
+ if(!physics && !empty)
return;
TH1F* Edist = 0;
TH1F* emptyEdist = 0;
Edist->Fill(mult);
ringEdist->Fill(mult);
}
- if(emptyAside && det == 3 /*&& ring == 'O'*/) {
+ else if(empty) {
emptyEdist->Fill(mult);
+
}
- //if(emptyCside && det == 3 && ring == 'I') {
- // emptyEdist->Fill(mult);
- //}
-
-
-
- if((emptyAside || emptyCside) && !(det == 3 /*&& ring == 'O'*/)/* && !(det == 2 && ring == 'O')*/) {
- emptyEdist->Fill(mult);
+ else {
+ AliWarning("Something is wrong - wrong trigger");
+ continue;
}
- //if(emptyCside && det == 2 && ring == 'O') {
- // emptyEdist->Fill(mult);
- // }
-
-
- //else {
- // AliWarning("Something is wrong - wrong trigger");
- // continue;
- //}
}
//____________________________________________________________________
void AliFMDAnalysisTaskCollector::Terminate(Option_t */*option*/) {
- std::cout<<"Analysed "<<fEvents<<" events and "<<fEmptyEventsAside<<" empty from A side and "<<fEmptyEventsCside<<" on the C side"<<std::endl;
+ std::cout<<"Analysed "<<fEvents<<" events and "<<fEmptyEvents<<" empty"<<std::endl;
AliFMDAnaParameters* pars = AliFMDAnaParameters::Instance();
Char_t ringChar = (ring == 0 ? 'I' : 'O');
TH1F* hRingEdist = (TH1F*)fOutputList->FindObject(Form("ringFMD%d%c",det,ringChar));
TH1F* hEmptyEdist = (TH1F*)fOutputList->FindObject(Form("emptyFMD%d%c",det,ringChar));
- if(fEmptyEventsAside && det == 3 /*&& ringChar == 'O'*/)
- hEmptyEdist->Scale(1./(Float_t)fEmptyEventsAside);
-
- //if(fEmptyEventsAside && det == 3 && ringChar == 'I')
- // hEmptyEdist->Scale(1./(Float_t)fEmptyEventsCside);
- //if(fEmptyEventsAside && det == 2 && ringChar == 'O') //A side
- // hEmptyEdist->Scale(1./(Float_t)fEmptyEventsAside);
-
- if((fEmptyEventsAside != 0 || fEmptyEventsCside !=0) && !(det == 3/* && ringChar == 'O'*/)/* && !(det == 2 && ringChar == 'O')*/)
- hEmptyEdist->Scale(1./((Float_t)fEmptyEventsAside + ((Float_t)fEmptyEventsCside)));
+ if(fEmptyEvents)
+ hEmptyEdist->Scale(1./(Float_t)fEmptyEvents);
if(fEvents)
hRingEdist->Scale(1./(Float_t)fEvents);
fDebug(o.fDebug),
fOutputList(o.fOutputList),
fArray(o.fArray),
- fZvtxDist(o.fZvtxDist) {}
+ fZvtxDist(o.fZvtxDist),
+ fEvents(0),
+ fEmptyEvents(0) {}
AliFMDAnalysisTaskCollector& operator=(const AliFMDAnalysisTaskCollector&) { return *this; }
virtual ~AliFMDAnalysisTaskCollector() {;}
TObjArray* fArray;
TH1F* fZvtxDist;
Int_t fEvents;
- Int_t fEmptyEventsAside;
- Int_t fEmptyEventsCside;
+ Int_t fEmptyEvents;
ClassDef(AliFMDAnalysisTaskCollector, 0); // Analysis task for FMD analysis
};
fStandalone(kTRUE),
fEsdVertex(0),
fStatus(kTRUE),
- fLastTrackByStrip(0)
+ fLastTrackByStrip(0),
+ fLastOrbit(0)
{
// Default constructor
DefineInput (0, AliESDEvent::Class());
fEsdVertex(0),
fStatus(kTRUE),
fLastTrackByStrip(0),
- fEtotal(0)
+ fLastOrbit(0)
{
// named constructor
fStandalone = SE;
TH1F* hTrEtaDistribution2 = new TH1F("hTrEtaDistribution2","hTrEtaDistribution2 ; TrEta",200,-9,9);
TH1F* hFlatTracks = new TH1F("hFlatTracks","hFlatTracks ; Horizontal tracks",100,0,100);
+
+ TH1F* hEnergyOfParticles = new TH1F("hEnergyOfParticles","hEnergyOfParticles",1000000,0,10);
+ fDiagList->Add(hEnergyOfParticles);
fDiagList->Add(hTrVtxDistribution);
fDiagList->Add(hTrEtaDistribution);
fDiagList->Add(hTrEtaDistribution2);
hCorrelationFMDBgCandRelative->Fill(ratioBg,nTotalFMDhits);
- Float_t ratio = (nbad > 0 ? ngood / nbad : 0);
+ // Float_t ratio = (nbad > 0 ? ngood / nbad : 0);
hCorrelationFMDGoodtracks->Fill(ngood,nTotalFMDhits);
hCorrelationFMDBadtracks->Fill(nbad,nTotalFMDhits);
Float_t cutLow = 0.3;//0.15;
Float_t cutHigh = pars->GetMPV(det,ring,eta) - 2*pars->GetSigma(det,ring,eta);
+
// if(ring == 'I')
// cutLow = 0.1;
//_____________________________________________________________________
void AliFMDAnalysisTaskSharing::ProcessPrimary() {
- //Get the undspoiled MC dN/deta before event cuts
+ //Get the unspoiled MC dN/deta before event cuts
AliMCEventHandler* eventHandler = dynamic_cast<AliMCEventHandler*> (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler());
AliMCEvent* mcEvent = eventHandler->MCEvent();
if(!mcEvent)
AliStack* stack = mcEvent->Stack();
TH1F* hPrimary = (TH1F*)fDiagList->FindObject("hMultvsEtaNoCuts");
+ TH1F* hEnergyOfParticles = (TH1F*)fDiagList->FindObject("hEnergyOfParticles");
AliHeader* header = mcEvent->Header();
AliGenEventHeader* genHeader = header->GenEventHeader();
if (!pythiaGenHeader) {
std::cout<<" no pythia header!"<<std::endl;
return;
- }
+ }
- Int_t pythiaType = pythiaGenHeader->ProcessType();
+ //Int_t pythiaType = pythiaGenHeader->ProcessType();
//if(pythiaType==92||pythiaType==93){
// std::cout<<"single diffractive"<<std::endl;
Char_t ring;
if(ref->DetectorId() != AliTrackReference::kFMD)
continue;
+ if(particle->Charge() != 0)
+ hEnergyOfParticles->Fill(particle->E());
+
AliFMDStripIndex::Unpack(ref->UserId(),det,ring,sec,strip);
Float_t thisStripTrack = fLastTrackByStrip(det,ring,sec,strip);
if(particle->Charge() != 0 && i != thisStripTrack ) {
fStandalone(o.fStandalone),
fEsdVertex(o.fEsdVertex),
fStatus(o.fStatus),
- fLastTrackByStrip(o.fLastTrackByStrip) {}
+ fLastTrackByStrip(o.fLastTrackByStrip),
+ fLastOrbit(o.fLastOrbit) {}
AliFMDAnalysisTaskSharing& operator=(const AliFMDAnalysisTaskSharing&) { return *this; }
// Implementation of interface methods
Bool_t fStatus; // event status
AliFMDFloatMap fLastTrackByStrip; // the last track to hit this strip
UInt_t fLastOrbit;
- Float_t fEtotal;
+
ClassDef(AliFMDAnalysisTaskSharing, 0); // Analysis task for FMD analysis
};