void AddClones (Int_t n, TClonesArray * clones, const char *classname) { //add n objects of classname to clones TClonesArray & c = *clones; for (Int_t i = 0; i < n; i++) { new (c[i]) TNamed (classname, classname); } } void AddArray (Int_t n, TObjArray * array, const char *classname) { //add n objects of classname to array for (Int_t i = 0; i < n; i++) { array->Add (new TNamed (classname, classname)); } } void AddDetectorsOLD (TFolder * detectors) { TFolder *CASTOR = detectors->AddFolder ("CASTOR", "CASTOR event data"); TClonesArray *castorHits = new TClonesArray ("TNamed"); castorHits->SetName ("Hits"); CASTOR->Add (castorHits); AddClones (100, castorHits, "AliCastorHit"); TClonesArray *castorDigits = new TClonesArray ("TNamed"); castorDigits->SetName ("Digits"); CASTOR->Add (castorDigits); AddClones (10, castorDigits, "AliCastorDigit"); TFolder *CPV = detectors->AddFolder ("CPV", "CPV event data"); TClonesArray *cpvHits = new TClonesArray ("TNamed"); cpvHits->SetName ("Hits"); CPV->Add (cpvHits); AddClones (10, cpvHits, "AliCPVHit"); TClonesArray *cpvDigits = new TClonesArray ("TNamed"); cpvDigits->SetName ("Digits"); CPV->Add (cpvDigits); AddClones (2, cpvDigits, "AliCPVDigit"); TFolder *FMD = detectors->AddFolder ("FMD", "FMD event data"); TClonesArray *fmdHits = new TClonesArray ("TNamed"); fmdHits->SetName ("Hits"); FMD->Add (fmdHits); AddClones (100, fmdHits, "AliFMDHit"); TClonesArray *fmdDigits = new TClonesArray ("TNamed"); fmdDigits->SetName ("Digits"); FMD->Add (fmdDigits); AddClones (20, fmdDigits, "AliFMDDigit"); TFolder *ITS = detectors->AddFolder ("ITS", "ITS event data"); TClonesArray *itsHits = new TClonesArray ("TNamed"); itsHits->SetName ("Hits"); ITS->Add (itsHits); AddClones (100, itsHits, "AliITSHit"); TClonesArray *itsDigits = new TClonesArray ("TNamed"); itsDigits->SetName ("Digits"); ITS->Add (itsDigits); AddClones (200, itsDigits, "AliITSDigit"); TClonesArray *itsClusters = new TClonesArray ("TNamed"); itsClusters->SetName ("Clusters"); ITS->Add (itsClusters); TClonesArray *itsRecPoints = new TClonesArray ("TNamed"); itsRecPoints->SetName ("RecPoints"); ITS->Add (itsRecPoints); AddClones (20, itsRecPoints, "AliITSRecPoint"); TClonesArray *itsTracks = new TClonesArray ("TNamed"); itsTracks->SetName ("Tracks"); ITS->Add (itsTracks); AddClones (20, itsTracks, "AliITSTrack"); TFolder *MUON = detectors->AddFolder ("MUON", "MUON event data"); TClonesArray *muonHits = new TClonesArray ("TNamed"); muonHits->SetName ("Hits"); MUON->Add (muonHits); AddClones (50, muonHits, "AliMUONHit"); TClonesArray *muonPadHits = new TClonesArray ("TNamed"); muonPadHits->SetName ("PadHits"); MUON->Add (muonPadHits); AddClones (30, muonPadHits, "AliMUONPadHit"); TClonesArray *muonDigits = new TClonesArray ("TNamed"); muonDigits->SetName ("Digits"); MUON->Add (muonDigits); AddClones (4, muonDigits, "AliMUONDigit"); TObjArray *muonDchambers = new TObjArray (); muonDchambers->SetName ("Dchambers"); MUON->Add (muonDchambers); TObjArray *muonLocalTrigger = new TObjArray (); muonLocalTrigger->SetName ("LocalTrigger"); MUON->Add (muonLocalTrigger); TObjArray *muonGlobalTrigger = new TObjArray (); muonGlobalTrigger->SetName ("GlobalTrigger"); MUON->Add (muonGlobalTrigger); TFolder *PHOS = detectors->AddFolder ("PHOS", "PHOS event data"); TClonesArray *phosHits = new TClonesArray ("TNamed"); phosHits->SetName ("Hits"); PHOS->Add (phosHits); AddClones (70, phosHits, "AliPHOSHit"); TClonesArray *phosRecPointsList = new TClonesArray ("TNamed"); phosRecPointsList->SetName ("RecPointsList"); PHOS->Add (phosRecPointsList); AddClones (20, phosRecPointsList, "AliPHOSRecPoint"); TClonesArray *phosTrackSegmentsList = new TClonesArray ("TNamed"); phosTrackSegmentsList->SetName ("TrackSegmentsList"); PHOS->Add (phosTrackSegmentsList); AddClones (10, phosTrackSegmentsList, "AliPHOSTrackSegment"); TClonesArray *phosRecParticlesList = new TClonesArray ("TNamed"); phosRecParticlesList->SetName ("RecParticlesList"); PHOS->Add (phosRecParticlesList); AddClones (2, phosRecParticlesList, "AliPHOSRecParticle"); TFolder *PMD = detectors->AddFolder ("PMD", "PMD event data"); TClonesArray *pmdHits = new TClonesArray ("TNamed"); pmdHits->SetName ("Hits"); PMD->Add (cpvHits); AddClones (20, pmdHits, "AliPMDHit"); TClonesArray *pmdDigits = new TClonesArray ("TNamed"); pmdDigits->SetName ("Digits"); PMD->Add (pmdDigits); AddClones (2, pmdDigits, "AliPMDDigit"); TFolder *RICH = detectors->AddFolder ("RICH", "RICH event data"); TClonesArray *richPadHits = new TClonesArray ("TNamed"); richPadHits->SetName ("PadHits"); RICH->Add (richPadHits); AddClones (20, richPadHits, "AliRICHPadHit"); TClonesArray *richCerenkovs = new TClonesArray ("TNamed"); richCerenkovs->SetName ("Cerenkovs"); RICH->Add (richCerenkovs); AddClones (20, richCerenkovs, "AliRICHCerenkov"); TObjArray *richDchambers = new TObjArray (); richDchambers->SetName ("Dchambers"); RICH->Add (richDchambers); TObjArray *richRawClusters = new TObjArray (); richRawClusters->SetName ("RawClusters"); RICH->Add (richRawClusters); AddArray (20, richRawClusters, "AliRICHRawCluster"); TObjArray *richRecHits = new TObjArray (); richRecHits->SetName ("RecHits"); RICH->Add (richRecHits); AddArray (20, richRecHits, "AliRICHRecHit"); TFolder *START = detectors->AddFolder ("START", "START event data"); TClonesArray *startHits = new TClonesArray ("TNamed"); startHits->SetName ("Hits"); START->Add (startHits); TClonesArray *startDigits = new TClonesArray ("TNamed"); startDigits->SetName ("Digits"); START->Add (startDigits); TFolder *TOF = detectors->AddFolder ("TOF", "TOF event data"); TClonesArray *tofHits = new TClonesArray ("TNamed"); tofHits->SetName ("Hits"); TOF->Add (tofHits); AddClones (2, tofHits, "AliTOFHit"); TClonesArray *tofDigits = new TClonesArray ("TNamed"); tofDigits->SetName ("Digits"); TOF->Add (tofDigits); AddClones (2, tofDigits, "AliTOFDigit"); TFolder *TPC = detectors->AddFolder ("TPC", "TPC event data"); TClonesArray *tpcHits = new TClonesArray ("TNamed"); tpcHits->SetName ("Hits"); TPC->Add (cpvHits); AddClones (3000, tpcHits, "AliTPCHit"); TClonesArray *tpcDigits = new TClonesArray ("TNamed"); tpcDigits->SetName ("Digits"); TPC->Add (tpcDigits); AddClones (200, tpcDigits, "AliTPCDigit"); TClonesArray *tpcClusters = new TClonesArray ("TNamed"); tpcClusters->SetName ("Clusters"); TPC->Add (tpcClusters); AddClones (200, tpcClusters, "AliTPCCluster"); TClonesArray *tpcTracks = new TClonesArray ("TNamed"); tpcTracks->SetName ("Tracks"); TPC->Add (tpcTracks); AddClones (40, tpcTracks, "AliTPCTrack"); TFolder *TRD = detectors->AddFolder ("TRD", "TRD event data"); TClonesArray *trdHits = new TClonesArray ("TNamed"); trdHits->SetName ("Hits"); TRD->Add (trdHits); AddClones (100, trdHits, "AliTRDHit"); TClonesArray *trdRecPoints = new TClonesArray ("TNamed"); trdRecPoints->SetName ("RecPoints"); TRD->Add (trdRecPoints); AddClones (100, trdRecPoints, "AliTRDRecPoint"); TFolder *ZDC = detectors->AddFolder ("ZDC", "ZDC event data"); TClonesArray *zdcHits = new TClonesArray ("TNamed"); zdcHits->SetName ("Hits"); ZDC->Add (zdcHits); AddClones (6, zdcHits, "AliZDCHit"); TClonesArray *zdcDigits = new TClonesArray ("TNamed"); zdcDigits->SetName ("Digits"); ZDC->Add (zdcDigits); AddClones (2, zdcDigits, "AliZDCDigit"); } void AddDetectors (TFolder * detectors) { TFolder *CASTOR = detectors->AddFolder ("CASTOR", "CASTOR event data"); TFolder *CPV = detectors->AddFolder ("CPV", "CPV event data"); TFolder *FMD = detectors->AddFolder ("FMD", "FMD event data"); TFolder *ITS = detectors->AddFolder ("ITS", "ITS event data"); TFolder *MUON = detectors->AddFolder ("MUON", "MUON event data"); TFolder *PHOS = detectors->AddFolder ("PHOS", "PHOS event data"); TFolder *PMD = detectors->AddFolder ("PMD", "PMD event data"); TFolder *RICH = detectors->AddFolder ("RICH", "RICH event data"); TFolder *START = detectors->AddFolder ("START", "START event data"); TFolder *TOF = detectors->AddFolder ("TOF", "TOF event data"); TFolder *TPC = detectors->AddFolder ("TPC", "TPC event data"); TFolder *TRD = detectors->AddFolder ("TRD", "TRD event data"); TFolder *ZDC = detectors->AddFolder ("ZDC", "ZDC event data"); } void AddTrees (TFolder * aliroot) { TFolder *Trees = aliroot->AddFolder ("Trees", "AliRoot Trees"); Trees->Add (new TTree ("TreeR", "Run Tree")); Trees->Add (new TTree ("TreeH", "Hits Tree")); Trees->Add (new TTree ("TreeD", "Digits Tree")); Trees->Add (new TTree ("TreeE", "Event Summary Tree")); Trees->Add (new TTree ("TreeK", "Event Kinematics Tree")); } void folders () { //script to prototype AliRoot folders gSystem->Load ("libEG"); TFolder *aliroot = gROOT->GetRootFolder ()->AddFolder ("aliroot", "aliroot top level folders"); gROOT->GetListOfBrowsables ()->Add (aliroot, "aliroot"); TFolder *constants = aliroot->AddFolder ("Constants", "Detector constants"); TFolder *pdg = constants->AddFolder ("DatabasePDG", "PDG database"); pdg->Add (new TNamed ("TDatabasePDG", "PDG data base")); //AddTrees(aliroot); TFolder *run = aliroot->AddFolder ("Run", "Run dependent folders"); run->Add (new TNamed ("header", "AliRunHeader")); TFolder *configuration = run->AddFolder ("Configuration", "Run configuration"); TFolder *run_mc = aliroot->AddFolder ("RunMC", "MonteCarlo run dependent folders"); run->Add (new TNamed ("header", "AliRunMCHeader")); TFolder *configuration_mc = run_mc->AddFolder ("Configuration", "MonteCarlo run configuration"); TFolder *modules = configuration->AddFolder ("Modules", "Pointers to detector objects"); modules->Add (new TNamed ("BODY", "AliBODY (ALICE envelop) geometry and constants")); modules->Add (new TNamed ("MAG", "AliMAGGeometry and constants")); modules->Add (new TNamed ("ABSO", "AliABSOGeometry and constants")); modules->Add (new TNamed ("DIPO", "AliDIPOGeometry and constants")); modules->Add (new TNamed ("HALL", "AliHALLGeometry and constants")); modules->Add (new TNamed ("FRAME", "AliFRAMEGeometry and constants")); modules->Add (new TNamed ("SHIL", "AliSHILGeometry and constants")); modules->Add (new TNamed ("PIPE", "AliPIPEGeometry and constants")); modules->Add (new TNamed ("CASTOR", "AliCASTORGeometry and constants")); modules->Add (new TNamed ("CPV", "AliCPVGeometry and constants")); modules->Add (new TNamed ("FMD", "AliFMDGeometry and constants")); modules->Add (new TNamed ("ITS", "AliITSGeometry and constants")); modules->Add (new TNamed ("MUON", "AliMUONGeometry and constants")); modules->Add (new TNamed ("PHOS", "AliPHOSGeometry and constants")); modules->Add (new TNamed ("PMD", "AliPMDGeometry and constants")); modules->Add (new TNamed ("RICH", "AliRICHGeometry and constants")); modules->Add (new TNamed ("START", "AliSTARTGeometry and constants")); modules->Add (new TNamed ("TOF", "AliTOFGeometry and constants")); modules->Add (new TNamed ("TPC", "AliTPCGeometry and constants")); modules->Add (new TNamed ("TRD", "AliTRDGeometry and constants")); modules->Add (new TNamed ("ZDC", "AliZDCGeometry and constants")); TFolder *Field = configuration->AddFolder ("Field", "Magnetic field maps"); Field->Add (new TNamed ("Central", "AliMagFcentral mag field object")); Field->Add (new TNamed ("Dipole", "AliMagFdipole mag field object")); TFolder *conditions = run->AddFolder ("Conditions", "Run conditions"); TFolder *calibration = conditions->AddFolder ("Calibration", "Detector calibration data"); AddDetectors (calibration); TFolder *aligment = conditions->AddFolder ("Aligment", "Detector aligment"); TFolder *generators = configuration_mc->AddFolder ("Generators", "list of generator objects"); generators-> Add (new TNamed ("Hijing", "AliHijingGenerator event generator")); generators-> Add (new TNamed ("Cocktail", "AliCocktailGenerator generator")); TFolder *virtualMC = configuration_mc->AddFolder ("VirtualMC", "the Virtual MC"); virtualMC->Add (new TNamed ("Geant3", "the TGeant3 object")); TFolder *event_mc = run_mc->AddFolder ("EventMC", "MonteCarlo event folders"); event_mc->Add (new TNamed ("EventMCHeader", "AliEventMCHeader")); TClonesArray *kine = new TClonesArray ("TParticle"); kine->SetName ("EventKinematics"); event_mc->Add (kine); AddClones (100, kine, "TParticle"); TFolder *event_mc_hits = event_mc->AddFolder ("Hits", "MonteCarlo hits"); AddDetectors (event_mc_hits); TFolder *event = run->AddFolder ("Event", "Event folders"); event->Add (new TNamed ("Header", "AliEventHeader")); TFolder *event_digits = event->AddFolder ("Digits", "Detector raw data"); AddDetectors (event_digits); TFolder *event_rec = event->AddFolder ("RecData", "Detectors reconstucted data"); AddDetectors (event_rec); TFolder *central = event_rec->AddFolder ("CentralTracker", "ITS+TPC common tracking"); TFolder *central_its = central->AddFolder ("ITS", "ITS tracks"); TClonesArray *itsTracks = new TClonesArray ("TNamed"); itsTracks->SetName ("ItsTracks"); central_its->Add (itsTracks); AddClones (100, itsTracks, "ItsLocalTrack"); TFolder *central_tpc = central->AddFolder ("TPC", "TPC tracks"); TClonesArray *tpcTracks = new TClonesArray ("TNamed"); tpcTracks->SetName ("TPCTracks"); central_tpc->Add (tpcTracks); AddClones (100, tpcTracks, "TPCLocalTrack"); TClonesArray *centralTracks = new TClonesArray ("TNamed"); centralTracks->SetName ("CentralTracks"); central->Add (centralTracks); AddClones (100, centralTracks, "CentralGlobalTrack"); // TFolder *simulation = aliroot->AddFolder("Simulation","AliRoot simulation tasks"); // TFolder *reconstruction = aliroot->AddFolder("Reconstruction","AliRoot reconstruction tasks"); new TBrowser (); }