* provided "as is" without express or implied warranty. *
**************************************************************************/
-// Thil class computes background corrections for the FMD. The correction is computed
-// in eta,phi cells and the objects stored can be put into alien to use with analysis.
-// It is based on the AliFMDInput class that is used to loop over hits and primaries.
+// Thil class computes background corrections for the FMD. The
+// correction is computed in eta,phi cells and the objects stored can
+// be put into alien to use with analysis. It is based on the
+// AliFMDInput class that is used to loop over hits and primaries.
//
// Author: Hans Hjersing Dalsgaard, NBI, hans.dalsgaard@cern.ch
//
{}
//_____________________________________________________________________
-AliFMDBackgroundCorrection::AliFMDInputBG::AliFMDInputBG(Bool_t hits_not_trackref) :
- AliFMDInput("galice.root"),
- fPrimaryArray(),
- fHitArray(),
- fPrimaryMapInner(),
- fPrimaryMapOuter(),
- fHitMap(),
- fLastTrackByStrip(),
- fPrim(0),
- fHits(0),
- fZvtxCut(0),
- fNvtxBins(0),
- fPrevTrack(-1),
- fPrevDetector(-1),
- fPrevRing('Q'),
- fPrevSec(-1),
- fNbinsEta(100)
+AliFMDBackgroundCorrection::AliFMDInputBG::AliFMDInputBG(Bool_t hits_not_trackref)
+ : AliFMDInput("galice.root"),
+ fPrimaryArray(),
+ fHitArray(),
+ fPrimaryMapInner(),
+ fPrimaryMapOuter(),
+ fHitMap(0), // nDetector=0 means 51200 slots
+ fLastTrackByStrip(0), // nDetector=0 means 51200 slots
+ fPrim(0),
+ fHits(0),
+ fZvtxCut(0),
+ fNvtxBins(0),
+ fPrevTrack(-1),
+ fPrevDetector(-1),
+ fPrevRing('Q'),
+ fPrevSec(-1),
+ fNbinsEta(100)
{
-
if(hits_not_trackref) {
AddLoad(kHits);
AddLoad(kTracks);
AddLoad(kTrackRefs);
AddLoad(kKinematics);
AddLoad(kHeader);
-
-
}
//_____________________________________________________________________
-void AliFMDBackgroundCorrection::GenerateBackgroundCorrection(Bool_t from_hits,
- const Int_t nvtxbins,
- Float_t zvtxcut,
- const Int_t nBinsEta,
- Bool_t storeInAlien,
- Int_t runNo,
- Int_t endRunNo,
- const Char_t* filename,
- Bool_t simulate,
- Int_t nEvents,
- Bool_t inFile,
- const Char_t* infilename) {
-
+void
+AliFMDBackgroundCorrection::GenerateBackgroundCorrection(Bool_t from_hits,
+ const Int_t nvtxbins,
+ Float_t zvtxcut,
+ const Int_t nBinsEta,
+ Bool_t storeInAlien,
+ Int_t runNo,
+ Int_t endRunNo,
+ const Char_t* filename,
+ Bool_t simulate,
+ Int_t nEvents,
+ Bool_t inFile,
+ const Char_t* infilename)
+{
//TGrid::Connect("alien:",0,0,"t");
if(simulate)
Simulate(nEvents);
input.Run();
}
- AliInfo(Form("Found %d primaries and %d hits.", input.GetNprim(),input.GetNhits()));
+ AliInfo(Form("Found %d primaries and %d hits.",
+ input.GetNprim(),input.GetNhits()));
TObjArray* hitArray ;
TObjArray* primaryArray;
if(inFile) {
hitArray = new TObjArray();
primaryArray = new TObjArray();
- for(Int_t det =1; det<=3;det++)
- {
- TObjArray* detArrayHits = new TObjArray();
- detArrayHits->SetName(Form("FMD%d",det));
- hitArray->AddAtAndExpand(detArrayHits,det);
- Int_t nRings = (det==1 ? 1 : 2);
- for(Int_t ring = 0;ring<nRings;ring++)
- {
-
- Char_t ringChar = (ring == 0 ? 'I' : 'O');
- TObjArray* vtxArrayHits = new TObjArray();
- vtxArrayHits->SetName(Form("FMD%d%c",det,ringChar));
- detArrayHits->AddAtAndExpand(vtxArrayHits,ring);
- for(Int_t v=0; v<nvtxbins;v++)
- {
-
- TH2F* hHits = (TH2F*)infile->Get(Form("hHits_FMD%d%c_vtx%d",det,ringChar,v));
+ for(Int_t det =1; det<=3;det++) {
+ TObjArray* detArrayHits = new TObjArray();
+ detArrayHits->SetName(Form("FMD%d",det));
+ hitArray->AddAtAndExpand(detArrayHits,det);
+ Int_t nRings = (det==1 ? 1 : 2);
+ for(Int_t ring = 0;ring<nRings;ring++) {
+ Char_t ringChar = (ring == 0 ? 'I' : 'O');
+ TObjArray* vtxArrayHits = new TObjArray();
+ vtxArrayHits->SetName(Form("FMD%d%c",det,ringChar));
+ detArrayHits->AddAtAndExpand(vtxArrayHits,ring);
+ for(Int_t v=0; v<nvtxbins;v++) {
+
+ TH2F* hHits =
+ static_cast<TH2F*>(infile->Get(Form("hHits_FMD%d%c_vtx%d",
+ det,ringChar,v)));
- vtxArrayHits->AddAtAndExpand(hHits,v);
-
- }
- }
-
+ vtxArrayHits->AddAtAndExpand(hHits,v);
+
+ }
+ }
}
for(Int_t iring = 0; iring<2;iring++) {
- Char_t ringChar = (iring == 0 ? 'I' : 'O');
+ Char_t ringChar = (iring == 0 ? 'I' : 'O');
TObjArray* ringArray = new TObjArray();
ringArray->SetName(Form("FMD_%c",ringChar));
primaryArray->AddAtAndExpand(ringArray,iring);
for(Int_t v=0; v<nvtxbins;v++) {
- TH2F* hPrimary = (TH2F*)infile->Get(Form("hPrimary_FMD_%c_vtx%d",ringChar,v));
+ TH2F* hPrimary =
+ static_cast<TH2F*>(infile->Get(Form("hPrimary_FMD_%c_vtx%d",
+ ringChar,v)));
ringArray->AddAtAndExpand(hPrimary,v);
}
}
TList* corrList = new TList();
corrList->SetName("corrections");
- AliFMDAnaCalibBackgroundCorrection* background = new AliFMDAnaCalibBackgroundCorrection();
+ AliFMDAnaCalibBackgroundCorrection* background =
+ new AliFMDAnaCalibBackgroundCorrection();
for(Int_t det= 1; det <=3; det++) {
Int_t nRings = (det==1 ? 1 : 2);
for(Int_t iring = 0; iring<nRings; iring++) {
- TObjArray* primRingArray = (TObjArray*)primaryArray->At(iring);
- Char_t ringChar = (iring == 0 ? 'I' : 'O');
+ TObjArray* primRingArray =
+ static_cast<TObjArray*>(primaryArray->At(iring));
+ Char_t ringChar = (iring == 0 ? 'I' : 'O');
TObjArray* vtxArrayCorrection = new TObjArray();
vtxArrayCorrection->SetName(Form("FMD%d%c",det,ringChar));
detArrayCorrection->AddAtAndExpand(vtxArrayCorrection,iring);
TObjArray* vtxArray = (TObjArray*)detArray->At(iring);
TH2F* hHits = (TH2F*)vtxArray->At(vertexBin);
hitList->Add(hHits);
- TH2F* hPrimary = (TH2F*)primRingArray->At(vertexBin);
+ TH2F* hPrimary = static_cast<TH2F*>(primRingArray->At(vertexBin));
primaryList->Add(hPrimary);
- TH2F* hCorrection = (TH2F*)hHits->Clone(Form("FMD%d%c_vtxbin_%d_correction",det,ringChar,vertexBin));
+ TH2F* hCorrection =
+ static_cast<TH2F*>(hHits->Clone(Form("FMD%d%c_vtxbin_%d_correction",
+ det,ringChar,vertexBin)));
hCorrection->Divide(hPrimary);
corrList->Add(hCorrection);
hCorrection->SetTitle(hCorrection->GetName());
vtxArrayCorrection->AddAtAndExpand(hCorrection,vertexBin);
background->SetBgCorrection(det,ringChar,vertexBin,hCorrection);
}
-
}
}
AliSimulation sim ;
sim.SetRunNumber(0);
TGrid::Connect("alien:",0,0,"t");
+ // FIXME: Do not use a hard-coded path!
sim.SetDefaultStorage("alien://Folder=/alice/data/2008/LHC08d/OCDB/");
sim.SetConfigFile("Config.C");
sim.SetRunQA("FMD:");
Float_t charge)
{
-
+ if (charge == 0) return kTRUE;
/* if(charge != 0 &&
((nTrack != fPrevTrack) ||
nextStripTrack = fLastTrackByStrip.operator()(det,ring,sec,strip+1);
*/
- Float_t thisStripTrack = fLastTrackByStrip.operator()(det,ring,0,0);
+ Float_t thisStripTrack = fLastTrackByStrip(det,ring,sec,strip);
// if(nTrack == fLastTrackByStrip.operator()(det,ring,sec,strip))
// std::cout<<"Track # "<<nTrack<<" failed the cut in "<<det<<" "<<ring<<" "<<sec<<" "<<strip<<std::endl;
// else
// std::cout<<"Track # "<<nTrack<<" passed the cut in "<<det<<" "<<ring<<" "<<sec<<" "<<strip<<std::endl;
- if(charge != 0 && nTrack != thisStripTrack) {
-
- fHitMap.operator()(det,ring,sec,strip) += 1;
- fHits++;
- Float_t nstrips = (ring =='O' ? 256 : 512);
- fLastTrackByStrip.operator()(det,ring,sec,strip) = (Float_t)nTrack;
- if(strip >0)
- fLastTrackByStrip.operator()(det,ring,sec,strip-1) = (Float_t)nTrack;
- if(strip < (nstrips - 1))
- fLastTrackByStrip.operator()(det,ring,sec,strip+1) = (Float_t)nTrack;
+ if(nTrack == thisStripTrack) return kTRUE;
- fPrevDetector = det;
- fPrevRing = ring;
- fPrevSec = sec;
- fPrevTrack = nTrack;
- }
-
+ fHitMap(det,ring,sec,strip) += 1;
+ fHits++;
+ Float_t nstrips = (ring =='O' ? 256 : 512);
+ fLastTrackByStrip(det,ring,sec,strip) = Float_t(nTrack);
+ if(strip >0)
+ fLastTrackByStrip(det,ring,sec,strip-1) = Float_t(nTrack);
+ if(strip < (nstrips - 1))
+ fLastTrackByStrip(det,ring,sec,strip+1) = Float_t(nTrack);
+ fPrevDetector = det;
+ fPrevRing = ring;
+ fPrevSec = sec;
+ fPrevTrack = nTrack;
return kTRUE;
TDatabasePDG* pdgDB = TDatabasePDG::Instance();
TParticlePDG* pdgPart = pdgDB->GetParticle(p->GetPdgCode());
Float_t charge = (pdgPart ? pdgPart->Charge() : 0);
- Float_t phi = TMath::ATan2(p->Py(),p->Px());
-
+ if (charge == 0) continue;
+
+ Float_t phi = TMath::ATan2(p->Py(),p->Px());
if(phi<0) phi = phi+2*TMath::Pi();
- // if(p->Theta() == 0) continue;
- Float_t eta = p->Eta();
+ Float_t eta = p->Eta();
// std::cout<<-1*TMath::Log(TMath::Tan(0.5*p->Theta()))<<std::endl;
Bool_t primary = partStack->IsPhysicalPrimary(j);
//(charge!=0)&&(TMath::Abs(p->Vx() - vertex.At(0))<0.01)&&(TMath::Abs(p->Vy() - vertex.At(1))<0.01)&&(TMath::Abs(p->Vz() - vertex.At(2))<0.01);
- if(primary && charge !=0) {
-
- fPrim++;
+ if(!primary) continue;
- fPrimaryMapInner.Fill(eta,phi);
- fPrimaryMapOuter.Fill(eta,phi);
- }
+ fPrim++;
+
+ fPrimaryMapInner.Fill(eta,phi);
+ fPrimaryMapOuter.Fill(eta,phi);
}
return retVal;
Double_t delta = 2*fZvtxCut/fNvtxBins;
Double_t vertexBinDouble = (vertex.At(2) + fZvtxCut) / delta;
- Int_t vertexBin = (Int_t)vertexBinDouble;
+ Int_t vertexBin = Int_t(vertexBinDouble);
//Primaries
- TObjArray* innerArray = (TObjArray*)fPrimaryArray.At(0);
- TObjArray* outerArray = (TObjArray*)fPrimaryArray.At(1);
+ TObjArray* innerArray = static_cast<TObjArray*>(fPrimaryArray.At(0));
+ TObjArray* outerArray = static_cast<TObjArray*>(fPrimaryArray.At(1));
- TH2F* hPrimaryInner = (TH2F*)innerArray->At(vertexBin);
- TH2F* hPrimaryOuter = (TH2F*)outerArray->At(vertexBin);
+ TH2F* hPrimaryInner = static_cast<TH2F*>(innerArray->At(vertexBin));
+ TH2F* hPrimaryOuter = static_cast<TH2F*>(outerArray->At(vertexBin));
hPrimaryInner->Add(&fPrimaryMapInner);
hPrimaryOuter->Add(&fPrimaryMapOuter);
for(UShort_t strip = 0; strip < nstr; strip++) {
- if(fHitMap.operator()(det,ring,sec,strip) > 0) {
+ if(fHitMap(det,ring,sec,strip) > 0) {
//std::cout<<fHitMap.operator()(det,ring,sec,strip)<<std::endl;
Double_t x,y,z;
AliFMDGeometry* fmdgeo = AliFMDGeometry::Instance();
Int_t iring = (ring == 'I' ? 0 : 1);
- TObjArray* detArray = (TObjArray*)fHitArray.At(det);
- TObjArray* vtxArray = (TObjArray*)detArray->At(iring);
- TH2F* hHits = (TH2F*)vtxArray->At(vertexBin);
+ TObjArray* detArray = static_cast<TObjArray*>(fHitArray.At(det));
+ TObjArray* vtxArray = static_cast<TObjArray*>(detArray->At(iring));
+ TH2F* hHits = static_cast<TH2F*>(vtxArray->At(vertexBin));
Float_t phi = TMath::ATan2(y,x);
if(phi<0) phi = phi+2*TMath::Pi();