: fDebug(0),
fOutputList(0),
fInputList(0),
- fArray(0),
- fInputArray(0),
fVertexString(0x0),
fNevents(),
fNMCevents(),
fStandalone(kTRUE),
- fMCevent(0),
- fLastTrackByStrip(),
- fPrimary(kTRUE)
+ fLastTrackByStrip(0)
{
// Default constructor
DefineInput (0, TList::Class());
fDebug(0),
fOutputList(0),
fInputList(0),
- fArray(),
- fInputArray(0),
fVertexString(0x0),
fNevents(),
fNMCevents(),
fStandalone(kTRUE),
- fMCevent(0),
- fLastTrackByStrip(),
- fPrimary(kTRUE)
+ fLastTrackByStrip(0)
{
fStandalone = SE;
if(fStandalone) {
{
AliFMDAnaParameters* pars = AliFMDAnaParameters::Instance();
- fArray.SetName("FMD");
- fArray.SetOwner();
-
if(!fOutputList)
fOutputList = new TList();
fOutputList->SetName("BackgroundCorrected");
for(Int_t det =1; det<=3;det++)
{
- TObjArray* detArray = new TObjArray();
- detArray->SetName(Form("FMD%d",det));
- fArray.AddAtAndExpand(detArray,det);
Int_t nRings = (det==1 ? 1 : 2);
for(Int_t ring = 0;ring<nRings;ring++)
{
Char_t ringChar = (ring == 0 ? 'I' : 'O');
Int_t nSec = (ring == 0 ? 20 : 40);
- TObjArray* vtxArray = new TObjArray();
- vtxArray->SetName(Form("FMD%d%c",det,ringChar));
- detArray->AddAtAndExpand(vtxArray,ring);
+
for(Int_t i = 0; i< nVtxbins; i++) {
TH2F* hBg = pars->GetBackgroundCorrection(det, ringChar, i);
hMult = new TH2F(Form("dNdeta_FMD%d%c_vtxbin%d",det,ringChar,i),Form("dNdeta_FMD%d%c_vtxbin%d",det,ringChar,i),
hHits->Sumw2();
fOutputList->Add(hMult);
fOutputList->Add(hHits);
- vtxArray->AddAtAndExpand(hMult,i);
-
+
}
}
}
{
if(fStandalone) {
fInputList = (TList*)GetInputData(0);
- fVertexString = (TObjString*)GetInputData(1);
}
}
//_____________________________________________________________________
void AliFMDAnalysisTaskDndeta::Exec(Option_t */*option*/)
{
+ AliFMDAnaParameters* pars = AliFMDAnaParameters::Instance();
+ fVertexString = (TObjString*)fInputList->At(0);
+
Int_t vtxbin = fVertexString->GetString().Atoi();
+
fNevents.Fill(vtxbin);
+
for(UShort_t det=1;det<=3;det++) {
- //TObjArray* detInputArray = (TObjArray*)fInputArray->At(det);
- TObjArray* detArray = (TObjArray*)fArray.At(det);
Int_t nRings = (det==1 ? 1 : 2);
for (UShort_t ir = 0; ir < nRings; ir++) {
Char_t ringChar = (ir == 0 ? 'I' : 'O');
- //TObjArray* vtxInputArray = (TObjArray*)detInputArray->At(ir);
- TObjArray* vtxArray = (TObjArray*)detArray->At(ir);
- TH2F* hMultTotal = (TH2F*)vtxArray->At(vtxbin);
-
+
+ TH2F* hMultTotal = (TH2F*)fOutputList->FindObject(Form("dNdeta_FMD%d%c_vtxbin%d",det,ringChar,vtxbin));
+
TH2F* hMultInput = (TH2F*)fInputList->FindObject(Form("mult_FMD%d%c_vtxbin%d",det,ringChar,vtxbin));
hMultTotal->Add(hMultInput);
-
-
+
}
}
- if(fMCevent && fPrimary)
+ if(pars->GetProcessPrimary())
ProcessPrimary();
if(fStandalone) {
Int_t nVtxbins = pars->GetNvtxBins();
for(UShort_t det=1;det<=3;det++) {
- TObjArray* detArray = (TObjArray*)fArray.At(det);
Int_t nRings = (det==1 ? 1 : 2);
for (UShort_t ir = 0; ir < nRings; ir++) {
- TObjArray* vtxArray = (TObjArray*)detArray->At(ir);
Char_t ringChar = (ir == 0 ? 'I' : 'O');
for(Int_t i =0; i<nVtxbins; i++) {
- TH2F* hMultTotal = (TH2F*)vtxArray->At(i);
+
+ TH2F* hMultTotal = (TH2F*)fOutputList->FindObject(Form("dNdeta_FMD%d%c_vtxbin%d",det,ringChar,i));
+ TH2F* hMultTrVtx = (TH2F*)hMultTotal->Clone(Form("dNdeta_FMD_TrVtx_%d%c_vtxbin%d",det,ringChar,i));
+
+ hMultTotal->Scale(pars->GetEventSelectionEfficiency(i));
TH1D* hMultProj = hMultTotal->ProjectionX(Form("dNdeta_FMD%d%c_vtxbin%d_proj",det,ringChar,i),1,hMultTotal->GetNbinsY());
+ TH1D* hMultProjTrVtx = hMultTrVtx->ProjectionX(Form("dNdeta_FMD_TrVtx_%d%c_vtxbin%d_proj",det,ringChar,i),1,hMultTotal->GetNbinsY());
+ fOutputList->Add(hMultTrVtx);
fOutputList->Add(hMultProj);
+ fOutputList->Add(hMultProjTrVtx);
}
}
}
//_____________________________________________________________________
void AliFMDAnalysisTaskDndeta::ProcessPrimary() {
+ AliMCEventHandler* eventHandler = dynamic_cast<AliMCEventHandler*> (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler());
+ AliMCEvent* mcEvent = eventHandler->MCEvent();
+ if(!mcEvent)
+ return;
+
fLastTrackByStrip.Reset(-1);
AliFMDAnaParameters* pars = AliFMDAnaParameters::Instance();
AliMCParticle* particle = 0;
- AliStack* stack = fMCevent->Stack();
+ AliStack* stack = mcEvent->Stack();
TH1F* hPrimary = (TH1F*)fOutputList->FindObject("hMultvsEta");
- AliHeader* header = fMCevent->Header();
+ AliHeader* header = mcEvent->Header();
AliGenEventHeader* genHeader = header->GenEventHeader();
TArrayF vertex;
Int_t vertexBin = (Int_t)vertexBinDouble;
Bool_t firstTrack = kTRUE;
- Int_t nTracks = fMCevent->GetNumberOfTracks();
+
+ // we loop over the primaries only unless we need the hits (diagnostics running slowly)
+ Int_t nTracks = stack->GetNprimary();
+ if(pars->GetProcessHits())
+ nTracks = stack->GetNtrack();
+
for(Int_t i = 0 ;i<nTracks;i++) {
- particle = fMCevent->GetTrack(i);
+ particle = mcEvent->GetTrack(i);
if(!particle)
continue;
-
+
if(stack->IsPhysicalPrimary(i) && particle->Charge() != 0) {
hPrimary->Fill(particle->Eta());
fNMCevents.Fill(vertexBin);
firstTrack = kFALSE;
}
- }
- for(Int_t j=0; j<particle->GetNumberOfTrackReferences();j++) {
+ }
+ if(pars->GetProcessPrimary()) {
+ for(Int_t j=0; j<particle->GetNumberOfTrackReferences();j++) {
AliTrackReference* ref = particle->GetTrackReference(j);
UShort_t det,sec,strip;
if(ref->DetectorId() != AliTrackReference::kFMD)
continue;
AliFMDStripIndex::Unpack(ref->UserId(),det,ring,sec,strip);
- Float_t thisStripTrack = fLastTrackByStrip.operator()(det,ring,sec,strip);
+ Float_t thisStripTrack = fLastTrackByStrip(det,ring,sec,strip);
if(particle->Charge() != 0 && i != thisStripTrack ) {
//Double_t x,y,z;
hHits->Fill(eta);
Float_t nstrips = (ring =='O' ? 256 : 512);
- //if(det == 1 && ring == 'I')
- // std::cout<<"hit in "<<det<<" "<<ring<<" "<<sec<<" "<<strip<<" "<<std::endl;
- fLastTrackByStrip.operator()(det,ring,sec,strip) = (Float_t)i;
+ fLastTrackByStrip(det,ring,sec,strip) = (Float_t)i;
if(strip >0)
- fLastTrackByStrip.operator()(det,ring,sec,strip-1) = (Float_t)i;
+ fLastTrackByStrip(det,ring,sec,strip-1) = (Float_t)i;
if(strip < (nstrips - 1))
- fLastTrackByStrip.operator()(det,ring,sec,strip+1) = (Float_t)i;
+ fLastTrackByStrip(det,ring,sec,strip+1) = (Float_t)i;
}
}
+ }
-
- }
+ }
}
//_____________________________________________________________________