X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=PHOS%2FAliPHOS.cxx;h=34b1634e9fd81099855c0c06ec70f84db3b2cc39;hb=39f9963faf67a511516c176c9a9112a156cd8ceb;hp=3437832ec1756baf529a15953f3d0d44cf9179b0;hpb=0e4b79363a75af2418e37ebc2586dd7007172493;p=u%2Fmrichter%2FAliRoot.git diff --git a/PHOS/AliPHOS.cxx b/PHOS/AliPHOS.cxx index 3437832ec17..34b1634e9fd 100644 --- a/PHOS/AliPHOS.cxx +++ b/PHOS/AliPHOS.cxx @@ -12,7 +12,6 @@ * about the suitability of this software for any purpose. It is * * provided "as is" without express or implied warranty. * **************************************************************************/ - /* $Id$ */ //_________________________________________________________________________ @@ -25,23 +24,66 @@ //*-- Author: Laurent Aphecetche & Yves Schutz (SUBATECH) ////////////////////////////////////////////////////////////////////////////// + // --- ROOT system --- class TFile; -#include "TTree.h" +#include +#include +#include // --- Standard library --- -#include // --- AliRoot header files --- - +#include "AliMagF.h" +#include "AliESDtrack.h" +#include "AliESD.h" #include "AliPHOS.h" -#include "AliMC.h" +#include "AliPHOSGetter.h" +#include "AliPHOSQAChecker.h" #include "AliRun.h" -#include "AliMagF.h" -#include "AliPHOSGeometry.h" - +#include "AliPHOSDigitizer.h" +#include "AliPHOSSDigitizer.h" +#include "AliPHOSReconstructor.h" ClassImp(AliPHOS) +//____________________________________________________________________________ +AliPHOS:: AliPHOS() : AliDetector() +{ + // Default ctor + fName="PHOS"; + fQATask = 0; + fTreeQA = 0; + fDebug = kFALSE ; +} +//____________________________________________________________________________ +AliPHOS::AliPHOS(const char* name, const char* title): AliDetector(name, title) +{ + // ctor : title is used to identify the layout + + fQATask = 0; + fTreeQA = 0; + fDebug = kFALSE ; +} + +//____________________________________________________________________________ +AliPHOS::~AliPHOS() +{ + +} + +//____________________________________________________________________________ +void AliPHOS::Copy(AliPHOS & phos) +{ + TObject::Copy(phos) ; + // fQATask = AliPHOSQAChecker::Copy(*(phos.fQATask)) ; + phos.fTreeQA = fTreeQA->CloneTree() ; +} + +//____________________________________________________________________________ +AliDigitizer* AliPHOS::CreateDigitizer(AliRunDigitizer* manager) const +{ + return new AliPHOSDigitizer(manager); +} //____________________________________________________________________________ void AliPHOS::CreateMaterials() @@ -103,7 +145,7 @@ void AliPHOS::CreateMaterials() Float_t aTI[2] = {12.011, 1.00794} ; Float_t zTI[2] = {6.0, 1.0} ; Float_t wTI[2] = {1.0, 1.0} ; - Float_t dTI = 0.1 ; + Float_t dTI = 0.04 ; AliMixture(7, "Thermo Insul.$", aTI, zTI, dTI, -2, wTI) ; @@ -159,7 +201,7 @@ void AliPHOS::CreateMaterials() AliMaterial(15, "Ar$", 39.948, 18.0, dAr, 14.0, 0., 0, 0) ; // ArCo2 - Char_t namate[21]; + Char_t namate[21]=""; Float_t aGM[2] ; Float_t zGM[2] ; Float_t wGM[2] ; @@ -185,6 +227,28 @@ void AliPHOS::CreateMaterials() // --- Stainless steel (let it be pure iron) --- AliMaterial(17, "Steel$", 55.845, 26, 7.87, 1.76, 0., 0, 0) ; + + + // --- Fiberglass --- + Float_t aFG[4] = {16.0, 28.09, 12.011, 1.00794} ; + Float_t zFG[4] = {8.0, 14.0, 6.0, 1.0} ; + Float_t wFG[4] = {292.0, 68.0, 462.0, 736.0} ; + Float_t dFG = 1.9 ; + + AliMixture(18, "Fibergla$", aFG, zFG, dFG, -4, wFG) ; + + // --- Cables in Air box --- + // SERVICES + + Float_t aCA[4] = { 1.,12.,55.8,63.5 }; + Float_t zCA[4] = { 1.,6.,26.,29. }; + Float_t wCA[4] = { .014,.086,.42,.48 }; + Float_t dCA = 0.8 ; //this density is raw estimation, if you know better - correct + + AliMixture(19, "Cables $", aCA, zCA, dCA, -4, wCA) ; + + + // --- Air --- AliMaterial(99, "Air$", 14.61, 7.3, 0.001205, 30420., 67500., 0, 0) ; @@ -265,6 +329,14 @@ void AliPHOS::CreateMaterials() AliMedium(17, "Steel $", 17, 0, isxfld, sxmgmx, 10.0, 0.1, 0.1, 0.1, 0.0001, 0, 0) ; + // Fibergalss -> idtmed[717] + AliMedium(18, "Fiberglass$", 18, 0, + isxfld, sxmgmx, 10.0, 0.1, 0.1, 0.1, 0.1, 0, 0) ; + + // Cables in air -> idtmed[718] + AliMedium(19, "Cables $", 19, 0, + isxfld, sxmgmx, 10.0, 0.1, 0.1, 0.1, 0.1, 0, 0) ; + // Air -> idtmed[798] AliMedium(99, "Air $", 99, 0, isxfld, sxmgmx, 10.0, 1.0, 0.1, 0.1, 10.0, 0, 0) ; @@ -303,24 +375,154 @@ void AliPHOS::CreateMaterials() gMC->Gstpar(idtmed[715], "STRA",2.) ; } + //____________________________________________________________________________ -void AliPHOS::SetTreeAddress() +void AliPHOS::FillESD(AliESD* esd) const +{ + // Called by AliReconstruct after Reconstruct() and global tracking and vertxing + + //Creates the tracksegments and Recparticles + AliPHOSReconstructor * rec = new AliPHOSReconstructor((fLoader->GetRunLoader()->GetFileName()).Data()) ; + TList * taskslist = rec->GetListOfTasks() ; + Int_t index ; + TTask * task ; + TString name ; + // set clusterizer task inactive + for (index = 0; index < taskslist->GetSize(); index++) { + task = dynamic_cast(taskslist->At(index)) ; + name = task->GetName() ; + if ( name.Contains(AliConfig::Instance()->GetReconstructionerTaskName())) + task->SetActive(kFALSE) ; + if ( name.Contains(AliConfig::Instance()->GetTrackerTaskName())) + (dynamic_cast (task))->SetESD(esd) ; + } + + AliPHOSGetter *gime = AliPHOSGetter::Instance( (fLoader->GetRunLoader()->GetFileName()).Data() ) ; + Int_t eventNumber = gime->EventNumber(); + rec->SetEventRange(eventNumber, eventNumber) ; // do current event; the loop over events is done by AliReconstruction::Run() + if ( Debug() ) + rec->ExecuteTask("deb all") ; + else + rec->ExecuteTask("") ; + + // Creates AliESDtrack from AliPHOSRecParticles + gime->Event(eventNumber, "P") ; + TClonesArray *recParticles = gime->RecParticles(); + Int_t nOfRecParticles = recParticles->GetEntries(); + for (Int_t recpart = 0 ; recpart < nOfRecParticles ; recpart++) { + AliPHOSRecParticle * rp = dynamic_cast(recParticles->At(recpart)); + if (Debug()) + rp->Print(); + AliESDtrack * et = new AliESDtrack() ; + // fills the ESDtrack + Double_t xyz[3]; + for (Int_t ixyz=0; ixyz<3; ixyz++) xyz[ixyz] = rp->GetPos()[ixyz]; + et->SetPHOSposition(xyz) ; + et->SetPHOSsignal (rp->Energy()) ; + et->SetPHOSpid (rp->GetPID()) ; + // add the track to the esd object + esd->AddTrack(et); + delete et; + } +} + +//____________________________________________________________________________ +void AliPHOS::Hits2SDigits() { +// create summable digits + AliPHOSSDigitizer* phosDigitizer = + new AliPHOSSDigitizer(fLoader->GetRunLoader()->GetFileName().Data()) ; + phosDigitizer->SetEventRange(0, -1) ; // do all the events + phosDigitizer->ExecuteTask("all") ; +} - // TBranch *branch; - // AliDetector::SetTreeAddress(); +//____________________________________________________________________________ +AliLoader* AliPHOS::MakeLoader(const char* topfoldername) +{ +//different behaviour than standard (singleton getter) +// --> to be discussed and made eventually coherent + fLoader = new AliPHOSLoader(GetName(),topfoldername); + return fLoader; +} +//____________________________________________________________________________ +void AliPHOS::SetTreeAddress() +{ + // Links Hits in the Tree to Hits array TBranch *branch; char branchname[20]; sprintf(branchname,"%s",GetName()); // Branch address for hit tree - TTree *treeH = gAlice->TreeH(); - if (treeH && fHits) { + TTree *treeH = TreeH(); + if (treeH) { branch = treeH->GetBranch(branchname); - if (branch) branch->SetAddress(&fHits); + if (branch) + { + if (fHits == 0x0) fHits= new TClonesArray("AliPHOSHit",1000); + //Info("SetTreeAddress","<%s> Setting Hits Address",GetName()); + branch->SetAddress(&fHits); + } + } +} + +//____________________________________________________________________________ +void AliPHOS::Reconstruct() const +{ + // method called by AliReconstruction; it should not be called otherwise but the AliPHOSReconstructionner + // should be called for stand alone reconstruction. + // Only the clusterization is performed,; the rest of the reconstruction is done in FillESD because the track + // segment maker needs access to the AliESD object to retrieve the tracks reconstructed by + // the global tracking. + + AliPHOSReconstructor * rec = new AliPHOSReconstructor((fLoader->GetRunLoader()->GetFileName()).Data()) ; + TList * taskslist = rec->GetListOfTasks() ; + Int_t index ; + TTask * task ; + TString name ; + // set all tasks inactive except clusterizer + for (index = 0; index < taskslist->GetSize(); index++) { + task = dynamic_cast(taskslist->At(index)) ; + name = task->GetName() ; + if ( !name.Contains(AliConfig::Instance()->GetReconstructionerTaskName())) + task->SetActive(kFALSE) ; } + rec->SetEventRange(0, -1) ; // do all the events + if ( Debug() ) + rec->ExecuteTask("deb all") ; + else + rec->ExecuteTask("") ; + } +//____________________________________________________________________________ +void AliPHOS::WriteQA() +{ + + // Make TreeQA in the output file. + + if(fTreeQA == 0) + fTreeQA = new TTree("TreeQA", "QA Alarms") ; + // Create Alarms branches + Int_t bufferSize = 32000 ; + Int_t splitlevel = 0 ; + TFolder* topfold = GetLoader()->GetTopFolder(); //get top aliroot folder; skowron + TString phosqafn(AliConfig::Instance()->GetQAFolderName()+"/"); //get name of QAaut folder relative to top event; skowron + phosqafn+=GetName(); //hard wired string!!! add the detector name to the pathname; skowron + TFolder * alarmsF = (TFolder*)topfold->FindObjectAny(phosqafn); //get the folder + + if (alarmsF == 0x0) + { + Error("WriteQA","Can not find folder with qa alarms"); + return; + } + TString branchName(alarmsF->GetName()); + TBranch * alarmsBranch = fTreeQA->Branch(branchName,"TFolder", &alarmsF, bufferSize, splitlevel); + TString branchTitle = branchName + " QA alarms" ; + alarmsBranch->SetTitle(branchTitle); + alarmsBranch->Fill() ; + + //fTreeQA->Fill() ; +}