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 693 of file Monitor.py.

Constructor & Destructor Documentation

◆ __init__()

Monitor.TrackSelector.__init__ (   self,
  options 
)

Definition at line 695 of file Monitor.py.

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

Member Function Documentation

◆ Execute()

Monitor.TrackSelector.Execute (   self)

Definition at line 853 of file Monitor.py.

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

◆ ExecuteEvent()

Monitor.TrackSelector.ExecuteEvent (   self,
  event 
)

Definition at line 816 of file Monitor.py.

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

◆ Finalize()

Monitor.TrackSelector.Finalize (   self)

Definition at line 883 of file Monitor.py.

883 def Finalize(self):
884 self.fSink.Write()
885 self.outFile.Close()

Member Data Documentation

◆ clusMufi

Monitor.TrackSelector.clusMufi

Definition at line 797 of file Monitor.py.

◆ clusMufiBranch

Monitor.TrackSelector.clusMufiBranch

Definition at line 798 of file Monitor.py.

◆ clusScifi

Monitor.TrackSelector.clusScifi

Definition at line 794 of file Monitor.py.

◆ clusScifiBranch

Monitor.TrackSelector.clusScifiBranch

Definition at line 795 of file Monitor.py.

◆ EventNumber

Monitor.TrackSelector.EventNumber

Definition at line 697 of file Monitor.py.

◆ eventTree

Monitor.TrackSelector.eventTree

Definition at line 812 of file Monitor.py.

◆ fittedTracks

Monitor.TrackSelector.fittedTracks

Definition at line 787 of file Monitor.py.

◆ fSink

Monitor.TrackSelector.fSink

Definition at line 780 of file Monitor.py.

◆ genfitTrack

Monitor.TrackSelector.genfitTrack

Definition at line 765 of file Monitor.py.

◆ MonteCarlo

Monitor.TrackSelector.MonteCarlo

Definition at line 698 of file Monitor.py.

◆ MuFilter

Monitor.TrackSelector.MuFilter

Definition at line 706 of file Monitor.py.

◆ muon_reco_task_DS

Monitor.TrackSelector.muon_reco_task_DS

Definition at line 767 of file Monitor.py.

◆ muon_reco_task_Sf

Monitor.TrackSelector.muon_reco_task_Sf

Definition at line 763 of file Monitor.py.

◆ MuonTracksBranch

Monitor.TrackSelector.MuonTracksBranch

Definition at line 791 of file Monitor.py.

◆ options

Monitor.TrackSelector.options

Definition at line 696 of file Monitor.py.

◆ OT

Monitor.TrackSelector.OT

Definition at line 814 of file Monitor.py.

◆ outFile

Monitor.TrackSelector.outFile

Definition at line 779 of file Monitor.py.

◆ outTree

Monitor.TrackSelector.outTree

Definition at line 782 of file Monitor.py.

◆ run

Monitor.TrackSelector.run

Definition at line 742 of file Monitor.py.

◆ runNr

Monitor.TrackSelector.runNr

Definition at line 709 of file Monitor.py.

◆ Scifi

Monitor.TrackSelector.Scifi

Definition at line 707 of file Monitor.py.

◆ snd_geo

Monitor.TrackSelector.snd_geo

Definition at line 704 of file Monitor.py.

◆ trackTask

Monitor.TrackSelector.trackTask

Definition at line 771 of file Monitor.py.


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