| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

In This Package:

chkIBD::AdPerformance::plotIbdBasics Class Reference

Inheritance diagram for chkIBD::AdPerformance::plotIbdBasics:
[legend]
Collaboration diagram for chkIBD::AdPerformance::plotIbdBasics:
[legend]
List of all members.

Public Member Functions

def __init__
def initialize
def execute
def finalize

Public Attributes

 target_de_name
 gds_de_name
 lso_de_name
 coorSvc
 statsSvc
 outputstat
 counter
 hist

Detailed Description

Definition at line 25 of file AdPerformance.py.


Member Function Documentation

def chkIBD::AdPerformance::plotIbdBasics::__init__ (   self,
  name 
)

Definition at line 27 of file AdPerformance.py.

00027                            :
00028         GaudiAlgo.__init__(self,name)
00029 
00030         return
00031     
    def initialize(self):

def chkIBD::AdPerformance::plotIbdBasics::initialize (   self  ) 

Definition at line 32 of file AdPerformance.py.

00032                         :
00033         print "Initializing the IBD basic ploter", self.name()
00034         status = GaudiAlgo.initialize(self)
00035         if status.isFailure(): return status
00036 
00037         self.target_de_name = '/dd/Structure/AD/db-ade1/db-sst1/db-oil1'
00038         self.gds_de_name = '/dd/Structure/AD/db-gds1'
00039         self.lso_de_name = '/dd/Structure/AD/db-lso1'
00040 
00041         # What services do you need?
00042         self.coorSvc = self.svc('ICoordSysSvc', 'CoordSysSvc')
00043         if not self.coorSvc:
00044             print 'Failed to get CoordSysSvc'
00045             return FAILURE
00046         
00047         self.statsSvc = self.svc('IStatisticsSvc','StatisticsSvc')
00048         if self.statsSvc == None:
00049             self.error("Failed to initialize IStat service.")
00050             return FAILURE        
00051 
00052         # output file
00053         self.outputstat = open('IbdStat.txt', 'w')
00054         
00055         # Counters
00056         self.counter = {}
00057         self.counter["nInGdLS"] = 0.
00058         
00059         self.counter["nInIAV"] = 0.
00060         self.counter["nInLSO"] = 0.
00061         self.counter["nInOAV"] = 0.
00062         self.counter["nInMO"] = 0.
00063         
00064         
00065         self.counter["nCap"] = 0.
00066         self.counter["nGen"] = 0.
00067         
00068         self.counter["SpillIn_onGd"] = 0.
00069         self.counter["LSSpillIn_onGd"] = 0.
00070         self.counter["IavSpillIn_onGd"] = 0.
00071         self.counter["SpillOut"] = 0.
00072         self.counter["OilSpillIn_onH"] = 0.
00073         self.counter["OavSpillIn_onH"] = 0.
00074         self.counter["SpillOut_onH"] = 0.
00075         
00076         self.counter["onGdCap"] = 0.           # total on-Gd cap
00077         self.counter["onGdGdsCap"] = 0.        # total on-Gd cap in GDS
00078 
00079         # Add ratios of capture target in GdLS, Liang Zhan 
00080         ###########################################################
00081         self.counter["onHCapGds"] = 0.        # total on-H cap in GDS
00082         self.counter["onCCapGds"] = 0.        # total on-C cap in GDS
00083         self.counter["onOtherCapGds"] = 0.        # total other cap in GDS
00084         ###########################################################
00085 
00086         # Add coincidence time cut, Liang Zhan
00087         ################################################
00088         self.counter["nGdsCapTime"] = 0.
00089         self.counter["nGdsCapTimePassCut"] = 0.
00090         self.counter["nGdsCapTimeL"] = 0.
00091         self.counter["nGdsCapTimeUncertainL"] = 0.
00092         self.counter["nGdsCapTimeH"] = 0.
00093         self.counter["nGdsCapTimeUncertainH"] = 0.
00094 
00095         self.counter["nLSCapTime"] = 0.
00096         self.counter["nLSCapTimePassCut"] = 0.
00097         self.counter["nLSCapTimeL"] = 0.
00098         self.counter["nLSCapTimeUncertainL"] = 0.
00099         self.counter["nLSCapTimeH"] = 0.
00100         self.counter["nLSCapTimeUncertainH"] = 0.
00101         ################################################
00102         
00103         self.counter["onGdCapPassCut"] = 0.    # total on-Gd cap pass Gd cut
00104         self.counter["onGdGdsCapPassCut"] = 0. # total on-Gd cap in GDS pass Gd cut
00105         self.counter["onGdGdsCapPassEdepCut"] = 0. # total on-Gd cap in GDS pass Gd cut (6 MeV true deposit energy)
00106         self.counter["nPassGdCut"] = 0.        # total pass Gd cut
00107 
00108         self.counter["GdCapDetEff"] = 0.
00109         self.counter["GdCapDetEffUncertain"] = 0.
00110 
00111         self.counter["onGdCapCutUncertain"] = 0.     
00112         self.counter["nGdCutUncertain"] = 0.
00113         self.counter["onGdGdsCapCutUncertain"] = 0.
00114 
00115         self.counter["positronPassCut"] = 0.
00116         self.counter["positronCutUncertain"] = 0.
00117         
00118         self.counter["nonGdPassGdCut"] = 0.
00119 
00120         self.counter["onHCap"] = 0.
00121         self.counter["onHCapWithinLS"] = 0.
00122         self.counter["onHCapWithinLSPassCut"] = 0.
00123         self.counter["onHCapWithinLSCutUncertainL"] = 0.
00124         self.counter["onHCapWithinLSCutUncertainU"] = 0.
00125 
00126         self.counter["HCapDetEff"] = 0.
00127         self.counter["HCapDetEffUncertainL"] = 0.
00128         self.counter["HCapDetEffUncertainU"] = 0.
00129 
00130         self.counter["HCapCanoDetEff"] = 0.
00131         self.counter["HCapCanoDetEffUncertainL"] = 0.
00132         self.counter["HCapCanoDetEffUncertainU"] = 0.
00133 
00134         self.counter["HCapDetContamination"] = 0.
00135         self.counter["HCapDetEffContaminationUncertainL"] = 0.
00136         self.counter["HCapDetEffContaminationUncertainU"] = 0.
00137 
00138         self.counter["nonHCapWithinLSPassHCut"] = 0.
00139         self.counter["nonHCapWithinLSHCutUncertainL"] = 0.
00140         self.counter["nonHCapWithinLSHCutUncertainU"] = 0.
00141 
00142         self.counter["onHCapBeyondLS"] = 0.
00143         self.counter["onHCapBeyondLSPassCut"] = 0.
00144         self.counter["onHCapBeyondLSCutUncertainL"] = 0.
00145         self.counter["onHCapBeyondLSCutUncertainU"] = 0.
00146 
00147         self.counter["nonHCapBeyondLSPassHCut"] = 0.
00148         self.counter["nonHCapBeyondLSHCutUncertainL"] = 0.
00149         self.counter["nonHCapBeyondLSHCutUncertainU"] = 0.
00150 
00151         self.counter["onHCapOavMoPassCut"] = 0.
00152         self.counter["onHCapOavMoCutUncertainL"] = 0.
00153         self.counter["onHCapOavMoCutUncertainU"] = 0.
00154         self.counter["onHCapLS"] = 0.
00155         self.counter["onHCapMO"] = 0.
00156         self.counter["onHCapOAV"] = 0.
00157         
00158         self.counter["onHCapPassCut"] = 0.
00159         self.counter["onHCapCutUncertainL"] = 0.
00160         self.counter["onHCapCutUncertainU"] = 0.
00161         
00162         self.counter["nPassHCut"] = 0.
00163         self.counter["nHCutUncertainL"] = 0.
00164         self.counter["nHCutUncertainU"] = 0.
00165 
00166         self.counter["nGdPassHCut"] = 0.
00167         self.counter["nGdHCutUncertainL"] = 0.
00168         self.counter["nGdHCutUncertainU"] = 0.
00169 
00170         # Histograms
00171         self.hist = {}
00172         
00173         self.hist["genRZ"] = TH2F("genRZ", "Generation Vertex R-Z",
00174                                   100, 0.0, 6.190144, 100, -2.48, 2.48)
00175         status = self.statsSvc.put('/file1/basics/genRZ', 
00176                                       self.hist["genRZ"])
00177         if status.isFailure(): return status
00178         
00179         self.hist["genXY"] = TH2F("genXY", "Generation Vertex X-Y", 
00180                                   100, -2.48, 2.48, 100, -2.48, 2.48)
00181         status = self.statsSvc.put('/file1/basics/genXY', 
00182                                       self.hist["genXY"])
00183         if status.isFailure(): return status
00184         
00185         self.hist["HitTime"] = TH1F("HitTime", "Hit Time [#mus]",
00186                                     10000, 0.0, 10.0)
00187         status = self.statsSvc.put('/file1/basics/HitTime', 
00188                                       self.hist["HitTime"])
00189         if status.isFailure(): return status
00190 
00191         self.hist["LongHitTime"] = TH1F("LongHitTime", "Hit Time [#mus]",
00192                                         2000, 0.0, 2000.)
00193         status = self.statsSvc.put('/file1/basics/LongHitTime', 
00194                                       self.hist["LongHitTime"])
00195         if status.isFailure(): return status
00196 
00197         self.hist["GdCapHitTime"] = TH1F("GdCapHitTime",
00198                                          "Gd n-Capture Hit Time [#mus]",
00199                                          2000, 0.0, 2000)
00200         status = self.statsSvc.put('/file1/basics/GdCapHitTime', 
00201                                       self.hist["GdCapHitTime"])
00202         if status.isFailure(): return status
00203         
00204         self.hist["HCapHitTime"] = TH1F("HCapHitTime",
00205                                         "H n-Capture Hit Time [#mus]",
00206                                         2000, 0.0, 2000)
00207         status = self.statsSvc.put('/file1/basics/HCapHitTime', 
00208                                       self.hist["HCapHitTime"])
00209         if status.isFailure(): return status
00210       
00211         
00212         self.hist["hCapTarget"] = TH1F("hCapTarget",
00213                                         "n-Capture Target-Z",
00214                                         100, 0, 100)
00215         status = self.statsSvc.put('/file1/basics/hCapTarget', 
00216                                       self.hist["hCapTarget"])
00217         if status.isFailure(): return status
00218         
00219         # Add time response, Liang Zhan
00220         #################################################################
00221         self.hist["event_span_time"] = TH1F("event_span_time",
00222                                             "Hit span time for one event [ns]",
00223                                             500, 0, 500)
00224         status = self.statsSvc.put('/file1/basics/event_span_time', 
00225                                       self.hist["event_span_time"])
00226         if status.isFailure(): return status
00227         self.hist["pmt_span_time"] = TH1F("pmt_span_time",
00228                                             "Hit span time for one pmt [ns]",
00229                                             500, 0, 500)
00230         status = self.statsSvc.put('/file1/basics/pmt_span_time', 
00231                                       self.hist["pmt_span_time"])
00232         if status.isFailure(): return status
00233         self.hist["pmt_hit_time"] = TH1F("pmt_hit_time",
00234                                             "pmt first hit time [ns]",
00235                                             500, 0, 500)
00236         status = self.statsSvc.put('/file1/basics/pmt_hit_time', 
00237                                       self.hist["pmt_hit_time"])
00238         if status.isFailure(): return status
00239         #################################################################
00240         
00241         self.hist["pe_E"] = TH2F("pe_E", "PE vs visible E (e+ within GdLS)",
00242                                  100, 0, 10, 700, 0, 1400)
00243         status = self.statsSvc.put('/file1/basics/pe_E', 
00244                                       self.hist["pe_E"])
00245         if status.isFailure(): return status
00246         
00247         self.hist["pe_E_inLS"] = TH2F("pe_E_inLS",
00248                                       "PE vs visible E (e+ within LS)", 
00249                                       100, 0, 10, 700, 0, 1400)
00250         status = self.statsSvc.put('/file1/basics/pe_E_inLS', 
00251                                       self.hist["pe_E_inLS"])
00252         if status.isFailure(): return status
00253 
00254         self.hist["pe_E_LS"] = TH2F("pe_E_LS",
00255                                     "PE vs visible E (e+ in LS)",
00256                                     100, 0, 10, 700, 0, 1400)
00257         status = self.statsSvc.put('/file1/basics/pe_E_LS', 
00258                                       self.hist["pe_E_LS"])
00259         if status.isFailure(): return status
00260 
00261         self.hist["pe_E_all"] = TH2F("pe_E_all", "PE vs visible E (all e+)",
00262                                      100, 0, 10, 700, 0, 1400)
00263         status = self.statsSvc.put('/file1/basics/pe_E_all', 
00264                                       self.hist["pe_E_all"])
00265         if status.isFailure(): return status
00266         
00267         # Add response on position, Liang Zhan
00268         #############################################################
00269         self.hist["pe_yield_R2"] = TH2F("pe_yield_R2", "PE/Evis vs. R2",
00270                                         620, 0, 6.190144, 300, 0, 300) 
00271         status = self.statsSvc.put('/file1/basics/pe_yield_R2', 
00272                                       self.hist["pe_yield_R2"])
00273         if status.isFailure(): return status
00274         self.hist["pe_yield_Z"] = TH2F("pe_yield_Z", "PE/Evis vs. Z",
00275                                         200, -2.5, 2.5, 300, 0, 300) 
00276         status = self.statsSvc.put('/file1/basics/pe_yield_Z', 
00277                                       self.hist["pe_yield_Z"])
00278         if status.isFailure(): return status
00279         self.hist["pe_yield_RZ"] = TH3F("pe_yield_RZ", "PE/Evis vs. RZ",
00280                                        4, 0, 1.55, 8, -1.55, 1.55, 300, 0, 300) 
00281         status = self.statsSvc.put('/file1/basics/pe_yield_RZ', 
00282                                       self.hist["pe_yield_RZ"])
00283         if status.isFailure(): return status
00284         #############################################################
00285         
00286         self.hist["nHits_LS"] = TH1F("nHits_LS", 
00287                                      "nCap Hits in LS",
00288                                      700, 0, 1400)
00289         status = self.statsSvc.put('/file1/basics/nHits_LS', 
00290                                       self.hist["nHits_LS"])
00291         if status.isFailure(): return status
00292         
00293         self.hist["nHits_MO"] = TH1F("nHits_MO", 
00294                                      "nCap Hits in MO",
00295                                      700, 0, 1400)
00296         status = self.statsSvc.put('/file1/basics/nHits_MO', 
00297                                       self.hist["nHits_MO"])
00298         if status.isFailure(): return status
00299         
00300         self.hist["nHits_onGd"] = TH1F("nHits_onGd",
00301                                        "on-Gd nCap Hits",
00302                                        700, 0, 1400)
00303         status = self.statsSvc.put('/file1/basics/nHits_onGd', 
00304                                       self.hist["nHits_onGd"])
00305         if status.isFailure(): return status
00306         
00307         self.hist["nHits_onH"] = TH1F("nHits_onH", 
00308                                       "on-H nCap Hits", 
00309                                       700, 0, 1400)
00310         status = self.statsSvc.put('/file1/basics/nHits_onH', 
00311                                       self.hist["nHits_onH"])
00312         if status.isFailure(): return status
00313         
00314         self.hist["nHits"] = TH1F("nHits", "Neutron Capture Hits in GdLS",
00315                                   700, 0, 1400)
00316         status = self.statsSvc.put('/file1/basics/nHits', 
00317                                       self.hist["nHits"])
00318         if status.isFailure(): return status
00319         
00320         self.hist["nHits_all"] = TH1F("nHits_all", "Neutron Capture Hits",
00321                                   700, 0, 1400)
00322         status = self.statsSvc.put('/file1/basics/nHits_all', 
00323                                       self.hist["nHits_all"])
00324         if status.isFailure(): return status
00325 
00326         self.hist["nGdCapGenPos"] = TH1F("nGdCapGenPos",
00327                                          "Neutron Gd Capture Generation Position",
00328                                          620, 0, 6.190144)
00329         status = self.statsSvc.put('/file1/basics/nGdCapGenPos',
00330                                       self.hist["nGdCapGenPos"])
00331         if status.isFailure(): return status
00332         
00333         self.hist["nGdGdsCapGenPos"] = TH1F("nGdGdsCapGenPos",
00334                                             "Neutron Gd Capture in Gds Generation Position",
00335                                             620, 0, 6.190144)
00336         status = self.statsSvc.put('/file1/basics/nGdGdsCapGenPos',
00337                                       self.hist["nGdGdsCapGenPos"])
00338         if status.isFailure(): return status
00339         
00340         self.hist["nGdCapPos"] = TH3F("nGdCapPos",
00341                                       "Neutron Gd Capture Position",
00342                                       100, -2.5, 2.5,
00343                                       100, -2.5, 2.5,
00344                                       100, -2.5, 2.5)
00345         status = self.statsSvc.put('/file1/basics/nGdCapPos',
00346                                       self.hist["nGdCapPos"])
00347         if status.isFailure(): return status
00348 
00349         self.hist["nGdCapOilPos"] = TH3F("nGdCapOilPos",
00350                                          "Neutron Gd Capture beyond GdLS Position",
00351                                          100, -2.5, 2.5,
00352                                          100, -2.5, 2.5,
00353                                          100, -2.5, 2.5)
00354         status = self.statsSvc.put('/file1/basics/nGdCapOilPos',
00355                                       self.hist["nGdCapOilPos"])
00356         if status.isFailure(): return status
00357 
00358         self.hist["nGdCapOilPos_RZ"] = TH2F("nGdCapOilPos_RZ",
00359                                             "Gd Cap beyond GdLS R-Z",
00360                                             100, 0.0, 6.25,
00361                                             100, -2.5, 2.5)
00362         status = self.statsSvc.put('/file1/basics/nGdCapOilPos_RZ',
00363                                       self.hist["nGdCapOilPos_RZ"])
00364         if status.isFailure(): return status
00365 
00366         # Add Gd and H capture position, Liang Zhan.
00367         ##########################################################
00368         self.hist["nGdGdsCapPos_R"] = TH1F("nGdGdsCapPos_R",
00369                                            "Gd Cap R^{2} position in GdLS",
00370                                            620, 0, 6.190144)
00371         status = self.statsSvc.put('/file1/basics/nGdGdsCapPos_R',
00372                                       self.hist["nGdGdsCapPos_R"])
00373         if status.isFailure(): return status
00374 
00375         self.hist["nHCapPos_R"] = TH1F("nHCapPos_R",
00376                                            "H Cap R^{2} position",
00377                                            620, 0, 6.190144)
00378         status = self.statsSvc.put('/file1/basics/nHCapPos_R',
00379                                       self.hist["nHCapPos_R"])
00380         if status.isFailure(): return status
00381         ##########################################################
00382 
00383         self.hist["nHCapGenPos"] = TH1F("nHCapGenPos",
00384                                         "Neutron H Capture Generation Position",
00385                                         620, 0, 6.190144)
00386         status = self.statsSvc.put('/file1/basics/nHCapGenPos',
00387                                       self.hist["nHCapGenPos"])
00388         if status.isFailure(): return status
00389 
00390 
00391         self.hist["nHOilCapGenPos"] = TH1F("nHOilCapGenPos",
00392                                            "Neutron H Capture Generation Position",
00393                                            620, 0, 6.190144)
00394         status = self.statsSvc.put('/file1/basics/nHOilCapGenPos',
00395                                       self.hist["nHOilCapGenPos"])
00396         if status.isFailure(): return status
00397 
00398         self.hist["nHLsoCapGenPos"] = TH1F("nHLsoCapGenPos",
00399                                            "Neutron H Capture Generation Position",
00400                                            620, 0, 6.190144)
00401         status = self.statsSvc.put('/file1/basics/nHLsoCapGenPos',
00402                                       self.hist["nHLsoCapGenPos"])
00403         if status.isFailure(): return status
00404 
00405 
00406         self.hist["eDepInGdLS"] = TH1F("eDepInGdLS", "Deposited Energy [MeV]",
00407                                        200, 0, 20)
00408         status = self.statsSvc.put('/file1/basics/eDepInGdLS', 
00409                                       self.hist["eDepInGdLS"])
00410         if status.isFailure(): return status
00411 
00412         self.hist["eDepInLS"] = TH1F("eDepInLS", "Deposited Energy [MeV]",
00413                                        200, 0, 20)
00414         status = self.statsSvc.put('/file1/basics/eDepInLS', 
00415                                       self.hist["eDepInLS"])
00416         if status.isFailure(): return status
00417 
00418         self.hist["drift_GdLS"] = TH1F("drift_GdLS",
00419                                       "Neutron Drift Distance in GdLS [cm]",
00420                                        200, 0, 50)
00421         status = self.statsSvc.put('/file1/basics/drift_GdLS', 
00422                                       self.hist["drift_GdLS"])
00423         if status.isFailure(): return status
00424 
00425         self.hist["drift_LS"] = TH1F("drift_LS",
00426                                       "Neutron Drift Distance in LS [cm]",
00427                                        200, 0, 50)
00428         status = self.statsSvc.put('/file1/basics/drift_LS', 
00429                                       self.hist["drift_LS"])
00430         if status.isFailure(): return status
00431         
00432         self.hist["time_GdLS"] = TH1F("time_GdLS",
00433                                       "Neutron Capture time in GdLS [#mus]",
00434                                        400, 0, 400)
00435         status = self.statsSvc.put('/file1/basics/time_GdLS', 
00436                                       self.hist["time_GdLS"])
00437         if status.isFailure(): return status
00438 
00439         self.hist["time_LS"] = TH1F("time_LS",
00440                                       "Neutron Capture Time in LS [#mus]",
00441                                        400, 0, 2000)
00442         status = self.statsSvc.put('/file1/basics/time_LS', 
00443                                       self.hist["time_LS"])
00444         if status.isFailure(): return status
00445 
00446         #sub-volume eff
00447         self.hist["countR"] = TH1F("countR",
00448                                    "counts in each sub-R",
00449                                    16,0, 2.4);
00450         status = self.statsSvc.put('/file1/basics/countR', 
00451                                    self.hist["countR"])
00452         if status.isFailure(): return status
00453         
00454         self.hist["countCutR"] = TH1F("countCutR",
00455                                       "counts above cut in each sub-R",
00456                                       16, 0, 2.4)
00457         status = self.statsSvc.put('/file1/basics/countCutR', 
00458                                    self.hist["countCutR"])
00459         if status.isFailure(): return status
00460         
00461         self.hist["countZ"] = TH1F("countZ",
00462                                    "counts in each sub-Z",
00463                                    16, -1.55, 1.55)
00464         status = self.statsSvc.put('/file1/basics/countZ', 
00465                                    self.hist["countZ"])
00466         if status.isFailure(): return status
00467         
00468         self.hist["countCutZ"] = TH1F("countCutZ",
00469                                       "counts above cut in each sub-Z",
00470                                       16, -1.55, 1.55)
00471         status = self.statsSvc.put('/file1/basics/countCutZ', 
00472                                    self.hist["countCutZ"])
00473         if status.isFailure(): return status
00474         
00475         self.hist["count"] = TH2F("count",
00476                                   "counts in each sub-volume",
00477                                   10, 0, 2.4, 10, -1.55, 1.55 )
00478         status = self.statsSvc.put('/file1/basics/count', 
00479                                    self.hist["count"])
00480         if status.isFailure(): return status
00481         
00482         self.hist["countCut"] = TH2F("countCut",
00483                                      "counts above cut in each sub-volume",
00484                                      10, 0, 2.4, 10, -1.55, 1.55 )
00485         status = self.statsSvc.put('/file1/basics/countCut', 
00486                                    self.hist["countCut"])
00487         if status.isFailure(): return status
00488         
00489         self.hist["countPECut"] = TH2F("countPECut",
00490                                        "counts above PE cut in each sub-volume",
00491                                        10, 0, 2.4, 10, -1.55, 1.55 )
00492         status = self.statsSvc.put('/file1/basics/countPECut', 
00493                                    self.hist["countPECut"])
00494         if status.isFailure(): return status
00495         
00496         self.hist["eff"] = TH2F("eff", "efficiency in each sub-volume",
00497                                 10, 0, 2.4, 10, -1.55, 1.55 )
00498         status = self.statsSvc.put('/file1/basics/eff', 
00499                                    self.hist["eff"])
00500         if status.isFailure(): return status        
00501 
00502         self.hist["effR"] = TH1F("effR", "efficiency in each sub-volume",
00503                                  16, 0, 2.4)
00504         status = self.statsSvc.put('/file1/basics/effR', 
00505                                    self.hist["effR"])
00506         if status.isFailure(): return status
00507         
00508         self.hist["effZ"] = TH1F("effZ", "efficiency in each sub-volume",
00509                                  16, -1.55, 1.55)
00510         
00511         status = self.statsSvc.put('/file1/basics/effZ', 
00512                                    self.hist["effZ"])
00513         if status.isFailure(): return status        
00514 
00515         #sub-volume eff H
00516         self.hist["HcountR"] = TH1F("HcountR",
00517                                     "counts in each sub-R",
00518                                     26, 0, 3.92);
00519         status = self.statsSvc.put('/file1/basics/HcountR', 
00520                                    self.hist["HcountR"])
00521         if status.isFailure(): return status
00522         
00523         self.hist["HcountCutR"] = TH1F("HcountCutR",
00524                                        "counts above cut in each sub-R",
00525                                        26, 0, 3.92)
00526         status = self.statsSvc.put('/file1/basics/HcountCutR', 
00527                                    self.hist["HcountCutR"])
00528         if status.isFailure(): return status
00529         
00530         self.hist["HcountZ"] = TH1F("HcountZ",
00531                                     "counts in each sub-Z",
00532                                     26, -1.98, 1.98)
00533         status = self.statsSvc.put('/file1/basics/HcountZ', 
00534                                    self.hist["HcountZ"])
00535         if status.isFailure(): return status
00536         
00537         self.hist["HcountCutZ"] = TH1F("HcountCutZ",
00538                                       "counts above cut in each sub-Z",
00539                                       26, -1.98, 1.98)
00540         status = self.statsSvc.put('/file1/basics/HcountCutZ', 
00541                                    self.hist["HcountCutZ"])
00542         if status.isFailure(): return status
00543         
00544         self.hist["Hcount"] = TH2F("Hcount",
00545                                    "counts in each sub-volume",
00546                                    12, 0, 3.92, 12, -1.98, 1.98)
00547         status = self.statsSvc.put('/file1/basics/Hcount', 
00548                                    self.hist["Hcount"])
00549         if status.isFailure(): return status
00550         
00551         self.hist["HcountCut"] = TH2F("HcountCut",
00552                                       "counts above cut in each sub-volume",
00553                                       12, 0, 3.92, 12, -1.98, 1.98)
00554         status = self.statsSvc.put('/file1/basics/HcountCut', 
00555                                    self.hist["HcountCut"])
00556         if status.isFailure(): return status
00557         
00558         self.hist["HcountPECut"] = TH2F("HcountPECut",
00559                                         "counts above PE cut in each sub-volume",
00560                                         12, 0, 3.92, 12, -1.98, 1.98)
00561         status = self.statsSvc.put('/file1/basics/HcountPECut', 
00562                                    self.hist["HcountPECut"])
00563         if status.isFailure(): return status
00564         
00565         return SUCCESS
00566 
    def execute(self):

def chkIBD::AdPerformance::plotIbdBasics::execute (   self  ) 

Definition at line 567 of file AdPerformance.py.

00567                      :
00568         print "Executing plotIbdBasics", self.name()
00569         evt = self.evtSvc()
00570         simhdr = evt['/Event/Sim/SimHeader']
00571 #        print "SimHeader: ", simhdr
00572         if simhdr == None:
00573             print "No SimHeader in this ReadOut. Skip."
00574             return SUCCESS
00575 
00576 #        det = self.detSvc(self.target_de_name)
00577 #        det_gds = self.detSvc(self.gds_de_name)
00578 #        det_lso = self.detSvc(self.lso_de_name)
00579 
00580         # Unobservables
00581         statshdr = simhdr.unobservableStatistics()
00582         stats = statshdr.stats()
00583 
00584         PID_trk1 = stats["pdgId_Trk1"].sum()
00585         PID_trk2 = stats["pdgId_Trk2"].sum()
00586 
00587         if PID_trk1 != -11 or PID_trk2 != 2112:
00588             print "PID of track 1 is", PID_trk1
00589             print "PID of track 2 is", PID_trk2
00590             print "Not an IBD event."
00591             return SUCCESS
00592 
00593         tGen = stats["t_Trk2"].sum()
00594         xGen = stats["x_Trk2"].sum()
00595         yGen = stats["y_Trk2"].sum()
00596         zGen = stats["z_Trk2"].sum()
00597         
00598         tCap = stats["tEnd_Trk2"].sum()
00599         xCap = stats["xEnd_Trk2"].sum()
00600         yCap = stats["yEnd_Trk2"].sum()
00601         zCap = stats["zEnd_Trk2"].sum()
00602         
00603         # Get underlying DE object
00604         de = self.getDet(self.target_de_name)
00605         if not de:
00606             print 'Failed to get DE',self.target_de_name
00607             return FAILURE
00608         
00609 #        de_lso = self.getDet(self.lso_de_name)
00610 #        de_gds = self.getDet(self.gds_de_name)
00611 #        if not de_lso:
00612 #            print 'Failed to get DE',self.lso_de_name
00613 #            return FAILURE        
00614 #        if not de_gds:
00615 #            print 'Failed to get DE',self.gds_de_name
00616 #            return FAILURE
00617         
00618         # Get the AD coordinates of the vertexes
00619         Gaudi = PyCintex.makeNamespace('Gaudi')
00620         genGlbPoint = Gaudi.XYZPoint(xGen, yGen, zGen)
00621         capGlbPoint = Gaudi.XYZPoint(xCap, yCap, zCap)
00622 #        point = de.geometry().toGlobal(point)
00623         genLclPoint = de.geometry().toLocal(genGlbPoint)
00624         capLclPoint = de.geometry().toLocal(capGlbPoint)
00625 #        genLclPointLso = de_lso.geometry().toLocal(genGlbPoint)
00626 #        capLclPointLso = de_lso.geometry().toLocal(capGlbPoint)
00627 #        genLclPointGds = de_gds.geometry().toLocal(genGlbPoint)
00628 #        capLclPointGds = de_gds.geometry().toLocal(capGlbPoint)
00629 #        print 'In global coordinate [',gpoint.x(),gpoint.y(),gpoint.z(),']'
00630 
00631         ndrift = ROOT.TVector3(xCap-xGen, yCap-yGen, zCap-zGen)
00632         
00633         capTime = tCap - tGen
00634         capDis = ndrift.Mag()
00635 
00636         R2 = genLclPoint.x()/units.meter * genLclPoint.x()/units.meter + \
00637              genLclPoint.y()/units.meter * genLclPoint.y()/units.meter
00638         
00639         R2Cap = capLclPoint.x()/units.meter * capLclPoint.x()/units.meter + \
00640                 capLclPoint.y()/units.meter * capLclPoint.y()/units.meter
00641 
00642         self.hist["genRZ"].Fill(R2, genLclPoint.z()/units.meter)
00643 
00644         self.hist["genXY"].Fill(genLclPoint.x()/units.meter,genLclPoint.y()/units.meter)
00645 
00646         # Find the interesting volumes
00647         genDE = self.coorSvc.coordSysDE(genGlbPoint)
00648         capDE = self.coorSvc.coordSysDE(capGlbPoint)
00649         if not genDE:
00650             print 'Failed to find coordinate system DE for generation'\
00651                 '[',genGlbPoint.x(),genGlbPoint.y(),genGlbPoint.z(),']'
00652             print 'Local: [',genLclPoint.x(),genLclPoint.y(),genLclPoint.z(),']'
00653             return FAILURE
00654         else:
00655             self.counter["nGen"] += 1
00656             gendmvol = genDE.geometry().belongsToPath(genGlbPoint,-1)
00657 
00658         if not capDE:
00659             print 'Failed to find coordinate system DE for capture'\
00660                 '[',capGlbPoint.x(),capGlbPoint.y(),capGlbPoint.z(),']'
00661             return FAILURE
00662         else:
00663             self.counter["nCap"] += 1
00664             capdmvol = capDE.geometry().belongsToPath(capGlbPoint,-1)
00665 
00666         genDM = re.split('/', gendmvol).pop()
00667         capDM = re.split('/', capdmvol).pop()
00668         print "Generated in ", genDM
00669         print "Captured in ", capDM
00670         
00671         positronHits = 0.
00672         neutronHits = 0.
00673         positronTimeCut = 500.
00674 
00675         # Add coincidence time cut, Liang Zhan
00676         ################################################
00677         timeCutL = 1 #mus
00678         timeCutH = 200 #mus
00679         timeCutUncertain = 0.01 #mus, 10ns
00680         ################################################
00681  
00682         positronCut = 126.2  # 1 MeV
00683         positronCutL = 123.7 # 1 MeV
00684         positronCutR = 128.7 # 1 MeV
00685 
00686 #        onHLowerCut = 194.   # 1.5 MeV
00687 #        onHLowerCutL = 190.1 # 194 (1 - 2%)
00688 #        onHLowerCutR = 197.9 # 194 (1 + 2%)
00689                 
00690 #        onHUpperCut = 453.  # 3.5 MeV
00691 #        onHUpperCutL = 443.9 # 453 (1 - 2%)
00692 #        onHUpperCutR = 462.1 # 453 (1 + 2%)
00693 
00694         onHLowerCut = 175.   # ? MeV
00695         onHLowerCutL = 171.5 # x (1 - 2%)
00696         onHLowerCutR = 178.5 # x (1 + 2%)
00697 
00698         onHUpperCut = 481.4  # 3.5 MeV
00699         onHUpperCutL = 471.8 # x (1 - 2%)
00700         onHUpperCutR = 491.0 # x (1 + 2%)
00701 
00702         onGdCut = 811.  # 6MeV
00703         onGdCutL = 802.9 # 811 (1 - 1%)
00704         onGdCutR = 819.1 # 811 (1 + 1%)
00705 
00706         # Capture target
00707         capTarget = stats["capTarget"].sum()
00708         print "The capture target is ", capTarget
00709 
00710         # Deposit energy
00711         eDepInGdLS = stats["EDepInGdLS"].sum()
00712         self.hist["eDepInGdLS"].Fill(eDepInGdLS/units.MeV)
00713         eDepInLS = stats["EDepInLS"].sum()
00714         self.hist["eDepInLS"].Fill(eDepInLS/units.MeV)
00715 
00716         # For PE hit time, Liang Zhan
00717         firstHit = {} #dictionary for PMT first hit, key is PMT id
00718         lastHit = {} #dictionary for PMT last hit, key is PMT id
00719         hitMap = {} #pmt hit map
00720         firstT = 501 # time of first hit in one event 
00721         lastT = -1 # time of last hit in one event
00722 
00723         simhits = simhdr.hits()
00724         for detector in simhits.hitDetectors():
00725             hitCollection = simhits.hitsByDetector(detector)
00726             if hitCollection == None:
00727                 print "No hits in ", detector
00728             hits = hitCollection.collection()
00729             for hit in hits:
00730 #                print " PMT", hit.sensDetId(), "hit @ time: ", hit.hitTime()
00731                 pmtId = hit.sensDetId() 
00732                 self.hist["HitTime"].Fill(hit.hitTime()/units.microsecond)
00733                 self.hist["LongHitTime"].Fill(hit.hitTime()/units.microsecond)
00734                 if hit.hitTime()/units.nanosecond<positronTimeCut and \
00735                         hit.hitTime()/units.nanosecond<capTime/units.nanosecond:
00736                     positronHits += 1
00737                     hitTime = hit.hitTime()/units.nanosecond
00738                     if hitMap.has_key(pmtId):
00739                         hitMap[pmtId] += 1
00740                     else:
00741                         hitMap[pmtId] = 1.
00742                     if firstT > hitTime:
00743                         firstT = hitTime
00744                     if lastT < hitTime:
00745                         lastT = hitTime
00746                     if not firstHit.has_key(pmtId):
00747                         firstHit[pmtId] = hitTime                     
00748                         lastHit[pmtId] = hitTime                     
00749                     else:
00750                         if firstHit[pmtId] > hitTime:
00751                             firstHit[pmtId] = hitTime   
00752                         if lastHit[pmtId] < hitTime:
00753                             lastHit[pmtId] = hitTime   
00754                 else:
00755                     neutronHits += 1.
00756                     if capTarget == 1:
00757                         self.hist["HCapHitTime"].Fill(hit.hitTime()/units.microsecond)
00758                     if capTarget == 64:
00759                         self.hist["GdCapHitTime"].Fill(hit.hitTime()/units.microsecond)
00760 
00761         # Fill time
00762         if positronHits > 1.5:  # 2 hits at least
00763             self.hist["event_span_time"].Fill(lastT-firstT)
00764         for id in firstHit.keys():
00765             self.hist["pmt_hit_time"].Fill(firstHit[id]-firstT)
00766             if hitMap[id] > 1.5:  # 2 hits at least
00767                 self.hist["pmt_span_time"].Fill(lastHit[id]-firstHit[id])
00768 
00769         # Visible energy
00770         vis_trk1 = 1.022 + stats['ke_Trk1'].sum()/units.MeV
00771         self.hist["pe_E_all"].Fill(vis_trk1, positronHits)
00772 
00773         if genLclPoint.z()/units.m < 1. and genLclPoint.z()/units.m > -1.:
00774             self.hist["pe_yield_R2"].Fill(R2, positronHits/vis_trk1)
00775         if R2 < 1.:
00776             self.hist["pe_yield_Z"].Fill(genLclPoint.z()/units.m, positronHits/vis_trk1)
00777 
00778         self.hist["nHits_all"].Fill(neutronHits)
00779 
00780         if genDM == 'db-gds1':
00781             self.counter["nInGdLS"] += 1
00782             self.hist["pe_E"].Fill(vis_trk1, positronHits)
00783             self.hist["pe_yield_RZ"].Fill(ROOT.sqrt(R2), genLclPoint.z()/units.m, positronHits/vis_trk1)
00784             if capDM == 'db-gds1':
00785                 self.hist["nHits"].Fill(neutronHits)
00786                 self.hist["drift_GdLS"].Fill(capDis/units.cm)
00787                 self.hist["time_GdLS"].Fill(capTime/units.microsecond)
00788                 self.counter["nGdsCapTime"] += 1
00789                 if(capTime/units.microsecond > timeCutL and capTime/units.microsecond < timeCutH):
00790                     self.counter["nGdsCapTimePassCut"] += 1
00791                 if(capTime/units.microsecond < timeCutL):
00792                     self.counter["nGdsCapTimeL"] += 1
00793                 if(capTime/units.microsecond > timeCutH):
00794                     self.counter["nGdsCapTimeH"] += 1
00795                 if(capTime/units.microsecond > timeCutL-timeCutUncertain/2 and capTime/units.microsecond < timeCutL+timeCutUncertain/2):
00796                     self.counter["nGdsCapTimeUncertainL"] += 1
00797                 if(capTime/units.microsecond > timeCutH-timeCutUncertain/2 and capTime/units.microsecond < timeCutH+timeCutUncertain/2):
00798                     self.counter["nGdsCapTimeUncertainH"] += 1
00799             else:
00800                 self.counter["SpillOut"] += 1
00801         
00802         if genDM != 'db-gds1':
00803             if capTarget == 64:
00804                 self.counter["SpillIn_onGd"] += 1
00805                 
00806         if genDM == 'db-iav1':
00807             self.counter["nInIAV"] += 1
00808             if capTarget == 64:
00809                 self.counter["IavSpillIn_onGd"] += 1
00810 
00811         if genDM == 'db-lso1':
00812             self.counter["nInLSO"] += 1
00813             self.hist["pe_E_LS"].Fill(vis_trk1, positronHits)
00814             if capDM == 'db-lso1':
00815                 self.hist["drift_LS"].Fill(capDis/units.cm)
00816                 self.hist["time_LS"].Fill(capTime/units.microsecond)
00817                 self.counter["nLSCapTime"] += 1
00818                 if(capTime/units.microsecond > timeCutL and capTime/units.microsecond < timeCutH):
00819                     self.counter["nLSCapTimePassCut"] += 1
00820                 if(capTime/units.microsecond < timeCutL):
00821                     self.counter["nLSCapTimeL"] += 1
00822                 if(capTime/units.microsecond > timeCutH):
00823                     self.counter["nLSCapTimeH"] += 1
00824                 if(capTime/units.microsecond > timeCutL-timeCutUncertain/2 and capTime/units.microsecond < timeCutL+timeCutUncertain/2):
00825                     self.counter["nLSCapTimeUncertainL"] += 1
00826                 if(capTime/units.microsecond > timeCutH-timeCutUncertain/2 and capTime/units.microsecond < timeCutH+timeCutUncertain/2):
00827                     self.counter["nLSCapTimeUncertainH"] += 1
00828             if capDM == 'db-oil1' or capDM == 'db-oav1':
00829                 self.counter["SpillOut_onH"] += 1
00830             if capTarget == 64:
00831                 self.counter["LSSpillIn_onGd"] += 1
00832 
00833         if genDM == 'db-oav1':
00834             self.counter["nInOAV"] += 1
00835             if re.search('db-lso1', capdmvol) and capTarget == 1:
00836                 self.counter["OavSpillIn_onH"] += 1
00837                 
00838                 if neutronHits > onHLowerCut and neutronHits < onHUpperCut:
00839                     self.counter["onHCapOavMoPassCut"] += 1
00840                 if neutronHits > onHLowerCutL and neutronHits < onHLowerCutR:
00841                     self.counter["onHCapOavMoCutUncertainL"] += 1
00842                 if neutronHits > onHUpperCutL and neutronHits < onHUpperCutR:
00843                     self.counter["onHCapOavMoCutUncertainU"] += 1
00844                     
00845         if genDM == 'db-oil1':
00846             self.counter["nInMO"] += 1
00847             if re.search('db-lso1', capdmvol) and capTarget == 1:
00848                 self.counter["OilSpillIn_onH"] += 1
00849                 if neutronHits > onHLowerCut and neutronHits < onHUpperCut:
00850                     self.counter["onHCapOavMoPassCut"] += 1
00851                 if neutronHits > onHLowerCutL and neutronHits < onHLowerCutR:
00852                     self.counter["onHCapOavMoCutUncertainL"] += 1
00853                 if neutronHits > onHUpperCutL and neutronHits < onHUpperCutR:
00854                     self.counter["onHCapOavMoCutUncertainU"] += 1
00855 
00856         if re.search('db-lso1',gendmvol):
00857             self.hist["pe_E_inLS"].Fill(vis_trk1, positronHits)
00858 
00859         if re.search('db-lso1',capdmvol):
00860             if capTarget == 1:
00861                 self.counter["onHCapWithinLS"] += 1
00862                 if neutronHits > onHLowerCut and neutronHits < onHUpperCut:
00863                     self.counter["onHCapWithinLSPassCut"] += 1
00864                 if neutronHits > onHLowerCutL and neutronHits < onHLowerCutR:
00865                     self.counter["onHCapWithinLSCutUncertainL"] += 1
00866                 if neutronHits > onHUpperCutL and neutronHits < onHUpperCutR:
00867                     self.counter["onHCapWithinLSCutUncertainU"] += 1
00868             else:
00869                 if neutronHits > onHLowerCut and neutronHits < onHUpperCut:
00870                     self.counter["nonHCapWithinLSPassHCut"] += 1
00871                 if neutronHits > onHLowerCutL and neutronHits < onHLowerCutR:
00872                     self.counter["nonHCapWithinLSHCutUncertainL"] += 1
00873                 if neutronHits > onHUpperCutL and neutronHits < onHUpperCutR:
00874                     self.counter["nonHCapWithinLSHCutUncertainU"] += 1
00875                 
00876         else:
00877             if capTarget == 1:
00878                 self.counter["onHCapBeyondLS"] += 1
00879                 if neutronHits > onHLowerCut and neutronHits < onHUpperCut:
00880                     self.counter["onHCapBeyondLSPassCut"] += 1
00881                 if neutronHits > onHLowerCutL and neutronHits < onHLowerCutR:
00882                     self.counter["onHCapBeyondLSCutUncertainL"] += 1
00883                 if neutronHits > onHUpperCutL and neutronHits < onHUpperCutR:
00884                     self.counter["onHCapBeyondLSCutUncertainU"] += 1
00885             else:
00886                 if neutronHits > onHLowerCut and neutronHits < onHUpperCut:
00887                     self.counter["nonHCapBeyondLSPassHCut"] += 1
00888                 if neutronHits > onHLowerCutL and neutronHits < onHLowerCutR:
00889                     self.counter["nonHCapBeyondLSHCutUncertainL"] += 1
00890                 if neutronHits > onHUpperCutL and neutronHits < onHUpperCutR:
00891                     self.counter["nonHCapBeyondLSHCutUncertainU"] += 1
00892             
00893         # Passing on-Gd neutron cuts
00894         if neutronHits > onGdCut:
00895             self.counter["nPassGdCut"] += 1
00896             if capTarget != 64:
00897                 print "non-Gd capture pass Gd cut: ", capTarget
00898                 self.counter["nonGdPassGdCut"] += 1
00899                 value = ('Non-Gd capTarget: ', capTarget)
00900                 theline = str(value)
00901                 self.outputstat.write(theline)
00902                 self.outputstat.write('\n')
00903                 
00904         if neutronHits > onGdCutL and neutronHits < onGdCutR:
00905             self.counter["nGdCutUncertain"] += 1
00906 
00907         # Passing on-H neutron cuts
00908         if neutronHits > onHLowerCut and neutronHits < onHUpperCut:
00909             self.counter["nPassHCut"] += 1
00910             if capTarget == 64:
00911                 self.counter["nGdPassHCut"] += 1
00912         if neutronHits > onHLowerCutL and neutronHits < onHLowerCutR:
00913             self.counter["nHCutUncertainL"] += 1
00914             if capTarget == 64:
00915                 self.counter["nGdHCutUncertainL"] += 1                
00916         if neutronHits > onHUpperCutL and neutronHits < onHUpperCutR:
00917             self.counter["nHCutUncertainU"] += 1
00918             if capTarget == 64:
00919                 self.counter["nGdHCutUncertainU"] += 1
00920         
00921         if capTarget == 64:
00922             self.counter["onGdCap"] += 1
00923             self.hist["nHits_onGd"].Fill(neutronHits)
00924             self.hist["nGdCapPos"].Fill(capLclPoint.x()/units.meter,capLclPoint.y()/units.meter,capLclPoint.z()/units.meter)
00925             if capDM == 'db-gds1':
00926                 self.counter["onGdGdsCap"] += 1
00927                 self.hist["count"].Fill(R2Cap, capLclPoint.z()/units.meter)
00928                 if (eDepInLS/units.MeV + eDepInGdLS/units.MeV) > 6.:
00929                     self.hist["countCut"].Fill(R2Cap, capLclPoint.z()/units.meter)
00930                     self.counter["onGdGdsCapPassEdepCut"] += 1
00931                 
00932                 if capLclPoint.z()/units.m < 1. and capLclPoint.z()/units.m > -1.:
00933                     self.hist["nGdGdsCapPos_R"].Fill(R2Cap)
00934                     self.hist["countR"].Fill(R2Cap)
00935                     if (eDepInLS/units.MeV + eDepInGdLS/units.MeV) > 6.:
00936                         self.hist["countCutR"].Fill(R2Cap)
00937                     
00938                 if R2Cap < 0.64:
00939                     self.hist["countZ"].Fill(capLclPoint.z()/units.m)
00940                     if (eDepInLS/units.MeV + eDepInGdLS/units.MeV) > 6.:
00941                         self.hist["countCutZ"].Fill(capLclPoint.z()/units.m)
00942                         
00943                 if neutronHits > onGdCut:
00944                     self.counter["onGdGdsCapPassCut"] += 1
00945                     self.hist["countPECut"].Fill(R2Cap, capLclPoint.z()/units.meter)
00946                 if neutronHits > onGdCutL and neutronHits < onGdCutR:
00947                     self.counter["onGdGdsCapCutUncertain"] += 1
00948                 if positronHits > positronCut:
00949                     self.counter["positronPassCut"] += 1
00950                 if positronHits > positronCutL and positronHits < positronCutR:
00951                     self.counter["positronCutUncertain"] += 1
00952             else:
00953                 self.hist["nGdCapOilPos"].Fill(capLclPoint.x()/units.meter,capLclPoint.y()/units.meter,capLclPoint.z()/units.meter)
00954                 self.hist["nGdCapOilPos_RZ"].Fill(R2Cap, capLclPoint.z()/units.meter)
00955 
00956             if genLclPoint.z()/units.m < 1. and genLclPoint.z()/units.m > -1.:
00957                 self.hist["nGdCapGenPos"].Fill(R2)
00958                 if capDM == 'db-gds1':
00959                     self.hist["nGdGdsCapGenPos"].Fill(R2)
00960                     
00961             if neutronHits > onGdCut:
00962                 self.counter["onGdCapPassCut"] += 1
00963             if neutronHits > onGdCutL and neutronHits < onGdCutR:
00964                 self.counter["onGdCapCutUncertain"] += 1
00965             
00966         if capTarget == 1:
00967             self.counter["onHCap"] += 1
00968             self.hist["nHits_onH"].Fill(neutronHits)
00969             
00970             if capLclPoint.z()/units.m < 1. and capLclPoint.z()/units.m > -1.:
00971                 self.hist["nHCapPos_R"].Fill(R2Cap)
00972 
00973             if genLclPoint.z()/units.m < 1. and genLclPoint.z()/units.m > -1.:
00974                 self.hist["nHCapGenPos"].Fill(R2)
00975                 if capDM == 'db-lso1':
00976                     self.hist["nHLsoCapGenPos"].Fill(R2)
00977                 if capDM == 'db-oil1' or capDM == 'db-oav1':
00978                     self.hist["nHOilCapGenPos"].Fill(R2)
00979                     
00980             if neutronHits > onHLowerCut and neutronHits < onHUpperCut:
00981                 self.counter["onHCapPassCut"] += 1
00982             if neutronHits > onHLowerCutL and neutronHits < onHLowerCutR:
00983                 self.counter["onHCapCutUncertainL"] += 1
00984             if neutronHits > onHUpperCutL and neutronHits < onHUpperCutR:
00985                 self.counter["onHCapCutUncertainU"] += 1
00986 
00987             if re.search('db-lso1', capdmvol):
00988                 self.hist["Hcount"].Fill(R2Cap, capLclPoint.z()/units.meter)
00989                 if neutronHits > onHLowerCut and neutronHits < onHUpperCut:
00990                     self.hist["HcountCut"].Fill(R2Cap, capLclPoint.z()/units.meter)
00991                     
00992                 if capLclPoint.z()/units.m < 1. and capLclPoint.z()/units.m > -1.:
00993                     self.hist["HcountR"].Fill(R2Cap)
00994                     if neutronHits > onHLowerCut and neutronHits < onHUpperCut:
00995                         self.hist["HcountCutR"].Fill(R2Cap)
00996                     
00997                 if R2Cap < 0.64:
00998                     self.hist["HcountZ"].Fill(capLclPoint.z()/units.m)
00999                     if neutronHits > onHLowerCut and neutronHits < onHUpperCut:
01000                         self.hist["HcountCutZ"].Fill(capLclPoint.z()/units.m)
01001                         
01002         if capDM == 'db-gds1':
01003             self.hist["hCapTarget"].Fill(capTarget)
01004             if capTarget == 1:
01005                 self.counter["onHCapGds"] += 1
01006             elif capTarget == 6:
01007                 self.counter["onCCapGds"] += 1
01008             elif capTarget == 64:
01009                 pass
01010             else:
01011                 self.counter["onOtherCapGds"] += 1
01012 
01013         if capDM == 'db-lso1':
01014             self.hist["nHits_LS"].Fill(neutronHits)
01015             if capTarget == 1:
01016                 self.counter["onHCapLS"] += 1
01017                 
01018         if capDM == 'db-oav1':
01019             if capTarget == 1:
01020                 self.counter["onHCapOAV"] += 1
01021                 
01022         if capDM == 'db-oil1':
01023             self.hist["nHits_MO"].Fill(neutronHits)
01024             if capTarget == 1:
01025                 self.counter["onHCapMO"] += 1
01026 
01027         return SUCCESS
01028     
    def finalize(self):

def chkIBD::AdPerformance::plotIbdBasics::finalize (   self  ) 

Definition at line 1029 of file AdPerformance.py.

01029                       :
01030         
01031         self.counter["GdCapDetEff"] = self.counter["onGdGdsCapPassCut"]/self.counter["onGdGdsCap"]
01032         self.counter["GdCapDetEffUncertain"] = self.counter["onGdGdsCapCutUncertain"]/self.counter["onGdGdsCap"]/2.
01033         
01034         self.counter["HCapDetEff"] = self.counter["nPassHCut"]/self.counter["onHCapWithinLS"]
01035         self.counter["HCapDetEffUncertainL"] = self.counter["nHCutUncertainL"]/self.counter["onHCapWithinLS"]/2.
01036         self.counter["HCapDetEffUncertainU"] = self.counter["nHCutUncertainU"]/self.counter["onHCapWithinLS"]/2.
01037         
01038         self.counter["HCapCanoDetEff"] = self.counter["onHCapWithinLSPassCut"]/self.counter["onHCapWithinLS"]
01039         self.counter["HCapCanoDetEffUncertainL"] = self.counter["onHCapWithinLSCutUncertainL"]/self.counter["onHCapWithinLS"]/2.
01040         self.counter["HCapCanoDetEffUncertainU"] = self.counter["onHCapWithinLSCutUncertainU"]/self.counter["onHCapWithinLS"]/2.
01041         
01042         self.counter["HCapDetEffContaminationUncertainL"] = (self.counter["nonHCapWithinLSHCutUncertainL"]+self.counter["nonHCapBeyondLSHCutUncertainL"])/self.counter["onHCapWithinLS"]/2.
01043         self.counter["HCapDetEffContaminationUncertainU"] = (self.counter["nonHCapWithinLSHCutUncertainU"]+self.counter["nonHCapBeyondLSHCutUncertainU"])/self.counter["onHCapWithinLS"]/2.
01044         
01045         self.counter["HCapDetContamination"] = (self.counter["nonHCapWithinLSPassHCut"]+self.counter["nonHCapBeyondLSPassHCut"])/self.counter["nPassHCut"]
01046         
01047         self.outputstat.close()
01048 
01049         # register all the counters as TParameters
01050         for name, counter in self.counter.iteritems():
01051             temp = TParameter('double')(name, counter)
01052             status = self.statsSvc.put("/file1/counters/"+name, temp)
01053             if status.isFailure(): return status
01054             print "Final value of "+name+": ", temp.GetVal()
01055 
01056         print ""
01057         print "Total n generation: ", self.counter["nGen"]
01058         print "Total n gen in GdLS: ", self.counter["nInGdLS"]
01059         print "Total n gen in IAV: ", self.counter["nInIAV"]
01060         print "Total n gen in LSO: ", self.counter["nInLSO"]
01061         print "Total n gen in OAV: ", self.counter["nInOAV"]
01062         print "Total n gen in MO: ", self.counter["nInMO"]
01063         print ""
01064 
01065         print "Total n capture: ", self.counter["nCap"]
01066         print "Total n-capture on Gd: ", self.counter["onGdCap"]
01067         print "Total n-capture on Gd in Gds: ", self.counter["onGdGdsCap"]
01068         print "Total n-H capture in GdLS: ", self.counter["onHCapGds"]
01069         print "Total n-C capture in GdLS: ", self.counter["onCCapGds"]
01070         print "Total other capture in GdLS: ", self.counter["onOtherCapGds"]
01071         print ""
01072         
01073         print "Spill-In on Gd n from LS: ", self.counter["LSSpillIn_onGd"]
01074         print "Spill-In on Gd from IAV: ", self.counter["IavSpillIn_onGd"]
01075         print "Spill-Out of n from Gd-LS: ", self.counter["SpillOut"]
01076         print ""
01077         
01078         print "On Gd capture pass on-Gd cut: ", self.counter["onGdCapPassCut"]
01079         print "On Gd capture on-Gd cut uncertainty: ", self.counter["onGdCapCutUncertain"]
01080         print "On Gd capture in GDS pass on-Gd cut: ", self.counter["onGdGdsCapPassCut"]
01081         print "On Gd capture in GDS pass on-Gd cut(true deposit energy): ", self.counter["onGdGdsCapPassEdepCut"]
01082         print "On Gd capture in GDS on-Gd cut uncertainty: ", self.counter["onGdGdsCapCutUncertain"]
01083         print "Total non-Gd capture pass Gd cut: ", self.counter["nonGdPassGdCut"]
01084         print "Total pass Gd cut: ", self.counter["nPassGdCut"]
01085         print "Overall Gd cut uncertainty: ", self.counter["nGdCutUncertain"]
01086         print ""
01087 
01088         print "positron pass cut for Gd capture in GDS: ", self.counter["positronPassCut"]
01089         print "positron pass cut uncertainty for Gd capture in GDS: ", self.counter["positronCutUncertain"]
01090         print ""
01091 
01092         print "on Gd Detection Efficiency: ", self.counter["GdCapDetEff"]
01093         print "on Gd Detection Efficiency Uncertainty: ", self.counter["GdCapDetEffUncertain"]
01094         print ""
01095 
01096         print "Number of capture time in GdLS: ", self.counter["nGdsCapTime"]
01097         print "Number of capture time pass cut (1-200mus) in GdLS: ", self.counter["nGdsCapTimePassCut"]
01098         print "Number of capture time less than 1mus in GdLS: ", self.counter["nGdsCapTimeL"]
01099         print "Uncertain number of capture time less than 1mus in GdLS: ", self.counter["nGdsCapTimeUncertainL"]
01100         print "Number of capture time larger than 200mus in GdLS: ", self.counter["nGdsCapTimeH"]
01101         print "Uncertain number of capture time larger than 200mus in GdLS: ", self.counter["nGdsCapTimeUncertainH"]
01102         print ""
01103 
01104         print "Number of capture time in LS: ", self.counter["nLSCapTime"]
01105         print "Number of capture time pass cut (1-200mus) in LS: ", self.counter["nLSCapTimePassCut"]
01106         print "Number of capture time less than 1mus in LS: ", self.counter["nLSCapTimeL"]
01107         print "Uncertain number of capture time less than 1mus in LS: ", self.counter["nLSCapTimeUncertainL"]
01108         print "Number of capture time larger than 200mus in LS: ", self.counter["nLSCapTimeH"]
01109         print "Uncertain number of capture time larger than 200mus in LS: ", self.counter["nLSCapTimeUncertainH"]
01110         print ""
01111         
01112         print "Total n-capture on H: ", self.counter["onHCap"]
01113         print "Total n-capture on H in LS: ", self.counter["onHCapLS"]
01114         print "Total n-capture on H within LS: ", self.counter["onHCapWithinLS"]
01115         print ""
01116         
01117         print "Spill-In of n from OIL to LSO: ", self.counter["OilSpillIn_onH"]
01118         print "Spill-In of n from OAV to LSO: ", self.counter["OavSpillIn_onH"]
01119         print "Spill-Out of n from LSO to OAV or OIL: ", self.counter["SpillOut_onH"]
01120         print ""
01121         
01122         print "n capture pass on-H cut: ", self.counter["nPassHCut"]
01123         print "n capture pass lower on-H cut uncertainty: ", self.counter["nHCutUncertainL"]
01124         print "n capture pass upper on-H cut uncertainty: ", self.counter["nHCutUncertainU"]
01125         print ""
01126 
01127         print "On H capture pass on-H cut: ", self.counter["onHCapPassCut"]
01128         print "On H capture lower on-H cut uncertainty: ", self.counter["onHCapCutUncertainL"]
01129         print "On H capture upper on-H cut uncertainty: ", self.counter["onHCapCutUncertainU"]
01130         print ""
01131         
01132         print "on H nCap within LS pass H cut: ", self.counter["onHCapWithinLSPassCut"]
01133         print "on H nCap within LS pass lower H cut uncertainty: ", self.counter["onHCapWithinLSCutUncertainL"]
01134         print "on H nCap within LS pass upper H cut uncertainty: ", self.counter["onHCapWithinLSCutUncertainU"]
01135         print ""
01136 
01137         print "non H nCap within LS pass H cut: ", self.counter["nonHCapWithinLSPassHCut"]
01138         print "non H nCap within LS pass lower H cut uncertainty: ", self.counter["nonHCapWithinLSHCutUncertainL"]
01139         print "non H nCap within LS pass upper H cut uncertainty: ", self.counter["nonHCapWithinLSHCutUncertainU"]
01140         print ""
01141 
01142         print "on H nCap beyond LS pass on-H cut: ", self.counter["onHCapBeyondLSPassCut"]
01143         print "on H nCap beyond LS pass lower on-H cut uncertainty: ", self.counter["onHCapBeyondLSCutUncertainL"]
01144         print "on H nCap bdyond LS pass upper on-H cut uncertainty: ", self.counter["onHCapBeyondLSCutUncertainU"]
01145         print ""
01146 
01147         print "non H nCap beyond LS pass H cut: ", self.counter["nonHCapBeyondLSPassHCut"]
01148         print "non H nCap beyond LS pass lower H cut uncertainty: ", self.counter["nonHCapBeyondLSHCutUncertainL"]
01149         print "non H nCap beyond LS pass upper H cut uncertainty: ", self.counter["nonHCapBeyondLSHCutUncertainU"]
01150         print ""
01151 
01152         print "On Gd capture pass on-H cut: ", self.counter["nGdPassHCut"]
01153         print "On Gd capture pass lower on-H cut uncertainty: ", self.counter["nGdHCutUncertainL"]
01154         print "On Gd capture pass upper on-H cut uncertainty: ", self.counter["nGdHCutUncertainU"]
01155         print ""
01156 
01157         print "Total n-capture on H in MO: ", self.counter["onHCapMO"]
01158         print "Total n-capture on H in OAV: ", self.counter["onHCapOAV"]
01159         print "on H nCap in OAV&MO pass on-H cut: ", self.counter["onHCapOavMoPassCut"]
01160         print "on H nCap in OAV&MO pass lower on-H cut uncertainty: ", self.counter["onHCapOavMoCutUncertainL"]
01161         print "on H nCap in OAV&MO pass upper on-H cut uncertainty: ", self.counter["onHCapOavMoCutUncertainU"]
01162         print ""
01163         
01164         print "on H capture detection efficiency: ", self.counter["HCapDetEff"]
01165         print "on H capture detection uncertainty L: ", self.counter["HCapDetEffUncertainL"]
01166         print "on H capture detection uncertainy U: ", self.counter["HCapDetEffUncertainU"]
01167         print ""
01168         
01169         print "on H capture detection efficiency(canonical): ", self.counter["HCapCanoDetEff"]
01170         print "on H capture detection uncertainty(L:canonical):", self.counter["HCapCanoDetEffUncertainL"]
01171         print "on H capture detection uncertainty(U:canonical):", self.counter["HCapCanoDetEffUncertainU"]
01172         
01173         print "non H capture contamination uncertainty(L): ", self.counter["HCapDetEffContaminationUncertainL"]
01174         print "non H capture contamination uncertainty(U): ", self.counter["HCapDetEffContaminationUncertainU"]
01175         
01176         print "non H capture contamination:", self.counter["HCapDetContamination"]
01177 
01178         print "Finalizing ", self.name()
01179         status = GaudiAlgo.finalize(self)
01180         return status
01181 
def configure(argv = []):


Member Data Documentation

chkIBD::AdPerformance::plotIbdBasics::target_de_name

Definition at line 37 of file AdPerformance.py.

chkIBD::AdPerformance::plotIbdBasics::gds_de_name

Definition at line 38 of file AdPerformance.py.

chkIBD::AdPerformance::plotIbdBasics::lso_de_name

Definition at line 39 of file AdPerformance.py.

chkIBD::AdPerformance::plotIbdBasics::coorSvc

Definition at line 42 of file AdPerformance.py.

chkIBD::AdPerformance::plotIbdBasics::statsSvc

Definition at line 47 of file AdPerformance.py.

chkIBD::AdPerformance::plotIbdBasics::outputstat

Definition at line 53 of file AdPerformance.py.

chkIBD::AdPerformance::plotIbdBasics::counter

Definition at line 56 of file AdPerformance.py.

chkIBD::AdPerformance::plotIbdBasics::hist

Definition at line 171 of file AdPerformance.py.


The documentation for this class was generated from the following file:
| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

Generated on Mon Apr 11 20:11:57 2011 for MDC09a by doxygen 1.4.7