X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=PHOS%2FAliPHOS.cxx;h=0d3176b4b4bd7a28b1088d3c2e775d7f22a35052;hb=e957fea89c462908a01dcfa4f611e99a98080071;hp=66eeb8d081efcb08005b8b8e2f7b6138c9729062;hpb=02ab1addb529d1e7459c22113c738f971599fbeb;p=u%2Fmrichter%2FAliRoot.git diff --git a/PHOS/AliPHOS.cxx b/PHOS/AliPHOS.cxx index 66eeb8d081e..0d3176b4b4b 100644 --- a/PHOS/AliPHOS.cxx +++ b/PHOS/AliPHOS.cxx @@ -1,4 +1,3 @@ - /************************************************************************** * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * * * @@ -13,7 +12,6 @@ * about the suitability of this software for any purpose. It is * * provided "as is" without express or implied warranty. * **************************************************************************/ - /* $Id$ */ //_________________________________________________________________________ @@ -26,67 +24,45 @@ //*-- Author: Laurent Aphecetche & Yves Schutz (SUBATECH) ////////////////////////////////////////////////////////////////////////////// + // --- ROOT system --- class TFile; -#include "TTree.h" +#include +#include +#include // --- Standard library --- -#include // --- AliRoot header files --- - -#include "AliPHOS.h" -#include "AliMC.h" -#include "AliRun.h" #include "AliMagF.h" +#include "AliPHOS.h" +#include "AliPHOSGeometry.h" +#include "AliPHOSLoader.h" -ClassImp(AliPHOS) +ClassImp(AliPHOS) //____________________________________________________________________________ -AliPHOS::AliPHOS():AliDetector() +AliPHOS:: AliPHOS() : AliDetector() { - // ctor - //We do not create objects, because these pointers will be overwritten durin reading from file. - fSDigits = 0 ; - fDigits = 0 ; - fEmcRecPoints = 0 ; - fPpsdRecPoints = 0 ; - fTrackSegments = 0 ; - fRecParticles = 0 ; - + // Default ctor + fName="PHOS"; + fQATask = 0; + fTreeQA = 0; } + //____________________________________________________________________________ -AliPHOS::AliPHOS(const char* name, const char* title): AliDetector(name,title) +AliPHOS::AliPHOS(const char* name, const char* title): AliDetector(name, title) { - // ctor - - fSDigits = 0 ; - fDigits = 0 ; - fEmcRecPoints = 0 ; - fPpsdRecPoints = 0 ; - fTrackSegments = 0 ; - fRecParticles = 0 ; + // ctor : title is used to identify the layout + fQATask = 0; + fTreeQA = 0; } + //____________________________________________________________________________ -AliPHOS::~AliPHOS() -{ - // dtor - if(fEmcRecPoints) - fEmcRecPoints->Delete() ; - delete fEmcRecPoints ; - if(fPpsdRecPoints) - fPpsdRecPoints->Delete() ; - delete fPpsdRecPoints ; - if(fTrackSegments) - fTrackSegments->Delete() ; - delete fTrackSegments ; - if(fRecParticles) - fRecParticles->Delete() ; - delete fRecParticles ; - delete fHits ; - delete fDigits ; - delete fSDigits ; +AliPHOS::~AliPHOS() +{ + } //____________________________________________________________________________ @@ -149,7 +125,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) ; @@ -205,7 +181,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] ; @@ -231,6 +207,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) ; @@ -311,6 +309,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) ; @@ -349,121 +355,73 @@ void AliPHOS::CreateMaterials() gMC->Gstpar(idtmed[715], "STRA",2.) ; } -//____________________________________________________________________________ -void AliPHOS::SetTreeAddress() -{ +//____________________________________________________________________________ +AliPHOSGeometry * AliPHOS::GetGeometry() const +{ + // gets the pointer to the AliPHOSGeometry unique instance + + return AliPHOSGeometry::GetInstance(GetTitle(),"") ; - // TBranch *branch; - // AliDetector::SetTreeAddress(); +} +//____________________________________________________________________________ +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); - } - // - // Branch address for digit tree - TTree *treeD = gAlice->TreeD(); - - if(fDigits) - fDigits->Clear(); - else{ - cout << "AliPHOS:SetTree() fDigits " << fDigits << endl ; - cout << "AliPHOS:SetTree() creating new fDigits "<< endl ; - fDigits = new TClonesArray("AliPHOSDigit",1000); - } - - if (treeD && fDigits) { - branch = treeD->GetBranch(branchname); - if (branch) branch->SetAddress(&fDigits); - } - - - if(fSDigits) - fSDigits->Clear(); - else{ - cout << "AliPHOS:SetTree() fSDigits " << fSDigits << endl ; - cout << "AliPHOS:SetTree() creating new fSDigits "<< endl ; - fSDigits = new TClonesArray("AliPHOSDigit",1000); - } - - if (gAlice->TreeS() && fSDigits ) { - branch = gAlice->TreeS()->GetBranch("PHOS"); - if (branch) branch->SetAddress(&fSDigits) ; - } - - - TTree *treeR = gAlice->TreeR(); - - //Branch address for TreeR: EmcRecPoint - - if(fEmcRecPoints) - fEmcRecPoints->Delete(); - else{ - cout << "AliPHOS:SetTree() fEmcRecPoints " << fEmcRecPoints << endl ; - cout << "AliPHOS:SetTree() creating new fEmcRecPoints "<< endl ; - fEmcRecPoints = new TObjArray(100); - } - - - if ( treeR && fEmcRecPoints ) { - branch = treeR->GetBranch("PHOSEmcRP"); - if (branch) branch->SetAddress(&fEmcRecPoints) ; + if (branch) + { + if (fHits == 0x0) fHits= new TClonesArray("AliPHOSHit",1000); + //Info("SetTreeAddress","<%s> Setting Hits Address",GetName()); + branch->SetAddress(&fHits); + } } +} - //Branch address for TreeR: PPSDRecPoint +//____________________________________________________________________________ +void AliPHOS::WriteQA() +{ - if(fPpsdRecPoints) - fPpsdRecPoints->Delete(); - else{ - cout << "AliPHOS:SetTree() fPpsdRecPoints " << fPpsdRecPoints << endl ; - cout << "AliPHOS:SetTree() creating new fPpsdRecPoints "<< endl ; - fPpsdRecPoints = new TObjArray(100); - } - - if ( treeR && fPpsdRecPoints ) { - branch = treeR->GetBranch("PHOSPpsdRP"); - if (branch) branch->SetAddress(&fPpsdRecPoints) ; - } + // Make TreeQA in the output file. - //Branch address for TreeR: TrackSegments + if(fTreeQA == 0) + fTreeQA = new TTree("TreeQA", "QA Alarms") ; + // Create Alarms branches + Int_t bufferSize = 32000 ; + Int_t splitlevel = 0 ; - if(fTrackSegments) - fTrackSegments->Clear() ; - else{ - cout << "AliPHOS:SetTree() fTrackSegments " << fTrackSegments << endl ; - cout << "AliPHOS:SetTree() creating new fTrackSegments "<< endl ; - fTrackSegments = new TClonesArray("AliPHOSTrackSegment",100); - } + 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 ( treeR && fTrackSegments ) { - branch = treeR->GetBranch("PHOSTS"); - if (branch) branch->SetAddress(&fTrackSegments) ; - } - - //Branch address for TreeR: RecParticles - - if(fRecParticles) - fRecParticles->Clear() ; - else{ - cout << "AliPHOS:SetTree() fRecParticles " << fRecParticles << endl ; - cout << "AliPHOS:SetTree() creating new fRecParticles "<< endl ; - fRecParticles = new TClonesArray("AliPHOSRecParticle",100); + 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() ; - - if ( treeR && fRecParticles ) { - branch = treeR->GetBranch("PHOSRP"); - if (branch) branch->SetAddress(&fRecParticles) ; - } - + //fTreeQA->Fill() ; } - +//____________________________________________________________________________ +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; +}