SND@LHC Software
Loading...
Searching...
No Matches
Monitor.TrackSelector Class Reference

Public Member Functions

 __init__ (self, options)
 
 ExecuteEvent (self, event)
 
 Execute (self)
 
 Finalize (self)
 

Public Attributes

 options
 
 EventNumber
 
 MonteCarlo
 
 snd_geo
 
 MuFilter
 
 Scifi
 
 runNr
 
 run
 
 muon_reco_task_Sf
 
 genfitTrack
 
 muon_reco_task_DS
 
 trackTask
 
 outFile
 
 fSink
 
 outTree
 
 fittedTracks
 
 MuonTracksBranch
 
 clusScifi
 
 clusScifiBranch
 
 clusMufi
 
 clusMufiBranch
 
 eventTree
 
 OT
 

Detailed Description

Definition at line 689 of file Monitor.py.

Constructor & Destructor Documentation

◆ __init__()

Monitor.TrackSelector.__init__ (   self,
  options 
)

Definition at line 691 of file Monitor.py.

691 def __init__(self,options):
692 self.options = options
693 self.EventNumber = -1
694 self.MonteCarlo = False
695
696 path = options.path
697 if path.find('eos')>0:
698 path = options.server+options.path
699# setup geometry
700 if (options.geoFile).find('../')<0: self.snd_geo = SndlhcGeo.GeoInterface(path+options.geoFile)
701 else: self.snd_geo = SndlhcGeo.GeoInterface(options.geoFile[3:])
702 self.MuFilter = self.snd_geo.modules['MuFilter']
703 self.Scifi = self.snd_geo.modules['Scifi']
704
705 self.runNr = str(options.runNumber).zfill(6)
706 if options.runNumber > 0:
707 if options.partition < 0:
708 partitions = []
709 if path.find('eos')>0:
710# check for partitions
711 print("xrdfs "+options.server+" ls "+options.path+"run_"+self.runNr)
712 dirlist = str( subprocess.check_output("xrdfs "+options.server+" ls "+options.path+"run_"+self.runNr,shell=True) )
713 for x in dirlist.split('\\n'):
714 ix = x.find('sndsw_raw-')
715 if ix<0: continue
716 partitions.append(x[ix:])
717 else:
718# check for partitions
719 dirlist = os.listdir(options.path+"run_"+self.runNr)
720 for x in dirlist:
721 if not x.find("sndsw_raw-")<0:
722 partitions.append(x)
723 else:
724 partitions = ["sndsw_raw-"+ str(options.partition).zfill(4)+".root"]
725 eventChain = ROOT.TChain('rawConv')
726 for p in partitions:
727 eventChain.Add(path+'run_'+self.runNr+'/'+p)
728 else:
729# for MC data
730 eventChain = ROOT.TChain("cbmsim")
731 eventChain.Add(options.fname)
732 self.MonteCarlo = True
733 partitions = []
734 rc = eventChain.GetEvent(0)
735 self.snd_geo.modules['Scifi'].InitEvent(eventChain.EventHeader)
736 self.snd_geo.modules['MuFilter'].InitEvent(eventChain.EventHeader)
737# start FairRunAna
738 self.run = ROOT.FairRunAna()
739 ioman = ROOT.FairRootManager.Instance()
740 ioman.SetTreeName(eventChain.GetName())
741 source = ROOT.FairFileSource(eventChain.GetCurrentFile())
742 ioman.SetInChain(eventChain)
743 first = True
744 for p in partitions:
745 if first:
746 first = False
747 continue
748 source.AddFile(path+'run_'+self.runNr+'/'+p+'.root')
749 self.run.SetSource(source)
750
751#avoiding some error messages
752 xrdb = ROOT.FairRuntimeDb.instance()
753 xrdb.getContainer("FairBaseParSet").setStatic()
754 xrdb.getContainer("FairGeoParSet").setStatic()
755
756# init() tracking tasks
757 if self.options.HoughTracking:
758 if self.options.trackType == 'Scifi' or self.options.trackType == 'ScifiDS':
759 self.muon_reco_task_Sf = options.FairTasks["houghTransform_Sf"]
760 self.muon_reco_task_Sf.Init()
761 self.genfitTrack = self.muon_reco_task_Sf.genfitTrack
762 if self.options.trackType == 'DS' or self.options.trackType == 'ScifiDS':
763 self.muon_reco_task_DS = options.FairTasks["houghTransform_DS"]
764 self.muon_reco_task_DS.Init()
765 self.genfitTrack = self.muon_reco_task_DS.genfitTrack
766 if self.options.simpleTracking:
767 self.trackTask = options.FairTasks["simpleTracking"]
768 if not self.options.HoughTracking:
769 self.genfitTrack = self.options.genfitTrack
770
771 self.trackTask.SetTrackClassType(self.genfitTrack)
772 self.trackTask.Init()
773
774# prepare output tree, same branches as input plus track(s)
775 self.outFile = ROOT.TFile(options.oname,'RECREATE')
776 self.fSink = ROOT.FairRootFileSink(self.outFile)
777
778 self.outTree = eventChain.CloneTree(0)
779 ROOT.gDirectory.pwd()
780
781 # after track tasks init(), output track format is known
782 if self.genfitTrack:
783 self.fittedTracks = ROOT.TClonesArray("genfit::Track")
784 self.fittedTracks.BypassStreamer(ROOT.kFALSE)
785 else:
786 self.fittedTracks = ROOT.TClonesArray("sndRecoTrack")
787 self.MuonTracksBranch = self.outTree.Branch("Reco_MuonTracks",self.fittedTracks,32000,0)
788
789 if self.options.simpleTracking and not self.options.trackType.find('Scifi')<0 and not eventChain.GetBranch("Cluster_Scifi"):
790 self.clusScifi = ROOT.TClonesArray("sndCluster")
791 self.clusScifiBranch = self.outTree.Branch("Cluster_Scifi",self.clusScifi,32000,1)
792 if self.options.simpleTracking and not self.options.trackType.find('DS')<0 and not eventChain.GetBranch("Cluster_Mufi"):
793 self.clusMufi = ROOT.TClonesArray("sndCluster")
794 self.clusMufiBranch = self.outTree.Branch("Cluster_Mufi",self.clusMufi,32000,1)
795
796 B = ROOT.TList()
797 B.SetName('BranchList')
798 B.Add(ROOT.TObjString('Reco_MuonTracks'))
799 B.Add(ROOT.TObjString('Scifi_sndCluster'))
800 B.Add(ROOT.TObjString('Mufi_sndCluster'))
801 B.Add(ROOT.TObjString('sndScifiHit'))
802 B.Add(ROOT.TObjString('MuFilterHit'))
803 B.Add(ROOT.TObjString('FairEventHeader'))
804 self.fSink.WriteObject(B,"BranchList", ROOT.TObject.kSingleKey)
805 self.fSink.SetRunId(options.runNumber)
806 self.fSink.SetOutTree(self.outTree)
807
808 self.eventTree = eventChain
809 self.run.SetSink(self.fSink)
810 self.OT = ioman.GetSink().GetOutTree()
811

Member Function Documentation

◆ Execute()

Monitor.TrackSelector.Execute (   self)

Definition at line 849 of file Monitor.py.

849 def Execute(self):
850 for n in range(self.options.nStart,self.options.nStart+self.options.nEvents):
851
852 if self.options.scaleFactor > 1:
853 if ROOT.gRandom.Rndm() > 1.0/self.options.scaleFactor: continue
854
855 self.eventTree.GetEvent(n)
856 # delete track containers
857 self.fittedTracks.Delete()
858
859 self.ExecuteEvent(self.eventTree)
860 if not self.MonteCarlo and self.fittedTracks.GetEntries() == 0: continue
861 if self.options.simpleTracking and not self.options.trackType.find('Scifi')<0:
862 if not self.eventTree.GetBranch("Cluster_Scifi"):
863 self.clusScifi.Delete()
864 self.clusScifi.Expand(len(self.trackTask.clusScifi))
865 for index, aCl in enumerate(self.trackTask.clusScifi):
866 self.clusScifi[index] = aCl
867 if self.options.simpleTracking and not self.options.trackType.find('DS')<0:
868 if not self.eventTree.GetBranch("Cluster_Mufi"):
869 self.clusMufi.Delete()
870 self.clusMufi.Expand(len(self.trackTask.clusMufi))
871 for index, aCl in enumerate(self.trackTask.clusMufi):
872 self.clusMufi[index] = aCl
873
874 # if using FairEventHeader, i.e. before sndlhc header was introduced
875 if hasattr(self.OT.EventHeader, "SetMCEntryNumber"):
876 self.OT.EventHeader.SetMCEntryNumber(n)
877 self.fSink.Fill()
878

◆ ExecuteEvent()

Monitor.TrackSelector.ExecuteEvent (   self,
  event 
)

Definition at line 812 of file Monitor.py.

812 def ExecuteEvent(self,event):
813 track_container_list = []
814 # Delete SndlhcTracking fitted tracks container
815 if self.options.simpleTracking:
816 self.trackTask.fittedTracks.Delete()
817
818 if self.options.trackType == 'ScifiDS':
819 if self.options.HoughTracking:
820 self.muon_reco_task_Sf.Exec(0)
821 self.muon_reco_task_DS.Exec(0)
822 track_container_list = [self.muon_reco_task_Sf.kalman_tracks,self.muon_reco_task_DS.kalman_tracks]
823 if self.options.simpleTracking:
824 self.trackTask.ExecuteTask(option='ScifiDS')
825 track_container_list.append(self.trackTask.fittedTracks)
826
827 elif self.options.trackType == 'Scifi':
828 if self.options.HoughTracking:
829 self.muon_reco_task_Sf.Exec(0)
830 track_container_list.append(self.muon_reco_task_Sf.kalman_tracks)
831 if self.options.simpleTracking:
832 self.trackTask.ExecuteTask(option='Scifi')
833 track_container_list.append(self.trackTask.fittedTracks)
834
835 elif self.options.trackType == 'DS':
836 if self.options.HoughTracking:
837 self.muon_reco_task_DS.Exec(0)
838 track_container_list.append(self.muon_reco_task_DS.kalman_tracks)
839 if self.options.simpleTracking:
840 self.trackTask.ExecuteTask(option='DS')
841 track_container_list.append(self.trackTask.fittedTracks)
842
843 i_muon = -1
844 for item in track_container_list:
845 for aTrack in item:
846 i_muon += 1
847 self.fittedTracks[i_muon] = aTrack
848

◆ Finalize()

Monitor.TrackSelector.Finalize (   self)

Definition at line 879 of file Monitor.py.

879 def Finalize(self):
880 self.fSink.Write()
881 self.outFile.Close()

Member Data Documentation

◆ clusMufi

Monitor.TrackSelector.clusMufi

Definition at line 793 of file Monitor.py.

◆ clusMufiBranch

Monitor.TrackSelector.clusMufiBranch

Definition at line 794 of file Monitor.py.

◆ clusScifi

Monitor.TrackSelector.clusScifi

Definition at line 790 of file Monitor.py.

◆ clusScifiBranch

Monitor.TrackSelector.clusScifiBranch

Definition at line 791 of file Monitor.py.

◆ EventNumber

Monitor.TrackSelector.EventNumber

Definition at line 693 of file Monitor.py.

◆ eventTree

Monitor.TrackSelector.eventTree

Definition at line 808 of file Monitor.py.

◆ fittedTracks

Monitor.TrackSelector.fittedTracks

Definition at line 783 of file Monitor.py.

◆ fSink

Monitor.TrackSelector.fSink

Definition at line 776 of file Monitor.py.

◆ genfitTrack

Monitor.TrackSelector.genfitTrack

Definition at line 761 of file Monitor.py.

◆ MonteCarlo

Monitor.TrackSelector.MonteCarlo

Definition at line 694 of file Monitor.py.

◆ MuFilter

Monitor.TrackSelector.MuFilter

Definition at line 702 of file Monitor.py.

◆ muon_reco_task_DS

Monitor.TrackSelector.muon_reco_task_DS

Definition at line 763 of file Monitor.py.

◆ muon_reco_task_Sf

Monitor.TrackSelector.muon_reco_task_Sf

Definition at line 759 of file Monitor.py.

◆ MuonTracksBranch

Monitor.TrackSelector.MuonTracksBranch

Definition at line 787 of file Monitor.py.

◆ options

Monitor.TrackSelector.options

Definition at line 692 of file Monitor.py.

◆ OT

Monitor.TrackSelector.OT

Definition at line 810 of file Monitor.py.

◆ outFile

Monitor.TrackSelector.outFile

Definition at line 775 of file Monitor.py.

◆ outTree

Monitor.TrackSelector.outTree

Definition at line 778 of file Monitor.py.

◆ run

Monitor.TrackSelector.run

Definition at line 738 of file Monitor.py.

◆ runNr

Monitor.TrackSelector.runNr

Definition at line 705 of file Monitor.py.

◆ Scifi

Monitor.TrackSelector.Scifi

Definition at line 703 of file Monitor.py.

◆ snd_geo

Monitor.TrackSelector.snd_geo

Definition at line 700 of file Monitor.py.

◆ trackTask

Monitor.TrackSelector.trackTask

Definition at line 767 of file Monitor.py.


The documentation for this class was generated from the following file: