611 isTileOnly=False):
612
613 ROOT.gROOT.SetBatch( True )
614 ROOT.gStyle.SetPalette(1)
615 ROOT.gStyle.SetOptStat(111111)
616 ROOT.gStyle.SetCanvasColor(10)
617
618 ROOT.gStyle.SetPadTopMargin(0.12)
619 ROOT.gStyle.SetPadBottomMargin(0.12)
620 ROOT.gStyle.SetPadRightMargin(0.12)
621 ROOT.gStyle.SetPadLeftMargin(0.12)
622
623 canvas = ROOT.TCanvas('canvas','Gains',0,0,600,800)
624 canvas.SetBatch(True)
625
626 h_gains_em = L1CaloMap("EM receiver gains","#eta bin","#phi bin")
627 h_gains_had = L1CaloMap("HAD receiver gains","#eta bin","#phi bin")
628
629 h_gains_em_fselect = L1CaloMap("EM gains that failed selection","#eta bin","#phi bin")
630 h_gains_had_fselect = L1CaloMap("HAD gains that failed selection","#eta bin","#phi bin")
631
632 h_chi2_em = L1CaloMap("EM fit Chi2","#eta bin","#phi bin")
633 h_chi2_had = L1CaloMap("HAD fit Chi2","#eta bin","#phi bin")
634
635 h_offset_em = L1CaloMap("EM fit offsets","#eta bin","#phi bin")
636 h_offset_had = L1CaloMap("HAD fit offsets","#eta bin","#phi bin")
637
638 h_unfitted_em = L1CaloMap("EM failed fits","#eta bin","#phi bin")
639 h_unfitted_had = L1CaloMap("HAD failed fits","#eta bin","#phi bin")
640
641 h_drifted_em = L1CaloMap("EM TTs that drifted by more than 10%","#eta bin","#phi bin")
642 h_drifted_had = L1CaloMap("HAD TTs that drifted by more than 10%","#eta bin","#phi bin")
643
644 h_gains_em_reference = L1CaloMap("EM (gain-reference)","#eta bin","#phi bin")
645 h_gains_had_reference = L1CaloMap("HAD (gain-reference)","#eta bin","#phi bin")
646
647 h_gains_em_reference_rel = L1CaloMap("EM (gain-reference)/reference","#eta bin","#phi bin")
648 h_gains_had_reference_rel = L1CaloMap("HAD (gain-reference)/reference","#eta bin","#phi bin")
649 em_partition_gains = EmPartitionPlots(" EM gains",40,0.6,1.4,"gain","Entries")
650 had_partition_gains = HadPartitionPlots(" HAD gains",40,0.5,2.5,"gain","Entries")
651
652 em_partition_gains_ref = EmPartitionPlots(" EM (gains-reference)",40,-0.2,0.2,"gain-reference","Entries")
653 had_partition_gains_ref = HadPartitionPlots(" HAD (gains-reference)",40,-1.,1.,"gain-reference","Entries")
654
655 em_partition_gains_ref_rel = EmPartitionPlots(" EM (gains-reference)/reference",40,-0.2,0.2,"(gain-reference)/reference","Entries")
656 had_partition_gains_ref_rel = HadPartitionPlots(" HAD (gains-reference)/reference",40,-1.,1.,"(gain-reference)/reference","Entries")
657
658 threshold_change = 0.1
659
660 geometry_convertor = L1CaloGeometryConvertor()
661 receiver_gains = GainReader()
662
663 bad_gain_file = open('bad_gains.txt','w')
664 drifted_towers_file = open('drifted_towers.txt','w')
665
666 if isInputXml is True:
667 print ("Taking input from xml file: ", input_file_name)
668 receiver_gains.LoadGainsXml(input_file_name)
669 elif isInputSqlite is True:
670 print ("Taking input from Sqlite file: ", input_file_name)
671 receiver_gains.LoadGainsSqlite(input_file_name)
672 else:
673 print ("No option for input file selected, assuming sqlite file energyscanresults.sqlite")
674 receiver_gains.LoadGainsSqlite("energyscanresults.sqlite")
675
676 if isRefXml is True:
677 print ("Taking reference from Xml file: ",reference_file_name)
678 receiver_gains.LoadReferenceXml(reference_file_name)
679 elif isRefSqlite is True:
680 print ("Taking reference from Sqlite file: ",reference_file_name)
681 receiver_gains.LoadReferenceSqlite(reference_file_name)
682 elif isRefOracle is True:
683 print ("Taking reference from Oracle")
684 geometry_convertor.LoadReceiverPPMMap()
685 receiver_gains.LoadReferenceOracle(geometry_convertor)
686 else:
687 print (" No option for reference file, assuming Oracle")
688 geometry_convertor.LoadReceiverPPMMap()
689 receiver_gains.LoadReferenceOracle(geometry_convertor)
690
691 for i_eta in range(-49,45):
692 for i_phi in range(0,64):
693 coolEm = geometry_convertor.getCoolEm(i_eta,i_phi)
694 coolHad = geometry_convertor.getCoolHad(i_eta,i_phi)
695
696 if not coolEm == '':
697 gain = receiver_gains.getGain(coolEm)
698 chi2 = receiver_gains.getChi2(coolEm)
699 offset = receiver_gains.getOffset(coolEm)
700 reference_gain = receiver_gains.getReferenceGain(coolEm)
701 passes_selection = receiver_gains.passesSelection(coolEm)
702
703 if (not gain == '') and (not reference_gain == ''):
704
705 if gain == -1. :
706 h_unfitted_em.Fill(i_eta,i_phi)
707 bad_gain_file.write('%i %i %s EM gain= %.3f \n' % (i_eta,i_phi,coolEm,float(gain)))
708 h_gains_em_reference.Fill(i_eta,i_phi,-100.)
709 h_gains_em_reference_rel.Fill(i_eta,i_phi,-100.)
710 else:
711 h_gains_em.Fill(i_eta,i_phi,gain)
712 h_chi2_em.Fill(i_eta,i_phi,chi2)
713 h_offset_em.Fill(i_eta,i_phi,offset)
714 em_partition_gains.Fill(i_eta,gain)
715 em_partition_gains_ref.Fill(i_eta,gain-reference_gain)
716 h_gains_em_reference.Fill(i_eta,i_phi,gain-reference_gain)
717
718 if passes_selection is False:
719 h_gains_em_fselect.Fill(i_eta,i_phi)
720 bad_gain_file.write('%i %i %s EM gain= %.3f chi2= %.3f offset= %.3f \n' %
721 (i_eta,i_phi,coolEm,float(gain),float(chi2),float(offset)))
722
723
724
725 if reference_gain > 0:
726 em_partition_gains_ref_rel.Fill(i_eta,(gain-reference_gain)/reference_gain)
727 h_gains_em_reference_rel.Fill(i_eta,i_phi,(gain-reference_gain)/reference_gain)
728 if fabs((gain-reference_gain)/reference_gain) > threshold_change:
729 h_drifted_em.Fill(i_eta,i_phi)
730 drifted_towers_file.write('%i %i %s EM gain= %.3f refGain= %.3f (%.3f %%) \n' %
731 (i_eta,i_phi,coolEm,float(gain),float(reference_gain),
732 (gain-reference_gain)*100/reference_gain))
733
734
735 if not coolHad == '':
736 gain = receiver_gains.getGain(coolHad)
737 chi2 = receiver_gains.getChi2(coolHad)
738 offset = receiver_gains.getOffset(coolHad)
739 reference_gain = receiver_gains.getReferenceGain(coolHad)
740 passes_selection = receiver_gains.passesSelection(coolHad)
741
742 if (not gain == '') and (not reference_gain == ''):
743
744 if gain == -1. :
745 h_unfitted_had.Fill(i_eta,i_phi)
746 bad_gain_file.write('%i %i %s HAD gain= %.3f \n' % (i_eta,i_phi,coolHad,float(gain)))
747 h_gains_had_reference.Fill(i_eta,i_phi,-100.)
748 h_gains_had_reference_rel.Fill(i_eta,i_phi,-100.)
749 else:
750 h_gains_had.Fill(i_eta,i_phi,gain)
751 h_chi2_had.Fill(i_eta,i_phi,chi2)
752 h_offset_had.Fill(i_eta,i_phi,offset)
753 had_partition_gains.Fill(i_eta,gain)
754 had_partition_gains_ref.Fill(i_eta,gain-reference_gain)
755 h_gains_had_reference.Fill(i_eta,i_phi,gain-reference_gain)
756
757 if passes_selection is False:
758 h_gains_had_fselect.Fill(i_eta,i_phi)
759 bad_gain_file.write( '%i %i %s HAD gain= %.3f chi2= %.3f offset= %.3f \n' %
760 (i_eta,i_phi,coolHad,float(gain),float(chi2),float(offset)))
761
762
763
764 if reference_gain > 0:
765 had_partition_gains_ref_rel.Fill(i_eta,(gain-reference_gain)/reference_gain)
766 h_gains_had_reference_rel.Fill(i_eta,i_phi,(gain-reference_gain)/reference_gain)
767 if fabs((gain-reference_gain)/reference_gain) > threshold_change:
768 h_drifted_had.Fill(i_eta,i_phi)
769 drifted_towers_file.write('%i %i %s HAD gain= %.3f refGain= %.3f (%.3f %%) \n' %
770 (i_eta,i_phi,coolHad,float(gain),float(reference_gain),
771 (gain-reference_gain)*100/reference_gain))
772
773
774 pdfFileName = "Gains.pdf"
775 canvas.Print( pdfFileName + "[" )
776
777
778 if not isTileOnly:
779 canvas.Clear()
780 canvas.Divide(1,2)
781 canvas.cd(1)
782 ROOT.gPad.SetLogy(0)
783 h_gains_em.SetMinimum(0.6)
784 h_gains_em.SetMaximum(1.4)
785 h_gains_em.Draw()
786 canvas.cd(2)
787 h_drifted_em.Draw()
788 canvas.Print( pdfFileName )
789
790
791 if not isTileOnly:
792 canvas.Clear()
793 canvas.Divide(1,2)
794 canvas.cd(1)
795 ROOT.gPad.SetLogy(0)
796 h_gains_em_fselect.Draw()
797 canvas.cd(2)
798 h_unfitted_em.Draw()
799 canvas.Print( pdfFileName )
800
801
802 canvas.Clear()
803 canvas.Divide(1,2)
804 canvas.cd(1)
805 ROOT.gPad.SetLogy(0)
806 h_gains_had.SetMinimum(0.6)
807 h_gains_had.SetMaximum(1.4)
808 h_gains_had.Draw()
809 canvas.cd(2)
810 h_drifted_had.Draw()
811 canvas.Print( pdfFileName )
812
813
814 canvas.Clear()
815 canvas.Divide(1,2)
816 canvas.cd(1)
817 h_gains_had_fselect.Draw()
818 canvas.cd(2)
819 h_unfitted_had.Draw()
820 canvas.Print( pdfFileName )
821
822
823 if not isTileOnly:
824 canvas.Clear()
825 canvas.Divide(1,2)
826 canvas.cd(1)
827 ROOT.gPad.SetLogy(0)
828 h_gains_em_reference_rel.SetMinimum(-0.5)
829 h_gains_em_reference_rel.SetMaximum(0.5)
830 h_gains_em_reference_rel.Draw()
831 canvas.cd(2)
832 h_gains_em_reference_rel.SetMinimum(-0.1)
833 h_gains_em_reference_rel.SetMaximum(0.1)
834 h_gains_em_reference_rel.Draw()
835 canvas.Print( pdfFileName )
836
837
838 canvas.Clear()
839 canvas.Divide(1,2)
840 canvas.cd(1)
841 ROOT.gPad.SetLogy(0)
842 h_gains_had_reference_rel.SetMinimum(-0.5)
843 h_gains_had_reference_rel.SetMaximum(0.5)
844 h_gains_had_reference_rel.Draw()
845 canvas.cd(2)
846 h_gains_had_reference_rel.SetMinimum(-0.1)
847 h_gains_had_reference_rel.SetMaximum(0.1)
848 h_gains_had_reference_rel.Draw()
849 canvas.Print( pdfFileName )
850
851
852 if not isTileOnly:
853 canvas.Clear()
854 canvas.Divide(1,2)
855 canvas.cd(1)
856 ROOT.gPad.SetLogy(0)
857 h_gains_em_reference.SetMinimum(-0.5)
858 h_gains_em_reference.SetMaximum(0.5)
859 h_gains_em_reference.Draw()
860 canvas.cd(2)
861 ROOT.gPad.SetLogy(0)
862 h_gains_em_reference.SetMinimum(-0.1)
863 h_gains_em_reference.SetMaximum(0.1)
864 h_gains_em_reference.Draw()
865 canvas.Print( pdfFileName )
866
867
868 canvas.Clear()
869 canvas.Divide(1,2)
870 canvas.cd(1)
871 ROOT.gPad.SetLogy(0)
872 h_gains_had_reference.SetMinimum(-0.5)
873 h_gains_had_reference.SetMaximum(0.5)
874 h_gains_had_reference.Draw()
875 canvas.cd(2)
876 ROOT.gPad.SetLogy(0)
877 h_gains_had_reference.SetMinimum(-0.1)
878 h_gains_had_reference.SetMaximum(0.1)
879 h_gains_had_reference.Draw()
880 canvas.Print( pdfFileName )
881
882
883 if not isTileOnly:
884 canvas.Clear()
885 canvas.Divide(1,2)
886 canvas.cd(1)
887 ROOT.gPad.SetLogy(0)
888 h_chi2_em.SetMinimum(0.1)
889 h_chi2_em.SetMaximum(100)
890 h_chi2_em.Draw()
891 canvas.cd(2)
892 ROOT.gPad.SetLogy(0)
893 h_offset_em.SetMinimum(-1.)
894 h_offset_em.SetMaximum(1.)
895 h_offset_em.Draw()
896 canvas.Print( pdfFileName )
897
898
899 canvas.Clear()
900 canvas.Divide(1,2)
901 canvas.cd(1)
902 ROOT.gPad.SetLogy(0)
903 h_chi2_had.SetMinimum(0.1)
904 h_chi2_had.SetMaximum(100)
905 h_chi2_had.Draw()
906 canvas.cd(2)
907 ROOT.gPad.SetLogy(0)
908 h_offset_had.SetMinimum(-1.)
909 h_offset_had.SetMaximum(1.)
910 h_offset_had.Draw()
911 canvas.Print( pdfFileName )
912
913
914 if not isTileOnly:
915 canvas.Clear()
916 canvas.Divide(2,3)
917 for i_p in range(0,em_partition_gains.nPartitions):
918 canvas.cd(i_p+1)
919 ROOT.gPad.SetLogy()
if em_partition_gains.his_partitions[i_p].
GetEntries()>0
else ROOT.gPad.SetLogy(0)
920 em_partition_gains.his_partitions[i_p].Draw()
921 canvas.Print( pdfFileName )
922
923
924 canvas.Clear()
925 canvas.Divide(2,3)
926 for i_p in range(0,had_partition_gains.nPartitions):
927 if (isTileOnly and i_p>2): break
928 canvas.cd(i_p+1)
929 ROOT.gPad.SetLogy()
if had_partition_gains.his_partitions[i_p].
GetEntries()>0
else ROOT.gPad.SetLogy(0)
930 had_partition_gains.his_partitions[i_p].Draw()
931 canvas.Print( pdfFileName )
932
933
934 if not isTileOnly:
935 canvas.Clear()
936 canvas.Divide(2,3)
937 for i_p in range(0,em_partition_gains_ref.nPartitions):
938 canvas.cd(i_p+1)
939 ROOT.gPad.SetLogy()
if em_partition_gains_ref.his_partitions[i_p].
GetEntries()>0
else ROOT.gPad.SetLogy(0)
940 em_partition_gains_ref.his_partitions[i_p].Draw()
941 canvas.Print( pdfFileName )
942
943
944 canvas.Clear()
945 canvas.Divide(2,3)
946 for i_p in range(0,had_partition_gains_ref.nPartitions):
947 if (isTileOnly and i_p>2): break
948 canvas.cd(i_p+1)
949 ROOT.gPad.SetLogy()
if had_partition_gains_ref.his_partitions[i_p].
GetEntries()>0
else ROOT.gPad.SetLogy(0)
950 had_partition_gains_ref.his_partitions[i_p].Draw()
951 canvas.Print( pdfFileName )
952
953
954 if not isTileOnly:
955 canvas.Clear()
956 canvas.Divide(2,3)
957 for i_p in range(0,em_partition_gains_ref_rel.nPartitions):
958 canvas.cd(i_p+1)
959 ROOT.gPad.SetLogy()
if em_partition_gains_ref_rel.his_partitions[i_p].
GetEntries()>0
else ROOT.gPad.SetLogy(0)
960 em_partition_gains_ref_rel.his_partitions[i_p].Draw()
961 canvas.Print( pdfFileName )
962
963
964 canvas.Clear()
965 canvas.Divide(2,3)
966 for i_p in range(0,had_partition_gains_ref_rel.nPartitions):
967 if (isTileOnly and i_p>2): break
968 canvas.cd(i_p+1)
969 ROOT.gPad.SetLogy()
if had_partition_gains_ref_rel.his_partitions[i_p].
GetEntries()>0
else ROOT.gPad.SetLogy(0)
970 had_partition_gains_ref_rel.his_partitions[i_p].Draw()
971 canvas.Print( pdfFileName )
972
973
974 canvas.Print( pdfFileName + "]" )
975 bad_gain_file.close()
976 drifted_towers_file.close()
977 print ("finished!")
978
979
TGraphErrors * GetEntries(TH2F *histo)